Threat Hunting ist die Kunst, im eigenen Netzwerk nach dem zu suchen, was man nicht sehen möchte. Nicht weil man Misstrauen mag, sondern weil Angreifer weder Bürozeiten noch Marketing-Folien respektieren.
We found something weird: „PDF Editor.exe“ als „Update“
Ein echter Fund wirkt selten wie ein Hollywood-Hack. Eher wie ein „Update“. Genau so begann es hier:
- PDF Editor.exe verbindet sich zu
https://appsuites.ai/api/update - Ein svchost.exe Prozess startet PDF Editor.exe und lässt über
cmd.exe / powershell.exeWMI-Abfragen laufen - Danach folgen
taskkill-Kommandos gegen Browser (Chrome/Edge) - Später verbindet sich „PDF Editor“ erneut zu
https://appsuites.ai:443mit Parametern wie--cms --partialupdate
Kernsignal: „Legitim“ wirkende App + Netzwerk-Update-Pattern + Prozesskette, die nicht zum Produkt passt.
Threat Hunting ist nicht Incident Response
Threat Hunting ≠ Incident Response
Threat Hunting ≠ Alert-Triage
Threat Hunting ≠ „Threat Intel Feed consumption“
Threat Hunting passiert vor dem Ticket-Sturm. Und wenn es gut läuft, reduziert es genau diesen Ticket-Sturm.
IOCs sind schnell, TTPs sind nachhaltig
IOC-Hunting bringt schnelle Wins, aber geringen „Pain“. Das Ziel ist höher in der Pyramid of Pain zu jagen:

- Hashes, Domains, IPs: leicht austauschbar, viel Noise
- Toolmarks und Tradecraft: mittlerer Aufwand, mehr Wert
- TTPs: teuer für Angreifer, nachhaltig für Verteidiger
Merksatz: Je weiter oben gejagt wird, desto mehr schmerzt es dem Angreifer.
Coverage Gap: Frameworks sind Landkarten, keine Sensoren
Frameworks helfen beim Denken. Sie erzeugen keine Telemetrie.
Praktischer Ansatz:
- MITRE ATT&CK als TTP-Katalog und Mapping-Sprache
- Hypothesen ableiten und gegen echte Events testen
- Logging-Gaps als Output behandeln, nicht als Ausrede
Methodik: SEARCH Framework in der Praxis
Minimaler, wiederholbarer Ablauf:
- Scope: Was wird gejagt (TTP, Toolmark, Asset-Cluster)
- Enumerate: Welche Datenquellen existieren (EDR, Logs, Proxy, DNS, IAM)
- Assemble: Query-Set bauen, Baseline ziehen
- Reduce: Noise reduzieren (Allowlists, Parent/Child, Pfade, Signaturen)
- Confirm: Pivoten, Kontext aufbauen, Hypothese falsifizieren oder bestätigen
- Harden: Output in Detection/Telemetry/Control Improvements übersetzen
„Hunting endet nicht mit wir haben etwas gefunden.“
Output: Was nach einem Fund passieren muss
Hunting-Resultate gehören in drei Schubladen:
- New Detection
- TTP → Query → Signal → Rule/Use Case
- Telemetry Fix
- Missing Logs, falsche Audit Policy, EDR-Gaps
- Control Improvement
- Hardening, Access-Controls, Segmentierung, App-Control, Egress-Policy
Wenn nur ein PDF mit Findings entsteht, aber keine Regel, kein Fix, kein Control-Change, war es Beschäftigungstherapie.
Fallstudie: Hypothesen für „PDF Editor.exe“
Beobachtete Anomalien werden Hypothesen:
- Masquerading / Fake-Updater
- „Update“-Traffic zu ungewöhnlicher Domain
- App läuft aus untypischem Pfad
- Defense Evasion
- Browser-Kill, um Sessions/Artefakte zu beeinflussen
- Discovery
- WMI-Abfragen nach laufenden Prozessen (Chrome/Edge)
- Persistence
- Scheduled Tasks, Run-Keys, Startup-Links (klassische Autostarts)
Diese Hypothesen sind robust, auch wenn die Datei morgen anders heisst.
High-Priority Hunts
Fokus auf TTPs, die häufig sind und viel Schaden ermöglichen:
- Persistence
- Scheduled Tasks (Logon/Start/Repeat)
- Run-Keys / Startup Folder
- Discovery
- Native Recon Commands (
systeminfo,whoami,net,ipconfig,netstat)
- Native Recon Commands (
- Execution Frequency
- „Neue App“ auf wenig Hosts
CrowdStrike Falcon Event Search Queries
1) Scheduled Task Persistence (MITRE T1053.005)
#event_simpleName = ProcessRollup2
| ImageFileName = /\\schtasks\.exe$/i
| CommandLine = /\/create/i
| CommandLine = /\/sc\s+(onlogon|onstart|minute|hourly|daily)/i
| CommandLine = /\/ru\s+("?(SYSTEM|LOCAL SERVICE|NETWORK SERVICE)"?)/i
OR CommandLine = /\/rl\s+highest/i
OR CommandLine = /\/it\b/i
| regex(field=CommandLine, regex="(?i)\\/TR\\s+.*?\\\\(Users\\\\[^\\\\]+\\\\(Downloads|Desktop|AppData|Temp)|Windows\\\\Temp|ProgramData|Public)\\\\")
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, CommandLine])
2) Run-Keys via reg.exe (MITRE T1547.001)
#event_simpleName = ProcessRollup2 | ImageFileName = /\\reg\.exe$/i | CommandLine = /\b(add|delete)\b/i | CommandLine = /HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run(Once)?/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, CommandLine])
3) Startup Folder .lnk (MITRE T1547.001)
#event_simpleName = /File(Create|Write|Rename|Close)/i | TargetFileName = /\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\.*\.lnk$/i | table([@timestamp, ComputerName, TargetFileName])
4) Native Recon Commands (MITRE TA0007)
#event_simpleName = ProcessRollup2 | ImageFileName = /\\(systeminfo|whoami|net|ipconfig|netstat)\.exe$/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine])
5) App Execution Frequency (global)
#event_simpleName = ProcessRollup2 | ImageFileName = /PDFConverter\.exe$/i | groupBy(field=ImageFileName, function=[ count(as=ExecCount), count(field=aid, distinct=true, as=Hosts), count(field=UserName, distinct=true, as=Users), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen) ]) | table([ImageFileName, ExecCount, Hosts, Users, FirstSeen, LastSeen], limit=max)
Microsoft Defender for Endpoint Advanced Hunting (KQL)
1) Scheduled Tasks mit verdächtigen Triggers/Targets (T1053.005)
DeviceProcessEvents
| where FileName =~ "schtasks.exe"
| where ProcessCommandLine has "/Create"
| where ProcessCommandLine has_any ("/SC ONLOGON", "/SC ONSTART", "/SC MINUTE", "/SC HOURLY", "/SC DAILY")
| where ProcessCommandLine has_any ("/RU SYSTEM", "/RU \"SYSTEM\"", "/RU \"LOCAL SERVICE\"", "/RU \"NETWORK SERVICE\"", "/RL HIGHEST", "/IT")
| where ProcessCommandLine matches regex @"(?i)/TR\s+.*\\(Users\\[^\\]+\\(Downloads|Desktop|AppData|Temp)|Windows\\Temp|ProgramData|Public)\\"
| project Timestamp, DeviceName, AccountName, InitiatingProcessFileName, InitiatingProcessCommandLine, ProcessCommandLine
| order by Timestamp desc
2) Run-Keys Manipulation (T1547.001)
DeviceRegistryEvents
| where RegistryKey has @"\Software\Microsoft\Windows\CurrentVersion\Run"
or RegistryKey has @"\Software\Microsoft\Windows\CurrentVersion\RunOnce"
| where ActionType in ("RegistryValueSet", "RegistryKeyCreated")
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RegistryKey, RegistryValueName, RegistryValueData
| order by Timestamp desc
3) Startup Folder LNK Drops (T1547.001)
DeviceFileEvents | where FolderPath has @"\Microsoft\Windows\Start Menu\Programs\Startup" | where FileName endswith ".lnk" | where ActionType in ("FileCreated", "FileModified", "FileRenamed") | project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, FolderPath, FileName | order by Timestamp desc
4) Native Recon Commands (TA0007)
DeviceProcessEvents | where FileName in~ ("systeminfo.exe","whoami.exe","net.exe","ipconfig.exe","netstat.exe") | project Timestamp, DeviceName, AccountName, InitiatingProcessFileName, InitiatingProcessCommandLine, FileName, ProcessCommandLine | order by Timestamp desc
5) Global App Execution Frequency / „First Seen“ Hunting
DeviceProcessEvents
| where FileName =~ "PDFConverter.exe"
| summarize
ExecCount = count(),
Hosts = dcount(DeviceId),
Users = dcount(AccountName),
FirstSeen = min(Timestamp),
LastSeen = max(Timestamp)
by FileName
| order by LastSeen desc
6) Demo-Pattern: „PDF Editor.exe“ + Update-Domain + Browser-Kill
let SuspiciousDomain = "appsuites.ai";
let SuspiciousProc = "PDF Editor.exe";
DeviceNetworkEvents
| where RemoteUrl has SuspiciousDomain
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteUrl, RemoteIP, RemotePort
| join kind=leftouter (
DeviceProcessEvents
| where FileName in~ ("cmd.exe","powershell.exe","taskkill.exe")
| where InitiatingProcessFileName =~ SuspiciousProc or ProcessCommandLine has SuspiciousProc
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine
) on DeviceName
| order by Timestamp desc
Bonus Hunting Query
Code-Signing-Zertifikate als Pivot.
Wer solche Signer-Treffer findet, hat oft keinen „harmlosen False Positive“, sondern ein sehr realistisches Signal für verdächtige Software in der Umgebung.
CrowdStrike
SubjectCN = /BLUE TAKIN LTD|TAU CENTAURI LTD|SPARROW TIDE LTD|TECHNODENIS LTD|AMARYLLIS SIGNAL LTD|BLACK INDIGO LTD|LONG SOUND LTD|OR KAHOL LTD|ASTRO BRIGHT LTD|MAINSTAY CRYPTO LLC|GRASSROOTS CONSULTING GROUP LLC|CROWD SYNC LLC|WORK PRODUCT INC|PIXEL CATALYST MEDIA LLC|BYTE MEDIA SDN BHD|ECHO INFINI SDN. BHD.|GLINT SOFTWARE SDN. BHD.|GLOBAL TECH ALLIES LTD|SIRIUS ONE LTD|SELA LINES LTD|MY TECH MEDIA LTD|BONY INNOVATION LTD/i OR SubjectCN = /BLUE TAKIN LTD|TAU CENTAURI LTD|SPARROW TIDE LTD|TECHNODENIS LTD|AMARYLLIS SIGNAL LTD|BLACK INDIGO LTD|LONG SOUND LTD|OR KAHOL LTD|ASTRO BRIGHT LTD|MAINSTAY CRYPTO LLC|GRASSROOTS CONSULTING GROUP LLC|CROWD SYNC LLC|WORK PRODUCT INC|PIXEL CATALYST MEDIA LLC|BYTE MEDIA SDN BHD|ECHO INFINI SDN. BHD.|GLINT SOFTWARE SDN. BHD.|GLOBAL TECH ALLIES LTD|SIRIUS ONE LTD|SELA LINES LTD|MY TECH MEDIA LTD|BONY INNOVATION LTD/i
Microsoft Defender for Endpoint
DeviceFileCertificateInfo | where Signer has_any ( "BLUE TAKIN LTD", "TAU CENTAURI LTD", "SPARROW TIDE LTD", "TECHNODENIS LTD", "AMARYLLIS SIGNAL LTD", "BLACK INDIGO LTD", "LONG SOUND LTD", "OR KAHOL LTD", "ASTRO BRIGHT LTD", "MAINSTAY CRYPTO LLC", "GRASSROOTS CONSULTING GROUP LLC", "CROWD SYNC LLC", "WORK PRODUCT INC", "PIXEL CATALYST MEDIA LLC", "BYTE MEDIA SDN BHD", "ECHO INFINI SDN. BHD.", "GLINT SOFTWARE SDN. BHD.", "GLOBAL TECH ALLIES LTD", "SIRIUS ONE LTD", "SELA LINES LTD", "MY TECH MEDIA LTD", "BONY INNOVATION LTD" ) | project Timestamp, DeviceName, SHA1, Signer, Issuer, IsTrusted, IsRootSignerMicrosoft
Fazit
Hunting ist kein Feature. Hunting ist ein Habit.
TrustInVeritas
TrustInVeritas ist Cyber Security Specialist bei AVANTEC. Er fokussiert sich auf die Identifizierung, Analyse und Abwehr moderner Cyberbedrohungen. Ein besonderer Schwerpunkt liegt auf proaktivem Threat Hunting und der Aufdeckung von Angreifern, bevor sie Schaden verursachen. In seiner Freizeit ist er gerne in der Natur, treibt Sport und begeistert sich für Rennsport sowie schnelle Autos.





