内核模式代码签名走查(二)



如何给一个内核模块测试签名

重要:windowsVista系统中给内核模式驱动测试签名只能用于测试的目的。它们不能用于产品或发行给用户在Vista RC1Vista RTM上使用。

        测试签名最好用来使用一个测试证书在测试计算机上给即将发行的软件版本签名。Windows Vista支持内核模块使用测试签名。特别需要指出的是,开发人员被允许使用对内核程序签名自签名的证书,是由MakeCert工具生成。这个新特性允许开发者在Windows Vista系统通过验证数字签名测试内核程序。

        一台安装了Vista系统的计算机在测试签名驱动加载前必须在启动配置项中打开测试签名。使用测试签名驱动的步骤在“如何安装和加载一个测试签名驱动包”章节中有进一步描述。在测试计算机中的WDK运行驱动测试管理器必须启用测试签名。

Windows Vista RC1 RTM发行版允许接受MakeCert生成的测试证书或由CA颁布的测试证书,或者企业CAs

 

Windows Vista上的内核模块进行测试签名(基本步骤)

  1. 准备好一个测试签名的计算机。

  2. 使用MakeCert创建一个测试证书。

  3. 使用MakeCat或者Inf2Cat工具创建一个目录文件。

  4. 使用SignTool工具给目录文件进行测试签名。

  5. 安装测试证书到受信任的根证书颁发机构存储中。

  6. 可选择是否执行步骤3,4,5给驱动镜像文件进行测试签名。

 

本章节的剩下内容将解释以上的每一步,更多的细节参考WDK中的“Test-Signing Driver Packages”。

:在以下的说明中请使用安装WDK的计算机上的本地Administrators组成员的帐户。

 

Step1:为计算机准备测试签名

准备进行测试签名的计算机

      安装 WDK

实例中的步骤假设WDK已经安装并且使用WDK编译环境的命令行窗口。Windows的环境变量包含数字签名工具的目录。命令行窗口使用超级管理员权限运行。

 

打开一个命令行窗口

  1. 点击[开始]按钮,指向[所有程序][windowsDriver Kit],[WDK 5739],点击[build Environments\Windows Vista and Windows Server 2008]

  2. 右键单击[WindowsVista and Windows Server 2008 x64 Free Build Environment]并且选择[管理员身份运行(或者使用命令提升至管理员权限)]快捷键菜单。

 

使用WDK中的Toastpkg实例展示了如何使用数字签名工具。开发者也可以使用他们自己的驱动包。Toastpkg驱动包在这一步的使用了很典型的安装。驱动包目录:C:\WinDDK\BuildNumber\src\general\toaster\toastpkgfolder

Step2:使用MakeCert创建测试证书

测试签名需要一个测试证书。当生成一个测试证书后,可以多次给内核模式程序签名。驱动包工程目录应进行测试签名。这个示例使用了Toastcd目录:c:\WinDDK\5739\src\general\toaster\toastpkg\toastcd

MakeCert命令行示例

makecert –r -pe -ss PrivateCertStore -nCN=Contoso.com(Test) ContosoTest.cer

这个MakeCert示例命令做了如下工作:

  • 创建一个自签名的测试证书,证书中的发行者和颁发者使用相同的名称。

  • 输出证书的副本名为ContosoTest.cer,放置到输出目录中。

  • 将证书放到PrivateCertStore的证书机构中。在PrivateCertStore中提交测试证书,使这个证书与其他的证书在系统中可以分开放置。

    MakeCert参数

    -r

    创建一个自签名的证书,证书中的发行者和颁发者使用相同的名称。

    -pe

    创建证书的私钥可输出到签名机器上。

            -ss   StoreName

                      证书的存储到测试证书机构PrivateCertStore中的名称。

            -n    X500Name

                      指定主题的证书名称。此名称必须符合X.500标准,为Contoso.com(Test)

           ContosoTest.cer

                  证书输出的文件名。

 

图表1显示了创建了一个测试证书的命令行示例

图表1使用MakeCert命令创建一个测试证书和证书机

 

当证书创建和将副本放到证书仓库中,微软控制台中证书管理单元视图可以查看并使用。

 

使用MMC证书管理单元查看证书

  1. 单击[开始]按钮并点击[搜索程序和文件]

  2. 输入Certmgr.msc,单击OK按钮,启动证书管理单元

  3. 证书管理单元左侧栏中,列出了PrivateCertStore证书仓库文件夹,双击[证书]

 

图表2显示了证书管理单元中PrivateCertStore内容

图表2书存储显示了测试证书

 

        双击右侧的证书,可以查看详细信息

 

•证书对话框的常规选项卡中显示:“这个CA根证书不被信任,安装证书到受信任的根证书颁发机构”。这是预期行为。无法验证证书,因为Windows不信任发布机构“Contoso.comTest)”默认情况下。

图表3测试证书

 

Step3:为测试签名创建目录文件

下一步为一个驱动包创建一个目录文件(.cat)。有两种途径创建一个目录文件:

方法一:如果驱动是使用INF文件来进行安装,使用Inf2Cat创建目录文件。Inf2Cat自动包含驱动包中所有的文件,为了方便,你可以使用WDK中的Signblilty工具,但是那个工具已经被Inf2Cat所取代。

方法二:不使用INF文件安装内核模块

  • 使用MakeCert和手动创建的.cdf文件创建一个目录文件

  • 省略目录文件,给二进制文件使用嵌入式签名。在这种情况下,忽略被签名的目录文件。如何给一个二进制文件嵌入签名,更多细节请参照本文档“Step 6使用嵌入式签名给驱动镜像进行测试签名

     

使用Inf2Cat工具创建一个目录文件

Inf2Cat工具可以为任何有INF文件的工程进行签名。Toastpkg使用INF文件安装,所以这个示例显示了如何使用Inf2Cat工具给ToastPkg创建目录文件。

Inf2Cat工具制作的目录文件名称由驱动包中的INF文件指定的,在INF文件中的[Version]节中增加目录文件的条目,设置目录文件的文件名。例如:

  • [Version]

  • ...

  • CatalogFile=CatalogFileName

  • ...

 

:如果Inf2Cat工作正常,Toastpkg示例中的INF文件需要做一个小小的改变,当使用的的版本的示例如下:

     1、使用cd命令进入到...\toastpkg\toastcd目录。

     2、运行如下的命令来升级INF文件的版本信息

        stampinf-f toastpkg.inf -d 09/01/2006 -v 6.0.9999.0

     下面的示例展示了如何创建一个目录文件。

注:当前,Inf2Cat还不是WDK的工具,它需要安装Winqual提交工具。当Winqual提交工具安装了之后,Inf2Cat工具的目录在Program Files (x86)\Microsoft WinqualSubmission Tool下。Inf2Cat工具可与将其他的签名工具的一起创建环境,拷贝Inf2Cat.exe和所有在文件夹中的DLL文件到%WinDDK%\BuildNumber\bin\SelfSign目录下

 

使用Inf2Cat工具创建目录文件

  1. 打开x64位编译环境命令行窗口

  2. 设置当前的目录为当前没有签名的驱动包目录

  3. 运行如下的命令来创建目录文件

Inf2cat.exe/driver:C:\WinDDK\5739\src\general\toaster\toastpkg\toastcd\ /os:Vista_x64

Inf2Cat参数

/driverPackagePath

指定包含驱动包文件夹的路径。

/os:OSValue

操作系统值指示出驱动包安装的目标操作系统。

操作系统值是一个逗号分隔的包含一个或多个如下的值:

        2000 XP_X86, Server2003_X86, Vista_X86, XP_X64, Server2003_X64, Vista_X64, orServer2003_IA64

图表4显示了如何使用Inf2Cat工具和.INF文件创建出一个目录文件

图表4正在使用Inf2Cat具创建一个目录文件

 

使用Signability工具创建一个目录文件

Signability是为了创建一个目录文件的工具,SignabilityWDK发布,但是已经被Inf2Cat所代替。但是当你不允许获得Winqual提交工具中的Inf2Cat时,在这个节中,你仍然可以看到如何使用这个工具来创建目录文件以及相应的信息。

 

使用Signability创建目录文件

  1. 打开x64位编译环境命令行窗口。

  2. 设置当前的目录为没有签名的驱动包目录。

  3. 运行如下的命令来创建目录文件。

    Signability.exe/auto /cat /driver: C:\WinDDK\5739\src\general\toaster\toastpkg\toastcd\/os:512

      Signability工具参数

/auto

        无需用户干预运行Signability工具。

/cat

                通过驱动包中的INF文件指定的cat名称,创建目录文件。

/driver:PackagePath

                指定包含驱动包文件夹的路径。

/os:OSValue

                验证的驱动包INF文件是否与需求的操作系统版本相匹配,windows Vista64位版本的值为512

 

Signability打开一个对话框,指定命令选项和一个进度对话框。目录文件的名称是基于驱动包中的INF文件生成的。在Toastpkg的示例中,Signability工具创建一个名称为tstamd64.cat的目录文件。

 

使用MakeCat

MakeCat可以给任何工程创建目录文件,但它必须用于使用目录文件但不使用INF安装的项目中。除了创建和给一个目录文件签名,也可以在项目中的二进制文件嵌入签名。更多的二进制文件嵌入式签名,在下面的文档内容中参考“Step 6:给一个驱动镜像进行嵌入式测试签名”。为了创建目录文件,必须首先手动创建一个描述目录头属性和文件条目的.cdf文件

 

使用MakeCat工具为Toastpkg创建一个目录文件

  1. 打开记事本并且将下面的示例中的内容拷贝到里面。它包含了多个文件的目录,以及这些文件的属性。

[CatalogHeader]

Name=tstamd64.cat

PublicVersion=0x0000001

EncodingType=0x00010001

CATATTR1=0x10010001:OSAttr:2:6.0

[CatalogFiles]

<hash>File1=amd64\toaster.pdb

<hash>File2=amd64\toaster.sys

<hash>File3=amd64\toastva.exe

<hash>File4=amd64\toastva.pdb

<hash>File5=amd64\tostrcls.dll

<hash>File6=amd64\tostrcls.pdb

<hash>File7=amd64\tostrco2.dll

<hash>File8=amd64\tostrco2.pdb

2、将记事本的名称保存为tstamd64.cdf,放入到驱动包文件加下。

:当创建的驱动使用于多个平台的时,为每一个平台创建一个目录文件

  1. 使用“tsamd64.cdf”运行MakeCat工具

makecat–v tstamd64.cdf

MakeCat参数

-v

指定MakeCat的详细模式。

tstamd64.cdf

        指定.cdf文件的名字

 

图表5显示了如何通过.cdf文件创建目录文件的示例


图表5使MakeCat建目录文件

 

Step4给目录文件测试签名

目录文件现在已经准备好进行测试签名了。SignTool可以为一个镜像文件或者目录文件进行数字签名和验证数字签名。它可以选择在数字签名中是否添加时间戳。如果必要的话,时间戳允许确定签名的创建时间,并支持更灵活的证书吊销选项。

下面的示例使用SignTool工具来给tatamd64.cat进行测试签名并且验证签名。从Step 2中的证书结构PrivateCertStore创建的Contoso.com(Test)证书可以被用来进行签名。它也在数字签名中添加了时间戳:

Signtool sign /v /s PrivateCertStore /n Contoso.com(Test) /t http://timestamp.verisign.com/scripts/timestamp.dlltstamd64.cat

 

  • SignTool参数:

    Sign

             指定需要签名的目录文件。

    /v

             可选项,显示成功执行和警告信息。

    /sCertStore

             PrivateCertStore证书存储中的证书。

    /nCertName

  证书的命名,Contoso.com(Test)

/t     URL

指定了URLhttp://timestamp.verisign.com/scripts/timestamp.dll,在数字签名中通过时间戳权威机构(TSA)打上了时间戳。

tstamd64.cat

        目录文件的名称。

 

图表6显示了使用时间戳对目录文件进行测试签名

图表6使用SignTool工具和测试证书给目录文件进行测试签名

 

Step5将测试证书安装到受信任的根证书颁发机构存储中

为了成功安装测试驱动包到测试的计算机上,计算机必须验证数字签名。验证完毕后,测试计算机必须将CA颁发的驱动包测试证书安装到受信任的根证书颁发机构存储中。否则,SignTool不能正确的对目录文件验证测试签名。

CA证书必须被添加到受信任的根证书颁发机构存储中且只能一次。它将可以被用作在系统中所有的测试签名验证。

在我们的示例中,CA颁发的包签名证书,颁发者Contoso.com(test),颁发给Contoso.com(test)。为了成功安装测试签名的驱动,Contoso.com(test)证书必须安装到测试计算机中的受信任的根证书颁发机构。默认的,Contoso.com(test)被安装到[中级证书颁发机构的证书存储区]([localMachine Intermediate Certification Authorities certificatestore])

 

示例如下,下列命令使用Certmgr.exeContoso.com(test)证书放入到受信任的根证书颁发机构存储区内。

certmgr.exe/add ContosoTest.cer /s /r localMachine root

 

CertMgr参数

/addCertificateName

                  添加证书到指定的证书存储中,文件名包括示例中的ContosoTest.cer证书。

        /s

                  指定添加到系统存储中的证书。

/r

指定本地系统存储区<currentUser| localMachine>.

/rCertStoreLocation

指定本地受信任的根证书颁发机构。在注册表中存储在HKEY_LOCAL_MACHINE

 

图表7显示了示例中添加Contoso.com(test)证书到受信任根证书颁发机构存储中。

图表7添加Contoso.com(Test)证书到受信任的根证书颁发机构

 

在受信任的根证书颁发机构存储中查看Contoso.com(Test)证书,仿照step2中打开证书管理单元(MMC)。

图表8显示了Contoso.com(Test)证书在受信任根证书颁发机构存储中的显示

图表8受信任根证书颁发机构存储区

 

SignTool工具也可以被用来验证指定的目录文件的数字签名。下面的示例验证了多个文件之一的数字签名--Toastpkg示例中被签名的目录文件tstamd64.cat

Signtoolverify /pa /v /c tstamd64.cat toastpkg.inf

 

SignTool参数

Verify

        验证指定的目录文件中的一个文件。

/pa

指定当验证数字签名的时候使用Authenticode验证策略。

/v

可选项,是否显示成功执行和警告信息。

/cCatalogFileName

        指定目录文件名,tsamd64.cat

FileName

        指定需要验证的文件名,toastpkg.inf

 

图表9显示了验证toastpkg.inf文件的数字签名

图表9使用SignTool工具验证目录文件的数字签名

 

windows资源管理器中验证目录文件的数字签名,可右键单击文件,选择属性。如果进行了数字签名,文件属性对话框中会有数字签名选项卡,其中包括数字签名,时间戳,和使用签名的证书详细内容。

图表10通过windows的资源管理器验证数字签名

 

Step6使用嵌入式签名对驱动镜像文件测试签名

一个已签名的目录文件是正确安装和加载大多数驱动程序包所必需的。但是,嵌入式签名也可能是一个选项,并且是某些类型的驱动程序所必需的。与其将文件的哈希值放入到一个签名的目录文件中,嵌入式签名更倾向于将数字签名添加至二进制文件中。内核模式下的二进制可能需要两个实例:

  • 当驱动包包含一个引导-启动的驱动

  • 当驱动程序作为应用程序的一部分安装并且不使用目录文件时。

引导-启动驱动

一个引导-启动的驱动程序被WindowsVista操作系统的加载器加载。一个引导驱动可以被以下的定义:

  • INF文件指定启动类型:“Start= 0

  • 内核服务使用内核驱动程序或文件系统驱动程序的ServiceType配置,并且启动模式设置为“boot”。

     

为了最佳系统启动性能,一个驱动包包含一个引导-启动的驱动必须以下两个方法签名:

  • 目录文件签名。一个引导启动驱动包使用一个INF文件必须有个目录文件被安装,就像其他类型的驱动。目录文件在安装期间使用签名验证。

  • 嵌入式签名。一个引导-启动的驱动二进制镜像文件必须使用与交叉证书相一致的SPC证书来进行嵌入式签名。

 

如何给一个引导-启动的驱动进行嵌入式签名

SignTool工具可以给二进制文件和目录文件进行嵌入式签名,包括使用测试证书给二进制文件进行测试签名。以下示例中使用SignTool工具给Toastpkg示例包中的二进制文件和toaster.sys进行测试签名。

下列命令行使用step2创建的Contoso.com(Test)证书对toaster.sys文件进行测试签名。它也可以在数字签名中添加一个时间戳:

Signtool sign/v /s PrivateCertStore /n Contoso.com(Test) /thttp://timestamp.verisign.com/scripts/timestamp.dll amd64\toaster.sys

 

SignTool参数:

Sign

          进行签名的二进制文件。

/v

          指定详细的选项,显示成功执行和警告信息。

/s      CertificationStoreName

          指定包括测试证书的存储空间,PrivateCertStore

/n     TestCertificateName

          指定测试证书的名字为Contoso.com(Test)

/t      URL

          指定的数字签名,由URL上指定的TSA对其打上时间戳。

                  FileName

                           指定被嵌入式签名的二进制文件toaster.sys

 

图示11显示了使用一个测试证书和时间戳对一个二进制文件toaster.sys文件进行嵌入式签名

图示11使用SignTool工具对二进制文件进行嵌入式签名

SignTool也可以对嵌入式签名进行验证。在先前验证目录文件的数字签名例子中,CA颁发的测试证书必须在证书验证之前安装到受信任的根颁发机构中。更多的信息,可以查看step5中的安装CA的测试证书。

下面的例子使用了SignTool验证toaster.sys中的测试签名

Signtoolverify /pa /v amd64\toaster.sys

  • SignTool参数

    Verify

        验证一个指定文件的数字签名。

    /pa

            指定使用当验证数字签名时,使用Authenticode验证策略。

    /v

            指定的详细的选项,显示成功执行和警告信息。

    FileName

            指定进行数字签名验证的二进制文件,amd\toaster.sys

     

    图示12显示了验证一个二进制文件的嵌入式签名

    图示12对一个二进制镜像文件进行数字签名的验证

     

如何安装和加载一个测试签名的驱动包

这一节描述了如何在windows Vista x64测试系统上安装和加载一个测试驱动包。这一步骤继续使用在上一节中被签名的Toastpkg示例驱动包。

:如果只是跟随练习以熟悉工具和过程,可以继续在用于测试签名的同一系统上测试驱动程序的安装。

 

下面是安装和加载测试签名驱动的一般步骤:

准备测试系统

  1. 安装测试证书。

    2、启用内核模式测试签名启动配置选项。

    3、启用代码完整性事件日志记录和系统审计。

    4、重启测试计算机。

 

安装和加载测试驱动包

5、将测试驱动包拷贝到测试计算机中。

6、安装测试签名驱动包。

7、验证测试签名的驱动程序是否正常运行

 

准备测试系统

准备测试系统,请使用用于对驱动程序包进行测试签名并启用Windows Vista内核以验证测试签名的内核模式二进制文件的证书进行配置。这一步骤也启用了代码完整性详细日志选项,开发人员可以在系统启动的时候查看镜像文件验证相关的系统事件。

:这一步骤假设在测试计算机上使用的临时文件夹被拷贝到C:\toaster中。当开始这一步骤之前,你应该在你的测试系统创建这个文件夹。

Step1:安装测试证书

测试系统上必须安装两种证书:


  • 给驱动包进行签名的测试证书

  • CA颁布的测试证书

:如果测试计算机和你进行测试签名包的计算机室同一台的时候,证书已经安装好了,忽略step2.

测试证书Contoso.com(Test)在步骤“Step2:使用MakeCert创建测试证书”中被创建,使用MakeCert工具创建了一个测试证书来对Toastpkg进行签名。证书是被打包成一个文件,名叫ContosoTest.cer

 

安装测试证书

  1. 在测试计算机中,将ContosoTest.cer文件拷贝测试计算机中的C:\toaster文件夹。

  2. 通过右键单击选择使用管理员权限打开命令行窗口。

  3. 使用下列命令安装Contoso.com(Test)到本地系统根目录证书存储空间中。

certmgr.exe /add ContosoTest.cer /s /r localMachine root

  1. 使用下列命令将Contoso.com(Test)安装到本地受信任的根颁发机构存储中。

certmgr.exe /add ContosoTest.cer /s /r localMachinetrustedpublisher

  • CertMgr参数

    /addCertificateName

    将证书添加到指定的证书存储中。

/s

   将证书安装到指定的系统存储空间中。

/rRegistryLocation

指定系统存储空间中注册表的位置为HKEY_LOCAL_MACHINE

CertificateStore

          指定证书的存储,受信任的发布者。

图示13显示如何使用Certmgr.exe添加测试证书到本地受信任的公共证书存储空间。

图示13添加测试证书到信任公共证书存储空间

 

图示14显示了MMC证书管理单元中Contoso.com(Test)安装到受信任的发行者存储中。

图示14Contoso.com(Test)在受信任的发行者存储中

 

第二步将CA颁布的测试证书Contoso.com(Test)证书放到受信任的根证书颁发机构存储中,也是在注册表HKEY_LOCAL_MACHINE中:

certmgr.exe /add ContosoTest.cer /s /rlocalMachine root

  • CertMgr参数

    /add CertificateName

              添加证书到指定的证书存储空间。文件名包含证书示例ContosoTest.cer

    /s

              将证书安装到指定的系统存储空间中。

    /r

              指定本地系统存储位置,可以是currentUser或者localMachine

    /r CertStoreLocation

              指定存储空间为受信任的根证书颁发机构,即“localMachineroot”,注册表位置为HKEY_LOCAL_MACHINE

     

    图示15显示了Contoso.com(Test)证书在测试计算机中添加到受信任的根证书颁发存储中

    图示15添加了Contoso.com(Test)证书到受信任的根证书信任机构存储空间中

     

为了显示测试计算机中的证书,使用MMC证书管理单元查看。更多细节,查看“step5将测试证书安装到受信任的根证书颁发机构存储中”这一节中。

 

如果使用不同的CA颁发的测试证书,则CA的证书可以使用以下命令安装在受信任的根证书颁发机构证书存储中:

certmgr.exe/add TestCertIssuer.cer /s /r localMachine root

Step2:启用内核模式测试签名启动配置项

内核模式测试签名程序不能被一个缺省配置的Windows Vista系统加载。测试签名启动配置选项必须在内核验证测试签名驱动之前手动启用。

 

使用BCDEdit工具启用启动配置测试签名选项

  1. 使用鼠标右键单击选择管理员权限运行一个命令行窗口。

  2. 使用下列命令启用测试签名

bcdedit.exe /set TESTSIGNING ON

  • BCDEdit参数

    /set

               设置一个启动入口点的值。

    TESTSIGNING ON

               设置TESTSIGNING选项为ON

    注:BCDEditwindowsVista和之后的Windows版本中是一个新的启动配置编辑器。更多信息关于BCDEdit,参考“Boot Configuration Data in Windows Vista.

 

BCDEdit中测试签名选项打开,WindowsVista做如下的动作:

  • 在桌面的第四个角上显示一个水印,显示“测试模式”,提醒用户系统启用了测试签名。

  • 操作系统加载器和由任意证书签名的驱动程序将被加载。不需要证书验证链接到受信任的根证书颁发机构。但是,每个驱动镜像文件必须有一个数字签名。

图示16显示了BCDedit命令启用测试签名模式

图示16使用BCDEdit启用测试签名

Step3:启用代码完整性事件日志记录和系统审计

代码完整性验证是驱动程序签名的内核模式组件。它生成镜像验证的系统事件和代码完整性信息的日志:

  • 代码完整性操作日志视图只显示镜像验证错误的事件。

  • 代码完整性详细日志显示成功验证数字签名的事件。

 

以下过程说明如何启用代码完整性详细事件日志记录,以查看所有操作系统成功加载的程序和内核模式映像验证事件。

启用代码完整性详细事件日志记录

  1. 启用事件查看器

最简单的方法打开[开始]菜单,右键单击[计算机],选择[管理],打开[计算机管理]应用程序。

事件查看器也可以在命令行窗口中输入eventvwr.exe打开

  1. 点击左侧窗口中[应用程序和服务日志]关联三角形,在展开的目录选择Microsoft\Windows\CodeIntegrity

  2. 点击[Code Integrity],焦点落在该节点上。

  3. 右键点击[Code Integrity],选择[查看][显示分析和调试日志]

    在左侧的目录中会多一个Verbose的节点。

  4. 右键单击[Verbose]节点,选择[属性]

  5. 在弹出的对话框中的[常规]选项卡中,勾选[启用日志记录]

 

系统事件记录也可以被启用,包括代码完整性验证失败的事件。当系统内核因数字签名验证失败时会生成这些事件。类似事件也记录在代码完整性操作事件日志视图中。

 

启用审计策略在系统操作失败的类别中生成审计事件

在命令行中输入以下的命令:

Auditpol /set /Category:“System“/failure:enable

 

图示17上显示启用系统类别的审计策略

图表17启用安全审计策略

Step4:重启测试计算机

重新启动测试计算机,允许内核模式引导配置选项生效。

 

安装和加载测试签名驱动包

当系统重启之后,测试签名驱动包就可以被安装和加载了。

Step5:将测试签名驱动包拷贝到测试计算机中

将测试签名的驱动包拷贝到C:\toaster临时文件夹中,这一步使用临时文件夹作为本地安装测试驱动包。

Step6:安装测试驱动包

有两种方法安装驱动包

  • 使用WDK中的命令行工具Devcon,安装驱动。

  • 使用Windows添加硬件向导

 

使用Devcon安装驱动包

  1. 打开WDK中编译环境命令行窗口,进入到C:\toaster目录。

  2. 根据WDK的自签名示例使用Devcon,示例位置在C:\WinDDK\BuildNumber\bin\selfsign\selfsign_example.cmd

 

设备驱动也可以使用添加硬件向导安装。下面的示例演示了使用硬件向导安装Toastpkg驱动包,该驱动包基于INF,使用了测试签名。

 

使用硬件向导安装驱动包

  1. 打开一个命令行窗口。

  2. 运行hdwwiz.cpl启动添加硬件向导,点击[操作]菜单,选择[添加过时硬件],点击[下一步]跳转到第二页。

  3. 选择[高级],点击下一步。

  4. 在列表框中选择[显示所有设备],点击下一步。

  5. 选择[从磁盘安装]

  6. 输入包含C:\toaster的文件夹路径。

  7. 选择toastpkg.inf文件,点击[打开]

  8. 点击[确定]

  9. 在剩下的两页中都选择[下一步],点击[结束],完成安装。

Step7:验证测试签名的驱动程序是否正确运行

验证Toastpkg是否正确运行

  1. 打开设备管理器

  2. 从驱动列表中选择Toaster,如图示18

  3. 打开驱动属性对话框,双击Toaster示例包。

  4. 确认Toaster工作正常,在[常规]选项卡中,点击状态。

图示18验证Toastpkg正确运行

 

驱动测试签名的疑难解答

下列列表提供了几种常见的方法来解决加载测试签名驱动的问题。在下面的节中,描述了更多的细节:

  • 使用添加硬件向导和设备管理来检查驱动是否加载和签名。

  • 检查Windows安全审计日志,来检查系统完整性事件和镜像验证失败事件。为了使这些日志能够得到记录,系统审计策略必须被启用。

  • 检查代码完整性操作事件日志来查看所有关于驱动签名验证和镜像验证错误的内容。

  • 检查代码完整性信息事件日志,来检查驱动签名验证相关的事件。

必须明确启用了列表中的最后三个项目。更多的信息参考step3:启用代码完整性事件日志记录和系统审计”。

使用添加硬件向导

添加硬件向导显示了驱动安装结束后的状态。如果Windows不能够加载设备驱动,会指示出状态错误码39,如图19

图示19添加硬件向导显示了驱动安装结束后,但是没有加载时的状态。

使用设备管理器

使用设备管理器定位测试签名错误,在设备管理器中,选择驱动名称,双击后打开属性对话框。

 

图示20显示了Toaster的属性对话框。

图示20Toastpkg属性对话框

该对话框将设备状态显示为代码39。此状态可能指示代码完整性不允许加载驱动程序或内核模块,因为它们未正确签名。按照下一节中的说明确定签名是无效的还是驱动程序或模块未被签名。

使用Windows安全审计日志

如果驱动程序由于缺少有效的签名而无法加载,则审核失败事件将记录在Windows安全日志中,指示代码完整性无法验证驱动程序文件映像的哈希值。审计失败事件会记录下来,日志条目包括驱动程序文件的完整路径名仅当本地安全审核策略启用系统故障事件日志记录时,才会生成安全日志审核事件。

安全审计日志必须明确启用。更多的信息,参考“Step3:启用代码完整性事件日志记录和系统审计”

 

检查安全日志

  1. 打开命令行窗口。

  2. 输入Eventvwr.exe命令,启动事件查看器。

    事件查看器也可以通过计算机中的管理面板程序启动。

  3. 打开windows安全审计日志。

  4. 检查事件ID5038的系统完整性事件的日志。

  5. 双击日志条目以显示其[事件属性]对话框,其中提供了事件的详细说明。

 

图示21显示了因为使用了没有签名的Toaster.sys而导致安全审计事件日志的事件属性对话框。

图示21显示了代码完整性安全审计日志条目

 

使用代码完整性事件操作事件日志

如果驱动程序加载失败,因为未签名或生成映像验证错误,则代码完整性会将事件记录在代码完整性操作事件日志中。始终启用代码完整性操作事件。

        可以使用事件查看器查看代码完整性事件。

检查代码完整性操作日志

  1. 打开命令行窗口。

  2. 输入Event.exe,启动Window事件查看器。

    事件查看器也可以由控制面板中的计算机管理打开。

  3. 打开Windows代码完整性日志。

  4. 双击日志条目以显示其[事件属性]对话框,其中提供了事件的详细说明。

 

图示22显示了[事件属性]对话框中由未签名的Toaster.sys文件引起的代码完整性操作日志事件

图示22代码完整性操作事件日志条目

使用代码完整性详细日志中的事件信息

代码完整性信息日志的详细视图跟踪所有内核模式映像验证检查的事件。这些事件显示系统上加载的所有驱动程序映像成功验证。

 

检查代码完整性操作日志

  1. 如上面的示例中的操作步骤,打开一个事件查看器。

  2. 点击[应用程序和服务日志\Microsoft\Windows\Code Integrity]焦点落在该节点上。

  3. 右键点击[Code Integrity],从弹出的快捷菜单中选择[查看]

  4. 选择[显示分析和调试日志]

    这将在左侧的树形结构名录中显示两个节点:OperationalVerbose

  5. 右键单击Verbose节点,在弹出的右键菜单中选择[属性]

  6. [常规]选项卡中,选择[启用日志记录]来启用verbos日志模式。

  7. 重启计算机以重新加载所有的内核模式二进制文件。

  8. 当重启完成后,打开MMC控制台事件查看器单元,查看CodeIntegrity verbose日志。

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值