
ETW-basiertes POC zur Identifizierung direkter und indirekter Syscalls
Dies ist ein ETW-basierter POC zur Überwachung abnormaler Syscalls.
Derzeit werden die Syscalls NtOpenThread und NtSetContextThread überwacht, um IOCs zu identifizieren, die sowohl auf direkte als auch auf indirekte Syscalls hinweisen.
Dieses Projekt nutzt ETW, genauer gesagt kernelbasierte ETW-Provider, um IOCs zu überwachen.
ETW-Provider im Kernel können effektiv genutzt werden, da die Calltraces der emittierten Ereignisse die Usermode-Adresse enthalten, von der aus der Syscall ausgeführt wurde.
Dies ermöglicht die Überwachung von IOCs, die auf direkte und indirekte Syscalls hinweisen – eine Technik, die häufig von Bedrohungsakteuren eingesetzt wird:
1: Ein Syscall wurde von einem nicht vertrauenswürdigen Modul ausgeführt (=direkter Syscall)
2: Der verwendete Syscall-Stub in ntdll entspricht nicht dem ausgeführten Syscall (=indirekter Syscall)
Dieses Projekt verwendet den Provider: Microsoft-Windows-Kernel-Audit-API-Calls, um OpenThread- und SetContextThread-Ereignisse zu überwachen, die jeweils durch die Syscalls NtSetContextThread bzw. NtOpenThread ausgelöst werden.
Calltraces werden mithilfe des Flags EVENT_ENABLE_PROPERTY_STACK_TRACE aktiviert.
Dies ist ein POC und überwacht nur zwei bestimmte Syscalls. Es ist natürlich möglich, andere kernelbasierte Provider zu verwenden, um die Telemetrie zu verbessern.
Dieses Projekt enthält zwei Beispielprogramme, die direkte und indirekte Syscalls verwenden und mit dem großartigen SysWhispers3 erstellt wurden. Sie wurden wie folgt generiert:
python3 syswhispers.py -a x64 -m jumper_randomized --functions NtSetContextThread
python3 syswhispers.py -a x64 -m embedded --functions NtSetContextThread
Bei der Ausführung sollten abnormale Syscalls identifiziert werden:

Getestet auf 10.0.19044.
IsElevated()