
POC basato su ETW per identificare syscall dirette e indirette
Questa è una POC basata su ETW per monitorare syscall anomale.
Per ora, le syscall NtOpenThread e NtSetContextThread vengono monitorate per identificare IOC che indicano syscall sia dirette che indirette.
Questo progetto usa ETW, più precisamente provider ETW basati sul kernel, per monitorare gli IOC.
I provider ETW che risiedono nel kernel possono essere sfruttati efficacemente, poiché le calltrace degli eventi emessi contengono l'indirizzo in modalità utente da cui è stata condotta la syscall.
Ciò consente di monitorare gli IOC che indicano syscall dirette e indirette, una tecnica spesso sfruttata dagli attori delle minacce:
1: Una syscall è stata condotta da un modulo non attendibile (=syscall diretta)
2: Lo stub di syscall usato in ntdll non corrisponde alla syscall condotta (=syscall indiretta)
Questo progetto usa il provider: Microsoft-Windows-Kernel-Audit-API-Calls per monitorare gli eventi OpenThread e SetContextThread attivati rispettivamente dalle syscall NtSetContextThread o NtOpenThread.
Le calltrace sono abilitate usando il flag EVENT_ENABLE_PROPERTY_STACK_TRACE.
Questa è una POC e monitora solo due syscall specifiche. È ovviamente possibile usare altri provider basati sul kernel per migliorare la telemetria.
Questo progetto contiene due programmi di esempio che usano syscall dirette e indirette, creati con l'incredibile SysWhispers3. Sono stati generati come segue:
python3 syswhispers.py -a x64 -m jumper_randomized --functions NtSetContextThread
python3 syswhispers.py -a x64 -m embedded --functions NtSetContextThread
All'esecuzione, le syscall anomale dovrebbero essere identificate:

Testato su 10.0.19044.
IsElevated()