메모리레인저로 윈도우 커널 파일 객체 탈취 방지

메모리레인저로 윈도우 커널 파일 객체 탈취 방지
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

본 논문은 Windows 10 1809 x64에서 동적 할당된 FILE_OBJECT 구조를 패치해 배타적 모드 파일 접근을 우회하는 공격을 실증하고, 하이퍼바이저 기반 메모리 격리 솔루션인 MemoryRanger가 커널 드라이버를 별도 메모리 엔클레이브에서 실행시켜 이러한 공격을 효과적으로 차단함을 보여준다.

상세 분석

윈도우 커널은 프로세스와 파일 시스템을 관리하는 핵심 데이터 구조인 FILE_OBJECT 를 통해 파일에 대한 접근 권한을 제어한다. 일반적인 보안 메커니즘은 파일을 배타적(Exclusive) 모드로 열면 다른 프로세스가 동일 파일에 접근하려 할 때 I/O 매니저가 ACCESS_DENIED 오류를 반환하도록 설계되어 있다. 그러나 FILE_OBJECT 는 커널 힙에 동적으로 할당되며, 포인터와 플래그 필드가 메모리 상에 노출된 상태로 존재한다. 공격자는 악성 커널 모드 드라이버를 로드한 뒤, 해당 구조체의 Flags 혹은 FileName 필드를 직접 수정함으로써 운영체제의 검증 로직을 우회할 수 있다. 논문은 이러한 공격 흐름을 단계별로 재현하였다. 먼저, 목표 파일을 CreateFileW 로 배타적 모드(OPEN_EXCLUSIVE)로 열고, 정상적인 프로세스가 파일을 점유하도록 만든다. 이후 악성 드라이버는 ObReferenceObjectByHandle 로 파일 핸들의 FILE_OBJECT 를 획득하고, MDL(Memory Descriptor List)을 이용해 물리 메모리 페이지에 매핑한다. 그 다음, 페이지 보호 비트를 RWX 로 변경하고, FILE_OBJECTFlags 에서 FO_EXCLUSIVE 비트를 클리어한다. 결과적으로, 다른 프로세스는 동일 파일에 대해 정상적인 READ/WRITE 접근이 가능해지며, 이는 기존 보안 정책을 무력화한다.

이러한 공격은 전통적인 안티-루트킷이나 코드 서명 검증을 회피할 수 있다. 왜냐하면 공격자는 합법적인 드라이버 서명을 이용하거나, 이미 신뢰된 드라이버에 취약점(예: IOCTL 버퍼 오버플로우)을 삽입해 메모리 조작 권한을 얻기 때문이다. 따라서 커널 메모리 무결성을 보장하는 새로운 방어 체계가 필요하다.

MemoryRanger는 하이퍼바이저 레벨에서 동작하는 메모리 격리 프레임워크로, 각 커널 모듈(드라이버)을 독립된 메모리 엔클레이브에 배치한다. 하이퍼바이저는 VT‑x/AMD‑V 확장을 활용해 EPT(Extended Page Tables) 를 조작, 특정 드라이버가 접근 가능한 물리 페이지 집합을 제한한다. 결과적으로, 악성 드라이버는 자신이 할당받은 엔클레이브 외부의 FILE_OBJECT 구조체에 직접 접근하거나 수정할 수 없게 된다. 논문은 MemoryRanger를 적용한 실험 환경에서 동일한 FILE_OBJECT 패치 공격을 시도했을 때, EPT 보호로 인해 페이지 매핑이 실패하고, 커널 패닉 없이 공격이 차단되는 것을 확인하였다. 또한, 정상적인 드라이버는 기존 API를 통해 파일을 열고 읽는 데 전혀 지장이 없으며, 성능 오버헤드는 평균 2~3% 수준에 머물렀다.

핵심 인사이트는 다음과 같다. 첫째, 커널 객체의 동적 할당 특성은 메모리 무결성 검증을 어렵게 만든다. 둘째, 기존 OS 수준의 권한 검사는 객체 내부 플래그를 조작하면 무력화될 수 있다. 셋째, 하이퍼바이저 기반 메모리 격리(EPT 기반 접근 제어)는 커널 모듈 간 메모리 경계를 강제함으로써 객체 조작을 근본적으로 차단한다. 넷째, MemoryRanger와 같은 솔루션은 기존 드라이버 호환성을 유지하면서도 실시간 보호를 제공한다는 점에서 실용성이 높다.


댓글 및 학술 토론

Loading comments...

의견 남기기