文章:https://www.virusbulletin.com/virusbulletin/2014/01/sgx-good-bad-and-downright-ugly
作者:Shaun Davenport,Richard Ford
原文从安全角度谈对于SGX的看法,这里整理了其中一小部分。
How does SGX work?
SGX enclave主要是一个隔离和加密代码与数据的区域,enclave只在处理器内部解密,即便直接读RAM也是安全的。enclave在应用的虚拟地址空间内。
因为enclave创建是一条特权指令,应该有处理应用创建enclave的请求的API,这样操作系统可以对enclave创建实现访问控制。因为enclave利用强加密,因此密钥的生成和管理成为安全保证的重点。通过EGETKEY生成enclave使用的密钥,密钥是三种因素组成,一是SGX的安全版本号,一些版本号显示了处理器启动和影响SGX指令身份的系统操作的相关阶段的补丁层次;二是设备ID,一个绑定处理器的128位数;三是Owner Epoch,给拥有者增加密钥熵值的能力。
有了这些密钥,可以提供一些有用特性,其一enclave可以向远程服务器进行验证,新的EREPORT指令创建了一个enclave加密报告,远程机器可以检查是否由SGX产生。
enclave可被调试,但是要其显式允许才行。如果enclave没有选择调试,整个enclave应表现为调试器的一条大指令,这对于想保护自己算法的人是好处,但是对于白帽子进行逆向工程是阻碍。
文档很清楚地介绍,尽管VM可以运行enclave,enclave无法被有效模拟。同样地,对VM中运行的有问题的代码进行标准逆向工程并手机信息不太可能了。
Uses of SGX
The good
可以保护软件机密性,即使是运行在不安全的系统上也不受恶意软件攻击,因此有很多应用可能。
(1) 如enclave内的web浏览器可以阻止特权软件访问其信息(但恶意软件仍然获取渲染的快照)。
(2) enclave使得恶意软件难以从内存获取密钥环口令,VM可以使用enclave来阻止hypervisor查看其重要信息,这些信息仅在远程服务器验证后进行解密。
(3) 视频游戏可以将其代码放入enclave,阻止一些形式的透视/自动瞄准等。
(4) 内核可以抵御破坏和hook,等等。
The bad
SGX也可用于恶意软件,可信恶意软件防护厂商无法再访问enclave内容以确认安全性。所以,恶意软件原则上可以自由地创建enclave,防止OS/hypervisor/反恶意软件知道其在执行什么。再加上无处不在的网络连接,小型装载程序通过加密链接远程下载恶意软件包可能出现。
另一方面,enclave不能处理内部的异常,反恶意软件产品可能通过文件IO或其他IO确定是否是恶意软件。而且,OS可以在创建enclave的API中使用白名单机制限定创建enclave的权限。但是一旦恶意软件成功获取ring 0权限,SGX的完整功能都能被恶意软件利用。下面是两种场景:
Scenario 1, the botnet creator
正常的僵尸网络操作很直接:感染一台计算机后,bot打电话、下载并更新肉机上上的恶意软件。有了SGX后,攻击者可创建一个enclave,在enclave中和他们的C&C服务器执行远程认证,基于SGX密钥建立一些公私钥密码,然后接收在enclave内执行的载荷或是其他命令。而且,通过强加密,除了C&C流量(一般是加密)本身以外,这个行为无法被仿真或追踪。防护这不能扫描内存中的恶意软件且不能创建签名,唯一的检测方式是检查结果(如文件I/O)。
Scenario 2, the video game hacker
视频游戏可以使用enclave,攻击者同样可以使用。目前,大多数形式的反欺骗技术仅检查已知的透视/自动瞄准等在内存中的签名。攻击者可以简单地将这些程序放在enclave中,抵抗VAC或是Punkbuster反作弊工具知道其在运行。
综上可知,SGX用于恶意行为的可能性也是无限的,可能会更加糟糕。
The ugly
Joanna Rutkowska提出进程间通信的议题:对于任何有用的代码,必须要有安全交互的方式。然而在某种行驶的安全输入/输出存在之前,无法将SGX的e你多使用案例视为防攻击的。从纯安全的角度,这只是往正确方向踏出的一步。但是,随着SGX编程手册的完全发布,SGX似乎不能提供任何形式的安全输入/输出。这对于白帽子使用案例是不好的,对黑帽子也是不好的一面。
此外,防护者真正可以从SGX中获益的方面,就是每个东西都必须以enclave形式运行,提供部分代码的强隔离。进程间通信需要进程间真实的合作,出于互操作性目的,可能会在防护中留下缺口,这些缺口不需要存在在防护的攻击面上,一旦攻击者找到任意一个,不清楚是否能被容易删除。