
VAD를 활용하고 로드된 드라이버를 숨기는 드라이버 기반 Windows 10 DLL 인젝터
드라이버 DLL 인젝터 설명
Driver DLL Injector는 사용자가 선호하는 매퍼를 사용하여 원하는 드라이버를 로드할 수 있게 해주는 강력한 도구입니다. KDmapper와 같은 서명되지 않은 드라이버 로더의 기능을 활용하여, 이 인젝터는 Windows 10 2004 x64 프로세스를 대상으로 빌드 및 테스트되었습니다.
드라이버는 사용자 모드 프로세스와 통신하기 위해 xKdEnumerateDebuggingDevices로 알려진 패치 가드에 안전한 함수를 후킹합니다. 이 방법은 널리 알려진 안티치트에 고도로 탐지되므로, 한 단계 더 나아가 커널에서 사용자 모드 스레드를 트랩하여 원래 함수 주소를 복원함으로써 함수 무결성 검사를 우회하며 통신합니다.
드라이버는 남겨진 흔적을 숨기기 위해 다음을 수행합니다:
VAD 조작: 드라이버는 널리 알려지지 않은 문서화되지 않은 VAD(Virtual Address Descriptor) 함수들(예: MiInsertChange, MiAllocVad)을 활용하여 "스레드 스택" 뒤에 전략적으로 메모리를 할당합니다. VAD가 할당되고 DLL이 성공적으로 로드되면 드라이버는 VAD 트리에서 VAD를 제거합니다.
PTE 조작: NtQueryVirtualMemory의 검사를 우회하기 위해 드라이버는 PTE(Page Table Entry)를 조작하여 VAD가 할당한 페이지가 실행 가능하도록 만듭니다. PTE를 수정함으로써 드라이버는 VAD가 실행(X) 비트가 활성화된 상태로 업데이트되지 않도록 하여 잠재적 제한을 우회합니다.
PiDDBCacheTable, MmUnloadedDrivers(해시 버킷 목록) 지우기.
드라이버에 어떤 수동 매퍼를 사용하는지에 따라 big pools도 고려해야 합니다.
사용자 모드 프로세스는 Discord의 오버레이를 활용하여 DLL main 함수를 호출합니다.
사용자 모드 프로세스는 다음을 수행합니다:
Driver DLL Injector를 사용하려면 다음 단계를 따르세요:
1. KDmapper와 같은 호환 가능한 매퍼를 선택하고 설치하세요.
2. Driver DLL Injector 프로젝트를 컴파일하거나 빌드하세요.
3. 선택한 매퍼를 사용하여 드라이버를 로드하세요.
4. 테스트 애플리케이션을 실행하세요(Discord 오버레이 활성화 상태로).
5. 사용자 모드 애플리케이션을 실행하고 Hello World 메시지 상자를 기다리세요.
이 프로젝트를 만들면서 여러 장애물이 있었습니다. 그중 일부는 다음과 같습니다:
/sdl-, /GS-를 설정하고 런타임 라이브러리를 /MT로 설정하여 충돌 문제를 해결했습니다.KMODE_EXCEPTION BSOD가 발생했습니다. 드라이버 속성 /GS-를 설정하여 해결했습니다.ModMap - VAD 조작을 보여준 점
SkCrypt - 암호화
Stealthy Kernel Mode Injector - 드라이버 베이스
Poseidon - 커널 영역에서 um 스레드를 트랩한 점
FACE INJECTOR - 셸코드