Windows Vista를 실행하는 시스템의 커널 모듈에 대한 디지털 서명
Microsoft Corporation
업데이트 날짜: 2007년 6월
적용 대상:
Windows Vista
Windows Server 2008
요약: Microsoft Windows Vista 이상 버전의 Windows 운영 체제 제품군의 경우 커널 모드 소프트웨어에는 x64 기반 컴퓨터 시스템에 로드할 디지털 서명이 있어야 합니다. Windows Vista용 커널 모드 소프트웨어에 대한 서명 프로세스를 관리하는 방법을 알아봅니다. (22페이지 인쇄).
이 문서의 현재 버전은 웹에서 유지 관리됩니다 https://www.microsoft.com/whdc/system/platform/64bit/kmsigning.mspx.
콘텐츠
소개
모범 사례로서의 디지털 서명
커널 모드 코드 서명 옵션
커널 모드 코드 서명 프로세스
SPC(소프트웨어 게시 인증서)를 가져오는 방법
서명된 .cat 파일 만들기
드라이버 이미지 파일에 포함된 서명 추가
개발 중에 서명 적용을 사용하지 않도록 설정하는 방법
테스트 서명을 사용하는 방법
테스트 서명 사용 문제 해결
드라이버 로드 오류 검색
코드 무결성 진단 시스템 로그 이벤트 사용
드라이버 확인 디버깅 옵션
리소스
소개
전 세계 Windows의 소비자 및 엔터프라이즈 사용자 모두에게 개인 및 회사 데이터를 보호하는 것이 가장 중요한 관심사입니다. Microsoft는 악성 소프트웨어의 확산을 제한하는 새로운 방법을 구현하기 위해 최선을 다하고 있습니다. 커널 모드 소프트웨어에 대한 디지털 서명은 컴퓨터 시스템의 보안을 보장하는 중요한 방법입니다.
디지털 서명을 사용하면 Windows 기반 소프트웨어를 설치하는 관리자 또는 최종 사용자가 합법적인 게시자가 소프트웨어 패키지를 제공했는지 여부를 알 수 있습니다. 사용자가 오류 또는 기타 오류가 발생한 후 Microsoft에 Windows 오류 보고 데이터를 보내도록 선택하는 경우 Microsoft는 데이터를 분석하여 오류 발생 시 시스템에서 실행 중인 게시자의 소프트웨어를 알 수 있습니다. 그런 다음 소프트웨어 게시자는 Microsoft에서 제공하는 정보를 사용하여 소프트웨어에서 문제를 찾고 해결할 수 있습니다.
Windows Vista는 커널 모드 코드의 디지털 서명을 사용하여 Microsoft Windows 플랫폼의 안전성과 안정성을 높이고 차세대 프리미엄 콘텐츠로 새로운 고객 환경을 구현합니다.
- 보호된 콘텐츠를 스트리밍하는 디바이스에 대해 드라이버에 서명해야 합니다. 여기에는 PUMA(보호된 사용자 모드 오디오) 및 PAP(보호된 오디오 경로)를 사용하는 오디오 드라이버와 보호된 PVP-OPM(비디오 경로 출력 보호 관리) 명령을 처리하는 비디오 디바이스 드라이버가 포함됩니다.
- 서명되지 않은 커널 모드 소프트웨어는 로드되지 않으며 x64 기반 시스템에서 실행되지 않습니다.
참고: 관리자 권한이 있는 사용자도 x64 기반 시스템에서 서명되지 않은 커널 모드 코드를 로드할 수 없습니다. 이는 디바이스 드라이버, 필터 드라이버 및 커널 서비스를 포함하여 커널 모드로 로드되는 모든 소프트웨어 모듈에 적용됩니다.
새 커널 모드 코드 서명 정책의 scope 훨씬 더 많이 도달했습니다. 커널 모드 소프트웨어를 게시하는 개발자의 경우 이 정책에는 다음과 같은 효과가 있습니다.
아직 서명되지 않은 커널 모드 구성 요소의 경우 게시자는 SPC(소프트웨어 게시 인증서)를 가져와서 SPC를 사용하여 Windows Vista를 실행하는 x64 기반 컴퓨터 시스템에서 실행되는 모든 64비트 커널 모드 소프트웨어에 서명해야 합니다. 여기에는 커널 모드 서비스 소프트웨어가 포함됩니다.
Windows 로고 프로그램을 통해 이미 서명된 64비트 디바이스 드라이버 또는 기타 커널 모드 소프트웨어를 제공하는 게시자는 WHQL(Windows Hardware Quality Labs) 서명으로 서명된 드라이버 카탈로그를 갖게 됩니다. WHQL에 제출하기 전에 드라이버 패키지를 완전히 테스트하려면 SPC를 사용하여 드라이버 카탈로그에 서명합니다.
부팅 시작 드라이버의 특수한 경우 최적의 시스템 부팅 성능을 위해 SPC를 사용하여 드라이버 이진 이미지 파일에 서명해야 합니다.
참고 드라이버는 Windows Vista 운영 체제 로더에 의해 로드되는 경우 부팅 시작이라고 합니다. 부팅 시작 드라이버는 다음과 같이 식별할 수 있습니다. 드라이버 INF는 시작 형식을 "Start=0"으로 지정하거나 커널 서비스가 ServiceType을 커널 드라이버 또는 파일 시스템 드라이버로 구성하고 StartMode를 "부팅"으로 구성합니다.
필수 커널 모드 코드 서명 정책은 Windows Vista를 실행하는 x64 기반 시스템의 모든 커널 모드 소프트웨어에 적용됩니다. 그러나 Microsoft는 퍼블리셔가 32비트 및 64비트 플랫폼 모두에 대한 디바이스 드라이버를 포함하여 모든 소프트웨어에 디지털 서명하도록 권장합니다. Windows Vista는 x86 시스템에서 커널 모드 서명 확인을 수행하여 보호된 미디어 콘텐츠를 지원합니다. 그러나 커널 모드 드라이버 서명은 32비트 시스템에 필수는 아닙니다.
이 문서에서는 SPC(소프트웨어 게시 인증서)를 가져오는 방법, 키 보호 지침, WDK(Windows 드라이버 키트)에 제공된 도구를 사용하여 드라이버 패키지에 서명하는 방법을 포함하여 Windows Vista용 커널 모드 코드에 대한 서명 프로세스를 관리하는 방법을 설명합니다.
모범 사례로서의 디지털 서명
Windows 98 출시 이후 Microsoft는 드라이버 안정성을 높이고, 더 나은 사용자 환경을 제공하고, 소프트웨어 및 하드웨어 공급업체에 대한 지원 비용을 절감하고, 고객의 총 소유 비용을 낮추기 위한 메커니즘으로 지정된 디바이스 클래스에 대한 드라이버 서명을 승격했습니다.
디바이스 드라이버 및 기타 커널 모드 소프트웨어의 경우 Windows 로고 프로그램의 일부로 서명된 드라이버는 소프트웨어의 품질에 대한 최종 사용자의 신뢰를 높이고 사용자 환경을 개선합니다. 드라이버에 속한 Windows 로고는 드라이버가 테스트되었음을 나타내고 Windows 로고와 함께 제공되는 디지털 서명이 테스트 이후 변경되지 않았기 때문입니다.
대부분의 커널 모드 드라이버 패키지의 경우 서명된 카탈로그(.cat) 파일에 디지털 서명이 제공됩니다. WHQL(Windows Hardware Quality Labs)은 Windows 로고 프로그램의 요구 사항을 충족하는 드라이버 패키지와 함께 배포할 Microsoft 서명 .cat 파일을 제공합니다.
서명된 커널 모드 소프트웨어를 만드는 프로세스는 고유하지만 관련된 두 가지 활동으로 구성됩니다. 일반적으로 소프트웨어는 개발 프로세스에서 비교적 늦게까지 서명할 필요가 없으므로 병렬로 수행할 수 있습니다.
서명 프로세스 관리. 이는 일반적으로 게시자의 프로그램 관리 및 소프트웨어 릴리스 서비스에서 처리되며 다음을 포함합니다.
- 적절한 서명 옵션을 선택합니다.
- 필요한 인증서를 가져옵니다.
- 디지털 서명 또는 코드 서명 키 관리
참고 이미지 이진 파일 또는 카탈로그에 디지털 서명하려면 소프트웨어 게시자에 인증된 코드 서명 키가 있어야 합니다. 즉, 인증 기관에서 게시자의 ID를 충분히 설정했음을 의미합니다.
서명할 드라이버 구현 이는 일반적으로 게시자의 개발 팀에서 처리하며 다음을 포함합니다.
- 드라이버 자체를 구현합니다.
- 내부 테스트 또는 릴리스를 위한 서명된 드라이버 패키지 만들기
이러한 프로세스는 WDK 및 플랫폼 SDK의 이전 버전의 Windows에 대해 문서화되어 있습니다. 이 문서에서는 Windows Vista에 대한 커널 모드 코드 서명과 관련된 추가 옵션을 설명합니다.
커널 모드 코드 서명 옵션
Windows Vista에서 KMCS(커널 모드 코드 서명) 요구 사항을 사용하는 데 사용할 수 있는 여러 옵션이 있습니다. 커널 모드 코드를 개발하는 동안 Windows Vista에서 드라이버를 로드하려면 드라이버 파일에 서명할 필요가 없습니다. 대신 개발자는 메커니즘 중 하나를 사용하여 개발 및 비자동 테스트 시스템에서 커널의 부하 시간 검사를 일시적으로 사용하지 않도록 설정할 수 있습니다. 그러나 드라이버 설치 팝업 없이 테스트 시스템에 드라이버 패키지 설치를 자동화하려면 드라이버 패키지의 테스트 서명이 필요합니다. DMI(드라이버 관리 인프라)는 설치 중에 드라이버 패키지 서명을 확인하고 서명되지 않은 드라이버의 사용자에게 경고합니다.
다음 표에서는 Windows Vista에서 지원하는 커널 모듈을 디지털 서명하는 옵션을 비교합니다.
커널 모듈 서명 옵션
서명 옵션 | 로고 요구 사항을 충족하도록 확인된 기능 | ID 확인됨 | 의도한 사용 |
---|---|---|---|
Windows 로고 프로그램 | Yes | Yes | Release |
SPC를 사용하여 커널 모드 코드 서명 | 예 | 예 | Release |
WHQL 테스트 서명 프로그램 | 예 | 예 | 테스트 |
KMCS 테스트 서명 | 예 | 예 | 테스트 |
Windows 로고 프로그램은 올바른 드라이버 기능을 확인하고 높은 품질과 안정성을 보장합니다. Windows 로고 프로그램에 제출된 드라이버 패키지는 Microsoft에서 디지털 서명합니다. Windows 로고 프로그램은 Windows 로고 요구 사항을 충족하는 하드웨어용 INF 파일을 통해 설치된 디바이스 패키지를 허용합니다. 드라이버 게시자는 Windows 로고 프로그램에 대한 드라이버 확인 테스트를 완료한 후 드라이버 패키지를 제출합니다. 로고에 적합한 드라이버는 Microsoft 서명 .cat 파일을 받습니다. Windows 로고 프로그램에 대한 자세한 내용은 이 문서의 끝에 있는 리소스 섹션을 참조하세요.
개발자는 드라이버가 올바르게 로드되고 작동하는지 확인하기 위해 WHQL에 제출하기 전에 테스트를 위해 SPC를 사용하여 드라이버 이미지 파일 또는 드라이버 카탈로그에 서명할 수 있습니다.
SPC를 사용한 커널 모드 코드 서명은 Windows Vista에 로드되는 커널 모듈 게시자의 식별 가능성을 제공합니다. 커널 모듈의 기능 또는 안정성에 대한 인증 수준을 제공하지 않습니다. Windows 로고에 적합하지 않거나 Windows 로고가 제품 요구 사항 중 하나가 아닌 드라이버의 경우 게시자는 드라이버 패키지에 대한 .cat 파일을 만들고 게시자의 SPC로 서명할 수 있습니다.
중요 커널 모드 코드 서명은 WHQL 프로그램을 대체하지 않습니다. Microsoft는 게시자가 Windows 로고 프로그램을 사용하여 드라이버 품질을 보장하도록 권장합니다. 커널 모드 코드 서명은 소프트웨어 게시자가 WHQL과 관련된 Windows 로고 프로그램 테스트 요구 사항을 통과할 필요가 없습니다.
서명된 .cat 파일은 Windows Vista 부팅 로더에 의해 로드되는 드라이버가 포함된 패키지를 제외하고 대부분의 드라이버 패키지가 x64 시스템에 올바르게 설치 및 로드하는 데 필요한 모든 파일입니다. Windows Vista 부팅 로더에 의해 로드되는 디바이스 드라이버가 포함된 드라이버 패키지는 다음 두 가지 방법으로 서명해야 합니다.
- 부팅 시 로드되는 커널 모드 드라이버 이진 파일에는 SPC로 서명된 이진 파일에 포함된 서명이 있어야 합니다. 간단히 하기 위해 패키지의 모든 드라이버 이미지 파일을 포함하는 것이 더 쉬울 수 있습니다.
- INF 파일을 사용하여 설치된 드라이버 패키지에는 설치 중에 서명 확인을 위해 부팅 시작 드라이버가 포함되지 않은 드라이버 패키지와 마찬가지로 서명된 카탈로그 파일도 있어야 합니다.
제조업체는 하드웨어 공급업체가 SPC를 획득하고 제조업체가 설치한 시스템에 설치될 부팅 시작 드라이버에 서명해야 합니다.
개발 주기 동안 테스트를 위해 릴리스 인증서로 서명하는 대신 "테스트" 인증서를 사용하는 코드 서명이 권장됩니다. 테스트 서명된 이진 파일은 테스트 서명 인증서 사용을 허용하는 부팅 구성 옵션을 사용하는 경우에만 Windows Vista 시스템에서 인식됩니다. 테스트 서명은 기본적으로 사용하도록 설정되지 않으며 대부분의 Windows Vista 시스템에서 테스트 서명을 신뢰할 수 없습니다.
WHQL 테스트 서명 프로그램은 테스트 서명에도 지원됩니다. 프로그램의 참가자는 WHQL 테스트 서명을 위해 드라이버 패키지를 제출할 수 있습니다. 테스트 서명된 카탈로그의 서명은 Microsoft 테스트 루트 기관에서 발급한 인증서에 의해 생성됩니다. Windows Vista 부팅 구성 설정에서 테스트 서명을 사용하도록 설정하면 Microsoft Test Root Authority가 허용됩니다. WHQL 테스트 서명 프로그램에 대한 자세한 내용은 이 문서의 끝에 있는 리소스 섹션을 참조하세요.
"테스트" 및 "릴리스" 서명의 경우 개발 팀은 이 문서의 뒷부분에 있는 코드 서명 키 보호 지침에 설명된 대로 키 관리에 대한 모범 사례를 따라야 합니다.
테스트 서명은 이 문서의 뒷부분에 있는 테스트 서명을 사용하는 방법 섹션에서 자세히 설명합니다.
커널 모드 코드 서명 프로세스
커널 모드 이미지 파일 또는 카탈로그에 디지털 서명하면 서명된 파일 또는 파일의 무결성이 설정됩니다. 코드 서명 작업을 수행한 후에는 소프트웨어 모듈을 수정해서는 안 됩니다. 코드 서명 후 이미지 파일을 수정하면 설치 시간 및 로드 시간 서명 확인 실패가 발생합니다.
여러 파일이 포함된 드라이버 패키지는 카탈로그를 사용하여 서명할 수 있습니다. 드라이버 패키지에는 드라이버 패키지가 설치될 때 게시자를 식별하고 커널에 로드될 때 드라이버 이미지를 확인하는 데 사용되는 서명된 카탈로그(.cat) 파일이 있어야 합니다. 카탈로그 파일에는 게시자를 식별하는 디지털 인증서와 패키지의 파일이 변경되지 않은지 시스템이 확인할 수 있는 패키지 내용의 해시가 포함되어 있습니다.
앞에서 설명한 것처럼 부팅 시작 드라이버에는 드라이버 이미지 파일에 포함된 서명이 있어야 합니다. 부팅 시작 드라이버 이미지 파일의 포함된 서명은 운영 체제 로더가 드라이버 서명을 확인할 때 appropriate.cat 파일을 찾을 필요가 없도록 하여 운영 체제 부팅 성능을 최적화합니다.
드라이버 개발 프로세스 중에 모든 빌드에 드라이버 서명이 필요하지는 않습니다. 개발자는 이 문서의 뒷부분에 있는 개발 중에 서명 적용을 사용하지 않도록 설정하는 방법에 설명된 대로 드라이버 서명 적용을 사용하지 않도록 설정할 수 있습니다.
다음 섹션에서는 인증서를 가져오고 관리하는 방법을 설명합니다. 드라이버 패키지 서명의 메커니즘은 이 문서의 뒷부분에서 설명합니다.
SPC(소프트웨어 게시 인증서)를 가져오는 방법
다음 단계를 사용하여 필수 커널 모드 코드 서명 정책을 충족하는 커널 모드 소프트웨어에 서명하기 위한 SPC를 가져옵니다.
- 커널 모드 코드 서명에 디지털 인증서를 발급하는 상용 CA에서 SPC를 가져옵니다. 커널 모드 코드 서명에 사용할 수 있는 소프트웨어 게시 인증서(또는 코드 서명 인증서)를 제공하는 CA 목록은 Windows Vista 커널 모드 코드 서명 웹 페이지의 Microsoft 교차 인증서 에서 사용할 수 있습니다.
- SPC를 발급한 루트 인증 기관의 Windows Vista 커널 모드 코드 서명 웹 페이지에 대한 Microsoft 교차 인증서에서 해당 교차 인증서를 다운로드합니다. 교차 인증서는 커널 모드 코드의 디지털 서명에 사용되므로 Windows Vista 커널에 알려진 신뢰할 수 있는 루트 기관까지 서명을 확인할 수 있습니다.
상용 CA에서 소프트웨어 게시 인증서를 요청하는 경우 프라이빗 키를 사용하여 코드에 서명할 컴퓨터에 코드 서명 인증서를 획득하고 설치하는 방법에 대한 CA 웹 사이트의 지침을 따릅니다.
코드 서명 키를 보호하기 위한 지침
코드 서명 프로세스의 핵심인 암호화 키는 모든 회사에서 가장 중요한 자산과 동일한 관리로 잘 보호되고 처리되어야 합니다. 이러한 키는 회사 ID를 나타냅니다. 이러한 키로 서명된 모든 코드는 회사에 추적할 수 있는 유효한 디지털 서명이 포함된 것처럼 Windows에 표시됩니다. 키를 도난당한 경우 악의적인 코드에 부정하게 서명하는 데 사용할 수 있으며 합법적인 게시자에서 온 것으로 보이는 트로이 목마 또는 바이러스가 포함된 코드가 배달될 수 있습니다.
프라이빗 키 보호에 대한 자세한 내용은 코드 서명 모범 사례를 참조하세요.
커널 모드 코드 서명과 함께 인증서 간 사용
커널 모드 코드 서명은 코드 서명 프로세스의 일부로 인증서 간을 사용합니다. 교차 인증서는 한 CA(인증 기관)에서 발급한 X.509 인증서로, 다른 인증 기관의 루트 인증서에 대한 공개 키에 서명합니다. Windows Vista 운영 체제 로더 및 커널은 드라이버 서명을 확인할 때 인증서 간을 인식합니다. 인증서 간을 사용하면 커널에 신뢰할 수 있는 단일 Microsoft 루트 권한이 있을 수 있지만 소프트웨어 게시자 인증서를 발급하는 여러 상용 CA로 신뢰 체인을 확장할 수 있는 유연성도 제공합니다.
교차 인증서를 사용하면 개발자와 게시자가 소프트웨어 게시자 인증서를 사용하여 커널 모드 소프트웨어에 서명할 수 있습니다. 커널 모드 코드 서명을 사용하는 개발자는 디지털 서명 작업이 수행되는 시스템에 올바른 인증서 간(.cer) 파일을 다운로드합니다. 게시자는 인증서 간 파일을 소프트웨어 또는 드라이버 패키지와 함께 배포할 필요가 없습니다. 교차 인증서는 드라이버 이미지 파일 또는 드라이버 패키지 카탈로그의 디지털 서명에 포함됩니다. 드라이버 패키지를 설치하는 사용자는 Windows Vista에 대한 구성 단계를 수행하여 인증서 간을 포함하는 디지털 서명을 확인할 필요가 없습니다.
중요 Windows Vista Beta2 WDK의 SignTool은 현재 디지털 서명에 인증서 간 추가를 지원하는 유일한 SignTool 버전입니다. Windows Server 2003 Platform SDK 또는 DDK의 이전 버전의 SignTool은 인증서 간 추가를 지원하지 않습니다.
커널 모드 코드 서명에 사용할 여러 CA에 대한 교차 인증서는 Microsoft WHDC 웹 사이트에서 다운로드할 수 있습니다. 자세한 내용은 이 문서의 끝에 있는 리소스에서 Windows Vista 커널 모드 코드 서명을 위한 Microsoft 교차 인증서 를 참조하세요.
디지털 서명에 인증서 간을 추가하는 방법에 대한 자세한 내용은 .cat 파일에 서명하는 방법 및 드라이버 이미지 파일에 포함된 서명 추가 섹션에 설명되어 있습니다.
테스트 인증서 생성
테스트 인증서는 organization 외부 배포 또는 릴리스용이 아닌 테스트 서명 커널 모드 소프트웨어 모듈을 위해 SPC 대신 사용됩니다. 테스트 서명은 내부 테스트 목적으로 사용되는 커널 모드 이진 파일 또는 드라이버 패키지 카탈로그에 디지털 서명을 적용합니다. 테스트 서명은 이 문서의 뒷부분에 있는 테스트 서명을 사용하는 방법 섹션에서 자세히 설명합니다. 커널 모드 코드 서명에 테스트 인증서를 사용하는 경우 인증서 간이 필요하지 않습니다.
테스트 인증서는 엔터프라이즈 CA를 사용하거나 Makecert 유틸리티를 사용하여 생성할 수 있습니다. organization 내에서 테스트 서명 인증서를 발급하기 위해 엔터프라이즈 CA를 사용하는 방법에 대한 자세한 내용은 코드 서명 모범 사례를 참조하세요.
다음 예제에서 Makecert는 기본 테스트 루트에서 발급한 테스트 인증서를 생성하고, 키 컨테이너에 프라이빗 키를 저장하고, 인증서 저장소 및 인증서 파일에 인증서를 출력합니다.
Makecert –r –pe –ss SubjectCertStoreName –n "CN= CertName" OutputFile.cer
예제에서 Makecert에 대한 인수는 다음을 수행합니다.
-
-r
자체 서명된 인증서를 만듭니다. 즉, 인증서는 루트 인증서입니다. -
-Pe
인증서와 연결된 프라이빗 키를 내보낼 수 있도록 합니다. -
-ssSubjectCertStoreName
루트 인증서를 포함하는 인증서 저장소의 이름을 지정합니다. - **-n "CN=**CertName"
인증서의 이름을 지정합니다. 인증서 이름을 제공하지 않으면 인증서의 기본 이름은 "Joe's Software Emporium"입니다. -
OutputFile.cer
루트 인증서가 저장되는 파일의 이름입니다.
makecert를 사용하는 예제 명령 스크립트는 WDK에서 사용할 수 있습니다. 스크립트 파일 이름은 "bin\selfsign" 디렉터리 아래에 있는 selfsign_example.txt. 드라이버 패키지를 설치하려면 먼저 대상 테스트 컴퓨터의 인증서 저장소에 테스트 인증서를 추가해야 합니다.
다음 예제에서는 대상 테스트 컴퓨터의 신뢰할 수 있는 루트 저장소 및 신뢰할 수 있는 게시자 저장소에 테스트 인증서를 추가하는 방법을 보여 줍니다.
certmgr.exe -add OutputFile.cer -s -r localMachine root
certmgr.exe -add OutputFile.cer -s -r localMachine trustedpublisher
예제에서 Certmgr에 대한 인수는 다음을 수행합니다.
-
-추가
인증서 파일의 인증서를 인증서 저장소에 추가합니다. -
-s
인증서 저장소가 시스템 저장소임을 나타냅니다. -
-r
시스템 저장소의 레지스트리 위치가 HKEY_LOCAL_MACHINE 키 아래에 있음을 나타냅니다. -
루트 또는 신뢰할 수 있는 게시자
시스템 인증서 저장소의 이름을 나타냅니다.
Certmgr 및 Makecert에 대한 자세한 내용은 이 문서의 끝에 있는 리소스를 참조하세요.
서명된 .cat 파일 만들기
카탈로그 파일 MakeCat 및 SignTool을 생성하고 서명하는 데 사용되는 도구는 Windows Vista WDK에 제공됩니다.
참고 Signtool.exe 및 MakeCat.exe WDK의 "bin\selfsign" 디렉터리에 있습니다.
.cat 파일을 만드는 방법
디지털 서명된 .cat 파일에는 커널에 로드될 때 확인되는 모든 커널 모드 모듈의 해시가 포함되어 있습니다. 카탈로그 파일에는 사용자 모드 애플리케이션 프로그램(.exes) 및 애플리케이션 확장 프로그램(.dlls)과 같은 소프트웨어 패키지의 다른 파일에 대한 해시도 포함될 수 있습니다. Microsoft는 .cat 파일에 소프트웨어 패키지에 있는 모든 파일의 해시를 포함하는 것이 좋습니다.
.cat 파일에는 지정된 파일 집합에 해당하는 파일 해시 목록이 포함되어 있습니다. 파일 해시는 대상 파일에 대한 SHA1 해시의 제품입니다. 플랫 파일 해시는 PE(이식 가능한 실행 파일) 파일 형식을 사용하는 드라이버와 같은 파일에 사용되지 않습니다. 대신 PE 헤더, 실행 데이터 및 인증된 특성과 같은 관련 섹션이 선택적으로 해시됩니다.
드라이버가 메모리에 로드되면 Windows Vista 커널은 드라이버 이진 이미지 파일의 관련 섹션에 대해 SHA1 해시를 수행합니다. Windows는 결과 해시 값을 연결된 .cat 파일의 이진 해시 목록과 비교하여 파일이 변조되지 않았는지 확인합니다.
플러그 앤 플레이를 통해 INF 파일을 사용하여 드라이버를 설치하는 경우 아래 설명된 대로 WDK의 서명 가능성 도구를 사용하여 카탈로그를 만듭니다. 그렇지 않으면 이 문서의 뒷부분에 있는 수동으로 카탈로그를 만드는 방법에 설명된 대로 카탈로그를 수동으로 만듭니다.
서명 가능성을 사용하여 카탈로그를 만드는 방법
서명 가능성은 INF 파일의 유효성을 검사하고 INF 파일을 기반으로 카탈로그 파일을 만드는 데 사용되는 도구입니다. WDK에 포함되며 WDK 빌드 환경에서 실행할 수 있습니다. 서명하려면 드라이버 패키지에 유효한 INF 파일이 필요합니다. INF 파일을 만드는 방법에 대한 자세한 내용은 WDK 설명서를 참조하세요. 서명 도구로 카탈로그를 만들려면 다음과 같이 진행합니다.
서명 가능성을 사용하여 카탈로그 만들기
- 드라이버 패키지의 모든 파일이 포함된 드라이버 패키지 디렉터리를 만듭니다.
- 드라이버 패키지 디렉터리에 INF 파일을 만들고 Windows Vista용으로 편집합니다. 특히 빌드 날짜를 2006년 4월 1일 이상으로 변경하고 버전을 6으로 변경합니다. 예: DriverVer=04/01/2006, 6.0.1.0
- 서명 가능성을 실행하여 INF 파일을 기반으로 유효한 .cat 파일을 만듭니다.
Signability.exe 실행하고 GUI를 사용하여 카탈로그 파일을 만듭니다.
명령줄에서 서명 가능성을 실행합니다. package_directory 패키지 디렉터리에 대한 정규화된 경로여야 합니다.
Signability.exe /auto /cat /driver:package_directory /os:512
이 예제에서는 Signability에서 지원하는 여러 인수를 사용하여 driver_package 디렉터리에 .cat 파일을 만듭니다.
-
/자동
사용자 상호 작용 없이 실행되도록 서명 가능성 도구를 구성합니다. -
/고양이
드라이버 패키지 INF 파일에서 이름을 제공하는 카탈로그 파일을 생성하도록 서명 가능성 도구를 구성합니다. -
/driver:DriverPath
드라이버 패키지 파일이 포함된 디렉터리의 경로를 제공합니다. -
/os:nnn
드라이버 패키지 INF 파일이 플래그 값 nnn으로 지정된 Windows 버전의 요구 사항을 준수하는지 확인하도록 서명 가능성 도구를 구성합니다. 512는 Windows Vista 64비트 버전의 값입니다.
수동으로 카탈로그를 만드는 방법
.cat 파일을 수동으로 만들려면 먼저 텍스트 편집기를 사용하여 카탈로그 정의 파일(.cdf)을 만듭니다. .cdf 파일에는 카탈로그화할 파일 목록과 해당 특성이 포함됩니다.
다음 예제에서는 Good.cdf라는 일반적인 .cdf 파일의 내용을 보여 줍니다. 카탈로그화할 패키지에는 File1 및 File2의 두 파일이 포함되어 있습니다. 결과 .cat 파일의 이름은 Good.cat.
[CatalogHeader]
Name=Good.cat
PublicVersion=0x0000001
EncodingType=0x00010001
CATATTR1=0x10010001:OSAttr:2:6.0
[CatalogFiles]
<hash>File1=File1
<hash>File2=File2
.cat 파일은 플랫폼 SDK 및 WDK에 포함된 명령줄 도구 MakeCat을 사용하여 만들어집니다. MakeCat 도구:
- 나열된 각 파일에 대한 특성 목록을 확인합니다.
- 나열된 특성을 .cat 파일에 추가합니다.
- 나열된 각 파일을 해시합니다.
- 각 파일의 해시를 .cat 파일에 저장합니다.
.cat 파일을 만들려면
- 텍스트 편집기를 사용하여 해당 특성을 사용하여 카탈로그화할 파일 목록이 포함된 .cdf 파일을 만듭니다.
- .cdf 파일에 대해 MakeCat을 실행합니다.
참고 MakeCat은 .cdf 파일을 수정하지 않습니다.
다음 예제에서는 Good.cdf에서 .cat 파일을 만드는 방법을 보여줍니다. -v 플래그는 MakeCat의 자세한 버전을 지정합니다. 해시된 파일과 새로 생성된 Good.cat 파일은 File1 및 File2와 동일한 폴더에 배치됩니다.
MakeCat -v Good.cdf
이제 .cat 파일에 서명할 준비가 되었습니다.
MakeCat 및 .cdf 파일 형식에 대한 자세한 내용은 이 문서의 끝에 있는 리소스에 나열된 MakeCat 설명서를 참조하세요.
.cat 파일에 서명하는 방법
MakeCat에서 생성된 .cat 파일에는 사용자 시스템에 커널 모드 모듈을 설치하는 데 필요한 모든 파일 해시가 포함되어 있습니다. 그러나 파일도 디지털 서명해야 합니다.
.cat 파일은 명령줄 도구 SignTool로 서명됩니다. 커널 모드 이미지 파일을 확인하는 데 사용되는 카탈로그의 디지털 서명에는 인증서 간이 포함되어야 합니다. 인증서 간은 SignTool에 새 명령 옵션을 사용하여 추가됩니다.
중요 디지털 서명에 인증서 간을 추가하려면 Windows Vista Beta2 WDK의 SignTool 버전을 사용해야 합니다.
다음 예제에서는 Signtool을 사용하여 Windows 인증서 저장소로 가져온 SPC 및 해당 프라이빗 키를 사용하여 .cat 파일에 서명하는 방법을 보여줍니다. HSM에서 Signtool을 사용하는 방법에 대한 자세한 내용은 이 문서의 끝에 있는 리소스에 나열된 SignTool 설명서를 참조하세요.
SignTool sign /v /ac CrossCertificateFile /s SPCCertificateStore /n SPCSubjectName /t http://timestamp.verisign.com/scripts/timestamp.dll Good.cat
이 예제에서는 SignTool에서 지원하는 몇 가지 인수를 사용합니다.
-
서명
이름이 CatFileName.cat .cat 파일에 서명하도록 도구를 구성합니다. -
/v
성공적인 실행 및 경고 메시지에 대한 자세한 정보 표시 옵션을 지정합니다*.* -
/Ac
CrossCertificateFile 파일의 교차 인증서를 디지털 서명에 추가합니다. -
/s
SPCCertificateStore라는 인증서 저장소를 지정합니다. -
/n
주체 이름이 SPCSubjectName인 인증서를 지정합니다. -
/tURL
디지털 서명이 URL로 표시된 TSA(타임스탬핑 기관)에 의해 타임스탬프가 되도록 지정합니다.
중요 카탈로그 또는 드라이버 서명 미스트에는 서명자의 코드 서명 프라이빗 키가 손상된 경우 키 해지에 필요한 정보를 제공하는 타임스탬프가 포함되어 있습니다.
디바이스를 설치하는 동안 서명에 사용된 SPC가 만료되고 서명이 타임스탬프되지 않은 경우 .cat 파일이 설치되지 않고 Windows에서 드라이버 로드를 허용하지 않습니다. 그러나 신뢰할 수 있는 타임스탬프 기관에서 서명을 타임스탬프하면 .cat 파일이 설치되고 Windows에서 드라이버를 로드할 수 있습니다.
자체 추출 다운로드 파일 서명
제품 지원 웹 사이트에 배포하기 위해 게시된 소프트웨어는 일반적으로 자체 추출 보관 파일에 패키지됩니다. 자체 추출 실행 파일은 웹 브라우저를 사용하여 다운로드되고 사용자가 컴퓨터에 설치하기 전에 추출된 콘텐츠가 다운로드됩니다. 드라이버 패키지 .cat 파일에 서명한 SPC를 사용하여 자체 추출 .exe 파일에 디지털 서명합니다.
자체 추출 .exe 파일에 디지털 서명은 보관 파일의 게시자를 식별하고 인터넷을 통해 다운로드되는 자체 추출 .exe 파일의 무결성을 보장합니다. 자체 추출 .exe 파일을 다운로드하는 사용자는 일반적으로 자체 추출 파일을 다운로드하고 실행하도록 선택할 때 신뢰 대화 상자 또는 보안 경고를 받게 됩니다.
Windows Vista에서 사용자가 보안 경고 대화 상자의 세부 정보를 보고 "항상 게시자 이름>에서 <소프트웨어 설치"를 선택하면 드라이버 패키지가 설치될 때 나중에 확인이 간소화됩니다. 드라이버 패키지가 설치되면 드라이버 설치가 시작되기 전에 서명된 드라이버 패키지의 게시자를 신뢰하는지 묻는 메시지가 사용자에게 표시됩니다. 사용자가 자동 추출 .exe 파일을 다운로드할 때 항상 드라이버 게시자에서 소프트웨어를 설치하는 옵션을 선택한 경우 드라이버 설치 중에 신뢰 대화 상자 프롬프트가 발생하지 않습니다.
서명된 .cat 파일을 설치하는 방법
플러그 앤 플레이를 통해 설치된 드라이버의 경우 설치 프로세스가 변경되지 않습니다. 포함된 서명된 드라이버를 설치하려면 표준 INF 및 설치 메커니즘 이외의 특별한 처리가 필요하지 않습니다. Administrators 그룹의 구성원인 사용자만 드라이버 패키지를 설치할 수 있습니다.
플러그 앤 플레이를 통해 설치하지 않는 드라이버는 시스템 카탈로그 루트 폴더에 .cat 파일을 설치해야 합니다. 카탈로그 루트 폴더에 카탈로그 설치는 기존 Win32 카탈로그 API 호출, 특히 CryptCATAdminAddCatalog를 사용하여 관리할 수 있습니다.
드라이버 이미지 파일에 포함된 서명 추가
부팅 시 드라이버 확인 성능을 최적화하려면 부팅 시작 드라이버 이진 파일에 패키지에 서명된 .cat 파일 외에도 SPC를 사용하는 포함된 서명이 있어야 합니다. 포함된 서명은 운영 체제 로더가 드라이버에서 .cat 파일을 찾을 필요가 없으므로 운영 체제 부팅 중에 상당한 시간을 절약합니다. 일반적인 Windows Vista 시스템에는 카탈로그 루트 저장소에 100개가 넘는 카탈로그 파일이 있을 수 있습니다. 특정 드라이버의 이미지 해시를 확인하기 위해 올바른 카탈로그 파일을 찾는 데는 여러 카탈로그에서 올바른 파일을 검색하는 시스템 오버헤드가 많이 포함될 수 있습니다.
부팅 시작 드라이버는 SERVICE_BOOT_START(0)의 Service StartType 값을 기반으로 식별됩니다.
포함된 서명은 .cat 파일 서명 또는 유효성 검사를 방해하지 않습니다. 카탈로그 및 포함된 서명에 포함된 해시는 PE 파일 형식의 서명 부분을 선택적으로 제외합니다.
Signtool.exe 사용하여 SPC 및 Windows 인증서 저장소로 가져온 해당 프라이빗 키를 사용하여 부팅 시작 드라이버 이진 파일에 서명을 포함하려면 다음 명령을 사용합니다.
SignTool sign /v /ac CrossCertificateFile /s SPCCertificateStore /n SPCSubjectName /t http://timestamp.verisign.com/scripts/timestamp.dll winloaddriver.sys
이 예제에서는 SignTool에서 지원하는 몇 가지 인수를 사용합니다.
-
서명
sign 명령은winloaddriver.sys라는 드라이버에 서명하도록 도구를 구성합니다 . -
/v
성공적인 실행 및 경고 메시지에 대한 자세한 정보 표시 옵션을 지정합니다*.* -
/Ac
CrossCertificateFile 파일의 교차 인증서를 디지털 서명에 추가합니다. -
/s옵션
SPCCertificateStore라는 인증서 저장소를 지정합니다. -
/n
주체 이름 SPCSubjectName을 사용하여 인증서를 지정합니다. -
/tURL
URL로 표시된 TSA에서 디지털 서명을 타임스탬프해야 함을 지정합니다 .
중요: 서명자 키가 손상된 경우 키 해지에 필요한 정보를 제공하므로 카탈로그 또는 드라이버를 타임스탬프해야 합니다.
포함된 서명을 확인하는 방법
다음 절차에서는 Windows Explorer 포함된 서명을 확인하는 방법을 보여줍니다.
포함된 서명을 확인하려면
- Windows Vista를 실행하는 동안 드라이버 .sys 파일을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 속성을 클릭합니다.
-
디지털 서명 탭이 있는 경우 클릭합니다.
- 이 탭이 없으면 파일에 포함된 서명이 없습니다.
- 서명자를 선택하고 세부 정보를 클릭하여 서명 세부 정보 대화 상자를 엽니다.
-
인증서 보기를 클릭하여 인증서의 속성 페이지를 엽니다.
- 경고 대화 상자가 없는지 확인합니다.
- 인증서 주체 이름이 게시자인지 확인하여 인식된 인증 기관에 등록되어 있는지 확인합니다.
-
인증 경로 탭을 클릭합니다.
- 상위 인증서의 주체 이름이 Microsoft 코드 확인 루트인지 확인합니다.
커널 모드 코드 서명 정책에 signtool.exe 사용하여 포함된 서명을 확인하려면
- 다음 명령을 사용하여 .cat 파일에서 서명을 확인하는 데 Signtool.exe 사용할 수 있습니다.
Signtool verify /kp /c tstamd64.cat toaster.sys
파일 toaster.sys 대한 이미지 해시가 카탈로그 파일에 있는지 확인합니다. 도구는 "Success" 문자열을 반환합니다.
개발 중에 서명 적용을 사용하지 않도록 설정하는 방법
개발 초기 단계에서 개발자는 드라이버 서명이 필요하지 않도록 Windows에서 적용을 사용하지 않도록 설정할 수 있습니다. 개발자가 Windows Vista에서 서명되지 않은 드라이버를 로드할 수 있도록 커널 모드 코드 서명 적용을 일시적으로 사용하지 않도록 설정하는 데 사용할 수 있는 옵션은 다음과 같습니다.
커널 디버거 연결 활성 커널 디버거를 대상 컴퓨터에 연결하면 Windows Vista에서 커널 모드 서명이 적용되지 않고 드라이버가 로드될 수 있습니다.
F8 옵션 사용. Windows Vista에서 도입된 F8 고급 부팅 옵션인 "드라이버 서명 적용 사용 안 함"은 현재 부팅 세션에 대해서만 커널 서명 적용을 사용하지 않도록 설정하는 데 사용할 수 있습니다. 이 설정은 부팅 세션 간에 유지되지 않습니다.
부팅 구성 설정 부팅 구성 설정은 부팅 세션 간에 유지되도록 커널 모드 서명의 적용을 사용하지 않도록 설정하는 Windows Vista Beta2 릴리스에서 사용할 수 있습니다.
Windows Vista에는 서명 검사를 사용하지 않도록 설정하는 Windows Vista Beta2에서 옵션을 설정하는 데 사용할 수 있는 명령줄 도구 BCDedit가 포함되어 있습니다. BCDedit를 사용하려면 사용자가 시스템의 Administrators 그룹의 구성원이어야 하며 관리자 권한 명령 프롬프트에서 명령을 실행해야 합니다. 관리자 권한 명령 프롬프트는 cmd.exe 바탕 화면 바로 가기를 만든 다음 마우스 오른쪽 단추 클릭 및 "관리자 권한으로 실행"을 사용하여 시작할 수 있습니다.
다음은 명령 프롬프트에서 BDCedit를 실행하는 예제를 보여줍니다.
// Disable enforcement – no signing checks Bcdedit.exe –set nointegritychecks ON // Enable enforcement – signing checks apply Bcdedit.exe –set nointegritychecks OFF // Disabling integrity check on an alternate OS // specified by a GUID for the system ID Bcdedit.exe –set {4518fd64-05f1-11da-b13e-00306e386aee} nointegritychecks ON
참고 무결성 검사를 사용하지 않도록 설정하는 Bcdedit 옵션은 Windows Vista Beta2 릴리스에서 서명되지 않은 드라이버를 로드하는 경우에만 사용할 수 있습니다. 자세한 내용은 MSDN 웹 사이트의 BCD 편집기 FAQ를 참조하세요.
테스트 서명을 사용하는 방법
테스트 서명은 게시할 준비가 되지 않은 시험판 소프트웨어에 대한 커널 모드 코드 서명을 통합하기 위한 개발 조직에 추가 옵션을 제공합니다. 테스트 서명을 사용하면 "테스트" 코드 서명 인증서를 사용하여 Windows Vista 부팅 구성 설정에서 테스트 서명을 허용하는 경우 Windows Vista에서 로드되는 드라이버에 서명할 수 있습니다.
테스트 서명은 다음 시나리오에서 사용하기에 적합할 수 있습니다.
- 개발 팀은 커널 디버거를 연결하는 것이 실용적이지 않은 테스트 시스템에서 드라이버의 시험판 버전을 테스트해야 합니다.
- 커널 모드 소프트웨어의 자동화된 테스트는 F8 고급 부팅 옵션을 사용하여 모든 머신 부팅 주기에서 드라이버 서명 적용을 일시적으로 사용하지 않도록 설정하는 것은 비실용적입니다.
테스트 서명을 사용하면 개발자가 Windows Vista에서 서명된 드라이버를 확인하고 로드할 수 있는 방식으로 커널 모드 이진 파일의 시험판 버전에 서명할 수 있습니다. 테스트 서명에는 일반 프로덕션 또는 릴리스 서명과는 다음과 같은 차이점이 포함됩니다.
- 테스트 서명에 사용되는 인증서는 상업용 CA에서 발급한 SPC를 사용하는 대신 Makecert.exe 코드 서명 도구를 사용하여 생성하거나 Enterprise CA에서 발급할 수 있습니다.
- 테스트 서명된 드라이버를 로드할 Windows Vista 시스템에서 테스트 서명을 사용하도록 설정하는 Windows Vista 부팅 구성 옵션을 사용하도록 설정해야 합니다.
개발 조직은 엔터프라이즈 PKI를 설치하고 테스트 서명에 사용할 자체 테스트 코드 서명 인증서를 발급할 수 있습니다. Windows Vista에서 테스트 서명을 사용하도록 설정하면 드라이버 이진 파일에서 디지털 서명을 확인 하면 CA 또는 발급 기관에서 발급한 인증서를 수락합니다. 테스트 서명은 드라이버 이미지가 서명되었는지 확인하지만 커널 모드에서 수행된 인증서 경로 유효성 검사에서는 발급자를 신뢰할 수 있는 루트 기관으로 구성할 필요가 없습니다. 이를 통해 조직은 organization 내의 코드 서명에 대해 발급된 자격 증명에 따라 테스트 이진 파일에서 개별 서명을 사용할 수 있습니다. 커널 모드 코드 서명 내에서 테스트 서명을 위해 이 형식의 배포를 권장합니다.
makecert.exe 도구에서 생성된 인증서를 테스트 서명에도 사용할 수 있습니다. 그러나 makecert에서 생성된 인증서는 유용한 ID 정보를 제공하지 않는 경우가 많으며 시험판 이진 파일의 테스트 서명된 버전을 만든 개별 개발자를 추적할 방법이 없습니다.
참고 Windows Vista Beta2 릴리스는 makecert 도구에서 생성된 테스트 인증서만 허용합니다. 테스트 서명을 위해 엔터프라이즈 CA에서 발급한 테스트 코드 서명 인증서는 Windows Vista Beta2에서 사용할 수 없습니다.
이 문서의 Signtool 지침은 SPC를 사용하든, makecert 유틸리티에서 생성된 인증서를 사용하든, 엔터프라이즈 CA에서 발급한 인증서를 사용하는지와 동일한 방식으로 작동합니다. 유일한 차이점은 일반적으로 인증서의 발급자 및 주체 이름입니다.
WHQL 테스트 서명 프로그램은 테스트 서명에도 지원됩니다. 프로그램의 참가자는 WHQL 테스트 서명에 대한 드라이버 패키지를 제출할 수 있습니다. 테스트 서명된 카탈로그의 서명은 Microsoft 테스트 루트 기관에서 발급된 인증서에 의해 생성됩니다. Microsoft 테스트 루트 기관은 베타 프로그램의 일부로 Windows Vista Beta2에서 기본적으로 허용됩니다. Windows Vista의 최종 릴리스에서는 Windows Vista 부팅 구성 설정에서 테스트 서명을 사용하도록 설정하면 Microsoft 테스트 루트 기관이 수락됩니다.
테스트 서명된 커널 모드 이진 파일은 기본적으로 Windows Vista 시스템에 로드되지 않습니다. 커널 모드 코드 서명 정책이 수락하지 않고 테스트 서명 인증서를 신뢰하지 않으므로 테스트 서명된 이진 파일의 디지털 서명은 기본적으로 Windows Vista 시스템에서 유효하지 않습니다.
테스트 서명 사용
Bcdedit 명령줄 도구를 사용하여 테스트 서명을 사용하도록 설정합니다. BCDedit를 사용하려면 사용자가 시스템의 Administrators 그룹의 구성원이어야 하며 관리자 권한 명령 프롬프트에서 명령을 실행해야 합니다. 관리자 권한 명령 프롬프트는 cmd.exe 바탕 화면 바로 가기를 만든 다음 마우스 오른쪽 단추 클릭 및 "관리자 권한으로 실행"을 사용하여 시작할 수 있습니다.
다음은 명령 프롬프트에서 BDCedit를 실행하는 예제를 보여줍니다.
// Accept test signed kernel mode signatures
Bcdedit.exe –set TESTSIGNING ON
// Do not accept test signed kernel mode signatures
Bcdedit.exe –set TESTSIGNING OFF
TESTSIGNING
부팅 구성 옵션은 Windows Vista가 테스트 서명된 커널 모드 이진 파일을 허용하는지 여부를 결정합니다. 옵션은 기본적으로 정의되지 않습니다. 즉, 테스트 서명된 커널 모드 드라이버의 디지털 서명이 확인하지 않고 로드되지 않습니다. Windows Vista에서 테스트 서명된 커널 모드 이진 파일을 수락하는 경우 보호되는 일부 프리미엄 콘텐츠는 시스템에서 액세스할 수 없을 수 있습니다.
문제 해결
커널 모드 코드 서명 확인과 관련된 잠재적인 문제를 식별하고 해결하기 위해 수행할 수 있는 특정 단계가 있습니다. 이 섹션에서는 드라이버 서명 적용 문제 해결에 대한 정보를 제공합니다. 드라이버 서명 문제를 해결하기 위한 기본 도구는 다음과 같습니다.
- 드라이버 로드 오류 검색
- 코드 무결성 진단 시스템 로그 이벤트 사용
Windows Vista WDK에 포함된 토스터 애플리케이션이 예로 사용됩니다. 토스터 애플리케이션은 WDK의 "src\general\toaster" 디렉터리에서 찾을 수 있습니다.
드라이버 로드 오류 검색
토스터 애플리케이션은 서명되지 않은 디바이스 드라이버(toaster.sys)를 설치합니다. 서명되지 않은 드라이버에 문제가 있는 증상은 토스터 디바이스가 시작되지 않는다는 것입니다. 디바이스 관리자 사용하여 토스터 디바이스의 상태 검사 다음 화면 이미지와 같이 드라이버 상태 볼 수 있습니다.
그림 1. 서명되지 않은 드라이버 오류
디바이스 드라이버가 서명되지 않았고 커널 모드 서명 적용으로 인해 드라이버가 커널로 로드되지 않아 디바이스를 시작하지 못했습니다. 문제의 원인을 명확하게 식별하기 위해 아래 설명된 대로 서명 적용 진단 사용하도록 시스템을 설정했습니다.
코드 무결성 진단 시스템 로그 이벤트 사용
커널 모드 코드 서명 적용은 코드 무결성이라고 하는 Windows Vista 구성 요소에 의해 구현됩니다. 코드 무결성은 커널 모듈의 서명이 올바르게 확인되지 않을 때 진단 이벤트 및 시스템 감사 로그 이벤트를 생성합니다.
- 코드 무결성 운영 이벤트는 항상 사용하도록 설정됩니다. 작동 이벤트는 커널 모드 이진 파일을 로드할 때 이미지 확인 검사 실패한 경우 경고 이벤트입니다.
- 코드 무결성 시스템 감사 이벤트는 시스템 감사 정책을 사용할 때 생성됩니다. 시스템 감사 정책은 기본적으로 사용하도록 설정되지 않습니다.
- 코드 무결성 세부 정보 이벤트는 커널 모드 이진 파일을 로드할 때 성공한 모든 이미지 확인 검사를 표시하는 분석 및 디버그 정보 이벤트입니다. 자세한 내용은 기본적으로 사용하도록 설정되지 않습니다.
코드 무결성 이벤트는 컴퓨터 관리 MMC 스냅인의 일부인 이벤트 뷰어 아래에서 볼 수 있습니다. 시작 단추에서컴퓨터를 마우스 오른쪽 단추로 클릭하고 관리를 선택합니다.
코드 무결성 이벤트 스트림은 다음 계층 아래에 있습니다.
이벤트 뷰어 -> 애플리케이션 및 서비스 로그 -> Microsoft -> Windows -> CodeIntegrity
그림 2. 코드 무결성 이벤트
코드 무결성 작동 로그는 커널 모드 드라이버가 드라이버가 로드될 때 이미지 확인 검사 실패할 때 커널에서 생성된 이벤트를 표시합니다. 이미지 확인 실패는 다음과 같은 여러 가지 이유로 인해 발생할 수 있습니다.
- 드라이버가 서명되지 않았지만 관리자가 시스템에 설치했으며 코드 무결성으로 인해 드라이버가 로드되지 않습니다.
- 드라이버가 서명되었지만 드라이버 이미지 파일이 수정되거나 변조되었으며 수정으로 인해 드라이버 서명이 무효화되었습니다.
- 잘못된 디스크 섹터에서 디바이스에 대한 이미지 파일을 읽을 때 시스템 디스크 디바이스에 디바이스 오류가 있을 수 있습니다.
서명되지 않았거나 수정된 드라이버 이미지 확인 실패에 대한 운영 로그 항목은 다음 예제와 같습니다.
그림 3. 운영 로그 항목
이벤트는 토스터 드라이버(toaster.sys)가 서명되지 않았거나 로드하려는 toaster.sys 이미지가 게시자가 디지털 서명한 이미지와 동일하지 않으므로 로드할 수 없음을 나타냅니다.
모든 코드 무결성 이벤트 로그 메시지는 아래 코드 무결성 이벤트 로그 메시지 섹션에 나열됩니다.
시스템 감사 로그 이벤트
코드 무결성은 커널 모드 드라이버의 이미지 확인이 실패할 때 작동 경고 이벤트에 해당하는 시스템 감사 로그 이벤트를 생성합니다. 시스템 로그 이벤트는 Windows 로그, 시스템 로그 보기 아래의 이벤트 뷰어 볼 수 있습니다.
시스템 감사 이벤트는 모든 Windows Vista 시스템에서 사용하도록 설정되지 않을 수 있습니다. 로컬 보안 설정 MMC 스냅인을 사용하여 로컬 정책 감사 정책 설정에서 "시스템 이벤트 감사"를 확인하거나 사용하도록 설정합니다.
자세한 정보 표시 로그의 정보 이벤트
모든 커널 모드 이미지 확인 검사에 대한 추가 코드 무결성 정보 이벤트는 자세한 정보 표시 이벤트 보기를 사용하여 사용할 수 있습니다. 이러한 이벤트는 시스템에 로드된 모든 드라이버의 성공적인 이미지 확인을 보여 줍니다.
코드 무결성 세부 정보 표시 이벤트 보기를 사용하도록 설정하는 단계는 다음과 같습니다.
- 운영 보기를 마우스 왼쪽 단추로 클릭하여 현재 코드 무결성 이벤트(있는 경우)를 표시합니다.
- 코드 무결성 노드를 마우스 왼쪽 단추로 클릭하여 포커스를 설정합니다.
- 코드 무결성 노드를 마우스 오른쪽 단추로 클릭하여 상황에 맞는 메뉴를 가져옵니다.
- 보기를 선택합니다.
- 분석 및 디버그 로그 표시를 선택합니다.
- 그러면 두 개의 추가 노드인 Operational 및 Verbose 노드가 있는 하위 트리가 만들어집니다.
- 자세한 정보 표시 노드를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
- 일반 시트를 선택하고 로깅사용 옵션을 선택합니다. 이렇게 하면 자세한 로깅 모드가 활성화됩니다.
- 시스템을 다시 부팅하여 모든 커널 모드 이진 파일을 다시 로드합니다.
- 다시 부팅한 후 컴퓨터관리 스냅인을 열고 코드무결성자세한 정보표시 이벤트로그를 확인합니다.
toaster.sys 다음과 같이 올바르게 서명되었는지 검사 수 있습니다.
이 특정 경우 toaster.sys PnP 드라이버이며 카탈로그 파일("\src\general\toaster\toastpkg\toastcd"의 tstamd64.cat)에 이름이 지정됩니다. SignTool 유틸리티를 사용하여 toaster.sys 다음 명령을 사용하여 올바르게 카탈로그로 서명되었는지 확인합니다.
Signtool verify /kp /c tstamd64.cat toaster.sys
드라이버 확인 디버깅 옵션
경우에 따라 개발자는 디버거가 연결된 경우에도 필수 커널 모드 코드 서명 정책을 적용하려고 할 수 있습니다. 예를 들어 드라이버 스택에 로드에 실패하는 서명되지 않은 드라이버(예: 필터 드라이버)가 있는 경우 전체 스택이 무효화될 수 있습니다. 디버거를 연결하면 서명되지 않은 드라이버를 로드할 수 있으므로 디버거가 연결되는 즉시 문제가 사라지는 것처럼 보입니다. 이러한 유형의 문제를 디버깅하는 것은 어려울 수 있습니다. 이 경우 디버깅을 용이하게 하기 위해 코드 무결성은 디버거가 연결된 경우에도 커널 모드 서명 적용을 적용하도록 설정할 수 있는 레지스트리 키를 지원합니다.
레지스트리에는 디버거에서 코드 무결성 동작을 제어하는 두 개의 플래그가 정의되어 있습니다. 플래그는 기본적으로 정의되지 않습니다.
다음과 같이 레지스트리 값을 만듭니다.
Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI
Value: DebugFlags REG_DWORD
가능한 값은 다음과 같습니다.
-
00000001
디버그가 디버거에 침입하고 서명되지 않은 드라이버는 로 로드g
할 수 있습니다. -
00000010
CI는 디버거의 존재를 무시하고 서명되지 않은 드라이버의 로드가 차단됩니다.
다른 값으로 인해 서명되지 않은 드라이버가 로드됩니다. 기본 정책입니다.
코드 무결성 이벤트 로그 메시지
다음은 코드 무결성 작동 로그에 기록된 경고 이벤트입니다.
- "시스템에서 파일 해시를 찾을 수 없으므로 코드 무결성이 파일 <파일 이름의> 이미지 무결성을 확인할 수 없습니다."
- "코드 무결성에서 서명되지 않은 드라이버를 검색했습니다."
- "이 이벤트는 SQM(소프트웨어 품질 모니터링)과 관련이 있습니다."
다음은 코드 무결성 세부 정보 로그에 기록된 정보 이벤트입니다.
- "코드 무결성은 카탈로그 <카탈로그 이름>에서 파일 <파일 이름>에 대한 페이지별 이미지 해시 집합을 발견했습니다."
- "코드 무결성은 이미지 포함 인증서의 파일 <파일 이름> 에 대한 페이지별 이미지 해시 집합을 발견했습니다."
- "코드 무결성에서 카탈로그 카탈로그 <이름>에서 파일 파일 이름>에 대한 파일 < 해시를 찾았습니다."
- "코드 무결성이 이미지 포함 인증서에서 파일 파일 이름>에 대한 파일 < 해시를 발견했습니다."
- "코드 무결성에서 서명되지 않은 커널 모듈 <파일 이름이> 시스템에 로드된 것으로 확인되었습니다. 게시자에 문의하여 서명된 버전의 커널 모듈을 사용할 수 있는지 확인합니다."
- "코드 무결성은 시스템에서 페이지별 이미지 해시 집합을 찾을 수 없기 때문에 파일 <파일 이름의> 이미지 무결성을 확인할 수 없습니다."
- "코드 무결성은 시스템에서 페이지별 이미지 해시 집합을 찾을 수 없으므로 파일 <파일 이름의> 이미지 무결성을 확인할 수 없습니다. 커널 모드 디버거가 연결되어 있으므로 이미지를 로드할 수 있습니다."
- "코드 무결성은 시스템에서 파일 < 해시를 찾을 수 없으므로 파일 파일 이름의> 이미지 무결성을 확인할 수 없습니다. 커널 모드 디버거가 연결되어 있으므로 이미지를 로드할 수 있습니다."
- "코드 무결성에서 파일 이름> 카탈로그를 < 로드할 수 없습니다."
- "코드 무결성에서 파일 이름> 카탈로그를 < 로드했습니다."
리소스
- 커널 모드 드라이버의 디지털 서명에 대한 질문은 에 전자 메일을 signsup@microsoft.com보냅니다.
- Windows Vista 커널 모드 코드 서명용 Microsoft 교차 인증서
- 부팅 구성 데이터 편집기 질문과 대답
- MSDN의 SDK 설명서에 있는 CryptCATAdminAddCatalog
- 보안 소프트웨어 게시를 위한 암호화 하드웨어를 사용하여 Authenticode 배포
- Windows용 디버깅 도구
- Certmgr
- MakeCat
- Makecert
- SignTool
- WDK(Windows 드라이버 키트)
- Windows 로고 프로그램
- WHQL 테스트 서명 프로그램
- Windows 플랫폼 SDK 다운로드 사이트
- Windows Quality Online Services(Winqual)
- 코드 서명 모범 사례
- Windows Vista에서 플러그 앤 플레이 디바이스 설치 중 드라이버 패키지 무결성
- Windows Vista의 보호된 미디어 구성 요소에 대한 코드 서명