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里的文件了。 但是百度和必应得到的中文结果都很奇葩…

Java 实现二叉排序树(BST)

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

用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;主要用于求解有权图中的单源最短路径问题。它由荷兰计算机科学家艾兹赫尔戴克斯特…

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

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

vue封装接口

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

【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…

Windows 下ffmpeg安装及实践

Windows 下ffmpeg安装及实践 背景安装实践其他 背景 最近负责音频文件处理相关的业务&#xff0c;涉及到 ffmpeg 对一些音频文件格式的校验&#xff0c;记录一下安装过程及踩坑过程。 安装 如图1所示&#xff0c;进入官网&#xff0c;在windows下任选一个文件&#xff1a;h…

day01 深度学习介绍

目录 1.1深度学习介绍 1.2神经网络NN 1、概念&#xff1a; 2、神经元 3、&#xff08;单层&#xff09;神经网络 4、感知机&#xff08;两层&#xff09; 5、多层神经网络 6、激活函数 &#xff08;1&#xff09;饱和与非饱和激活函数 &#xff08;2&#xff09;饱和激活…

写着玩的程序:pycharm实现无限弹窗程序(非病毒程序,仅整蛊使用)

运行环境 PyCharm 2023.2.1 python3.11 具体内容 源代码 import tkinter as tk from tkinter import messagebox import threadingclass PopupGenerator:def __init__(self):self.root tk.Tk()self.root.geometry("200x120")self.root.title("无限弹窗&qu…

LeetCode---380周赛

题目列表 3005. 最大频率元素计数 3006. 找出数组中的美丽下标 I 3007. 价值和小于等于 K 的最大数字 3008. 找出数组中的美丽下标 II 一、最大频率元素计数 这题就是个简单的计数题&#xff0c;正常遍历统计数据即可&#xff0c;关键是你要会写代码逻辑。 代码如下&…

Java设计模式-代理模式(7)

馆长准备了很多学习资料,其中包含java方面,jvm调优,spring / spring boot /spring cloud ,微服务,分布式,前端,js书籍资料,视频资料,以及各类常用软件工具,破解工具 等资源。请关注“IT技术馆”公众号,进行关注,馆长会每天更新资源和更新技术文章等。请大家多多关注…

steam游戏搬砖项目还能火多久?

最近放假回到老家&#xff0c;见了不少亲戚朋友&#xff0c;大家不约而同都在感叹今年大环境不好&#xff0c;工作不顺&#xff0c;生意效益不好&#xff0c;公司状况不佳&#xff0c;反问我们生意如何&#xff1f;为了让他们心里好受一点&#xff0c;我也假装附和道:也不咋地&…

为什么电脑降价了?

周末&#xff0c;非常意外地用不到3000元买到了一款2023年度发布的华为笔记本I5,16G,500G&#xff0c;基本是主流配置&#xff0c;我非常意外&#xff0c;看了又看&#xff0c;不是什么Hwawii&#xff0c;或者Huuawe。然后也不是二手。为什么呢&#xff1f;因为在ALU和FPU之外&…

Maven 打包时,依赖配置正确,但是类引入出现错误,一般是快照(Snapshot)依赖拉取策略问题

问题描述&#xff1a; 项目打包时&#xff0c;类缺少依赖&#xff0c;操作 pom.xml -> Maven -> Reload project &#xff0c;还是不生效&#xff0c;但是同事&#xff08;别人&#xff09;那里正常。 问题出现的环境&#xff1a; 可能项目是多模块项目&#xff0c;结构…

图论可达性c语言实现

概述 图论中的可达性是指在图中是否存在从一个顶点到另一个顶点的路径。这是图论中的一个基本概念&#xff0c;对于许多实际问题的建模和解决都非常重要。以下是关于图论可达性的一些重要概念和信息&#xff1a; 有向图和无向图&#xff1a; 图可以分为有向图和无向图。在有向图…