[ 메모리 접근 검사 ]
[ 디스크립터(세그먼트) 검사 ]
- GDT의 Segment Descriptor검사 <- DPL(Descriptor Privilege Level)
- 해당 메모리에 접근하기 위한 링 레벨 값(0~3) 정의.
* 윈도우는 실제적으로 디스크립터 검사를 이용하지 않음
[ 페이지 디렉토리 검사 ]
- 메모리 페이지(페이지 테이블)의 모든 user/supervisor bit를 검사
- bit값이 0이면 관리자 권한(링0,1,2)를 가진 프로그램만 접근
- bit값이 1이면 모든 프로그램이 해당 메모리 페이지 영역에 접근
[ 페이지 검사 ]
- "페이지 디렉토리 검사" 후 접근하고자 하는 메모리 페이지를 각각 검사.
- 페이지 디렉토리와 동이하게 user/supervisor bit 검사.
[ 페이지-디렉토리 엔트리 ]
[*] CR3 레지스터는 페이지 디렉토리의 베이스 주소를 기리킨다. (CR3는 프로세스별로 존재)
- U비트(2번째 비트) : 0이면 해당 페이지 테이블은 커널에 의해서만 접근 가능.
- W비트(1번째 비트) : 0이면 해당 메모리 영역은 읽기 전용 영역.
==> 해당 페이지 테이블 전체에 적용되는 속성
[ 페이지-테이블 엔트리 ]
- 하나의 메모리 페이지에 대응.
- U비트(2번째 비트) : 0이면 해당 페이지는 커널에 의해서만 접근 가능.
- W비트(1번째 비트) : 0이면 해당 메모리 영역은 읽기 전용 영역.
- P비트(0번째 비트) : 0이면 해당 메모리 페이지는 현재 디스크로 페이지 아웃됨. <- 물리 메모리상에 존재하지 않음
윈도우XP 이상에서 SSDT와 IDT가 속한 메모리는 읽기 전용 속성이다.
아래와 같이 레지스트리 변경 및 추가
HKLM\SYSTEM\CurrentControlSet\Control|Session Manager\Memory Management\EnforceWriteProtection = 0
HKLM\SYSTEM\CurrentControlSet\Control|Session Manager\Memory Management\DisablePagingExecutive = 1
'Programming > WDK' 카테고리의 다른 글
SSDT 후킹 (0) | 2014.02.22 |
---|---|
가상주소-선형주소-물리주소 변환 (0) | 2014.01.25 |
WDK빌드 환경 ( + Visual Studio ) (0) | 2014.01.13 |