2015年,英特尔在发表Skylake处理器平台时推出了SGX,但是相信现在仍然有一些人对SGX的概念有些困惑。那么我们就先对SGX的概念进行简单介绍: 什么是SGX?
SGX全称Intel SoftwareGuard Extensions,顾名思义,它是对英特尔体系(IA)的一个扩展,用来增强软件的安全性。这种方式并不是识别和隔离平台上的所有恶意软件,而是将合法软件的安全操作封装在一个enclave中,保护其不受恶意软件的攻击,特权或者非特权的软件都无法访问enclave。也就是说,一旦软件和数据位于enclave中,即便操作系统或VMM也无法影响enclave里面的代码和数据。 但是SGX真的如它所说的这么安全吗? 今年1月,安全研究人员Samuel Weiser曾发现英特尔软件保护扩展(SGX)输入—输出保护中可能存在的漏洞。而2月底,他又和奥地利格拉茨技术大学其他4位研究人员证实,恶意软件不仅可以在受保护的SGX enclave里运行,还能够攻击主机并用于提取RSA私钥。 攻击目标为Intel SGX enclaves据悉,SGX是英特尔在其微处理器中引入的一个隔离机制,用来保护代码和数据免遭修改或泄漏。其建立的特殊隔离区域称为“飞地(enclaves)”,可以用于常规计算机和云服务器来储存与隔离每个程序的机密信息,如加密密钥或密码等。 在常规计算机上,enclaves存储每个进程的敏感信息,并将这些数据从操作系统所及范围中隔离开来;在云服务器中,多个客户可以共享一台机器,enclaves是系统管理程序用到的关键因素,它可以为每个客户创建和运行不同的虚拟机。 因为这种内存隔离以及将数据存储在enclaves中的特性,可以很大程度保障用户安全。所以英特尔在推出SGX enclaves后就建议软件开发上将加密密钥存储其中,因为没有更安全的地方存储这些信息。 但是不幸的是,在今年2月底的一篇最新出版的论文中,奥地利格拉茨技术大学的5名安全研究人员宣称,其打造的enclave恶意软件能够攻陷英特尔的安全技术SGX,并从受到SGX保护的飞地(enclave)中窃取机密信息。 研究人员创建enclaves恶意软件,可以通过enclaves隐藏自己论文写道, “我们建立了一个基于SGX的enclave,但其中包含的是恶意软件,该enclave与其他enclave并存,再利用旁路攻击(side-channel)取得储存于其他飞地的机密信息。操作系统完全察觉不到亦无法分析该恶意软件,因为它藏匿在受到SGX保护的独立区域内。”
这是第一种运行在真实的SGX硬件中又运用SGX的保护特性来隐藏自己的恶意软件。研究人员通过在共存的SGX enclave中进行了一种叫做“Prime+Probe(质数+探查)”的侧信道攻击证实,这种攻击不仅在英特尔本地环境中有效,在Docker容器上也同样有效。 正如论文所说: “我们开发出了目前已知对英特尔CPU而言最准确的时间测量技术,完全为硬件定制。我们将DRAM和缓存侧信道相结合构建了一种新颖的方法,在没有假设页面大小的情况下恢复物理地址位(physical address bits)。尽管使用常数时间乘法基元(constant-time multiplication primitive)防护侧信道攻击,攻击还是成功了。我们从单单一个Prime+Probe痕迹中提取了4096位RSA私钥中96%的内容,并且在5分钟内,从仅仅11个痕迹中提取了完整的密钥。”
这种攻击甚至能够跨不同的Docker容器运行,因为Docker引擎会为两个容器调用同样的SGX驱动。 定时(Timing):加密侧信道攻击需要有一个高分辨率的计时器,而这也是SGX所禁止的。Weiser及其合作者梳理了英特尔的参数,最后选定了inc和add指令,因为这些指令“用寄存器来执行时,具有1个周期的延迟和每个指令0.25个周期的吞吐量。” 为了仿效被禁的计时器,研究人员使用了以下×86指令: “驱逐集”生成(“Evictionset”generation):这个步骤旨在发现“映射到相同缓存集的”虚拟地址:我们可以按顺序扫描内存,查找引发行冲突的物理接近的一个地址内存。因为SGX enclave内存以连续方式进行分配,所以我们可以在虚拟地址中执行这种扫描。 完成两个步骤后,Wiser和其他成员理清了如何监控易受攻击的缓存集,寻找RSA密钥计算的特征签名。 这部分攻击必须发生在离线状态,也就是说要与收集数据的缓存监控分开来进行,因为最后你得到的数据中会有很多干扰数据(来自计时错误、上下文切换、受害者enclave里的非RSA密钥活动,以及因电源管理引起的CPU计时变化等等)。 密钥恢复分为三步:第一步,预先处理追踪;第二步,从每次追踪中提取部分密钥;第三部,合并部分密钥来恢复私钥。 他们在一个具备SGX功能且运行Ubuntu 16.10的联想ThinkPad T460s上发现如下结果: 经过340次尝试,恶意软件就能够从2048个可用的缓存集中找到一个易受攻击的缓存集; 从易受攻击的缓存集中获取一次追踪平均只需要72秒; 单个缓存追踪可访问4096位RSA密钥中96%的内容,而在11次追踪中就可获取全部的RSA密钥。
研究人员表示,他们的攻击是可被拦截的,但是修复方案还得由英特尔提供,因为修改操作系统可能会弱化SGX模型的安全性。
|