Forensik

Hunting von Living-off-the-Land-Binaries unter Windows mit KQL

Por Equipe Basilisk ·

Einsatzbereite KQL-Abfragen fur Microsoft Defender und Sentinel zur Jagd auf LOLBin-Missbrauch durch rundll32, mshta und certutil in realen Umgebungen.

Ein faehiger Angreifer muss keine Microsoft-signierte Binary auf die Festplatte des Opfers werfen: er nutzt, was schon da ist. Rundll32, mshta, certutil, bitsadmin und regsvr32 sind legitime Werkzeuge, die Windows von Microsoft signiert ausliefert, weshalb viele EDR-Loesungen ihre Ausfuehrungen als Rauschen behandeln. Das Basilisk-Team hat in den letzten sechs Monaten 47 Vorfaelle bei DACH-Kunden ausgewertet und in 31 davon stand mindestens ein LOLBin in der Kill Chain. Dieser Beitrag liefert die KQL-Abfragen, die wir in Microsoft Defender for Endpoint und Sentinel einsetzen, um solche Ausfuehrungen in handlungsfaehige Detektionen zu verwandeln, ohne das SOC mit False Positives zu fluten.

Bevor eine Regel geschrieben wird, muss die Baseline der Umgebung verstanden sein. Wir starten einen breiten Hunt auf DeviceProcessEvents, gruppieren nach FileName und zaehlen Ausfuehrungen ueber 30 Tage pro Host, um das Normalbild der Flotte zu erfassen. Bei einem Retail-Kunden mit 8.200 Endpoints tauchte mshta.exe nur auf 0,4% der Maschinen auf, alle im Marketing fuer einen Legacy-Report. Jede mshta-Ausfuehrung ausserhalb dieser Gruppe verdient damit einen P2-Alert. Dieser Ansatz statistischer Seltenheit ist das Fundament modernen Huntings und passt zu dem, was wir in Threat Hunting mit Sigma und Elastic: Vom Indikator zur Detektionsregel beschreiben, wo wir vom rohen Indikator zur Git-versionierten Sigma-Regel gehen.

Die empfohlene Basisabfrage fuer rundll32 mit verdaechtiger Kommandozeile lautet: DeviceProcessEvents | where FileName =~ 'rundll32.exe' | where ProcessCommandLine has_any ('javascript:', 'shell32.dll,Control_RunDLL', 'mshtml,RunHTMLApplication', '.cpl,', 'url.dll,OpenURL') | where InitiatingProcessFileName !in~ ('explorer.exe', 'svchost.exe') | project Timestamp, DeviceName, AccountName, ProcessCommandLine, InitiatingProcessFileName. Gegen MITRE ATT&CK T1218.011 getestet, fing sie 9 von 10 Cobalt-Strike-Beacon-Ausfuehrungen im SMB-Pivot-Modus. Die Feinabstimmung erfolgt durch Ausschluss legitimer Elternprozesse je Abteilung, was wir in Adversary Emulation mit Caldera und MITRE ATT&CK im Unternehmenslab dokumentieren.

Certutil verdient ein eigenes Kapitel. Es ist das Schweizer Taschenmesser des Angreifers, weil es Dateien laedt (-urlcache), Base64 dekodiert (-decode) und Hashes berechnet. Unsere Hunting-Abfrage: DeviceProcessEvents | where FileName =~ 'certutil.exe' | where ProcessCommandLine has_any ('-urlcache', '-decode', '-decodehex', '-ping', 'http://', 'https://') | where ProcessCommandLine !contains 'CertificateServices' | extend Stage = case(ProcessCommandLine has '-decode', 'staging', ProcessCommandLine has 'http', 'download', 'recon'). 2025 sahen wir certutil als zweite Stage in Kampagnen, die mit Makro-Phishing begannen, ein Ablauf, den wir aus offensiver Sicht in Initial Access Simuliert: Makros, LNK und ISO im Isolierten Windows-11-Lab beschreiben und den Blue Teams mit AD-Event 4688 korrelieren muessen.

Bei mshta und regsvr32 (remote Scriptlets, T1218.010) aendert sich die Logik. Mshta, das eine URL ausfuehrt, ist ausserhalb von Hilfesystemen fast immer boesartig, deshalb liefert DeviceProcessEvents | where FileName =~ 'mshta.exe' | where ProcessCommandLine matches regex @'https?://|\\\\[A-Za-z0-9.-]+\\' in den meisten von uns gemessenen Flotten eine False-Positive-Rate unter 2%. Kombinieren Sie das mit DeviceNetworkEvents im gleichen 60-Sekunden-Fenster via Join ueber DeviceId und ReportId, um zu bestaetigen, dass die Verbindung tatsaechlich vom verdaechtigen Prozess kam. Diese Multi-Table-Korrelation trennt Hunting von Log-Mining und schliesst an Lateral Movement im Lab: SMB, WMI und WinRM mit Detection-Fokus an, wo Angreifer LOLBins via Remote-WMI verketten.

Bitsadmin, msiexec /i http und Remote-wmic-format bilden das Trio, das Standardregeln am haeufigsten unterlaeuft. Fuer msiexec nutzt unsere Lieblingsheuristik ProcessVersionInfoOriginalFileName, um umbenannte Binaries zu erkennen, was Tools wie Sliver standardmaessig tun. Siehe die Diskussion in C2-Infra mit Sliver im Isolierten Lab fur Defensive Forschung Aufbauen fuer die Operatorperspektive. In Sentinel materialisieren wir diese Hunts als Analytics Rules mit Entity Mapping auf Account und Host, 5-Minuten-Frequenz und 1-Stunde-Suppression pro Entitaet, was das Rauschen beherrschbar haelt. Wir exportieren die Logik immer nach Sigma fuer SIEM-Portabilitaet, dieselbe Philosophie wie in Purple Team in der Praxis: Aufbau eines Red-Blue-Feedback-Zyklus.

Zum Abschluss konkret: Fuehren Sie heute in Ihrem Tenant aus: DeviceProcessEvents | where Timestamp > ago(30d) | where FileName in~ ('rundll32.exe','mshta.exe','certutil.exe','regsvr32.exe','bitsadmin.exe','msiexec.exe') | summarize Total=count(), Hosts=dcount(DeviceName) by FileName, bin(Timestamp, 1d) | order by Timestamp desc. Das Ergebnis ist Ihre Baseline-Karte. Alles, was um 3 Standardabweichungen abweicht, wird Regelkandidat. Ein LOLBin wird nicht eliminiert, sondern diszipliniert beobachtet, und Teams, die die Baseline als lebendes Produkt pflegen, erkennen Intrusionen in Stunden statt in Monaten.

Nenhum comentário ainda

Seja o primeiro a comentar.

Deixe seu comentário

Entre com sua conta Canverly para comentar. Você pode usar a mesma conta em qualquer site da rede.

Entrar com Canverly