作者: 启明星辰ADLab
由于智能手机操作系统存在较多的攻击面,手机存储的密钥,证书及支付应用程序的敏感数据容易被病毒和木马窃取和攻击。
为了解决智能手机不安全的执行环境上完成支付问题,OMAP组织在2006年提出了tee(可信执行环境)的概念。
2012年ARM公司推出了TrustZone安全解决方案,旨在提供独立的安全操作系统及硬件虚拟化技术,为手机安全支付的过程中提供可信的执行环境。
TrustZone技术在2014年以后发展迅猛,在目前市面上大多数智能手机都带有TrustZone技术的芯片和操作系统。
目前TrustZone的产业链相当广,包括IP、Soc/CPU、Tee OS、Tee Applet及基于Tee的App, 相关厂家包括ARM、高通、三星、华为、苹果、MTK、微信、支付宝、银行等。
TrustZone技术是软件和硬件结合的解决方案。TrustZone从硬件安全扩展来提供资源隔离,软件提供基本的安全服务和接口。TrustZone技术将软硬件资源隔离成两个环境,分别为安全世界和普通世界。
TrustZone的硬件架构方面主要体现在内核虚拟化、内存隔离、外设/总线隔离技术、中断隔离技术。
内核虚拟化: 内核虚拟化是指通过CPU中虚拟出两个内核,并且把安全世界的OS运行在内核0中,普通世界的OS运行在内核1中。两个OS独立运行在不同的虚拟内核中,通过时间片进行两个内核间切换执行。
外设/总线隔离技术:通过总线扩展了AWPROT(总线写事务控制信号)和ARPROT总线读事务信号)。当低电平时为安全世界的总线读写控制信号,当高电平时为普通世界的读写控制信号。
内存隔离技术:TrustZone技术采用两个MMU,把安全世界和普通世界的内存管理隔离开。
中断隔离技术:为了区分安全世界和普通世界的中断源,ARM设计了FIQ和IRQ两种不同的中断源,设计者可以将FIQ用于安全世界的中断源,将IRQ用于普通世界的中断源。
TrustZone有别于普通世界的智能手机操作系统,TrustZone在安全世界里采用独立的安全操作系统、独立的运行在安全操作系统的安全应用TA(Tee Applet)、独立的设备驱动。
虽然TrustZone技术在软硬件上做了安全改进,但是TrustZone也存在一定的攻击面,这些攻击面主要体现在TrustZone的硬件方面和软件方面。
TrustZone的硬件方面的攻击面主要在于TrustZone的硬件架构只是在现有的手机设备上做了安全扩展,而不是采用全新的安全芯片。这就意味着TrustZone在抵抗硬件攻击及侧信道攻击方面存在较大的问题。
TrustZone的软件方面的攻击面主要在于TrustZone与普通世界的驱动接口方面及运行在TrustZone环境的安全应用TA存在安全漏洞。
这些年TrustZone软件实现方面的的漏洞也不断被发现。2014年Rosenberg发现了高通芯片 QSee驱动的问题。2015年申迪发现了华为手机的Tee驱动的安全问题。
近期启明星辰ADLab对国内知名电信设备企业的手机TrustZone的实现进行了研究。该手机厂家的TrustZone为自主实现,在该手机厂家的TrustZone操作系统中预置了task_storage(安全存储)、task_secboot(安全引导)、task_keymaster (密钥管理)、task_HDCP(高频宽数字内容保护)、task_efuse (微电熔丝)、task_crypto(加密服务) 多个安全应用。其中 task_storage安全存储提供TrustZone下的文件管理服务。
在该厂家手机中文件保密柜、指纹服务、微信支付、天际通等App应用都使用到了task_storage安全存储的TrustZone应用(TA)。
通过对该手机厂家的TrustZone的研究,我们发现了两个严重的安全问题。通过这两个安全问题攻击者可以完全地攻击TrustZone的安全存储应用,获得保存在TrustZone中的文件加密密码。
文件保密柜是某手机厂家在手机内置的文件加密功能,通过该功能用户可以将手机上的文件进行加密存储,加密密钥保存在TrustZone中。在解密文件的时候,用户需要进行密码验证或指纹验证成功后才能进行文件的解密。
创建密码流程:文件保密柜应用把用户新建的文件保密柜的密码,利用生成随机数,Salt进行多次加密迭代运算,生成密码验证hash保存在数据库中。另外文件保密柜调用TrustZone中的安全存储应用将密码保存在安全文件系统中。
密码验证流程:文件保密柜应用把用户输入的密钥,进行多次迭代加密,并且与保存在数据库里的密码验证hash进行验证,密码验证通过后进入文件解密流程。
文件解密流程:文件保密柜调用TrustZone中的安全存储应用对保存在安全文件系统中的密文态密钥进行解密。文件保密柜应用用解密后的密钥,对文件进行解密得到解密后的文件。
下图列出了文件保密柜的调用流程。
文件柜App应用调用Teed服务,Teed服务调用tz_driver驱动与内核进行通信。tz_driver驱动通过smc指令切换到TrustZone执行环境, TrustZone根据应用Id,调用具体的TA(Tee applet)完成加密密钥的存储和读取。
我们发现的安全问题现在已经获得厂家的CVE编号,这两个CVE编号分别为CVE-2017-2723
和CVE-2017-2715
,下面我们将分别对这两个安全漏洞进行介绍。
TrustZone中的安全存储应用对文件保密柜应用的验证存在漏洞,攻击者可以绕过这些验证,调用TrustZone中的安全存储应用,获得解密后的密钥。
TrustZone中task_storage应用的checkClientSignature
函数主要功能为对调用者的合法性进行验证,如果验证成功,则返回0。
在下面的代码中,我们可以看到:
(1)如果应用进程的uid<=1000且进程名的长度为4时,checkClientSignature
返回验证成功。如果攻击者安装一个名字长度为4的恶意程序(如abcd),并且以system用户的权限运行该程序,通过该程序调用TrustZone中的安全存储应用,则可以读取明文的文件加密密码。
(2) 如果应用的名称为com.xxx.xxx时,且签名为特定的签名内容时,checkClientSignature
返回验证成功。如果攻击者伪造相同的进程名和签名,则可以读取相关的安全存储的密码信息。
主要的攻击方法如上图所示,我们通过构造一个恶意的Tee服务和一个恶意的应用。恶意的应用提供攻击的操作界面,而恶意的Tee服务利用文件保密柜应用的签名信息直接和内核的Tee驱动进行通信,从而绕过了合法的Tee服务对文件保密柜应用的验证。
(1)主要调用流程 (2)TEEC_InitializeContext函数代码 (3)tee_get_app_cert函数主要代码
文件保密柜中的libtrustzone_storage.so
存在密钥信息泄露问题,非法攻击者可以利用该漏洞获得保存在手机TrustZone中的加密密码长度,从而利用该漏洞进行密码暴力破解或其他攻击。
文件管理应用的保密柜密钥数据库msb.db安全设计不当,非法攻击者可以访问该数据库的Salt、加密用的随机数、密码验证hash值,从而可以暴力破解Trustzone中的密码。
问题函数:android_util_TZStorage_getSize
问题代码:
int __fastcall android_util_TZStorage_getSize(int a1, int a2, int a3)
{
…
v4 = TEEC_FInfo(a3, &v6, &v7);
if ( v4 )
_android_log_print(6, 0, "android_util_TZStorage_getSize, res = %d\n", v4);
//密码长度信息泄露
_android_log_print(4, 0, "android_util_TZStorage_getSize, fd = %d, length = %d\n", v3, v7);
return v7;
}
主要的攻击方法如上图所示。我们通过在手机上安装一个恶意编写的软件,通过该软件读取文件保密柜应用泄露的密码长度,同时通过读取文件保密柜应用数据库中的Salt,用于密码比对的Hash值。利用这些值我们可以快速地进行暴力破解文件保密柜中的密码。
主要的攻击代码如下:
虽然 TrustZone 从软硬件架构上隔离出安全执行环境及非安全执行环境,有效地防止了安全数据被非法窃取的攻击。但是 TrustZone 在各个厂家具体实现时仍然引入一些新的安全问题。我们认为厂家除了需要关注 TrustZone 接口驱动及TA安全实现外,还需要关注应用的安全设计或者是 TrustZone 的API是否存在信息泄露等安全隐患。这些应用设计如果缺少必要安全防范,将导致 TrustZone 的防护失效,从而引发新的安全问题。
启明星辰积极防御实验室(ADLab)
ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员。截止目前,ADLab通过CVE发布Windows、Linux、Unix等操作系统安全或软件漏洞近300个,持续保持亚洲领先并确立了其在国际网络安全领域的核心地位。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。