EDR-Umgehung fur Forschung: Direct Syscalls Erklart ohne Romantik
Wie Direct Syscalls in kontrollierter defensiver Studie tatsachlich funktionieren, warum sie weiterhin erkennbar bleiben und worauf Blue Teams achten sollten, bevor sie die nachste Blackbox kaufen.
Direct Syscalls wurden zum Meme auf YouTube-Kanalen und Twitter-Threads, doch der Grossteil der veroffentlichten Forschung kratzt nicht einmal an dem, was ein moderner EDR (CrowdStrike Falcon 7.x, SentinelOne Singularity, Microsoft Defender for Endpoint mit Kernel-ETW-TI) wirklich sieht. Bei Basilisk OffSec untersuchen wir die Technik im isolierten Labor - Windows 11 23H2 ohne Internet, versionierte VMware-Snapshots, null Absicht, davon ein Produkt zu basteln. Das Ziel ist eindeutig: den Weg NTDLL -> SSN -> Syscall -> Kernel verstehen, um bessere Detections zu schreiben, nicht um Bypass-Kits zu verkaufen. Wer nur IOCs stapeln und so tun will, als sei das professionelles Red Teaming, kann den Tab schliessen.
Grundlagen ohne Herablassung: jede dokumentierte Funktion in ntdll.dll (NtAllocateVirtualMemory, NtCreateThreadEx, NtProtectVirtualMemory) tragt eine System Service Number (SSN), die sich mit jedem Windows-Build andert. Der EDR setzt typischerweise einen Inline-JMP-Hook auf die ersten Bytes dieser User-Mode-Stubs, sodass beim VirtualAlloc-Aufruf deines Loaders die Kontrolle erst durch die injizierte DLL lauft, bevor sie den Kernel erreicht. Direct Syscall bedeutet, das Stub in deinem Binary nachzubauen - mov r10, rcx; mov eax, SSN; syscall; ret - und den Hook komplett zu uberspringen. Es funktioniert, ist aber ein billiger Sieg gegen User-Mode-Telemetrie und null gegen Kernel-Telemetrie. Lies dazu AMSI- und ETW-Bypass fuer Defensive Forschung: Was Blue Teams Wissen Sollten noch einmal, die Logik ahnelt sich.
Zur Reproduktion zuhause nutze ich SysWhispers3 (der von klezVirus gepflegte Fork) und generiere MASM-Stubs fur ein C++-Projekt, kompiliert mit MSVC 19.38. Die SSN wird zur Laufzeit via Hell's Gate oder Halo's Gate aufgelost, indem die EAT der von der Platte gemappten ntdll durchlaufen wird - nicht die In-Memory-Version, die manipuliert sein kann. In drei Stunden am Tisch hatte ich einen POC, der RW alloziert, harmlosen Shellcode schreibt (nacktes calc.exe ohne Payload), NtProtectVirtualMemory auf RX umschaltet und NtCreateThreadEx feuert. Sysmon 15 mit SwiftOnSecuritys Config loggt die Thread-Erstellung, ProcessAccess bleibt sauber. Sieht nach Sieg aus, bis du Defender in EDR Block Mode versetzt und der Alert vom Kernel uber den Threat Intelligence ETW Provider kommt.
Hier kommt der Teil, den niemand auf der Buhne sagen will: Microsoft-Windows-Threat-Intelligence emittiert Events fur NtAllocateVirtualMemory, NtProtectVirtualMemory mit RWX, NtMapViewOfSection und NtCreateThreadEx unabhangig vom User-Mode-Hook. Du hast NTDLL ubersprungen, schon, aber der Kernel sah den Syscall mit einem Return-Stack ankommen, der auf das .text deines Binaries zeigt statt auf ntdll.dll - genau das, wonach Call-Stack-Anomaly-Detection sucht. Elastic Security hat dafur seit 2023 eine offentliche Regel, und die Threat Hunting mit Sigma und Elastic: Vom Indikator zur Detektionsregel-Crowd nimmt sie standardmassig auf. Indirect Syscalls (zuruck in die ntdll springen und dort den Syscall absetzen) entscharfen den Stack, erzeugen aber Artefakte, die YARA-X aufgreift.
In autorisierten Engagements besprechen wir diesen Trade-off vor jeder Ausfuhrung mit dem Kunden, was direkt zu Red Team 101: Unterschied zwischen Pentest und echten adversarialen Operationen fuhrt: Adversary Emulation hat Scope, Rules of Engagement und ein definiertes Fenster. Die defensive Ubung ist ergiebiger - POC laufen lassen, ETW-TI mit SilkETW oder krabsetw mitschneiden und eine Sigma-Regel schreiben, die die Heuristik abdeckt, ohne beim Teams-Installer Fehlalarm zu schlagen. Ich kombiniere das mit Hardening nach Windows 11 Hardening fuer Hochrisiko Arbeitsplaetze und prufe Querbewegung wie in Lateral Movement im Lab: SMB, WMI und WinRM mit Detection-Fokus beschrieben, denn ein isolierter Direct Syscall ist selten die ganze Geschichte eines echten Vorfalls.
Schnelle Antworten auf wiederkehrende Fragen: nein, wir veroffentlichen keinen fertigen Loader; nein, Unhooking via frischer NTDLL-Kopie von der Platte ist nicht magisch - Defender erfasst das seit 2022 via Memory Image Integrity; und nein, ChatGPT, das deinen Shellcode in Nim schreibt, macht dich nicht unsichtbar, es gibt dir nur seltsame Entropie im .text, die der ML-Classifier des EDR liebt. Wer ernsthaft mit Offensive anfangt, sollte sich mit Active Directory Pentest: Kerberoasting Schritt fuer Schritt im GOAD Lab und C2-Infra mit Sliver im Isolierten Lab fur Defensive Forschung Aufbauen erden, bevor er in Syscalls einsteigt - sonst bewundert man nur das eigene Spiegelbild im Process Hacker.
Praktisches Takeaway: als Defender den Provider Microsoft-Windows-Threat-Intelligence aktivieren (PPL am EDR-Dienst erforderlich), in das SIEM einspeisen und drei Regeln bauen - Call Stack nicht aus ntdll stammend, NtProtectVirtualMemory das RW zu RX in einer Private Region wechselt und Cross-Process NtCreateThreadEx mit Startadresse im Heap. Das fangt 80% der offentlichen POCs ohne zusatzliche Lizenzkosten. Als Forscher dokumentieren, isolieren, keine kompilierten Binaries verteilen und daran denken, dass die Grenze zwischen Studie und Straftat das schriftliche Einverstandnis des Asset-Eigentumers ist - ein Thema, das OPSEC fuer Security-Researcher: Persoenliches Bedrohungsmodell gut behandelt.