Windows 10中的驱动程序与device guard的兼容性

文章目录

  • 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 的主要目标是防止未经授权的应用程序运行在受保护的计算机上。它通过使用硬件和软件的安全功能来实现这一目标,包括以下核心组件:

  1. 虚拟化安全模块(Virtualization-based Security,VBS):利用硬件虚拟化技术,将操作系统和关键系统组件隔离在一个独立的安全环境中,以防止恶意软件的横向扩展和攻击。

  2. 安全启动(Secure Boot):确保计算机启动过程中仅运行受信任的和经过数字签名的操作系统和启动组件,防止恶意软件篡改系统启动过程。

  3. 应用程序白名单(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)。

如何验证驱动程序的兼容性

有四个步骤可以验证驱动程序的兼容性:

  1. 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 安全 。
单击单个搜索结果。
切换到 设备安全 选项卡。
单击 核心隔离详细信息选项。
切换 内存完整性 按钮以将其打开。
重启你的电脑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VsCode容器开发 - VsCode连接远程服务器上的docker

VsCode容器开发 - VsCode连接远程服务器上的docker 前言 之前在服务器上的Docker内开发&#xff0c;文件编辑起来就很不爽。不如使用VsCode直接打开远程服务器上的Docker&#xff0c;这样就能在VsCode里直接无缝编辑Docker里的文件了。 但是百度和必应得到的中文结果都很奇葩…

openssl3.2/test/certs - 013 - primary server-EKU root: sroot-cert

文章目录 openssl3.2/test/certs - 013 - primary server-EKU root: sroot-cert概述笔记END openssl3.2/test/certs - 013 - primary server-EKU root: sroot-cert 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 // \file my_openssl_linux_log_doc_013.txt // \not…

Java 实现二叉排序树(BST)

文章目录 介绍实现先定义一个节点树测试 总结 介绍 二叉排序树&#xff08;Binary Search Tree&#xff0c;简称BST&#xff09;是一种特殊的二叉树&#xff0c;其中每个节点的值都大于其左子树的任意节点值&#xff0c;而小于其右子树的任意节点值。 它具有以下特点&#xf…

笔记-孙子兵法-第三篇-谋攻(2)-集中优势兵力;将在外君命有所不受;知彼知己,百战不殆;

笔记-From 《华杉讲透孙子兵法》和《兵以诈立&#xff0c;我读孙子》 目录 第三篇-谋攻&#xff08;2&#xff09; 原文&#xff1a; Ankie的笔记-集中优势兵力&#xff1b;将在外君命有所不受&#xff1b;知彼知己&#xff0c;百战不殆&#xff1b; 第三篇-谋攻&#xff08…

有关HTML知识点汇总总结

一、VScode常用快捷键列表 代码格式化&#xff1a;ShiftAltF向上或向下移动一行&#xff1a;AltUp或AltDown快速复制一行代码&#xff1a;ShiftAltUp或ShiftAltDown快速保存&#xff1a;CtrlS快速查找&#xff1a;CtrlF快速替换&#xff1a;CtrlH 二、HTML系列总结 1、什么是H…

用flinkcdc debezium来捕获数据库的删除内容

我在用flinkcdc把数据从sqlserver写到doris 正常情况下sqlserver有删除数据&#xff0c;doris是能捕获到并很快同步删除的。 但是我现在情况是doris做为数仓&#xff0c;数据写到ods&#xff0c;ods的数据还会通过flink计算后写入dwd层&#xff0c;所以此时ods的数据是删除了…

“智赋校园 无忧运营”——聚铭网络2024高校客户沙龙圆满举办

随着信息技术的迅猛发展&#xff0c;高校教育行业正经历着一场前所未有的数字化转型。然而&#xff0c;网络安全问题日益凸显&#xff0c;对高校的教学、科研和管理带来了巨大的挑战。在此背景下&#xff0c;聚铭网络特举办了以“智赋校园 无忧运营”为主题的2024高校客户沙龙&…

搜索与图论第六期 最短路问题

前言 最短路问题真的很重要很重要希望大家都能够完全掌握所有最短路算法&#xff01;&#xff01; 一、最短路问题的分类 Dijkstra&#xff1a; Dijkstra算法是一种著名的图算法&#xff0c;主要用于求解有权图中的单源最短路径问题。它由荷兰计算机科学家艾兹赫尔戴克斯特…

Go 入门

1. hello&#xff0c;world hello&#xff0c;world hello&#xff0c;world 经典示例 package main import "fmt" func main() { fmt.Println("你好&#xff0c;Go") } Go 基础知识Go 是编译型的语言Go 的工具链将程序的源文件转变成机器相关的原…

小红书达人推广模式有哪些,品牌投放策略总结

小红书是一个以种草为核心的平台&#xff0c;而品牌方进行种草时&#xff0c;就需要依托达人的力量。今天我们和大家分享下小红书达人推广模式有哪些&#xff0c;品牌投放策略总结&#xff01; 一、小红书达人推广模式有哪些 1. 明星种草 这种小红书达人推广模式&#xff0c;依…

BioXCell--RecombiMAb anti-mouse CTLA-4 (CD152) (LALA-PG)

9D9-CP008单克隆抗体是原始9D9单克隆抗体的重组嵌合型抗体。可变结构域序列与原始9D9克隆号相同&#xff0c;但是恒定区序列已经从小鼠IgG2b变为小鼠IgG2a。9D9-CP008单克隆抗体在Fc片段中也含有LALA-PG突变&#xff0c;使其无法与内源性Fcγ受体结合。 9D9-CP008单克隆抗体能与…

vue封装接口

目录 封装接口前缀 配置逻辑 接口存放文件 配置代理 获取数据方法 封装接口前缀 config.js const serverConfig {baseURL: "https://xxx.xxxxxxxx.com/api", // 请求基础地址,可根据环境自定义useTokenAuthorization: false, // 是否开启 token 认证};export …

【手写数据库toadb】02 开发数据库内核准备阶段-git工具使用

git工具使用 开发环境 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,…

langchain中的Document类

在Langchain-Chatchat的上传文档接口&#xff08;upload_docs&#xff09;中有个自定义的docs字段&#xff0c;用到了Document类。根据发现指的是from langchain.docstore.document import Document。本文简要对Document类进行介绍。 1.上传文档接口upload_docs def upload_d…

检测到目标SSL证书已过期怎么回事?

在浏览网站时&#xff0c;有时会遇到一个警告&#xff0c;提示目标SSL证书已过期。这是一个令人担忧的信号&#xff0c;意味着网站的安全性可能存在问题。那么&#xff0c;为什么会出现目标SSL证书过期的情况&#xff1f;我们该如何应对呢&#xff1f; 首先&#xff0c;我们需要…

LCD-LMD-PSO-ELM的电能质量分类,LCD特征提取,LMD特征提取,粒子群算法优化极限学习机

目录 背影 极限学习机 LCD-LMD-PSO-ELM的电能质量分类,LCD特征提取,LMD特征提取,粒子群算法优化极限学习机 主要参数 MATLAB代码 效果图 结果分析 展望 完整代码下载链接:LCD-LMD-PSO-ELM的电能质量分类,LCD特征提取,LMD特征提取,粒子群算法优化极限学习机资源-CSDN文库…

【C语言进阶】预处理详解

引言 对预处理的相关知识进行详细的介绍 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 引言 预定义符号 #define定义常量 #define定义宏 带有副作用的宏参数 宏替换的规则 …

理解LSTM一种递归神经网络(RNN)

1 递归神经网络结构 一个简单的传统神经网络结构如下图所示&#xff1a; 给他一些输入x0,x1,x2 … xt, 经过神经元作用之后得到一些对应的输出h0,h1,h2 … ht。每次的训练&#xff0c;神经元和神经元之间不需要传递任何信息。 递归神经网络和传统神经网络不同的一个点在于&am…

Linux 网络传输学习笔记

这篇是混合《Linux性能优化实战》以及 《Wireshark网络分析就这么简单》的一些关于Linux 网络的学习概念和知识点笔记 &#xff0c;主要记录网络传输流程以及对于TCP和UDP传输的一些影响因素 Linux 网络传输流程 借用一张倪朋飞先生的《Linux性能优化实战》课程中的图片 接收流…

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(2.1) —— 任务挂起和恢复

前言 &#xff08;1&#xff09;FreeRTOS是我一天过完的&#xff0c;由此回忆并且记录一下。个人认为&#xff0c;如果只是入门&#xff0c;利用STM32CubeMX是一个非常好的选择。学习完本系列课程之后&#xff0c;再去学习网上的一些其他课程也许会简单很多。 &#xff08;2&am…