2019年9月6日,华为鸿蒙获得了国际CC的EAL5+的证书,消息一出,业界一片哗然。一方面赞叹华为的技术实力无人能及,另一方面却对操作系统为什么能获得EAL5+表示百思不得其解。
首先说华为鸿蒙获得的EAL5+证书是真的,可以通过国际CC官网查看到证书,CC官网上不仅公开了其认证报告,还公开了鸿蒙的ST(安全目标),通过这两份文档,能深入的了解鸿蒙的安全性。
笔者将通过公开获得资料,以及自己对CC国际技术评估安全体系的了解,重点分析鸿蒙为什么能通过EAL5+的认证,鸿蒙EAL5+认证是否能代表其安全性强于安全实体SE,金融支付应用和通信应用放在鸿蒙上,能否保证安全。本文适用于对信息安全有所了解的同学,如果对信息安全或者cc体系不了解,需要先自行查阅相关内容。
图1 鸿蒙EAL5+证书
1 认证的鸿蒙是什么
回答这个问题,需要先阅读华为的ST文档。本次认证产品名称Hongmeng V1.2, TOE(评估对象)范围明确限定在TEE的一部分,硬件平台和部分安全固件(firmware和bootloader)并不在评估范围内。
图2 鸿蒙评估对象(TOE)
但是,华为是有自己的TEE的,名称Huawei iTrustee v2.0,并且在2018年2月获得了EAL2+的认证。鸿蒙和iTrustee有什么区别,因为ST文档只描述安全方面的功能,所以不能给出确定的结论,笔者猜测,iTrustee是符合GP标准的TEE,因为其遵循的规范是有GP组织发布的;而鸿蒙,应该是一个广义上的TEE,即一个专注于安全的独立操作系统,但是和GP标准的相关性不大,毕竟TEE的全称是可信执行环境,只要专注安全可信的操作系统,都可以叫做TEE,就向Android可以叫OS,Windows也可以叫OS,自己定义一个操作系统也可以。
图3 华为TEE iTrustee证书
2 TEE为什么普遍被认为只能过EAL2+的认证?
鸿蒙之所以让业界震惊,就是因为鸿蒙的EAL5+打破了TEE只能过EAL2+的固有概念,让TEE的安全等级有了质的飞跃。
为什么业内普遍认为TEE只能过EAL2+的认证呢?回答这个问题之前,需要先用一点篇幅介绍一下安全技术评估的体系,了解一下CC、PP和ST的关系,篇幅有限,所以介绍的既不全面也不准确,一切以简单易懂为原则,如果想更加深入的了解CC体系,可以拜读石竑松教授的论文或者私信我。
CC全称Common Criteria for Information Technology Security Evaluation,信息技术安全评估准则,这是一个被国际各国普遍认可的信息安全评估标准,CC将信息安全等级从低到高分为7个等级EAL1-EAL7。目前cc成员国超过了30家。
任何信息安全产品都可以使用CC作为评估标准,但是现实的安全产品从软件的操作系统,到硬件的芯片,从打印机到路由器,包罗万象,靠一个标准去限定所有产品,没有可操作性。所以CC作为信息安全评估的根,更应该被理解为一种方法论,提供了一种评估产品信息安全的方法。具体对于每一类产品的评估,需要定义更具体的评估标准,这就是PP protection profile,保护轮廓。
PP是对一类产品的评估标准,其完全沿用的cc的评估方法,只是会更加具体的定义了这类产品的资产、安全问题和安全功能。PP规范都是行业内所有曾参者共同决定的,在中国PP一般就是国标,例如安全芯片的PP就是GB-22186, 智能卡软件的PP就是GB-20276。PP的检测机构都是按着PP对产品进行量化检测案例的。
ST是安全目标,是产品厂商出具的问题,描述本产品是如何符合PP的描述性文档。
现在回到开始的问题上,为什么业内普遍认为TEE只能过EAL2+的认证?因为TEE类产品的PP就只有EAL2+的,这份PP是由GP组织在2016年定义的,是GP组织内所有成员国专家群策群力的结果,至于为什么各位专家只搞出了一个EAL2+的标准,没有定义更高安全评估等级的PP,笔者就只能靠猜了。我认为应该从两方面去考虑这个问题,必要性和可行性。
图4 GGP_TEE 的PP
必要性就需要从TEE的定位来说了,TEE本身定位就是比开放的操作系统(REE)安全,但又要比现在的安全实体好用。开放的操作系统(例如Android)没有安全性考虑,设计的目的就是功能强大,性能优异,用户体验好;安全实体则只专注于安全,普遍安全评估等级是EAL4+起步,但是非常难用,完全没有用户体验可言,连接口都是固定的那几个。所以这时候就需要TEE来兼顾安全与功能。所以从定位而言,TEE的等级不需要太高,至少没必要到达安全实体所需要的EAL4+级别。
可行性而言,笔者首先认为如果孤注一掷就要去实现TEE的EAL4+等级,也是可以的,但是牺牲性能换安全,这不是TEE应该做的事情,那么不牺牲性能去实现高安全等级呢?很难!
TEE的性能优势是因为和REE共用硬件设备,虽然做了底层硬件的隔离(主要是逻辑的)和访问控制,但是毕竟底子还在,比起安全实体全部独立的物理硬件而言,性能强了几个数量级。但是正因为如此,在没有对安全进行特殊设计的物理硬件环境下,实现TEE的安全,是空中楼阁,所以普遍的认为是TEE不具备防物理攻击的能力。可能会有朋友问,JavaCard是可以脱离芯片,以嵌入式软件过EAL4+的,为什么TEE不能只过软件的呢?这是因为JavaCard的PP通常在安全问题的假设部分,都会假设JavaCard软件的物理环境是安全的,安全性表现为厂家在ST中声明其软件是安装在EAL4+认证过的安全芯片上。TEE虽然也可以假设物理环境的安全,但是这个安全是没办法保证的,所以GP的专家并没有去假设这个无法被验证的物理安全。
综上所述,TEE很难达到EAL4+的水平,EAL4+是一个分水岭,这是安全实体SE的起始安全等级,只有达到EAL4+才可以应用在SIM、银行卡等高安全领域。
3华为的鸿蒙为什么可以过EAL5+认证?
我们先看看鸿蒙过的是什么的标准的EAL5+,从ST和证书中都能清楚发现,鸿蒙并不遵循任何PP,是按着CC进行检测认证的。
图5 鸿蒙ST,注意最后一行“this security target does not claim conformance to any PP”
这就有意思了。之前也说了,PP是对一类产品定义的评估标准,而鸿蒙声明并不遵循任何已有的PP,那么就意味华为认为鸿蒙是一个全新的产品,和市面上已经被录入规范的产品都不一样。因为是全新产品,所以遵循CC的方法论,自行定义资产,威胁,安全功能,这样的认证含金量显然要比使用PP的认证的低很多,毕竟PP是很多专家合作讨论数个月或者数年的结晶。
我们仔细分析鸿蒙的EAL5+的ST具体内容,然后和GP的PP进行对比,深入了解一下华为ST是怎么定义安全的。
不过在此之前,笔者还是要先简单介绍下CC的评估体系,为后面的解释做点铺垫。
CC评估准则,主要建立了一套评估安全的方法论,这个评估方法大致是如下图所示的样子。首先建立一个产品的安全评估模型,表明哪部分属于评估对象(TOE),哪部分不属于;然后需要对产品定义安全资产,这是最核心的部分,一切的安全评估都是为了保护安全资产的;接着定义安全问题,即安全资产可能遇到哪些威胁,目前安全资产所处的环境是什么,还需要假设一些前提条件;有了威胁,后面就是要定义安全目标,安全目标的实现可以抵御安全威胁;最后定义安全要求,实现了这些安全要求,就意味着安全目标达到了,安全要求包括安全功能和安全保障,这两部分如果都可以实现,那么最终就意味着产品是可以抵御威胁的,保证产品的资产安全。
那么我们再回到鸿蒙的ST文档上,看看笔者认为很讨巧的几个点。
1 鸿蒙的评估对象范围
鸿蒙的评估对象是完全的软件,不包括硬件和bootloader,如上面图2所示。这里就已经和GP_TEE的PP有了很大的区别,GP_TEE的PP规定的评估对象是包括部分的硬件资源的,因为GP的专家们知道,没有硬件安全基础的安全,是空中楼阁。
2 鸿蒙定义的威胁
鸿蒙只定义了两个威胁:T.UNAUTHORIZED
ACCESS和T.QUEUE SKIPPING,简单的说,一个是访问控制的威胁,一个是进程插队的威胁。偌大的一个操作系统只面临两类威胁,实在是不能理解中间的内涵。威胁也是CC体系中核心的存在,所有的安全功能,保障措施全部都是围绕着如何抵御威胁展开的,威胁越少,安全功能越好设计,举个通俗的例子,战国秦国面临的威胁只有东面从函谷关的攻击,只要守住这一个关卡,就能抵御六国的攻击,但是中原的战国韩国威胁来自四面八方,它需要保障安全的设计就会非常复杂。
GP_TEE的定义的威胁就很多,T.ABUSE_FUNCT、T.CLONE、T.FLASH_DUMP、T.IMPERSONATION、T.RAM 、T.ROGUE_CODE_EXECUTION、T.PERTURBATION、T.RNG、T.SPY、T.TEE_FIRMWARE_DOWNGRADE、T.ROLLBACK、
T.STORAGE_CORRUPTION、T.TA_PERSISTENT_TIME_ROLLBACK、T.ABUSE_DEBUG。威胁多,安全功能就更难设计,相应的所能达到的评估等级也就不容易太高。
这就是笔者认为,为什么鸿蒙能达到EAL5+的关键,华为使用了极其完备的安全设计,能抵御这两个威胁。但是问题来了,作为一个承载安全的操作系统,它真的不会受到来自物理攻击的威胁吗?内存有没有可能泄露机密信息?FLASH会不会被越权访问?随机数发生器会不会被篡改?其他的威胁到底是不是威胁?如何保障安全资产不受到其他威胁的破坏?这些问题,估计只有定义资产和威胁的人才清楚。
3 鸿蒙定义的假设
假设是产品安全的一个前置条件或者说是一个免责声明,举个例子,防盗门是安全的,这需要假设在和平环境下,破坏者只是平民;如果在战场上,破坏者是军队,那么这个防盗门是不可能安全的。
鸿蒙的假设是两个:A.TRUSTWORTHY
PERSONNEL、A.ENVIRONMENT和A.TRUSTED PROCESS,其中想说说第二个假设A.ENVIRONMENT,描述如下:
l The bootloader shall initialize the hardware so the TOE starts in a safe and secure state.
l The memory managed by the TOE, and the Kirin 970/980 SoC required by the TOE shall be protected in
confidentiality and integrity from the outside of the TOE.
l The bootloader and ARM Trusted Firmware shall be protected in integrity from the outside of the TOE.
简单理解就是鸿蒙安全,需要假设的条件是启动时bootloader要验证硬件以保证鸿蒙在安全状态,内存要被外部保证机密性和完整性,bootloader和防火墙也要被外部保障是完整的。
综上所述,华为对鸿蒙的评估对象范围上,排除了硬件和固件,威胁定义上只选择了两个威胁,排除了物理攻击,假设上又假设了固件是安全的,所以从安全评估的角度看,EAL5+的唯一难点,就剩下半形式化了。
4鸿蒙的EAL5+,是否可以说明其安全性比肩安全实体了?
安全实体SE,普遍的安全评估等级都是EAL4+,比鸿蒙还低。安全实体可以做成银行卡,SIM卡存放个人密钥,那么评估等级更高的鸿蒙更加安全?答案当然是否定的!
安全实体获得EAL4+的认证,在国内要涉及两份PP规范,分别是嵌入式软件安全的GB-20276和芯片安全的GB-22186,两份规范靠GB-20276的假设相关联,20276假设了嵌入式软件是要运行在安全芯片上的,所以作为智能卡产品,需要经过同时获得两个EAL4+认证才能说明产品的安全性。
那我们看看智能卡需要抵御的威胁和鸿蒙需要防范的威胁是否相同呢?显然是不同的,那么鸿蒙经过完整论述的安全目的,安全功能,安全功能需求,安全保障需求,以及评估对象实现的复杂的安全设计是否能抵御的了智能卡所面临的威胁呢?答案显然也是否定的,鸿蒙只能抵御鸿蒙自己面临的威胁。
其实,不同类型的产品比较安全评估等级本来就是个伪命题,两个功能,定位完全不同的产品,如何说谁比谁更安全呢?就好像保险箱和打印机比安全一样。
综上所述,把银行的PBOC应用或者电信的USIM应用,安装到安全等级为EAL5+的鸿蒙里,来实现银行卡或者电信卡的幻想,是不可行的。就功能而言,智能卡可以实现的功能,鸿蒙一定可以实现,但是智能卡的安全,是鸿蒙不可实现的,即使它看上去比智能卡还高一些。
5 总结
鸿蒙获得了EAL5+的认证是真实可信的,检测实验室是鼎鼎大名的荷兰Brightsigh,其权威性还是毋庸置疑的(当然,如果是德国的BSI认证的话,就更没质疑的了),很敬佩华为在安全领域取得的成绩,华为不仅鸿蒙获得了EAL5+的证书,服务器操作系统EulerOS获得了EAL4+证书(BSI-CC-PP-0067),TEE iTrustee获得EAL2+证书,其Kirin 9x0系列SoC中的inSE虽然没有查到评估等级证书,但是我相信获得证书的硬实力还是有的,可能有其他的原因没去申请(例如消费芯片迭代速度太快,安全技术评估的速度跟不上芯片迭代速度等)。可以说华为在安全领域的这些成就比国内专注信息安全的公司还要强,不能不让人佩服。
回到鸿蒙本身来说,作为一个全新的安全微内核,其在自己定义的范围内是很安全的,但是也仅限于其定义的范围内,超出了这个TOE范围,安全就无从谈起了。鸿蒙毕竟不是一类产品,作为华为自己的私有产品,产品定位,使用范围,产品功能都还不明确,但是现在可以明确的是,鸿蒙的EAL5+不代表其TEE、SE是EAL5+,鸿蒙的安全,不能说其作为生物识别平台的安全,也不能说其作为金融应用平台的安全,鸿蒙暂时不能代替TEE和SE。
鸿蒙刚刚起步,鸿蒙未来可期!