Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

Exploiting Unprotected I/O Operations in AMD’s Secure Encrypted Virtualization

作者:Mengyuan Li, Yinqian Zhang, Zhiqiang Lin, Yan Solihin

单位:The Ohio State University, University of Central Florida

会议:USENIX’19

资料:原文


SEV是AMD处理器中的一种硬件安全特性,通过对内存的加密来实现VM和宿主之间的安全隔离。但其仅对内存进行加密,不对完整性进行保护;而在IO过程中,DMA等器件又必须对非加密的内存区进行操作。利用这两个特性,可以实现在不获取密钥的情况下,对任意内存区进行加密和解密。

SEV也存在和SGX类似的page fault侧信道,特权攻击者可以操控页表标记位来使受害者引发缺页,从而获知受害者访问的页;SEV的问题更加严重,在错误码中没有去掉页内偏移,因此特权攻击者可以直接获知具体的访问地址。但实际上,两种粒度的侧信道都可以实现上述的加解密攻击。

SEV背景介绍

SEV的威胁模型就是不信任hypervisor,这样可以获得一个更小的TCB,但这也引入了更多的攻击面。SEV对虚拟机提供了多种保护,包括基于ASID的访问控制隔离、由协处理器管理的隔离加密、和对虚拟机初态的签名验证。

SEV使用了嵌套页表。客户机虚拟地址gVA先通过客户机页表gPT翻译成客户机物理地址gPA,在通过嵌套页表nPT翻译成宿主机物理地址hPA。页表项中的C-bit表示这一页是否加密,若gPT设置了加密则使用客户机密钥,若gPT未设置而nPT设置了加密则使用虚拟机密钥。客户机虚拟机之间共享的页不在gPT上设置加密。

1
gVA ----gPT---> gPA ----nPT---> hPA

对于内存地址$P_m$中 的消息$m$,其对应密文$c=E_K(m \oplus T(P_m))$,$T$为一个变换函数,但是对所有客户机都相同,可以被逆向出来。加密用的AES ECB模式,所以在消息中引入了地址来做保护。

对于SEV保护的虚拟化,多通过DMA方式来进行IO。由于IOMMU不支持ASID,客户机必须新建一个共享页,在其上分配一个软IO转换区SWIOTLB,IOMMU将数据读写到这个区,由客户机自己再进行拷贝。如下图所示。

Disk IO Example

安全问题

读取的数据不受信任。如虚拟机要从硬盘中加载sshd,作者构建的恶意虚拟机可以在SWIOTB中找到读取的sshd的文件内容,并将其中判断的部分修改掉,就可以实现无密码的ssh连接。尽管AMD推荐使用加密的磁盘IO,但磁盘密钥也需要保存在客户机的内存中,当内存可以被解密,加密虚拟硬盘就不再是一个有效的保护措施。作者认为各种IO都有风险,包括目前不进行加密的显示IO。

Decryption Oracles

当客户机向外输出数据时,涉及到将加密的内存块解密并复制到SWIOTB。如果可以知道将要输出的内存地址,则可以将想解密的地址复制到这个位置。

SEV存在细粒度的缺页侧信道,可以获取一系列的缺页地址和错误类型。以ssh为例,服务器接受到一个包之后就会进行响应,这个过程中就会产生一系列缺页中断,其中就会包括要输出的内存地址。对于一个特定操作系统,缺页地址链会带有一定的特征,可以帮助确定出要输出的地址,这里面涉及一些内核数据结构分析。作者另外进行了实验,如果只使用SGX中那样的粗粒度缺页侧信道,同样可以定位到输出位置的页框号,页内偏移需要另做扫描。

确定地址之后就可以进行内存的覆盖了。在ssh的例子中,IP报头的部分是可以安全地被覆盖的,因为这些明文信息是确定的,可以恢复出来。内存覆盖的过程中涉及到两个ASID进行缓存一致性同步的细节。覆盖完成后,因为变换函数的存在,并不会直接得到明文,但变换函数是已知的,所以没有问题。

Decryption Oracles

Encryption Oracles

同样可以通过IO过程把一些明文数据给加密放进去。因为Decryption Oracles的存在,可以实现前述的二进制修改;或者可以发送一些随机包进行明文碰撞,因为由变换函数T的存在,同样需要预测写入地址。

评估

地址预测

做了20次实验,每次进行33次击键,SSH中会生成33个包。平均precision达到0.956,recall达到0.847,F1达到0.897。

实际上,要预测的输出地址是复用的。作者使用连续N次猜测相同的策略,使得错误猜测的数量下降。

prediction precision

作者还发现地址的使用和按键频率有一定的关系。

reuse vs rate

性能影响

ssh response time

美国国内延迟大概在40~60ms,国际网络在几百ms,这个水平下攻击引入的额外时间很难被计量。

防御

最根本的问题是IOMMU不能处理ASID,但AMD表示这个很难实现,以后的产品可能也不会有。

AMD将会对SEV加入认证加密,并换用引入了随机数的变换函数。AMD也表示会修补细粒度侧信道,但实验表明粗粒度侧信道只会让预测精度略微下降。

作者提到了一种临时解决方案,把所有的IO都加密传输到一台受信任的服务器上来进行操作。