
Fortinet fortimon3_74.sys 커널 드라이버 취약점을 악용하여 PPL을 우회하고 인증되지 않은 kill 명령으로 lsass.exe와 같은 보호된 프로세스를 종료하는 개념 증명(Proof-of-concept).
Fortinet의 fortimon3_74.sys 커널 드라이버(FortiClient의 "안티 익스플로잇" 미니필터)의 취약점으로 인해, 모든 로컬 관리자가 인증되지 않은 통신 포트에 8바이트 메시지를 전송하여 Windows Defender(MsMpEng.exe) 및 lsass.exe와 같은 PPL(Protected Process Light) 보호 프로세스를 포함한 모든 프로세스를 종료할 수 있습니다.
버퍼 오버플로우도 없습니다. 힙 스프레이도 없습니다. ROP 체인도 없습니다. 단지 8바이트뿐입니다.
| 필드 | 값 |
|---|---|
| 드라이버 | fortimon3_74.sys (FortiClient Anti-Exploit Minifilter) |
| 포트 | \Fortimon3FilterAntiExploitPort |
| 영향 | PPL 우회, 임의 프로세스 종료 |
| 접근 | 로컬 관리자 |
| 인증 | 없음 |
| BYOVD 위험 | 높음 - 드라이버가 Fortinet에 의해 서명됨 |
드라이버는 호출자 인증이 없는 미니필터 통신 포트를 노출합니다. 이는 간단한 8바이트 메시지를 수락합니다:
struct {
DWORD magic; // 0x6C6C696B ("kill" in little-endian ASCII)
DWORD pid; // Target process ID
};
이 메시지를 수신하면, 드라이버는 커널 모드에서 PROCESS_ALL_ACCESS로 ZwOpenProcess를 호출한 후(PPL 검사 우회), ZwTerminateProcess를 호출합니다. 호출자나 대상에 대한 검증은 수행되지 않습니다.
ZwOpenProcess 핸들은 호출자의 핸들 테이블에 생성되며(OBJ_KERNEL_HANDLE 플래그 누락), 이는 사용자 모드 공격자가 lsass.exe와 같은 PPL 보호 프로세스에 대해 PROCESS_ALL_ACCESS 핸들을 복제할 수 있는 짧은 창을 만들어 - 프로세스를 종료하지 않고도 자격 증명 탈취를 가능하게 합니다.
PROCESS_TERMINATE 대신 PROCESS_ALL_ACCESS 사용OBJ_KERNEL_HANDLE 플래그 누락으로 커널 핸들이 사용자 모드에 노출됨
전체 데모 보기 - 보호된 프로세스에 대한 PPL 우회를 보여줍니다.
| 파일 | 설명 |
|---|---|
poc.c | Proof of Concept - 취약한 드라이버를 통해 이름으로 모든 프로세스를 종료함 |
fortimon3_74.sys | 취약한 드라이버 바이너리 (Fortinet 서명됨) |
cl.exe poc.c /Fe:poc_kill.exe
poc_kill.exe MsMpEng.exe
필요 사항: 로컬 관리자 권한, fortimon3_74.sys 로드됨.
me1n
poc.jpg |
| 스크린샷 - lsass.exe 종료됨, 시스템 재시작 트리거됨 |
forti.mp4 | 익스플로잇의 비디오 데모 |