Field Notes · Detection Engineering Field Notes · Detection Engineering

Canaries

Pragmatic honeypot patterns for detection controls in real organisations: a file, an account, a server that should never be touched, each with a concrete SIEM hookup. Pragmatische Honeypot-Konzepte für Detection-Kontrollen in echten Organisationen: eine Datei, ein Account, ein Server, die niemand anfassen sollte, jeweils mit konkreter SIEM-Anbindung.

Six building blocks, from five-minute file to AD tripwire. Sechs Bausteine, von der Fünf-Minuten-Datei bis zum AD-Stolperdraht.

Difficulty Aufwand 0 of 0 patterns 0 von 0 Konzepten
01
Easy Einfach 5 min 5 Min. 0 €

The fake salary document Das gefälschte Gehaltsdokument

A Word document that reports back the moment someone opens it. Ein Word-Dokument, das petzt, sobald jemand es öffnet.

The concept Die Idee

A canary token is a file that silently fires an HTTP request when opened. Nobody should ever open it, so any trigger is an immediate alert. The ideal honeyfile: Salaries_2026.docx sitting on \\fileserver\Management. Ein Canary Token ist eine Datei, die beim Öffnen heimlich eine HTTP-Anfrage sendet. Niemand sollte diese Datei öffnen, daher ist jede Auslösung ein sofortiger Alarm. Das ideale Honeyfile: Gehälter_2026.docx im Verzeichnis \\fileserver\Geschäftsführung.

Step by step Schritt für Schritt

  1. Go to canarytokens.org (open source by Thinkst, free). Öffne canarytokens.org (Open Source von Thinkst, kostenlos).
  2. Select "Microsoft Word Document" as the token type. Wähle "Microsoft Word Document" als Token-Typ.
  3. Enter your alert e-mail and a note such as "Honeyfile FS-01, Management share". Trage deine Alarm-E-Mail-Adresse ein und eine Notiz wie "Honeyfile FS-01, GF-Share".
  4. Download the generated .docx and rename it convincingly: Salaries_2026_FINAL.docx, VPN_Credentials.docx, Backup_Recovery.docx. Lade die generierte .docx herunter und benenne sie sprechend um: Gehälter_2026_FINAL.docx, VPN_Zugangsdaten.docx, Backup_Wiederherstellung.docx.
  5. Place the file somewhere an attacker would look, but no employee would stumble across by accident. Rule of thumb: deep in the directory tree, with an enticing name. Lege die Datei an einen Ort, an dem ein neugieriger Angreifer landet, aber kein Mitarbeiter zufällig. Faustregel: tief im Verzeichnisbaum, mit lohnendem Namen.
  6. Document all honeyfile locations in the internal wiki so an admin does not trigger the alarm themselves. Dokumentiere im internen Wiki, wo deine Honeyfiles liegen, damit kein Admin selbst den Alarm auslöst.
From practice Aus der Praxis

The most common trigger is not an attacker but a new intern who "just wanted to see what was on the shares". Also a valuable signal. Der häufigste Auslöser sind nicht Angreifer, sondern neue Praktikanten, die "mal schauen, was so auf den Shares liegt". Auch ein wertvolles Signal.

What you see afterwards Was du danach siehst

An e-mail with timestamp, approximate geolocation of the IP, user-agent, and depending on the token type even hints about the system (Microsoft Office version, language, domain). Eine E-Mail mit Zeitstempel, ungefährer Geolokation der IP, User-Agent, und je nach Token-Typ sogar Hinweisen auf das System (Microsoft Office Version, Sprache, Domäne).

StrengthStärke

Zero configuration, zero maintenance, zero false positives. Works without a SIEM. Null Konfiguration, null Wartung, null False Positives. Funktioniert auch ohne SIEM.

LimitationGrenze

Only detects Office opens that require internet access. Offline analysis or plain copying goes undetected. Erfasst nur Office-Öffnen mit Internet-Zugriff. Offline-Analyse oder reines Kopieren bleibt unentdeckt.

02
Easy Einfach 10 min 10 Min. 0 €

The honeyuser in Active Directory Der Honeyuser im Active Directory

An account that sounds too good to be real. Ein Account, der zu schön klingt, um echt zu sein.

The concept Die Idee

Attackers who reach AD run BloodHound or similar tools and hunt for valuable accounts: "Domain Admin", "Service Account", "Backup". Hand them one. One that is never actually used. And log every single authentication against it. Angreifer, die ins AD kommen, fahren BloodHound oder ähnliche Tools und suchen nach lohnenden Accounts: "Domain Admin", "Service-Account", "Backup". Lege ihnen einen hin. Einen, der nie benutzt wird. Und protokolliere jede Authentifizierung.

Step by step Schritt für Schritt

  1. Create a new AD user with a tempting name: svc_backup_admin or sql_sa_legacy. Erstelle einen neuen AD-User mit lohnendem Namen: svc_backup_admin oder sql_sa_legacy.
  2. Set an extremely long, random password (32+ chars). The account must never be used for real. Setze ein extrem langes, zufälliges Passwort (32+ Zeichen). Der Account soll nie real benutzt werden.
  3. Set a Service Principal Name (SPN) to make the account attractive for Kerberoasting: Setze einen SPN (Service Principal Name), damit der Account für Kerberoasting attraktiv wird:
PowerShell
# Make the honeyuser kerberoastable
Set-ADUser "svc_backup_admin" `
  -ServicePrincipalNames @{Add="MSSQL/honeypot.corp.local:1433"}
  1. Place it in a plausible OU and add it to a few groups that look privileged, but grant no actual rights. Lege ihn in eine sinnvolle OU und in ein paar Gruppen, die nach Privileg aussehen, aber keine echten Rechte gewähren.
  2. Create a detection rule in your SIEM (or a simple scheduled task with Get-WinEvent) that fires on any authentication against this account: Schreibe eine Detection-Regel im SIEM (oder einen einfachen Scheduled Task mit Get-WinEvent) auf jede Authentifizierung dieses Accounts:
SIEM Logic
# Event IDs on the domain controller
4768  # Kerberos TGT requested
4769  # Kerberos Service Ticket requested  (Kerberoasting!)
4625  # Failed logon
4624  # Successful logon

# Filter: TargetUserName == "svc_backup_admin"
# Action:  immediate alert
Bonus Bonusgeschmack

Add a fake hint in the user's description field, such as "PW in KeePass / IT-Admin folder". Whoever reads that knows their BloodHound. Setze in die description-Notiz des Users einen Fake-Hinweis wie "PW im KeePass / Ordner IT-Admin". Wer das liest, kennt sein BloodHound.

What you see afterwards Was du danach siehst

Every authentication attempt is a real alert. Kerberoasting attempts (Event 4769 with encryption type 0x17) are especially revealing: no legitimate user explicitly requests RC4. Jeder Authentifizierungs-Versuch ist ein echter Alarm. Kerberoasting-Versuche (Event 4769 mit Encryption Type 0x17) sind besonders verräterisch, kein normaler Nutzer fragt explizit nach RC4.

StrengthStärke

Catches active recon, not just file access. Fires in the early phase of an attack. Fängt aktive Recon-Aktivität ab, nicht nur Datei-Zugriffe. Frühphase eines Angriffs.

LimitationGrenze

Requires functional AD logging and ideally a SIEM. Otherwise alerts accumulate silently in the Event Log. Setzt funktionierendes AD-Logging und idealerweise ein SIEM voraus. Sonst bleibt der Alarm im Eventlog liegen.

03
Medium Mittel 15 min 15 Min. 0 €

The sleeping SSH signpost Das schlafende SSH-Türschild

An SSH daemon that never lets anyone in, but writes down everything. Ein SSH-Daemon, der nie etwas hereinlässt, aber alles aufschreibt.

The concept Die Idee

Cowrie is a low-/medium-interaction SSH honeypot. Deploy it on an inconspicuous internal IP (or in the DMZ) on port 22. Any connection attempt is suspicious: no legitimate employee and no monitoring system has any business there. Cowrie ist ein Low-/Medium-Interaction-SSH-Honeypot. Du stellst ihn auf eine unauffällige IP im internen Netz (oder in die DMZ) auf Port 22. Jeder Verbindungsversuch dorthin ist verdächtig, kein normaler Mitarbeiter, kein Monitoring-System hat dort etwas zu suchen.

Step by step Schritt für Schritt

  1. A small VM or a Raspberry Pi is sufficient. Install Docker. Eine kleine VM oder ein Raspberry Pi reicht. Docker installieren.
  2. Start Cowrie as a container. The official image has sensible defaults: Cowrie als Container starten. Die offizielle Variante hat sensible Defaults:
bash
# Cowrie on port 2222 (map to 22 via iptables)
docker run -d \
  --name cowrie \
  -p 2222:2222 \
  -v $(pwd)/cowrie-logs:/cowrie/cowrie-git/var/log/cowrie \
  cowrie/cowrie:latest

# Redirect port 22 to 2222 (Linux host)
iptables -t nat -A PREROUTING -p tcp --dport 22 \
  -j REDIRECT --to-port 2222
  1. Give the machine a temptingly named hostname: backup-01, jenkins-legacy, db-replica. Gib der Maschine einen verdächtig lohnenden Hostnamen: backup-01, jenkins-legacy, db-replica.
  2. Logs land in cowrie-logs/cowrie.json. Forward them to your Elastic stack or set up a simple cron job that mails on new entries. Logs landen in cowrie-logs/cowrie.json. Schicke sie an deinen Elastic-Stack, oder leg einen simplen Cronjob an, der bei neuen Einträgen mailt.
  3. Optional: plant credentials such as root:toor so attackers "successfully" log in and you can record their full shell session. Optional: hinterlege Credentials wie root:toor, damit Angreifer "erfolgreich" einloggen und du ihre Shell-Sessions mitschneiden kannst.

What you see afterwards Was du danach siehst

Every SSH connection with username, password attempts, IP address, and on "successful" login the complete keyboard input including every command executed. Very instructive: what attackers type first. Jede SSH-Verbindung mit Benutzername, Passwort-Versuchen, IP-Adresse, und bei "erfolgreichem" Login die komplette Tastatureingabe inklusive ausgeführter Commands. Sehr lehrreich, was Angreifer als erstes tippen.

Caution Achtung

Never deploy in production networks without segmentation. The container must not be able to break out. Keep the image current, use a dedicated VLAN, and allow no egress except to the log target. Niemals in produktive Netze ohne Segmentierung. Der Container darf nicht ausbrechen können. Aktuelles Image, eigener VLAN, keine Egress-Verbindungen außer zum Log-Ziel.

StrengthStärke

Excellent against lateral movement and internal scanners. Delivers TTPs on a silver platter. Hervorragend gegen Lateral Movement und interne Scanner. Liefert TTPs auf dem Silbertablett.

LimitationGrenze

Needs ongoing maintenance. An outdated honeypot becomes a vulnerability in its own right. Braucht Pflege. Veraltete Honeypots werden selbst zur Schwachstelle.

04
Easy Einfach 10 min 10 Min. 0 €

The accounting-backup share Das Buchhaltung-Backup-Share

An SMB share with the most irresistible name in the world. Ein SMB-Share mit dem unwiderstehlichsten Namen der Welt.

The concept Die Idee

Attackers enumerate shares. They look for backup, finance, hr, it-admin. Give them exactly that: empty, fully logged, stuffed with canary files. Whoever accesses it already has credentials and has already done recon. Angreifer enumerieren Shares. Sie suchen nach backup, finance, hr, it-admin. Gib ihnen genau das, aber leer, geloggt, und mit Canary-Files gefüllt. Wer dort zugreift, hat schon Credentials und schon Recon gemacht.

Step by step Schritt für Schritt

  1. Create a new share on an inconspicuous fileserver. Name: Accounting_Backup or IT-Admin$. Erstelle auf einem unauffälligen Fileserver ein neues Share. Name: Buchhaltung_Backup oder IT-Admin$.
  2. Grant read access to "Domain Users" or "Authenticated Users", deliberately broad so nobody suspects it is segmented. Gib Lesezugriff für "Domain Users" oder "Authenticated Users", bewusst großzügig, damit niemand auf die Idee kommt, das sei segmentiert.
  3. Enable file-access auditing via GPO: Aktiviere File-Access-Auditing über GPO:
GPO path
Computer Configuration
  -> Windows Settings
    -> Security Settings
      -> Advanced Audit Policy
        -> Object Access
          -> Audit File Share (Success)
          -> Audit Detailed File Share (Success)
  1. Place canary tokens as bait (see pattern 01): SEPA-Mandates-2025.xlsx, Payroll_Management.pdf, VPN-Config-Restore.zip. Lege Canary-Tokens als Köder hinein (siehe Konzept 01): SEPA-Mandate-2025.xlsx, Lohnabrechnung_Geschäftsführung.pdf, VPN-Konfig-Restore.zip.
  2. Write a SIEM rule for Event ID 5145 (Network Share Object Access) where ShareName == "Accounting_Backup". Schreibe eine SIEM-Regel auf Event ID 5145 (Network Share Object Access) mit ShareName == "Buchhaltung_Backup".
From practice Aus der Praxis

If a helpdesk employee triggers the alert: good. Training moment. If nobody should have access and it still happens: incident response, immediately. Wenn ein Helpdesk-Mitarbeiter den Alarm auslöst: gut. Schulungsmoment. Wenn niemand drauf zugreifen sollte und es trotzdem passiert: Incident Response, sofort.

What you see afterwards Was du danach siehst

Username, source IP, precise timestamp, which file was accessed. With active canary files you also get the geolocation of the target. Sometimes the attacker is no longer inside your network but has already taken the file with them. Username, Quell-IP, genauer Zeitstempel, welche Datei geöffnet wurde. Bei aktivierten Canary-Files zusätzlich die Geolokation des Ziels. Manchmal sitzt der Angreifer schon nicht mehr in deinem Netz, sondern hat die Datei mitgenommen.

StrengthStärke

Hits the precise point in the compromise chain: after initial access, before exfiltration. Trifft den genauen Punkt einer Compromise-Kette: nach Initial Access, vor Exfiltration.

LimitationGrenze

SMB auditing can get noisy. Define filters precisely or the SOC drowns in events. SMB-Auditing kann laut werden. Filter sauber definieren, sonst ertrinkt der SOC in Events.

05
Easy Einfach 5 min 5 Min. 0 €

The ticking DNS address Die tickende DNS-Adresse

A hostname that does not exist, but notices when someone asks for it. Ein Hostname, der nicht existiert, aber merkt, wenn jemand fragt.

The concept Die Idee

A DNS canary is a unique hostname (for example, a long random subdomain token) that should never appear legitimately anywhere. If it shows up in your DNS logs, someone has found it: typically inside a leaked config file, a repository, or a backup. Ein DNS-Canary ist ein einzigartiger Hostname (z. B. ein langes, zufälliges Subdomain-Token), der nirgendwo legitim auftauchen sollte. Tut er es trotzdem in deinen DNS-Logs auf, weißt du: jemand hat ihn gefunden, typischerweise in einer geleakten Config-Datei, einem Repo, einem Backup.

Step by step Schritt für Schritt

  1. Create a DNS token at canarytokens.org. You receive a hostname such as xk3p2qj8wn4mv5.canarytokens.com. Erstelle bei canarytokens.org einen DNS-Token. Du bekommst einen Hostnamen wie xk3p2qj8wn4mv5.canarytokens.com.
  2. Scatter the hostname in places only an attacker would find:
    • In a file /etc/hosts.backup on key servers
    • In a fake file jenkins-internal.yaml in an internal Git repository
    • In a KeePass entry named "Backup Server (legacy)"
    • In the browser bookmarks of a honeyuser account
    Streue den Hostnamen an Stellen, an denen ihn nur ein Angreifer findet:
    • In einer Datei /etc/hosts.backup auf wichtigen Servern
    • In einer Fake-Datei jenkins-internal.yaml in einem internen Git-Repo
    • In einem KeePass-Eintrag namens "Backup-Server (legacy)"
    • In den Browser-Bookmarks eines Honeyusers
  3. Lean back. The moment anyone resolves the hostname, an e-mail arrives. Lehn dich zurück. Sobald jemand den Hostnamen auflöst, kommt eine E-Mail.
Personal favourite Mein Favorit

This is the pattern with the best effort-to-insight ratio. Whoever triggers a DNS canary has, in 95% of cases, just opened a sensitive file they should not have. Das ist das Konzept mit dem besten Verhältnis aus Aufwand zu Erkenntnis. Wer einen DNS-Canary auslöst, hat in 95 % der Fälle gerade eine sensible Datei geöffnet, die er nicht öffnen sollte.

What you see afterwards Was du danach siehst

The source IP of the resolving DNS resolver (often a public resolver, which already reveals the file has left the organisation). Timestamp. Sometimes even contextual hints. Die Quell-IP des auflösenden DNS-Resolvers (oft ein öffentlicher Resolver, was schon verrät, dass die Datei das Unternehmen verlassen hat). Zeitstempel. Manchmal sogar Hinweise auf den Kontext.

StrengthStärke

Works even after the attacker is long gone. Detects data leaks you did not know about. Funktioniert auch, wenn der Angreifer längst weg ist. Du erkennst Daten-Leaks, von denen du nicht wusstest.

LimitationGrenze

You learn that something happened, but rarely exactly who or where. Du erfährst, dass etwas passiert ist, aber selten genau, durch wen oder wo.

06
Medium Mittel 30 min 30 Min. 0 €

The kerberoastable honey-service account Der kerberoastbare Honey-Service-Account

An attractive service account in Active Directory that screams the moment anyone asks for its ticket. Ein attraktiver Dienstkonto-Eintrag im AD, der Alarm schlägt, sobald jemand sein Ticket anfragt.

The concept Die Idee

Kerberoasting is a standard credential-harvesting technique: an attacker requests Kerberos service tickets for accounts with a Service Principal Name (SPN) and cracks them offline. So we plant exactly such a target, give it a name that looks tempting (svc_sql_backup, svc_sap_admin) and watch the ticket requests. No legitimate process ever needs a ticket for this account, so any TGS-REQ is suspicious by definition. Kerberoasting ist eine Standard-Technik zum Abgreifen von Zugangsdaten: Ein Angreifer fragt Kerberos-Service-Tickets für Konten mit Service Principal Name (SPN) an und knackt sie offline. Also legen wir genau so ein Ziel an, geben ihm einen verlockenden Namen (svc_sql_backup, svc_sap_admin) und beobachten die Ticket-Anfragen. Kein legitimer Prozess braucht je ein Ticket für diesen Account, daher ist jede TGS-REQ per Definition verdächtig.

Step by step Schritt für Schritt

  1. Create a disabled service account in a non-privileged OU, e.g. svc_sql_backup. Lege ein deaktiviertes Dienstkonto in einer nicht-privilegierten OU an, z. B. svc_sql_backup.
  2. Assign it an SPN (setspn -A MSSQLSvc/honey.contoso.local svc_sql_backup) so it is kerberoastable. Setze einen SPN (setspn -A MSSQLSvc/honey.contoso.local svc_sql_backup), damit es kerberoastbar wird.
  3. Give it a long, random password and lock it: nobody should ever log in. Vergib ein langes Zufallspasswort und sperre das Konto: Niemand soll sich je anmelden.
  4. In your SIEM, alert on Event ID 4769 (Kerberos service ticket requested) for this exact account. Im SIEM einen Alarm auf Event-ID 4769 (Kerberos-Service-Ticket angefordert) für genau diesen Account einrichten.
  5. Document the honey-account in the runbook so the SOC knows it is a tripwire, not a real service. Honey-Account im Runbook dokumentieren, damit das SOC weiß: Stolperdraht, kein echter Dienst.

Trade-off Nachteil

Event 4769 is noisy. The honey-account name has to be unique enough that you can pin a clean detection on it without false positives from legitimate Kerberos traffic. Event 4769 ist laut. Der Honey-Account-Name muss eindeutig genug sein, dass eine saubere Erkennung ohne Fehlalarme aus legitimem Kerberos-Verkehr möglich ist.