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.
Patterns Konzepte
Six building blocks, from five-minute file to AD tripwire. Sechs Bausteine, von der Fünf-Minuten-Datei bis zum AD-Stolperdraht.
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
-
Go to
canarytokens.org(open source by Thinkst, free). Öffnecanarytokens.org(Open Source von Thinkst, kostenlos). - Select "Microsoft Word Document" as the token type. Wähle "Microsoft Word Document" als Token-Typ.
- 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".
-
Download the generated
.docxand rename it convincingly:Salaries_2026_FINAL.docx,VPN_Credentials.docx,Backup_Recovery.docx. Lade die generierte.docxherunter und benenne sie sprechend um:Gehälter_2026_FINAL.docx,VPN_Zugangsdaten.docx,Backup_Wiederherstellung.docx. - 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.
- 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.
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.
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
-
Create a new AD user with a tempting name:
svc_backup_adminorsql_sa_legacy. Erstelle einen neuen AD-User mit lohnendem Namen:svc_backup_adminodersql_sa_legacy. - 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.
- 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:
# Make the honeyuser kerberoastable
Set-ADUser "svc_backup_admin" `
-ServicePrincipalNames @{Add="MSSQL/honeypot.corp.local:1433"}
- 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.
-
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 mitGet-WinEvent) auf jede Authentifizierung dieses Accounts:
# 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
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.
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
- A small VM or a Raspberry Pi is sufficient. Install Docker. Eine kleine VM oder ein Raspberry Pi reicht. Docker installieren.
- Start Cowrie as a container. The official image has sensible defaults: Cowrie als Container starten. Die offizielle Variante hat sensible Defaults:
# 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
-
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. -
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 incowrie-logs/cowrie.json. Schicke sie an deinen Elastic-Stack, oder leg einen simplen Cronjob an, der bei neuen Einträgen mailt. -
Optional: plant credentials such as
root:toorso attackers "successfully" log in and you can record their full shell session. Optional: hinterlege Credentials wieroot: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.
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.
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
-
Create a new share on an inconspicuous fileserver. Name:
Accounting_BackuporIT-Admin$. Erstelle auf einem unauffälligen Fileserver ein neues Share. Name:Buchhaltung_BackupoderIT-Admin$. - 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.
- Enable file-access auditing via GPO: Aktiviere File-Access-Auditing über GPO:
Computer Configuration
-> Windows Settings
-> Security Settings
-> Advanced Audit Policy
-> Object Access
-> Audit File Share (Success)
-> Audit Detailed File Share (Success)
-
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. - 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".
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.
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
-
Create a DNS token at
canarytokens.org. You receive a hostname such asxk3p2qj8wn4mv5.canarytokens.com. Erstelle beicanarytokens.orgeinen DNS-Token. Du bekommst einen Hostnamen wiexk3p2qj8wn4mv5.canarytokens.com. -
Scatter the hostname in places only an attacker would find:
- In a file
/etc/hosts.backupon key servers - In a fake file
jenkins-internal.yamlin an internal Git repository - In a KeePass entry named "Backup Server (legacy)"
- In the browser bookmarks of a honeyuser account
- In einer Datei
/etc/hosts.backupauf wichtigen Servern - In einer Fake-Datei
jenkins-internal.yamlin einem internen Git-Repo - In einem KeePass-Eintrag namens "Backup-Server (legacy)"
- In den Browser-Bookmarks eines Honeyusers
- In a file
- 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.
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.
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
-
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. -
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. - 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.
- 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.
- 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.