
POC baseado em ETW para identificar syscalls diretas e indiretas
Este é um POC baseado em ETW para monitorar syscalls anormais.
Por enquanto, os syscalls NtOpenThread e NtSetContextThread são monitorados para identificar IOCs que indicam syscalls diretos e indiretos.
Este projeto usa ETW, mais precisamente provedores de ETW baseados no kernel, para monitorar IOCs.
Os provedores de ETW que residem no kernel podem ser efetivamente utilizados, pois os calltraces dos eventos emitidos contêm o endereço no modo de usuário (usermode) de onde o syscall foi realizado.
Isso permite monitorar IOCs que indicam syscalls diretos e indiretos, uma técnica frequentemente utilizada por atores de ameaças:
1: Um syscall foi realizado a partir de um módulo não confiável (=syscall direto)
2: O stub de syscall usado no ntdll não corresponde ao syscall realizado (=syscall indireto)
Este projeto usa o Provedor: Microsoft-Windows-Kernel-Audit-API-Calls para monitorar eventos de OpenThread e acionados respectivamente pelos syscalls ou .
Os calltraces são habilitados usando a flag .
SetContextThreadNtSetContextThreadNtOpenThreadEVENT_ENABLE_PROPERTY_STACK_TRACEEste é um POC e monitora apenas dois syscalls específicos. É claro que é possível usar outros provedores baseados no kernel para melhorar a telemetria.
Este projeto contém dois programas de exemplo que usam syscalls diretos e indiretos criados com o incrível SysWhispers3. Eles foram gerados da seguinte forma:
python3 syswhispers.py -a x64 -m jumper_randomized --functions NtSetContextThread
python3 syswhispers.py -a x64 -m embedded --functions NtSetContextThread
Após a execução, syscalls anormais devem ser identificados:

Testado em 10.0.19044.
IsElevated()