SSD想偷你点东西太容易了(下)

《SSD想偷你点东西太容易了(上)》中,冬瓜哥向大家介绍了一个基本道理,那就是硬盘必须可以被覆盖数据,Flash颗粒必须可以被擦除,否则就成了坏件了。同时也指出,所有这些操作接口,必须都是公开的甚至标准化的,才身正不怕影斜。而如果


在标准之外新开了不公开的秘密接口,不管是为了debug,亦或是为了形成开发门槛,这就很不好说了,当它被非正当利用时,被认为是后门,或者至少说是漏洞,也无可厚非。比如某黑客知道了该接口,然后利用该接口擦除了数据,后在系统审核时,并未发现任何走正常接口的擦除事件,这就让这位黑客逃脱了惩罚,你说此时这个秘密接口不应该被算作是漏洞或者后门么?必须算。但是如果该接口被写在了手册里,比如“我司xx芯片除了支持正常接口擦除命令外,还可以通过操作码0x1234支持擦除操作”,那此时就没有任何责任了,因为可以系统可以通过审查是谁发送了该命令,如果系统并没有追踪记录该命令的执行,那么就是该追踪审查系统自身的不完善。


本文,冬瓜哥想为大家介绍另一种偷数据的方法。冬瓜哥并不是在教给大家如何监守自盗,而是让大家充分了解底层的机制。


I/O设备是直接从Host端主存直接DMA读写数据的。对于SATA和SAS硬盘,其先接入到SATA AHCI控制器或者SAS控制器(SAS HBA),后者再接入到PCIE控制器上。SAS盘和SATA盘自身并不能直接访问Host RAM,但是SATA AHCI以及SAS控制器可以。


对于PCIE接口的SSD,其可以直接访问Host RAM。对于当前的x86系统,在物理机场景下,对I/O控制器可访问的Host RAM的区域并不做限制。这意味着,目前的NVMe SSD在运行时其实是可以访问任意64bit地址空间的。理论上,PCIE设备访问的是PCIE地址空间而不是Host CPU地址空间,但是x86系统并没有使用独立的地址翻译寄存器来在PCIE空间和CPU空间之间做翻译映射,而是选择了一对一映射,也就是PCIE和CPU的地址空间是重叠的。这一点在IBM Power平台就很不同,后者采用了单独的inbound和outbound寄存器来负责地址翻译。


不管翻译还是不翻译,一个事实是PCIE设备可以肆无忌惮的访问Host端任意地址(如果严格来讲,如果Host端采用NUMA架构,那么一个限制是一个NUMA Node上的PCIE设备是无法访问另一个NUMA Node上的PCIE地址空间的,这一点是被Intel的NUMA网络路由机制给限制了,后者不支持在多个NUMA Node之间路由PCIE的访存请求)。


可访问任意地址意味着什么?意味着PCIE设备天然就运行在Ring0权限,只不过它完全不依赖Host CPU,它也无法在不依赖驱动程序帮助下让CPU切换到RIng0,但是它不用CPU,自己就可以发动独狼式攻击。它都能干什么呢?


只要在SSD内部固件开发对应的程序,其就可以搜索并改变Host端RAM中任意字符串,这可了不得,它可以直接把一些关键的入口点指针直接替换成自己注入的函数,这样,当CPU执行这些函数时,就执行了后门程序,成功侵入并获取Ring0权限。再后续就可以肆无忌惮了。


或者,SSD可以根本不管Host端CPU,而自己直接把自己存储的数据,通过网卡发送出去。网卡发送数据包时,都是利用Host RAM中的队列完成的,与NVMe本质上没什么区别。由于PCIE口SSD可以访问RAM任意位置,所以只要SSD将自己要发送的数据指针以及对应的数据包注入到队列中,网卡就会将该包发送到黑客指定的目的地,而这一切确是神不知鬼不觉。由于被SSD劫持并替换了一个数据包,上层正常程序无非就是丢了个包而已,可以依赖上层协议栈重传。


那么,这一切无法杜绝么?要想根本杜绝,只有靠IOMMU,让I/O设备看到一个虚拟的地址空间,I/O设备发起的一切访存请求,都被IOMMU给路由到对应权限的区域,永远无法越界。当然,此时I/O设备如果想破解该限制,就需要其在Host端的奸细——驱动程序来帮忙,让驱动来强制更改IOMMU中的映射条目指向敏感区域,然后自己在用DMA来做坏事。


但是,目前x86平台的IOMMU仅被用于虚拟机场景,物理机场景并没有使用。所以。SSD如果想做坏事,很容易。做不做,谁来做或者被谁利用的问题。


本文没太讲透,也没画图,抱歉,最近时间和精力非常有限。大家有问题可以留言。扩展阅读:DMA Attack,自己搜。


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值