
직접 및 간접 syscall을 식별하는 ETW 기반 POC
비정상적인 syscalls를 모니터링하기 위한 ETW 기반 POC입니다.
현재 NtOpenThread 및 NtSetContextThread syscalls를 모니터링하여 direct 및 indirect syscalls를 모두 나타내는 IOC를 식별합니다.
이 프로젝트는 ETW, 보다 정확히는 커널 기반 ETW 공급자를 사용하여 IOC를 모니터링합니다.
커널에 위치한 ETW 공급자는 발생한 이벤트의 콜트레이스(calltraces)에 syscall이 수행된 유저모드 주소가 포함되어 있기 때문에 효과적으로 활용될 수 있습니다.
이를 통해 위협 행위자들이 자주 활용하는 기법인 direct 및 indirect syscalls를 나타내는 IOC를 모니터링할 수 있습니다:
1: 신뢰할 수 없는 모듈에서 syscall이 수행됨 (=direct syscall)
2: ntdll에서 사용된 syscall 스텁(stub)이 수행된 syscall과 일치하지 않음 (=indirect syscall)
이 프로젝트는 Microsoft-Windows-Kernel-Audit-API-Calls 공급자를 사용하여 각각 NtSetContextThread 및 NtOpenThread syscalls에 의해 트리거되는 OpenThread 및 SetContextThread 이벤트를 모니터링합니다.
콜트레이스는 EVENT_ENABLE_PROPERTY_STACK_TRACE 플래그를 사용하여 활성화됩니다.
이 프로젝트는 POC이며 두 가지 특정 syscalls만 모니터링합니다. 물론 다른 커널 기반 공급자를 사용하여 원격 분석(telemetry)을 강화할 수도 있습니다.
이 프로젝트에는 멋진 SysWhispers3를 사용하여 만든 direct 및 indirect syscalls를 사용하는 두 개의 샘플 프로그램이 포함되어 있습니다. 다음과 같이 생성되었습니다:
python3 syswhispers.py -a x64 -m jumper_randomized --functions NtSetContextThread
python3 syswhispers.py -a x64 -m embedded --functions NtSetContextThread
실행 시 비정상적인 syscalls가 식별되어야 합니다:

10.0.19044에서 테스트됨.
IsElevated() 제공