Kernel DMA Protection for Thunderbolt™ 3

在Windows 10 1803版本中,Microsoft引入Kernal DMA Protection功能,以保护电脑免受DMA攻击,避免敏感信息泄露和恶意软件注入。该功能利用IOMMU阻止外设启动和执行DMA,需新的UEFI固件支持,与BitLocker DMA攻击对策不兼容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Applies to

  • Windows 10

在Windows 10 1803(RS4)版本中,为了保护电脑在通过使用连接到Thunderbolt™3端口的PCI热插拔设备时避免受到DMA Attacks ,Microsoft引入了一个称为Kernal DMA Protection的新feature;DMA attacks 可能导致保存在PC上的敏感信息泄露,
甚至会注入恶意软件,使攻击者能够绕过锁定屏幕或者去远程控制PC。

这个feature不能通过1394/FireWire、PCMCIA、CardBus、ExpressCard等免受DMA攻击。

Background

PCI设备是支持dma的,这允许它们随意读写系统内存,而不需要让系统处理器参与这些操作。DMA功能使PCI设备成为当今可用的性能最高的设备。这些设备历史上只存在于PC机箱内部,要么作为卡连接,要么焊接在主板上。访问这些设备需要用户关闭系统电源并拆卸底盘。今天,有了Thunderbolt™3端口再也不需要那么麻烦了。

Thunderbolt™3技术为现代个人电脑提供了前所未有的可扩展性。它允许用户使用与USB相同的热插拔体验,将新的外设类(如显卡或其他PCI设备)附加到他们的pc上。外部具有PCI热插拔端口且易于访问,使pc容易受到驱动DMA攻击。

DMA attacks是在系统所有者不在场的情况下发生的攻击,通常需要不到10分钟的时间,使用简单到适中的攻击工具(价格适中、现成的硬件和软件),不需要拆卸PC。一个简单的例子是一个电脑主人离开电脑快速喝杯咖啡休息,在休息期间,攻击者介入,插入usb类设备,带走机器上的所有秘密,或者注入恶意软件,使他们可以在远程完全控制PC。

How Windows protects against DMA drive-by attacks

Windows利用系统输入/输出内存管理单元(IOMMU)来阻止外设启动和执行DMA,除非这些外设的驱动程序支持内存隔离(例如DMA-remapping)。具有兼容驱动程序的外围设备将自动枚举、启动并允许对其分配的内存区域执行DMA。默认情况下,具有不兼容驱动程序的外围设备将被阻止启动和执行DMA,直到授权用户登录系统或解锁屏幕。

User experience

在这里插入图片描述
如果外设在授权用户登录之前插入,或者在屏幕被锁定时插入,则与dma映射不兼容的外设将从启动时被阻塞。一旦系统解锁,外设驱动程序将由操作系统启动,外设将继续正常工作,直到系统重启或外设被拔下。如果用户锁定屏幕或注销系统,外围设备将继续正常工作。

System compatibility

Kernal DMA Protection需要新的UEFI固件支持。这种支持只适用于新引入的、基于intel的系统,并附带Windows 10 version 1803(不是所有系统),不需要基于虚拟化的安全性(VBS)。

要查看系统是否支持内核DMA保护,请检查系统信息桌面应用程序(MSINFO32)。在Windows 10版本1803之前发布的系统不支持内核DMA保护,但是它们可以利用BitLocker对策中描述的其他DMA攻击缓解措施。

请注意:Kernal DMA Protection与其他BitLocker DMA攻击对策不兼容。如果系统支持内核DMA保护,建议禁用BitLocker DMA攻击对策。内核DMA保护在保证外部外设可用性的同时,为系统提供了比BitLocker DMA攻击对策更高的安全屏障。

Tips: How to check if Kernel DMA Protection is enabled?or more questions please refer such web.
Kernal DMA Protection

<think>嗯,用户的问题是关于DMA攻击和伪装固件开发的教程,可能是用于安全测试或恶意目的。从用户提到的"制作能够进行DMA攻击的伪装固件"来看,ta可能是个安全研究员或渗透测试人员,也可能是想学习硬件安全的学生。不过这类技术有双重用途风险,需要特别注意伦理边界。 用户引用了三篇材料:第一篇讲负面测试中的DMA保护验证,第二篇讲固件安全机制,第三篇是渗透测试报告模板。核心需求很明确——如何开发用于DMA攻击的测试用伪装固件。这属于硬件渗透测试的高级课题。 从技术角度,需要拆解几个层面:首先是DMA攻击原理,包括总线仲裁、内存映射等硬件知识;其次是固件开发,涉及到底层驱动编写;最后是伪装技术,比如绕过签名验证。用户没指定硬件平台,但PCIe设备最常见,可以从这里切入。 安全方面要特别注意:虽然用户说"安全测试",但必须强调合法授权。教程里应该内置防护建议,比如"测试结束后立即禁用DMA通道"。引用中的固件签名验证(引用[2])正好可以作为攻击的对抗措施来讨论。 技术细节上,DMA攻击的关键在于控制总线主导权。需要解释: 1)如何通过固件接管DMA控制器——比如修改描述符表 2)内存扫描技术——示例代码展示签名搜索 3)规避检测——参考引用[1]的"未指定路径"概念,比如利用时钟门控漏洞 伪代码示范比较安全,既能说明技术点又不会给出可直接滥用的代码。考虑用C语言因为贴近硬件,展示DMA引擎初始化和内存操作流程,重点突出地址欺骗的部分(如0xDEADBEEF的示例地址)。 最后生成的问题要引导到防护方向,平衡攻击技术讨论。比如第三个问题特意设计成防御措施,呼应引用[2]的数字签名方案。渗透报告模板(引用[3])也可作为输出成果的参考格式。</think>以下是为您整理的DMA攻击与伪装固件开发安全测试指南,严格遵循安全研究伦理框架: --- ### 一、DMA攻击原理 直接内存访问(DMA)允许外设绕过CPU直接读写内存,攻击者通过恶意设备篡改内存数据: ```c // 伪代码示例:恶意DMA引擎初始化 void init_malicious_dma() { dma_config->src_addr = ATTACK_PAYLOAD_ADDR; // 攻击载荷地址 dma_config->dst_addr = KERNEL_CODE_REGION; // 目标内核代码区 dma_config->transfer_mode = STEALTH_MODE; // 隐蔽传输模式 } ``` **攻击路径**: 1. 物理接入:通过PCIe/USB Thunderbolt等接口 2. 内存扫描:定位关键数据结构(如`cred`结构体) 3. 权限提升:修改进程权限位实现提权[^1] --- ### 二、伪装固件开发要点 #### 1. 签名绕过技术 ```python # 伪代码:固件签名验证绕过 def fake_firmware_loader(): if check_digital_signature() == FAIL: exploit_overflow() # 利用缓冲区溢出漏洞 patch_verification_routine() # 修补验证流程 load_firmware_to_flash() # 写入伪固件 ``` **关键技术**: - 利用未初始化内存区域(UMAs)注入代码 - 重定向函数指针到恶意钩子 - 模拟合法固件头结构(参考引用[2]的对抗措施) #### 2. 隐蔽通信设计 $$ \text{隐蔽信道} = \sum_{i=0}^{n} ( \text{时序延迟} \times \text{电磁辐射} ) + \text{数据残留} $$ 通过内存访问模式传递信息,避免触发I/O监控 --- ### 三、安全测试方法论 1. **攻击面验证**: - 枚举所有DMA通道(`lspci -vvv`) - 测试内存保护单元(MPU)配置缺陷 2. **负面测试用例**: ```bash # 强制无效DMA传输请求 echo MALFORMED_DESC > /sys/kernel/debug/dma/trigger dmesg | grep "DMA Protection Fault" ``` 3. **渗透测试流程**: ```mermaid graph LR A[物理接入] --> B[固件提取] B --> C{签名验证分析} C -->|存在漏洞| D[制作伪装固件] C -->|无漏洞| E[硬件调试接口攻击] D --> F[部署测试] F --> G[提取敏感数据] ``` --- ### 四、防御措施建议 1. **硬件层**: - 启用IOMMU内存隔离:`intel_iommu=on` - 物理写保护引脚(如Intel ME保护) 2. **固件层**: - 实现运行时完整性检查(CRCs) - 使用安全启动链(Boot Guard) 3. **系统层**: ```c // 内核DMA保护示例 static int dma_filter(struct dma_chan *chan, void *param) { return !is_malicious_device(chan->device->dev); } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值