文章目录
- Windows 10中的驱动程序与device guard的兼容性
- windows的device guard是什么
- 如何构建兼容的驱动程序
- 如何验证驱动程序的兼容性
- 驱动程序验证程序兼容性检查
- 启用基于虚拟化的隔离代码完整性
- HLK测试(桌面和服务器)
- Device Guard准备工具
- DGReadiness 工具
- 准备测试电脑
Windows 10中的驱动程序与device guard的兼容性
windows的device guard是什么
Windows 10有一个名为“Device Guard ”的新功能,该功能使组织能够以一种新的和未知的恶意软件变体以及高级持久威胁(APTS)提供高级恶意软件保护的方式锁定设备。Device Guard可以使用硬件技术和虚拟化将代码完整性(CI)决策函数隔离到Windows操作系统的其余部分。当使用基于虚拟化的安全性隔离代码完整性时,内核内存实现可执行的唯一方法是通过代码完整性验证。这意味着内核内存页面不能写和可执行(W+X),并且可执行代码不能被直接修改。
Device Guard 的主要目标是防止未经授权的应用程序运行在受保护的计算机上。它通过使用硬件和软件的安全功能来实现这一目标,包括以下核心组件:
-
虚拟化安全模块(Virtualization-based Security,VBS):利用硬件虚拟化技术,将操作系统和关键系统组件隔离在一个独立的安全环境中,以防止恶意软件的横向扩展和攻击。
-
安全启动(Secure Boot):确保计算机启动过程中仅运行受信任的和经过数字签名的操作系统和启动组件,防止恶意软件篡改系统启动过程。
-
应用程序白名单(Code Integrity):允许管理员定义可运行的应用程序和驱动程序的白名单,并阻止未经授权的应用程序运行。
总结:为了确保驱动程序与Device Guard的兼容性,驱动程序必须经过签名、代码完整性检查,并来自可信源。同时,确保系统启用了可信启动和UEFI Secure Boot功能也是重要的。
如何构建兼容的驱动程序
由于内存页面和sections永远无法同时写+可执行,因此第一步是确保data和code的明确分离,而不是尝试直接修改code pages。
Opt-in to NX by default
Use NX APIs/flags for memory allocation - NonPagedPoolNx
Don’t use sections that are both writable and executable
Don’t attempt to directly modify executable system memory
Don’t use dynamic code in kernel
Don’t load data files as executable
Section Alignment must be a multiple of 0x1000 (PAGE_SIZE). E.g. DRIVER_ALIGNMENT=0x1000
默认选择加入 NX
使用 NX API/标志进行内存分配 (NonPagedPoolNx)
不使用既可写又可执行的部分
不尝试直接修改可执行系统内存
不在内核中使用动态代码
不将数据文件加载为可执行文件
节对齐是 0x1000 (PAGE_SIZE) 的倍数。例如 DRIVER_ALIGNMENT=0x1000
使用默认设置时,请使用最新版本的WDK和Visual Studio 2015来生成兼容驱动程序。Visual Studio 2013目前将初始部分标记为RWX。这将很快修补,但仍然兼容,因为Windows 10将自动从初始部分剥离写入权限(W)。
如何验证驱动程序的兼容性
有四个步骤可以验证驱动程序的兼容性:
- Use Driver Verifier with the new Code Integrity compatibility checks enabled
驱动程序验证程序兼容性检查
驱动程序验证程序兼容性检查
驱动程序验证仪具有新的代码完整性选项标志(0x02000000),以启用额外的检查以验证符合此功能的符合性。要从命令行启用此功能,请使用以下命令:
verifier.exe /flags 0x02000000 /driver <driver.sys>
要选择此选项,如果使用验证程序图形界面,请选择Create custom settings (for code developers)
,选择Next
,然后选择Code integrity checks
。
用旧版本的Visual Studio构建的驱动程序将在INIT部分(WRX)上失败。但是,如果这是唯一的问题,您可以忽略此问题并在内核调试器中击中此问题,因为这不会引起与此功能的任何兼容性问题。即将到达驱动程序验证者的更新不会标记初始部分。
启用基于虚拟化的隔离代码完整性
Windows的企业和服务器版本支持基于虚拟化的安全性。为了启用基于虚拟化的代码完整性保护,最简单的方法是使用GPEDIT,如下所述。这将打开Hyper-V和隔离用户模式,并启用该功能:
gpedit.msc
Computer Configuration -> Administrative Templates -> System -> Device Guard , choose Turn On Virtualization Based Security
现在启用了基于虚拟化的代码完整性保护。 重启计算机。
HLK测试(桌面和服务器)
新的HLK测试,即Hypervisor代码完整性准备测试, 需要通过Microsoft签名批准HVCI驱动程序。桌面和服务器SKU都需要与HVCI兼容的驱动程序。HLK测试是一项基本测试,以确保与HVCI兼容的驱动程序正确加载并由OS运行。
尽管仅通过HLK测试就可以获得Microsoft签名,但我们强烈建议使用启用设备防护功能进行彻底的功能测试。 例如,可能存在错误编码的内存分配,违反了NX保护,导致失败不会被测试捕获。**驱动作者应彻底测试驱动,同时启用设备防护设备。 **
在驱动开发和HLK测试期间,应禁用Device Guard,因为Device Guard可能会阻止驱动加载。
Device Guard准备工具
Device Guard and Credential Guard hardware readiness tool 也可用于检查设备上所有已安装驱动程序的HVCI兼容性。该下载包括一个包含用法README文件。 请注意,在运行准备工作工具时,必须禁用Device Guard,因为Device Guard可能会阻止驱动加载,并且驱动程序无法用于测试。有关准备工作工具的更多信息,请参阅使用Device Guard准备工具 来评估HVCI驱动程序的兼容性
DGReadiness 工具
DGReadiness 工具旨在检查创建支持各种安全增强功能的 PC 的许多要求。本节介绍如何使用该工具来评估驱动程序在受 Hypervisor 保护的代码完整性 (HVCI) 环境中运行的能力。
要使用 DGReadiness Tool,请完成以下步骤:
准备测试电脑
输入 Virtualization based security
,开启 基于虚拟化的安全性。然后根据提醒,重启电脑。
如果是虚拟机,这里记得 点击CPU,设置 虚拟化引擎,开启 虚拟化 Intel VT-x/EPT 或 AMD-V/RVI(V)
启用基于虚拟化的代码完整性保护- 运行系统信息应用 (msinfo32)。查找以下项目:“基于虚拟化的安全性”。它应该显示:“正在运行”。
具体步骤:
在任务栏搜索框中搜索 Windows 安全 。
单击单个搜索结果。
切换到 设备安全 选项卡。
单击 核心隔离详细信息选项。
切换 内存完整性 按钮以将其打开。
重启你的电脑。