TEE的机遇与挑战
2017-09-07

2017年9月,电信终端产业协会(TAF)在西安开展了TEE行业与技术发展交流会。 夏虞斌教授代表上海交通大学和瓶钵信息科技在会议上发表近期TEE的相关研究成果。此篇文章是他在TAF会议当天的演讲实录。



 

关于演讲者

夏虞斌,上海交通大学副教授,瓶钵信息科技联合创始人,计算机系统结构专业。主要研究对象是操作系统、虚拟化与体系结构,研究方向是移动安全和云计算安全, 研究成果发表在ISCA、HPCA、EuroSys、MobiSys、FAST、CCS、USNEIX Security、NDSS等高水平学术会议。目前的研究课题主要围绕“基于硬件扩展的可信执行环境(TEE: Trusted Execution Environment)的安全和应用”。



 

演讲内容如下

大家好,很高兴今天有机会和大家一起聊聊TEE,聊聊TEE的安全。今天的内容会分成三部分,首先谈机遇,中间谈技术,最后谈挑战。

一、机遇与新机遇

在座的各位对TEE都不陌生。大家接触TEE,通常都是从手机开始的,我们有指纹支付、指纹解锁,而指纹肯定是存在于TEE里的。刚才黄冕提到,现在70%的手机都已经有TEE了,这是一个非常惊人的数字, 也意味着TEE安全是一个至关重要的问题。


 

目前,TEE在移动端的应用是最多的,尤其是在生物识别、DRM、SoftSIM、eSIM、安全文件夹、安全应用增强、比特币钱包等等。我们现在很关心的,除了手机这块,还有很多其他设备, 比如车载设备中如何把娱乐和控制分开,非常适合用TEE来实现;类似地,智能家居的安全性也越来越被重视,ARM专门为移动版的Cortex-M设计了功耗更低的TrustZone硬件, 希望TEE的应用能够尽快在IoT的平台展开。


 

TEE不仅在手机上应用,而且在越来越多的PC和笔记本也开始使用。Intel的SGX技术和AMD的SME/SEV都是相关的技术。 PC端的TEE已经开始实际应用在产品中,例如华为的Matebook可以搭载了指纹识别,联想推出的YOGA Book也是通过了银联认证可支持指纹支付。 指纹具体是怎么保护的呢?主要是通过Intel SGX所提供的隔离环境enclave来实现。AMD的SME和SEV也紧跟着推出,技术侧重点稍微有点不同,但都能够提供安全的执行环境, 所有数据在内存中是明文,仅在CPU内部解密,能够提供更加强的安全能力,防御直接对内存的物理攻击。

在云平台,TEE也得到了越来越多的重视。现在服务器的芯片上也已经部署了很多SGX,这对云厂商来说的话,是很有吸引力的一件事情。若可以把SGX实际用在云端, 就意味着云服务提供商可以不用再负责用户数据的安全,做到“用云不信云”,从而大大减少成本,同时也吸引那些对安全有强烈需求的客户。 ARM的TrustZone在云端也同样有需求,我们的团队 TrsutZone和虚拟化结合的工作,实现了在一个CPU上实现多个TrustZone,论文发表在今年的USENIX Security会议上。


 

二、技术与新技术

我们致力于通过硬件提高系统的整体安全。今天我们谈三个技术:用TEE提高Android安全,提高TA(Trusted App)安全,以及提高TEE本身的安全。


 

首先来看下如何用TEE防止手机被root。在手机端,root还是一个很严重的问题。目前为止,绝大多数的手机端安全都是依赖于操作系统安全,一旦手机被root, 这些安全措施都面临着被绕过的危险。我们是不是可以利用TrustZone的高权限的特点,去保护Android不被root?这并不是一个全新的技术,苹果从iOS-9开始就已经全部采用类似方案, 三星的TIMA技术从Galaxy S5、S6这个时代就开始应用。具体来说,我们会将内核完整性监控、运行时度量和安全服务与回调等服务部署在TEE中,阻止手机被root。 如何阻止呢?方法有很多,比如保护一些关键的内核数据结构,首先将这些数据结构设置为不可写,当发生写操作的时候就会trap到 TrustZone里面去检查。 另一个方法是寻找内核中的不变量,并且将对这些不变量的检查放到TEE中,在关键的节点进行检查。这个技术已经集成到瓶钵的TrustKernel TEE中。


 

第二个问题,我们来看一下TA安全。TEE的生态是非常重要的,因为安全应用永远是会随着这个世界的发展而变化的,这种变化意味着TA一定是可以动态安装,动态更新的, 而且TA和外部的应用(CA,Client App)之间一定会有更多的交互。这是,TA和外面这个CA的互操作就变成一个问题。举一个最简单的例子,如果你现在要攻击一个TA的话,你会怎么去攻击? 如果大家有些渗透测试的经验,第一反应毫无疑问就是fuzz,看下什么情况下这个TA会崩掉。Fuzz的前提是Fuzz程序要能够和这个TA建立起一个交互通道,让这个TA接受Fuzz的输入。 有没有这样一种方法,比如某个TA只能和支付宝建立交互通道,否则就拒绝接收任何输入,这样就可以避免Fuzz程序直接对TA发起攻击。


 

当前绝大部分的TA和CA之间的交互依赖于操作系统,如果操作系统被攻破,那么任何CA都可以和TA建立连接。我们采用了ARM的EL2 Hypervisor, 在REE中运行一个非常轻量级的EL2 Hypervisor,它的目的只有一个,就是把REE中的某个应用程序和其他应用程序以及操作系统隔离开来,当这个应用程序需要和TA进行交互的时候, 整个系统就只会有这个应用程序在运行,EL2 Hypervisor就可以去识别这个应用程序的身份,这个系统需要相信操作系统,只需要信任EL2 Hypervisor。


 

第三个技术是如何提高TEE自身的安全。在2016年,来自UCSB的研究者提出了Boomerang(回旋镖)攻击,并在2017年NDSS的论文中说明该漏洞在大量已部署的TEE中均存在。 这个漏洞利用TEE存在的问题来攻击Android,所以被称为回旋镖。我们提出了rTEE安全增强技术,R是指restricted。TEE能够直接读写REE的数据,因为其权限比REE高; 但我们在绝大部分的应用中,我们都不需要让TEE有这么高的权限,而只需要让TEE和REE隔离就可以了。rTEE中将TEE进行拆分,把很小的一部分代码作为monitor, 每次当TA和CA之间要建立连接的时候,所有的连接全部是经过TEE monitor检查之后才建立的连接。当TEE kernel想要往REE去写数据的时候会失败, 因为这时候如果TEE需要更高权限的话,必须要经过TEE monitor同意。换句话说,TEE kernel就被控制起来,不再是一个不受限的具有最高权限的TEE, 而是一个受限的,向REE写操作必须要经过monitor的同意的TEE。怎么保证这个TEE monitor是安全的呢?有两点。第一点,代码量非常少; 第二,所有和TA相关的,比如说要装一个TA,比如说要控制TA和TA之间的交互,或TA和CA之间的交互,这部分代码全部都放在TEE kernel, 所以这个TEE monitor本身并不对外,因此具有极小的攻击面,攻击者没有机会发起攻击。rTEE架构可以在TEE即使存在Bug的情况下,也能抵御Boomerang等攻击。

小结下技术部分。现在ARM TEE主要还是以TrustZone作为支撑。但TrustZone依然有待提高,比如它没有内存加密,可扩展性有待提高, 用多个TrustZone或多个TEE现在还做不到。而且,TEE存在单一故障点问题,TEE出了错整个系统的安全性就没了。那么,接下来是不是有可能有新的替代技术? Intel SGX,AMD SME/SEV是一个方向,可进一步降低计算可信基,不需要相信内核,也不需要相信运行在TEE里的kernel,而只需要相信Enclave中的代码即可。 所以,TEE的未来支撑技术是什么,我们拭目以待。我想强调的是,TEE并不简单的等同于TrustZone,毕竟TEE从定义上来看只需要提供一个Trusted Exclusive Environment就行了。 技术在发展,希望大家不断的跟踪最新的技术。

三、挑战与新挑战

最后,我想讲一些挑战,旧的挑战和新的挑战。我们列出了一部分和TEE相关的漏洞,每个漏洞都有相应的CVE编号。这只是一部分的CVE,如果列全的话,数量是很大的,让人吃惊。 针对TEE的攻击正在变得越来越热,就在8月7号,iPhone 的Enclave 里面TEE里的一个很关键的密钥泄漏了,被攻击者直接发到twitter上。 在8月10号开的USENIX Security会议上,TEE安全成为了一个焦点,有很多很有意思的攻击方式。比如说,怎么样在一个什么都看不见的地方(Enclave)去做return-oriented programming攻击; 如何在不依赖Page Faults的前提下做侧信道攻击。ClkScrew是一个很有意思的攻击,攻击者利用ARM里面调频的机制,向TEE注入错误,从而进一步展开攻击。 这个思路很新,所以获得了今年的Best Paper Award。百度的X-Lab最近提出了TEE回滚攻击。通常在TEE发现漏洞之后,TEE厂商会发送更新到手机厂商,赶紧更新一下。 所谓的回滚攻击是说,可以把TEE回滚到之前有问题的版本,这个攻击在许多主流的手机中都存在,也是一个非常严重的问题。


 

鉴于有这么多的安全攻击,我们还是要理性的去看待到底TEE安全问题。在安全圈有一个共识:“未知攻,焉知防”。 如果你不知道怎么攻击的话,通常也写不出很好的防御性代码。尤其是在目前来看,渗透测试依然是一个非常实用的测试方法,TEE到底安全不安全,我攻一下,攻成功了说明有问题,不成功下次再攻击一下; 通过不断的磨练,才知道到底它经不经得起考验。从学术界角度来说,这种对攻击的讨论是非常有意义的,因为有很多攻击方面的论文,就会有更多防御方面的论文;在这种攻和防之间不断博弈的过程中, 系统的安全能力才能不断的得到提高,才能够在已经很安全的情况下,再往上迈一个台阶。在工业界,一些大公司也鼓励大家寻找漏洞。谷歌对于TEE漏洞的奖励是20万美元,苹果不甘落后,说在iPhone上找漏洞, 尤其是和TrustZone相关的,同样给20万美元。但是还有人出更高的价,看一下Zerodium这家公司,一个漏洞给150万美元。这说明,现在在TrustZone里面找漏洞的难度已经非常高了,如果很容易的话, 这钱早就被人分完了。所以我们对TrustZone,对TEE还是有信心的。

但是我们依然要认识到,漏洞还是存在而且不可避免的。当手机厂商在遇到漏洞的时候,怎么办?我的建议是积极参与各种安全评测与评估,提高攻击的门槛。遇到问题的话,首先从技术上解决, 然后减小问题的影响。同样,在选择TEE的时候,一定要从技术上做考量,而不能仅仅将TEE作为一个普通的部件去采购。我们说安全是很贵的,如果你在安全上节约了钱,一定会在别的地方弥补回来。

从安全测试的角度来看,一旦找到TEE相关的漏洞,不管发现者是有意的还是无意发现的,最好遵守“先沟通,再公开”的原则,将漏洞的影响降到最低,毕竟现在TEE承受安全责任已经非常多。 70%的手机都部署了TEE,几乎就是每个人都会受到影响,我们一定要小心。再有就是要迅速的解决问题,找到关键的点去做更新,或者在应用网站通过Revoke的方法把相关的功能禁止掉。

四、一些结论

最后讲一下结论。首先需要再次强调的是:TEE的核心永远是技术,不是价格,就是技术。TEE的价值和要承受的安全责任是非常高的,一定是很贵的。

第二,技术是在不断演进的,绝不可能说有一个TEE两年以后还能用,因为硬件在变,攻击者、攻击手段也在变,防御的方法不断在演进。如果一个TEE长时间没有更新,那说明它的技术不过关。

第三,TEE的安全是一个长期的过程,没有银弹。只要代码是人写的,一定会有问题。如果有一天,我们的代码是机器自动生成的,或者说通过形式化验证能够从需求直接生成代码,有可能这个问题能得到很大程度的解决;但在今天,TEE一定或多或少的存在漏洞。所以厂商要做好频繁更新的准备,TEE更新的优先级是要比Android更高的。

第四,针对TEE的攻击会成为一种常态。以前我们说苹果的笔记本很安全,很大程度是因为用的人少;用的人多了,就一定会有黑客盯着;尤其是像TEE这样一个非常关键的组件,一定会有很多黑客盯着。手机厂商如何应对?一个建议是,不要变成最容易被攻击的那一个,当熊在追你的时候,你只要跑的比同伴快一点就可以了。在竞争如此激烈的手机市场,一部分不合格的TEE厂商和不重视安全的手机厂商会由于安全频繁出现问题而被淘汰掉。

第五,安全评测工作刻不容缓。我们连接国外的一些最先进的研究,那些攻,那些防,那些对技术的追求,都已经发展到一个很高的阶段。当我们回过头来看国内的市场,说实话,不容乐观。建议手机厂商一定要重视对手机的安全评测和评估,而且这个工作应当是一个持续的工作,不能说有一款TEE测过了,用在100台手机上都OK,因为用在100台手机上的TEE每个都会有些不同。我们应该对每一台手机都进行安全评测,根据我们的经验,漏洞往往就出现在和每一台手机相关的修改代码上。

最后一点,还是要强调,安全是很贵的。安全人员的薪酬就很贵。一个懂安全的人和一个不懂安全的人做出来的系统,一般人看上去可能没什么区别,但对于黑客来说天差地别。而安全人才目前为止还是非常稀缺的。我不太相信有免费的安全,我只相信,在安全上省下的钱,会在别的地方付出更多。

最后想说,问题总是可以解决的。希望所有的厂商都重视安全,也希望TEE的生态能够健康的发展。