如何给开发好的Windows内核驱动签名?双证书。ssl证书.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何给开发好的Windows内核驱动签名?双证书。ssl证书.相关的知识,希望对你有一定的参考价值。

微软决定在vista及以后的系统上,加强对第三方程序特别是内核驱动程序的安全管理。很重要的一项措施是要求所有的内核模块都必须拥有合法的数字签名。这项措施在32位系统上是可选的,但在64位系统上是强制的。当今大部分系统都是64位的,所以,内核开发者必须慎重考虑数字签名的问题。 现在我们没有看到免费的数字签名机构,所有的数字签名都是由商业机构签发,需要一笔不菲费用,对于发布版本的内核驱动来说,这已经不可避免。 但是一般的个人,或者是刚准备在做内核开发方面的企业完全可以用其他已经购买好的证书进行签名,这样可以省掉一大笔费用,最重要的是方便。

可以使用EV代码签名或者单位代码签名来签署Windows内核代码,沃通单位代码签名现在搞活动,买2送1,比较划算,可以选择购买。https://www.wosign.com/marketing/ssl-sale-201710.htm 参考技术A EV代码签名证书 由微软官方合作伙伴DigiCert签发,完全符合微软要求。
Win10内核驱动强制签名,申请ssl盾 EV代码签名证书

windows 驱动与内核调试 学习

概述

本文讲述笔者在学习内核和驱动开发的笔记。

驱动概述

一般驱动需要运行内核权限下运行(因为涉及硬件读取),比如Intel下的ring 0 权限下。在windwos大量病毒和杀软为了特殊目的往往都是通过将自身升级为内核驱动方式进行运作。如果病毒程序首先进入ring 0理论上可以杀软将毫无作用。微软为了扼杀此类程序在windwo7 64位系统上会强制校验驱动程序签名,如果签名非微软认可将不会被加载。

微软官方驱动学习指南

驱动开发环境配置

首先我们根据当前操作系统下载对应的WDKvisual studio。相关下载地址:微软相关下载地址

微软对于IDE配置写的及其详细不想写轮子,开始第一个驱动程序,当你配置完成我们可以通过visual studio模板创建一个工程


我们第一个示例程序如下:

#include <Ntddk.h>

//这个函数被注册用于驱动卸载调用
VOID myUnload(
    struct _DRIVER_OBJECT* DriverObject
) 
    UNREFERENCED_PARAMETER(DriverObject);

    DbgPrint("hello  drive unloaded");



//驱动被加载的时候会调用此函数
NTSTATUS
DriverEntry(
    _In_ struct _DRIVER_OBJECT* DriverObject,
    _In_ PUNICODE_STRING    RegistryPath
)

    //如果你没有用到参数需要告诉系统。
    UNREFERENCED_PARAMETER(RegistryPath);
    //打印信息
    DbgPrint("hello  drive loaded");
    //驱动卸载回调注册
    DriverObject->DriverUnload = myUnload;
    return STATUS_SUCCESS;

点击生成驱动文件

如果抛出如下错误,可以下载相关库再次编译


这里由于是学习目的就不需要启用了,关闭如下图所示:

tip:spectre attack是一个物理级别的漏洞

拷贝编译产物到目标操作系统(系统需要关闭数字签名)

可以利用一些三分工具加载相关驱动如下图所示

安全启动点击停止得到相关输出:

接下来写入一个有趣的蓝屏代码

我们可以看到如下图错误

驱动和内核调试

我们假设被调试的内核系统是win10 且运行在vmware中。

被调试的机器按照如下条件配置:
(1) 调试机器和被调试机器能相互ping(如果不能请关闭防火墙等)

(2) 管理员身份运行cmd 键入bcdedit /debug on 开启内核调试

可参阅 BCDEdit 调试开关

(3) 根据情况配置 配置网络或者串口调试设置
距离一个串口的配置命令如下:

bcdedit /dbgsettings serial baudrate:115200 debugport:2

可参阅 BCDEdit 调试配置

(4) 如果开启了串口调试那么配置vmware 相关串口

上述配置完成后你可用windbg进行调内核代码。


确定后 ,重启被调试的电脑。

其他快捷链接方式:

目标后面拼接 -b -k com:pipe,port=\\.\\pipe\\com_2,resets=0 也是可以的。

挂到断点继续输入g运行即可

当我们驱动断点触发时

你会差异的发现自动关联的了源码。大致原因时sys驱动文件的debug版本会在PE结构中保留符号表位置

如果需要windbg查看dbgprint的输出请执行

 ed nt!Kd_Default_Mask 8

参考

编写 Hello World Windows 驱动程序 (KMDF)

win10关闭驱动数字签名

Disabling-Driver-Signature-Verification-on-Windows-8-or-10

微软签名概述

spectre 漏洞文档

BCDEdit 调试开关

BCDEdit 调试配置

以上是关于如何给开发好的Windows内核驱动签名?双证书。ssl证书.的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft 已弃用交叉签名证书,为 Windows 11 和 10 签署内核驱动程序的新程序是啥?

Windows 硬件开发人员怎样选择代码签名证书类型

驱动程序签名:如何让 MakeCert 测试证书在 x64 上工作

windows 驱动与内核调试 学习

windows 驱动与内核调试 学习

怎样验证软件是否可信?是否被篡改?