부록 1: 커널 디버깅 모드에서 Kernel-Mode 서명 확인 적용
커널 디버깅 모드에서 Kernel-Mode 서명 확인 적용
개발 및 테스트 중에 서명되지 않은 드라이버 설치에서 발췌한 내용:
경우에 따라 개발자는 커널 디버거가 연결될 때 로드 시간 서명 적용을 사용하도록 설정해야 할 수 있습니다. 예를 들어 드라이버 스택에 로드에 실패한 서명되지 않은 드라이버(예: 필터 드라이버)가 있는 경우 전체 스택이 무효화될 수 있습니다. 디버거를 연결하면 서명되지 않은 드라이버가 로드될 수 있으므로 디버거가 연결되는 즉시 문제가 사라지는 것처럼 보입니다. 이러한 유형의 문제를 디버깅하는 것은 어려울 수 있습니다.
이러한 상황을 쉽게 디버깅하기 위해 커널 모드 코드 서명 정책은 다음 레지스트리 값을 지원합니다.
HKLM\SYSTEM\CurrentControlSet\Control\CI\DebugFlags
이 레지스트리 값은 REG_DWORD 형식이며 다음 플래그 중 하나 이상의 비트 OR에 따라 값을 할당할 수 있습니다.
0x00000001
이 플래그 값은 드라이버가 서명되지 않은 경우 디버거에 침입하도록 커널을 구성합니다. 그런 다음 개발자 또는 테스터는 디버거 프롬프트에 g를 입력하여 서명되지 않은 드라이버를 로드하도록 선택할 수 있습니다.
0x00000010
이 플래그 값은 디버거의 존재를 무시하고 서명되지 않은 드라이버의 로드를 항상 차단하도록 커널을 구성합니다.
이 레지스트리 값이 레지스트리에 없거나 이전에 설명한 플래그를 기반으로 하지 않는 값이 있는 경우 커널은 드라이버 서명 여부에 관계없이 항상 커널 디버깅 모드로 드라이버를 로드합니다.
참고 이 레지스트리 값은 기본적으로 레지스트리에 없습니다. 커널 모드 서명 확인을 디버그하려면 값을 만들어야 합니다.