글의 어투로 보았을 떄, 약간 번역문으로 보이긴 합니다만,
Jeff님께서 Post하신 글을 가져온것이라, by Jeff로 씁니다. :)
Patch Guard 에 대한 소개 입니다.
1. 소개
MS 에서는 커널 이미지와 기타 시스템에 중요한 정보 혹은 undocumented된 내용을 3rd part 개발자들이 사용하여 제품을 만드는 것을 허용하고 있었습니다. 그러나 요즘은 해당 기능을 사용하는 악성코드들이 많이 나오고 3rd part 개발자들이 코드를 잘못 작성하여 BSOD 가 발생하는등 OS 의 안정성에 영향을 주고 있습니다.
MS 에서는 이를 해결하고자 patch guard 라는 것을 만들었고 X64 system 에 적용 하였습니다. (X86 의 경우 많은 제품에 영향을 줄 수 있으므로 아직 시장에 많이 설치되어 있지 않은 X64 부터 적용한다고 합니다.)
2. 기능
- System images
이것은 ntoskrnl.exe, ndis.sys, hal.dll 이미지에 대하여 파일에 대한 이미지에 대한 보호
이 보호는 코드, 임포트, 익스포트 테이블에 대한 체크섬 검사가 이루어 짐으로써
수행됩니다.
- SSDT (System Service Descriptor Table)
가장 널리사용되는 후킹 방법으로이 녀석에 대해서는 windows의 커널이 아닌 다른
녀석의 메모리가 매핑 되면 안되는 형태로 수행합니다.
- Processor MSRs (syscall), GDT, IDT
이러한 디스크럽터 테이블에 대한 보호를 수행하여 다른 녀석들이 후킹을 못하게
합니다.
3. 원리
Patch Guard 는 Boot 시점에 KeInitSystem 의 일부로 동작하고 KiDevide6432 를
시작점으로 합니다.
KiDevide6432 는 별다른 문제가 없는 코드로 위장을 하여 Devide error 를 발생시켜
exception handler 에서 초기화를 수행하도록 되어 있습니다.
Patch Guard 에서 사용하는 메모리 들은 random 한 tag 값을 가지게 하여
Irp, Ntfs 등 다양한 Tag 값을 가지게 됩니다.
Checksum 검사 루틴은 Timer 를 사용하여 DPC 를 발생시키고 DPC 루틴 안에서
General Protection
Fault 를 발생시켜 검사를 수행하게 됩니다. 검사결과 문제가 발생한
다면 KeBugCheckEx 109 가 발생하게 됩니다.
4. 문제점
MS 에서 Kernel 을 보호 할 수 있는 방법들을 만들어 내었으나 보호 방법들에
사용된 기술 역시 kernel mode code 이므로 이를 회피하는 방법은 존재합니다.
악성 코드들은 이러한 틈을 이용할 것이고 MS 에서는 패치를 통해서 이를
해결하고자 할것입니다.. 보안업체의 관점에서 본다면 해당 Hook 을 사용해서
만든 보안제품의 전체적인 구조를 다시 한번 생각해 봐야 할것입니다.
Posted by Dual



