
POC basé sur ETW pour identifier les appels système directs et indirects
Il s'agit d'une POC basée sur ETW pour surveiller les appels système anormaux.
Pour l'instant, les appels système NtOpenThread et NtSetContextThread sont surveillés afin d'identifier des IOC indiquant à la fois des appels système directs et indirects.
Ce projet utilise ETW, plus précisément des fournisseurs ETW basés sur le noyau, pour surveiller les IOC.
Les fournisseurs ETW situés dans le noyau peuvent en effet être exploités, car les traces d'appels des événements émis contiennent l'adresse en mode utilisateur d'où l'appel système a été effectué.
Cela permet de surveiller les IOC indiquant des appels système directs et indirects, une technique souvent utilisée par les acteurs de la menace :
1: Un appel système a été effectué depuis un module non fiable (= appel système direct)
2: Le stub d'appel système utilisé dans ntdll ne correspond pas à l'appel système effectué (= appel système indirect)
Ce projet utilise le fournisseur : Microsoft-Windows-Kernel-Audit-API-Calls pour surveiller les événements OpenThread et SetContextThread déclenchés respectivement par les appels système NtSetContextThread ou NtOpenThread.
Les traces d'appels sont activées à l'aide du flag EVENT_ENABLE_PROPERTY_STACK_TRACE.
Il s'agit d'une POC qui ne surveille que deux appels système spécifiques. Il est bien sûr possible d'utiliser d'autres fournisseurs basés sur le noyau pour améliorer la télémétrie.
Ce projet contient deux programmes d'exemple utilisant des appels système directs et indirects, créés à l'aide de l'incroyable SysWhispers3. Ils ont été générés comme suit :
python3 syswhispers.py -a x64 -m jumper_randomized --functions NtSetContextThread
python3 syswhispers.py -a x64 -m embedded --functions NtSetContextThread
Lors de l'exécution, les appels système anormaux devraient être identifiés :

Testé sur 10.0.19044.
IsElevated()