Win32 API功能封装
+ -

内核测试模式过DSE签名

2023-11-24 15 0
原文转自:https://lyshark.blog.csdn.net/article/details/127467915

微软在x64系统中推出了DSE保护机制,DSE全称(Driver Signature Enforcement),该保护机制的核心就是任何驱动程序或者是第三方驱动如果想要在正常模式下被加载则必须要经过微软的认证,当驱动程序被加载到内存时会验证签名的正确性,如果签名不正常则系统会拒绝运行驱动,这种机制也被称为驱动强制签名,该机制的作用是保护系统免受恶意软件的破坏,是提高系统安全性的一种手段。

在Windows操作系统中,为了保护系统安全性,有一个叫做驱动程序签名验证的机制,它的作用是验证驱动程序是否来自受信任的发行者(也就是签名)。验证失败的驱动程序不能加载到系统中,这个机制加强了对操作系统的保护和对恶意软件的防范。

在驱动程序开发中,如果没有有效的签名,将会遇到签名验证的问题。为了规避这些问题,开发者可能会尝试在调试模式下修改 KLDR_DATA_TABLE_ENTRY 结构体中的 Flags 标志。

KLDR_DATA_TABLE_ENTRY 结构体是内核中用于表示加载的驱动程序的数据结构之一。其中的 Flags 标志用于指示加载过程中的各种属性,包括签名验证。它定义在 ntddk.h 头文件中,具体的结构如下:

typedef struct _KLDR_DATA_TABLE_ENTRY {
    LIST_ENTRY InLoadOrderLinks;
    PVOID ExceptionTable;
    ULONG ExceptionTableSize;
    PVOID GpValue;
    PVOID NonPagedDebugInfo;
    PVOID ImageBase;
    PVOID EntryPoint;
    ULONG SizeOfImage;
    UNICODE_STRING FullDllName;
    UNICODE_STRING BaseDllName;
    ULONG Flags;
    USHORT LoadCount;
    USHORT TlsIndex;
    LIST_ENTRY HashLinks;
    PVOID SectionPointer;
    ULONG CheckSum;
    ULONG TimeDateStamp;
    PVOID LoadedImports;
    PVOID EntryPointActivationContext;
    PVOID PatchInformation;
} KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;

在调试模式下,可以通过修改 KLDR_DATA_TABLE_ENTRY 结构体中的 Flags 标志来规避签名验证。具体而言,可以将 pLdrData->Flags 的值与 0x20 进行按位或操作,将 Flags 的对应位置位,以绕过签名验证。这样驱动程序将不再进行签名验证,避免了重复签名的麻烦。

代码的实现非常容易,如下所示:

// 署名权
// right to sign one's name on a piece of work
// PowerBy: LyShark
#include <ntifs.h>

// 绕过签名检查
BOOLEAN BypassCheckSign(PDRIVER_OBJECT pDriverObject)
{
#ifdef _WIN64
    typedef struct _KLDR_DATA_TABLE_ENTRY
    {
        LIST_ENTRY listEntry;
        ULONG64 __Undefined1;
        ULONG64 __Undefined2;
        ULONG64 __Undefined3;
        ULONG64 NonPagedDebugInfo;
        ULONG64 DllBase;
        ULONG64 EntryPoint;
        ULONG SizeOfImage;
        UNICODE_STRING path;
        UNICODE_STRING name;
        ULONG   Flags;
        USHORT  LoadCount;
        USHORT  __Undefined5;
        ULONG64 __Undefined6;
        ULONG   CheckSum;
        ULONG   __padding1;
        ULONG   TimeDateStamp;
        ULONG   __padding2;
    } KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;
#else
    typedef struct _KLDR_DATA_TABLE_ENTRY
    {
        LIST_ENTRY listEntry;
        ULONG unknown1;
        ULONG unknown2;
        ULONG unknown3;
        ULONG unknown4;
        ULONG unknown5;
        ULONG unknown6;
        ULONG unknown7;
        UNICODE_STRING path;
        UNICODE_STRING name;
        ULONG   Flags;
    } KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;
#endif

    PKLDR_DATA_TABLE_ENTRY pLdrData = (PKLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;
    pLdrData->Flags = pLdrData->Flags | 0x20;

    return TRUE;
}

VOID UnDriver(PDRIVER_OBJECT driver)
{

}

NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath)
{
    NTSTATUS status;

    // 绕过签名检查
    // LINKER_FLAGS=/INTEGRITYCHECK
    BypassCheckSign(Driver);

    DbgPrint("[驱动已加载] hello lyshark.com \n");

    Driver->DriverUnload = UnDriver;
    return STATUS_SUCCESS;
}

将程序拖入到虚拟机,直接运行即可加载,无需再继续签名.

当然这种方式只能在测试模式下使用,在正常模式也是无效的,只是为了方便测试驱动。

0 篇笔记 写笔记

获取应用程序数字签名
一般的应用程序在正式发布前都会进行数字签名。如我们经常听歌的酷狗音乐,其通过查看文件属性,可以看到数字签名如下:那么怎么通过编程来获取数字签名的内容?数字签名的获取一般是需要动态载入以下DLL:Wintrust.dllCrypt32.dll相关的函数#define C_WinVerify......
Windows驱动自签名
需要makecert.exe和signtool.exe这两个开发工具带的程序生成证书makecert -r -pe -ss pnpon -n "CN=pnpon.com" pnpon.cer签名signtool sign /v /s pnpon /t http://times......
win10企业版64位如何永久禁用驱动数字签名
在win10下用一个命令就可以禁用驱动程序强制签名禁止强制签名,以管理员的身份运行cmd 执行以下命令bcdedit.exe /set nointegritychecks on恢复默认验证,执行如下命令即可:bcdedit.exe /set nointegritychecks off......
让系统加载未签名的APO
打开注册表:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionAudio创建注册表项:DisableProtectedAudioDG = 1 (DWORD)......
win10,Win11如何关闭数字签名认证
数字签名认证可以让系统不加载未经过WHQL或者EV授权的的驱动程序的加载。但是我们在实际使用过程中,经常要调试,所以关闭数字签名证书就很有必要。win10,Win11如何关闭数字签名认证1、在桌面开始菜单中击右键,在弹出的菜单中选择“以管理员身份运行命令行窗口”页面。2、在打开的命令窗口页面中输入......
Win11怎么禁用驱动程序强制签名? 关闭Win11驱动强制签名的技巧
什么是驱动程序签名驱动程序签名又叫做驱动程序的数字签名,它是由微软的Windows硬件设备质量实验室完成的。硬件开发商将自己的硬件设备和相应的驱动程序交给该实验室,由实验室对其进行测试,测试合格后实验室将在其驱动程序中添加数字签名。由于数字签名是由微软完成的。Win11设备只有安装了驱动才能正常使......
删除测试签证书WDKTestCert
Win+R 键调出运行对话框,输入 certmgr.msc点击确认。一般情况下我们的测试证书安装在个人目录下:或如上面的WDKTestCert的就是我们的证书。我们手动删除它。有的人的位置不一样,需要自己手动找一找。......
内核测试模式过DSE签名
微软在x64系统中推出了DSE保护机制,DSE全称(Driver Signature Enforcement),该保护机制的核心就是任何驱动程序或者是第三方驱动如果想要在正常模式下被加载则必须要经过微软的认证,当驱动程序被加载到内存时会验证签名的正确性,如果签名不正常则系统会拒绝运行驱动,这种机制也......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!