
타이머로 콜 스택을 동적으로 마스킹하는 PoC 구현
이 저장소는 타이머를 사용하여 콜 스택을 동적으로 스푸핑하는 PoC 기법을 시연합니다. 임플란트가 슬립 상태에 들어가기 전에 타이머를 대기열에 추가하여 콜 스택을 가짜 스택으로 덮어쓴 다음, 실행을 재개하기 전에 원래 스택을 복원할 수 있습니다. 따라서 슬립 중에 임플란트의 메모리를 마스킹할 수 있는 것과 같은 방식으로 메인 스레드의 콜 스택도 마스킹할 수 있습니다.
전체 기술 분석은 다음 블로그 게시물을 참조하세요: https://www.cobaltstrike.com/blog/behind-the-mask-spoofing-call-stacks-dynamically-with-timers/.
기본적으로 이 PoC는 spoolsv.exe에서 가져온 정적 콜 스택을 모방합니다:

--dynamic 플래그가 제공되면 CallStackMasker는 접근 가능한 모든 스레드를 열거하고, 원하는 상태(WaitForSingleObjectEx)의 스레드를 찾아 해당 콜 스택과 시작 주소를 모방합니다. 아래에서 이를 확인할 수 있습니다:

NB 참고 사항으로, 이 PoC는 다음 Windows 빌드에서 테스트되었습니다:
22h2 (19045.2486)
다른 버전에서는 테스트되지 않았으며, 다른 Windows 빌드에서는 작동하지 않을 수 있습니다.