
Windows 이벤트 로그 킬러

Svchost는 소위 공유 서비스 프로세스 구현에 필수적입니다. 여러 서비스가 리소스 소비를 줄이기 위해 하나의 프로세스를 공유할 수 있습니다. 여러 서비스를 단일 프로세스로 그룹화하면 컴퓨팅 리소스가 절약되며, 이는 Windows 프로세스를 생성하는 데 다른 운영 체제(예: Unix 계열)보다 더 많은 시간이 걸리고 더 많은 메모리를 소비하기 때문에 NT 설계자에게 특히 중요한 고려 사항이었습니다.1
즉, 간단히 말해서 Windows 운영 체제에서 svchost.exe는 서비스를 관리하며 서비스는 실제로 svchost.exe의 스레드로 실행됩니다. Phant0m은 이벤트 로그 서비스를 대상으로 하고 이벤트 로그 서비스를 담당하는 프로세스를 찾아 이벤트 로그 서비스를 담당하는 스레드를 감지하고 종료합니다. 따라서 이벤트 로그 서비스가 시스템에서 실행 중인 것처럼 보이지만(Phant0m이 프로세스를 종료하지 않았기 때문에) 실제로는 실행되지 않으며(Phant0m이 스레드를 종료했기 때문에) 시스템이 로그를 수집하지 않습니다.

Phant0m은 이벤트 로그 서비스의 프로세스 ID를 감지하기 위해 두 가지 옵션을 사용합니다. 첫 번째는 SCM(서비스 제어 관리자)을 통해 감지하는 것이고, 두 번째는 WMI(Windows Management Instrumentation)를 통해 감지하는 것입니다. Phant0m이 이벤트 로그 서비스의 프로세스 ID를 감지하는 데 사용할 방법을 선택하려면 main.cpp 파일에서 다음 줄을 변경하십시오.
예를 들어 SCM을 통해 프로세스 ID를 감지하려면 다음과 같이 편집해야 합니다. (모든 값을 동시에 설정하지 말고 원하는 기술 하나만 설정하십시오.)
// PID 감지 기술 구성 섹션.
#define PID_FROM_SCM 1 // 1로 설정하면 서비스 관리자에서 이벤트 로그 서비스의 PID를 가져옵니다.
#define PID_FROM_WMI 0 // 1로 설정하면 WMI에서 이벤트 로그 서비스의 PID를 가져옵니다.
예를 들어 기술-1을 사용하여 스레드를 종료하려면 다음과 같이 편집해야 합니다. (모든 값을 동시에 설정하지 말고 원하는 기술 하나만 설정하십시오.)
// TID 감지 및 종료 기술 구성 섹션.
#define KILL_WITH_T1 1 // 1로 설정하면 기술-1이 사용됩니다. 자세한 내용은 https://github.com/hlldz/Phant0m 참조.
#define KILL_WITH_T2 0 // 1로 설정하면 기술-2가 사용됩니다. 자세한 내용은 https://github.com/hlldz/Phant0m 참조.
Phant0m은 이벤트 로그 서비스의 스레드를 감지하고 종료하기 위해 두 가지 옵션을 사용합니다.
Windows Vista 이상을 실행하는 컴퓨터에 각 서비스가 등록되면 SCM(서비스 제어 관리자)은 서비스에 고유한 숫자 태그(오름차순)를 할당합니다. 그런 다음 서비스 생성 시 태그가 기본 서비스 스레드의 TEB에 할당됩니다. 이 태그는 기본 서비스 스레드에 의해 생성된 모든 스레드에 전파됩니다. 예를 들어 Foo 서비스 스레드가 RPC 작업자 스레드를 생성하는 경우(참고: RPC 작업자 스레드는 스레드 풀 메커니즘을 사용하지 않습니다. 나중에 자세히 설명) 해당 스레드는 Foo 서비스의 서비스 태그를 갖게 됩니다.2
따라서 이 기술에서 Phant0m은 NtQueryInformationThread API를 사용하여 스레드의 TEB 주소를 가져오고 TEB에서 SubProcessTag를 읽어 이벤트 로그 서비스의 스레드를 감지합니다. 그런 다음 이벤트 로그 서비스와 관련된 스레드를 종료합니다. 이 기술의 코드는 technique_1.h 파일에 있습니다.
이 기술에서 Phant0m은 스레드와 연결된 DLL의 이름을 감지합니다. Windows 이벤트 로그 서비스는 wevtsvc.dll을 사용합니다. 전체 경로는 %WinDir%\System32\wevtsvc.dll입니다. 스레드가 해당 DLL을 사용하는 경우 Windows 이벤트 로그 서비스의 스레드이며 Phant0m이 스레드를 종료합니다. 이 기술의 코드는 technique_2.h 파일에 있습니다.
Phant0m은 독립 실행형 EXE와 리플렉티브 DLL로 모두 사용할 수 있습니다. Microsoft Visual Studio에서 프로젝트를 열고 설정(감지 및 종료 기술 선택)을 수행한 후 컴파일하십시오. 리플렉티브 DLL 버전을 Cobalt Strike와 함께 사용할 수도 있으며, 이를 위해 리포지토리에 Aggressor 스크립트 파일(phant0m.cna)이 있습니다.

Cobalt Strike용 Aggressor 스크립트(phant0m.cna)의 실행 유형에는 bdllspawn을 사용한 Fork 및 인젝트 방식이 사용되었습니다. Phant0m을 기존 프로세스에 인젝트하여 실행하려면 이 프로젝트(https://github.com/rxwx/cs-rdll-ipc-example)를 검토하고 쉽게 수행할 수 있습니다. 또한 코드를 DLL로 변환한 다음 Donut으로 셸코드로 변환할 수 있습니다.
참고: 이 프로젝트는 x64 아키텍처만 지원합니다.