论文传送门:《Self-Encrypting Deception: Weaknesses in the Encryption of Solid State Drives》

本文内容:

一、论文总结

二、获取固件镜像

三、低级别控制方法

四、论文讨论的漏洞

五、具体SSD的漏洞

Crucial MX100

Crucial MX200

Crucial MX300

Samsung 840 EVO

Samsung 850 EVO

Samsung T3 portable

Samsung T5 portable


拉德堡德大学研究人员Carlo Meijer 和 Bernard van Gastel发表了一篇论文《Self-encrypting deception: weaknesses in the encryption of solid state drives (自我加密欺骗-固态硬盘中的加密缺陷),文中详细叙述了他们通过固件修改和接口调试,改变了固态硬盘中的密码验证方式,从而无需密码解密了固态硬盘中的数据信息。

一、论文总结

在攻击者可以在不输入密钥的情况下,完全绕过硬盘的硬件全盘加密,且允许在不知道密钥的情况下完全恢复数据。在攻击者可以在不输入密钥的情况下,完全绕过硬盘的硬件全盘加密,且允许在不知道密钥的情况下完全恢复数据。

二、获取固件镜像

可以选择从制造商的网站下载或者通过SSD管理实用程序获取。

从制造商的网站下载的固件更新通常包含可引导的ISO映像,其中包含操作系统,固件更新实用程序和固件映像本身。从ISO映像中提取固件通常很简单。

通过SSD管理实用程序获取较难一些。 例如,该实用程序可以在其通信信道和/或固件映像上应用混淆。而且如果目标驱动器已经安装了最新版本的固件,则可能拒绝下载更新。一些制造商使用加密的固件镜像,由驱动器本身解密。

三、低级别控制方法

1)JTAG允许完全控制器件。JTAG可以暂停/恢复CPU,读取/修改寄存器并放置断点。这些原语可以在地址空间中任意读/写,并执行任意代码。

2)供应商特定命令:大多数制造商实施供应商特定的命令以用于信息收集,诊断和其他目的。可能存在一个命令允许将任意值写入所选的内存地址。

3)内存损坏:内存损坏漏洞可以用于未签名代码执行,基于堆栈的缓冲区溢出就是一个例子。

4)存储芯片通信:用于获得未签名代码执行的更具侵入性的技术是使用外部读取器设备来对当前安装的固件进行修改。

NAND闪存芯片。 从NAND芯片检索数据需要人们知道几种芯片特性,一些NAND芯片具有专有扩展。此外,SSD中的NAND芯片通常作为BGA封装,要求它们在与PCB直接通信之前从PCB上拆焊。

NOR闪存。一些固态硬盘还装有NOR闪存,通过SPI连接,这是一种简单且支持良好的协议。SPI 闪存芯片通常在外面暴露它们的引脚,允许直接通信而无需拆焊。

5)故障注入攻击:最后,虽然作者在任何案例研究期间都没有尝试过,但可以使用故障注入攻击来使得未签名代码执行。论文强调,目前市场上还没有具有针对故障注入攻击的硬件对策的SSD控制器,因此故障注入可能是现在和可预见的未来在SSD上获得未签名代码执行的一种手段。

四、论文讨论的漏洞

1)密码和DEK无关联:为了避免在打开加密时对数据吞吐量产生负面影响,具有加密支持的SSD或自加密驱动器(SED)会容纳一个专用的AES协处理器来提供加密。驱动器使用磁盘加密密钥(Disk Encryption Key,DEK)加密存储在其上的所有数据,即使在数据未受密码保护的情况下也是如此,所以保护数据其实就是要保护DEK。显然,获得DEK应该需要密码,并且应该以加密方式强制执行。实际上,用户数据的保护不再依赖于密码,恢复用户数据所需的所有信息都存储在驱动器本身上并可以检索。

2)单个DEK用于整个磁盘:Opal标准允许定义多个范围,每个范围都使用不同的密码进行保护。如果整个驱动器使用单个DEK,那么为了允许BitLocker可以访问分区表,DEK不受保护地存储,那么实际上损害了其他范围。

3)随机生成的DEK缺乏熵:在ATA和Opal标准中,随机化是改变DEK的唯一方法。 这提出了在DEK生成期间是否有足够的随机熵可用的问题。原则上,部署SSD的环境允许获取足够的熵。然而,嵌入式设备中的随机数生成器声名狼藉。

4)磨损均衡:对同一逻辑扇区的多次写入通常触发对不同物理扇区的写入,以便在介质上均匀分布擦除和重写。尽管扇区的较旧副本无法被用户直接检索,但仍然被存储,直到被覆盖。假设DEK存储不受保护,之后由最终用户设置密码,用加密变量替换未受保护的DEK。由于磨损均衡,新变体可以存储在存储芯片内的其他位置,旧位置标记为未使用,仍然可以提取DEK。

5)省电模式(DEVSLP):DEVSLP允许SATA驱动器在发送适当的信号时进入低功耗“设备休眠”模式。ATA标准没有明确说明如何实现功耗降低。假设制造商让驱动器将其内部状态写入非易失性存储器,然后关闭RAM,进入休眠,如果在唤醒时未擦除非易失性存储器中的状态,攻击者可能能从最后存储的状态中提取DEK。

五、具体SSD的漏洞

Crucial MX100

将密码传递给SHA256哈希函数,再将输出与另一个缓冲区进行比较。 如果比较成功,则驱动器解锁。密码和DEK之间不存在加密绑定。不绑定基本上等同于不加密,因为加密密钥不依赖于秘密。实践中证明,通过JTAG修改RAM中的密码验证程序,MX100可以解锁密码,并且可以成功获得内容。此外,作者发现供应商的特定命令允许在地址空间内进行任意修改。

将JTAG调试设备连接到引脚。随后使用它来修改RAM中的密码验证(签名验证基于mbedTLS的rsa_pkcs1_verify函数),使其始终成功验证。最后使用任意密码正常解锁驱动器。

Crucial MX200

密码和DEK之间同样不存在加密绑定,此外,MX100中的供应商特定命令也存在于MX200中。

Crucial MX300

MX300关闭了JTAG功能,只能通过直接与NOR闪存进行通信来获取未签名的代码。如上图,存储控制器上电后,其CPU执行的第一条指令(负责NAND闪存和DRAM存储器的初始化)存储在嵌入控制器的ROM中。我们将存储在SPI闪存中的代码称为阶段2。88SS1074控制器支持第2阶段的加密签名验证。但是实际上,MX300不具备这一特点。为了说服驱动器接受修改的固件映像,需要绕过固件更新期间的加密签名检查,因此可以通过使用外部读取器设备修改SPI闪存的内容,自由地对第2阶段注入一段修改加密签名验证功能的代码,使其接受固件映像的无效签名。一旦安装了修改后的固件,就具有任意读/写功能,因此未签名代码执行。

Samsung 840 EVO

如果驱动器没有受ATA安全功能集保护,并且MASTER PASSWORD CAPABILITY位设置为High,那么DEK不会以密码方式绑定到密码。因此必须克服的唯一障碍是密码验证例程。将JTAG调试设备连接到引脚。通过JTAG修改密码验证例程,使其始终成功验证,最后使用任意密码正常解锁驱动器。

如果使用MASTA PASSWORD CAPABILITY位设置为Maximum或使用TCG Opal的ATA安全性,则DEK将以加密方式绑定到密码。通过耗损均衡问题,通过恢复到驱动器处于未受保护状态时使用的先前版本的加密blob,驱动器上的数据仍然可以恢复。

Samsung 850 EVO

关于全盘加密的实现,850与840非常相似。如果MASTER PASSWORD CAPABILITY位设置为High,则可以通过JTAG修改密码验证例程欺骗驱动器授予对其内容的访问权限。

但是从850 EVO系列开始,存储不再磨损均衡。因此不存在磨损均衡问题。

Samsung T3 portable

与840 EVO和850 EVO的情况一样,暴露了JTAG接口。通过JTAG可以从RAM中提取当前运行的固件。对固件的分析表明,它类似于MASTER PASSWORD CAPABILITY位设置为High时观察到的行为,即密码不以加密方式链接到DEK。

可以通过JTAG修改RAM中运行的固件来绕过密码验证例程,使其接受任何密码。

Samsung T5 portable

尽管T5移动硬盘同样缺少密码和DEK之间的加密绑定,由于三星T5移动硬盘的JTAG功能被禁用,且没有针对T5的固件更新可供下载,论文没有对密码和DEK无关联漏洞进行利用。因为在设备上获取未签名的代码执行是相当耗时且劳动密集的。鉴于在T5的前身T3中实际利用了这个问题,并且鉴于T5中存在完全相同的问题,作者认为在T5上跳过获取代码执行的行为是合理的。

固态硬盘硬件全盘加密机制绕过漏洞论文分析(Self-Encrypting Deception: Weaknesses in the Encryption of Solid State Drives)相关推荐

  1. linux 硬件加密 ssd,市面上多种流行的固态硬盘产品存在硬盘加密机制绕过漏洞...

    *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 近期,荷兰奈梅亨拉德堡德大学研究人员发现,市面上多种流行的固态硬盘( SSD dr ...

  2. 重大漏洞:Bitlocker成摆设,多款固态硬盘硬件加密均可被绕过

    导读 荷兰拉德堡德大学的两名研究人员日前发表论文,描述了固态硬盘流行加密软件Bitlocker中的关键漏洞.固态硬盘需要口令来加密和解密其上存储的内容,但该口令可以被绕过. 荷兰拉德堡德大学的两名研究 ...

  3. Ubuntu多硬盘luks全盘加密自动解锁(硬件变更后失效)的方法

    简介 大家都知道,Linux现在用Luks全盘加密一直有一个痛点,就是每次开机都需要输入解密硬盘的密码,之后又要输入用户密码,非常的麻烦!本文正是为了解决这个问题诞生的! 本文多硬盘加密带来的效果是, ...

  4. libssh 认证绕过漏洞(cve-2018-10933)分析

    最近出了一个libSSH认证绕过漏洞,刚开始时候看的感觉这洞可能挺厉害的,然后很快github上面就有PoC了,msf上很快也添加了exp,但是在使用的过程中发现无法getshell,对此,我进行了深 ...

  5. 三星mzvlb1t0hblr是什么固态_三星T7 Touch 1TB移动固态硬盘评测:新奇又安全的加密方式普及?...

    [PConline 评测]移动固态硬盘速度很大程度限制于接口速度,而得益于USB 3.2 Gen2的普及,如今移动固态硬盘的传输速度离现在最快的雷电3又近了一步. 可大家是共同进步的,你有的速度其他盘 ...

  6. 全盘加密分析技术的简单介绍,只针对未开启预启动认证的情况

    关于启动加载器(Boot Loader)和全盘加密(full disk encryption,FDE)的主题,虽然我已经写了几篇文章,但还没有对它进行更详细的探讨.所以在本文中,我希望更深入地了解如何 ...

  7. 给SSD(固态硬盘)编程

    给SSD(固态硬盘)编程(1):简介和目录 本文由 伯乐在线 - 熊铎 翻译.未经许可,禁止转载! 英文出处: Emmanuel Goossaert (CodeCapsule.com) .欢迎加入 翻 ...

  8. 固态硬盘(SSD)原理及相关介绍

    1. 什么是SSD 固态硬盘(Solid State Drives),用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片.DRAM芯片)组成.固态硬盘在接口的规范和定义.功能及使 ...

  9. [SSD固态硬盘技术 0] SSD的结构和原理导论

    版权声明: 本文禁止转载 机械硬盘的存储系统由于内部结构,其IO访问性能无法进一步提高,CPU与存储器之间的性能差距逐渐扩大.以Nand Flash为存储介质的固态硬盘技术的发展,性能瓶颈得到缓解. ...

最新文章

  1. TB级微服务海量日志监控平台
  2. 用深度学习实现异常检测/缺陷检测
  3. 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】
  4. php防伪溯源x系统_一物一码防伪溯源系统在工业行业的应用
  5. 欢迎大家多来关注下!
  6. 数据返回nan_NumPy 的 nan 如何理解?
  7. exit java_没有System.exit,如何退出Java程序?(通过用户输入?)
  8. 日照职业单招计算机专业,日照职业技术学院单招专业介绍-机电一体化技术
  9. 资深架构师手把手教你性能优化
  10. 使用Handlerf发送消息或使用Handler轮询时,报错IllegalStateException:This message is already in use.;...
  11. spark 上游rdd的缓存
  12. Beyond Compare 怎么新增与卸载文件格式
  13. 2017java面试_2017 Java面试大全(一)
  14. php pmt,关于光电倍增管(PMT)模块的选型与使用
  15. 计算机组成原理第6版课后答案,计算机组成原理第6章习题参考答案
  16. 免费计算机网络基础ppt,计算机网络基础
  17. 输入求闰年c语言程序,C语言计算闰年程序
  18. 有谁知道win10appdata文件夹可以删除吗,删除的方法是什么
  19. 入职百度-念念不忘,必有回响
  20. Android前端判断敏感词汇

热门文章

  1. emule-Xtreme(电驴)
  2. 2023年系统分析师论文真题
  3. 爬虫+数据库+大数据分析
  4. linux 下获得当前目录,上级目录,文件夹名
  5. Apache Shiro Padding Oracle Attack (Shiro-721)漏洞复现
  6. 一天一个 Linux 命令(28):fsck 命令
  7. split多个分隔符进行分割
  8. Spring项目配置拦截器Interceptor
  9. python怎么实现音乐快进_如何用PYTHON代码写出音乐【】
  10. 嵌入式linux摄像头视频教程,嵌入式Linux下LCD应用编程: 读取摄像头画面完成本地视频监控画面显示...