본문 바로가기
개발, IT

Kernel-Mode Code Signing

by Nabi™ 2008. 8. 4.

64bit Windows Vista 에서는 Digitallly Signed 된 kernel mode software 만이 Load 가능하다.
Driver Sign 은 아래의 링크에 있는 6개의 업체의 인증서를 통해서 가능하다. 최초 verisign 만으로 인증이 가능했으나 5개 업체가 추가되었으나 추가로 더 지정될 지는 미지수이다.
http://www.microsoft.com/whdc/winlogo/drvsign/crosscert.mspx

Code Signing 시작하기
Kernel mode code signine 을 하기 위해서는 Build Computer, Signing Computer, Test Computer 가 필요하며 하나의 Computer 가 이를 모두 수행할 수 도 있다. code sign tool 은 SDK, WDK, .NET Framework SDK 에서 얻을 수 있다.

Test Sign
Code-Signing Tool 들 MakeCert test signing 을 위해서 인증서를 생성할 수 있다. Test 인증서는 file 로 되어 있거나 시스템의 인증서 저장소에 있거나 두곳 모두에 있을 수 있다.

Test sign 은 test 인증서로 실제 Driver 가 Release 되기 전에 sign 을 test 하는 용도로 사용된다. test sign 을 하기 위해서는 MakeCert 를 사용해서 인증서를 만들고 vista 의 boot option 을 test sign 에 맞게 수정해서 Test 를 진행한다.

windows vista 에서 test signing 을 위한 간단한 순서는 다음과 같다.
1. test signing 을 위한 PC 를 준비한다.
2. MakeCert 를 사용해서 Test 인증서를 생성한다.
3. Makecat 이나 Signability 를 사용해서 catalog file 을 생성한다.
4. signtool 을 사용하여 catalog file 을 sign 한다.
5. test 인증서를 Trusted Root Certification Authrorities certificate store 에 저장한다.
6 3,4,5 대신 driver image file 에 직접 sign 할 수도 있다. (embeded sign)



Step 1 : WDK 를 Install 한다. WDK build 환경을 run as admin 을 사용해서 admin 권한으로 실행 시킨다. wdk 를 보면 toastpkg 샘플을 가지고 Code-sign 을 볼 수 있다.

Step 2 : MakeCert 를 사용하여 Test 인증서 생성한다. test 인증서를 생성하면 다수의 kernel mode code 에 sign 할 수 있다.
makecert -pe -ss PrivateCertStore -n CN=contoso.com(Test) ContosoTest.cer
cer file 을 생성하였으면 Certmgr.msc 를 사용해서 PrivateCertStore 에서 확인해 볼 수 있다.

Step 3 : Driver 가 inf 를 사용하여 install 되는 것이라면 signability 를 사용해서 catalog file 을 생성할 수 있다. signability 는 자동으로 driver package 의 모든 file 을 포함한다. INF 를 사용하여 Install 하지 않을 경우 .cdf file 을 수동으로 생성하여 MakeCat 을 사용해서 Catalog file 을 생성해야 한다. catalog file 대신에 embeded signature 도 가능하다.
Signability.exe /auto /cat /driver:c:\toasted\ /os:512

Step 4 : catalog file sign 하기
signtool 은 catalog file 이나 image file 을 sign 하거나 verifiery 하 수 있다. 추가적으로 timestamp 를 추가하는것도 가능하다. timestamp 를 해 놓으면 인증서 유효기간이 만료 되었어도 사용할 수 있다.
signtool sign /v /s PrivateCertStore /n Contoso.com(Test) /t http://timestamp.verisign.com/scripts/timestamp.dll tstamd654.cat

Step 5 : test 인증서를 trusted root certification authorities certificate store 에 저장하기
아래의 방법을 사용하여 인증서를 Install 한다. WDK 에 있는 Certmgr 을 사용해야 한다.

Step 6 : embeded signature 를 사용하여 Driver Image test sign 하기
boot type Driver 나 Catalog file 을 사용하지 않는 Driver 들은 embeded sign 을 사용한다.

signtool sign /v /s PrivateCertStore /n Contoso.com(Test) /t http://timestamp.verisign.com/scripts/timestamp.dll amd65\toaster.sys



Test sign 된 Driver package 를 install 하고 load 하는 법

Step 1 : Test 인증서 install 하기

test 인증서 Contoso.com(Test) 는 이 문서의 윗부분에 Step 2 에서 생성하였다.
1. ContosoTest.cer 을 test 시스템의 c:\toaster 폴더에 복사
2. Run as Administrator 을 사용해서 Admin 권한의 Command 실행
3. 인증서 install
certmgr.exe /add contosoTest.cer /s /r localMachine trustedpublisher

두번째로 CA 로 부터 발급된 인증서를 Trusted root certification authorities certificate store 에 넣는것이다.
certmgr /add /c /s /r localMachine CA /n "Root Agency" /s /r localMachine root

step 2 boot 환경을 Test 인증 을 활성화
command 를 Admin 권한으로 실행 한 후 bcdedit.exe /set TESTSIGNING ON

Step3 reboot test computer



CertMgr
인증서를 관리하는 Tool 이다.

Signtool
command-line tool 로 sign, verifie, timestamp 을 담당한다. PE file 이나 cat, cab file 을 지원한다. WDK beta2 에 있는 signtool 은 에러를 가지고 있으므로 Web 에서 최신 version 을 다운 받아서 사용해야 한다.

MakeCat
file 의 hash 정보를 가지고 있는 unsigned catalog file 을 생성한다. 생성된 file 을 사용하여 cat file 을 sign 함으로써 다수의 file 을 sign 한 효과를 볼 수 있다.

Signability
PnP Driver 를 위한 driver package 를 생성해 주는 Tool 로 INF 를 사용 한다.

PVK2PFX
CA 가 .spc, .pvk file 로 인증서를 배포하는 경우가 있으나 kernel mode code signing 에서는 .pfx file 이 필요하게 된다. pvk file 을 pfx file 로 변환해주는 tool 이다.

좋은정보가 되셨다면 아래 한번 클릭해주세요^^


댓글