手机设备安全的五个要素
2023-8-1 00:44:44 Author: mp.weixin.qq.com(查看原文) 阅读量:1 收藏

前言

从负责HM的安全技术和产品规划算起,踏入智能终端安全这个细分领域已经2年半了。这2年多,说实话很惭愧,忙于各种事务,很少抽出时间好好把终端安全相关的技术系统的学习起来,都是边做边学,边学边做,往往管中窥豹。于是,最近下定决心,把Java和Python又装回电脑,翻起安全大部头和各类技术论文,要把自己的技术本事再一一练回来。

我从不相信有什么东西是人学不会的,只要决心去学决心去做,知行合一。当然,分工不同,导致投入的精力和理解的深度不可能与天天做架构、写代码的人比,但学习不是为了攀比,而是为了完善自己的知识体系,挤出一点时间学习技术又是什么难事?

今天的文章,是为了给安全产品经理、安全规划师、安全架构师,也是为我自己提供一个简易而不是学究味十足的手机设备安全全局视图,明白打造一部安全可信的手机设备,需要设计哪些基本的安全能力。所以根据公开可得的各手机厂商的安全技术白皮书(VOHA)和业界公认的标准(CC MDPP、TCSEC等),写就此科普文,还是非常粗糙,就当一个目录,后面会继续更新,并对其中的重要专题,比如TEE,写几篇文章和代码进行更详细的说明,以增学习之效。

正文

密码学是现代一切智能终端安全性的基础,由密码学工程实现的终端的启动根、存储根、计算根和软件根,则是一切智能终端安全的四个支柱,一切安全隐私特性,都在这四个支柱的基础上构建。那么,基于这四个支柱,如何构建一部高安全性的可信的手机设备,以下五个要素是核心。

一、系统完整性(不被篡改)

1、安全启动

启动(开机、上电),是系统运行的第一步。安全启动,目的是保障启动时载入的引导程序、内核等镜像文件是合法的、未被篡改的。

其一般流程是,设备启动后,应用程序处理器(AP)或者专用安全处理器(苹果SE或者高通TME),会执行指向只读内存(OnChipROM(安卓)或BootROM(苹果))中的一段代码,该代码出厂时固化,出厂后无法修改,叫做“片内引导程序(ROM SoC Bootloader)”或者更知名的“启动信任根”。片内引导程序完成初始化后,即从Flash中加载一级引导程序,并利用根证书公钥对一级引导程序进行签名验证(采用的签名算法为常见的RSA、SHA等),验证无误后才开始运行一级引导程序。一级引导程序加载、验证和执行下一个镜像文件,如二级加载程序、内核(典型的镜像文件还包括xloader、fastboot、基带等等,随不同终端形态划定范围后进行加密保护,以防止逆向攻击,并在启动阶段解密后加载入对应区域)等等,任何一个环节验证出差,都会停止启动。以此类推,环环相扣,建立信任链,防止非法镜像文件被加载和运行。

上述流程中,如何保障根证书公钥的安全性?常见的做法,是使用存储在OTP(One Time Programmable,一次性可编程存储器,基于熔丝技术,可被多次读取,但仅可被烧写一次)或eFuse(Electrically Efuseable Programmable Read Only Memory)空间中的根证书公钥哈希(因为OTP或eFuse存储空间较小,不能存完整的公钥),对存储在Flash中的根证书公钥进行校验,确保公钥的完整性。

另外,对开启了安卓启动验证(Android Verified Boot)机制的只读系统分区,AVB会验证每一个启动阶段的启动分区和其他分区文件系统的完整性,才允许进入下一个启动阶段。

所以,总体而言,虽然受限于硬件、安全投资等能力,各厂商对安全启动的设计方案各有不同,但核心不外乎三点:

首先,通过硬件固化的方式,保障启动信任根的安全;

其次,通过熔丝方式,保障公钥的安全;

最后,在1和2的基础上,层层验证引导程序、内核、基带等镜像文件,构建信任链,直到整个系统安全运行。

2、安全更新

为防止对系统软件的非法更新、带有漏洞的版本更新给用户带来的风险,一般情况下,只允许用户进行安全更新,即系统对升级包进行签名校验,验证为官方的升级包才可以更新,并且升级包完成下载准备升级时,向在线签名服务器上传设备标识、升级包版本号等组成的升级包哈希进行完整性校验,校验通过,才允许更新,否则更新失败。

3、系统防回滚

系统升级完成后,除有特殊的管控策略,默认禁止系统回滚到老版本,以防攻击者利用老版本的知己漏洞去获取用户的权限和数据。

一般有两种防回滚方式:一种是在线方式,通过验证授权服务器,比较要安装的版本是否为最新,如不是则拒绝安装;另外一种是离线方式,通过在eFuse/OTP中写入版本号,只有要安装的系统版本的版本号大于eFuse中的版本才能开机。

4、运行时保护

即使系统安全启动,并且能够保障安全升级,系统运行时也可能被攻击。在硬件允许的情况下,业界常用的防护手段有:

1、内核完整性保护技术。通过ARMv8提供的运行于EL2的虚拟化扩展(Hypervisor)模式,防止系统关键寄存器、页表、代码等被篡改,实现对于代码及只读数据段等静态数据的保护。

2、定时扫描的完整性度量检测技术。首先对系统关键组件或文件生成哈希,即度量基线,并把基线保存于TEE中;其次,通过定时或策略触发的方式,比较运行时的度量值和基线差异,传递给业务方,采取合适的安全策略。

二、漏洞防利用

操作系统的复杂性,导致其存在各种漏洞的必然性。漏洞不可能完全避免,但可以通过适当的安全技术进行消减。

比如,应用运行时内存保护技术中的地址空间布局随机化技术(ASLR,Address space layout randomization),通过对堆、栈和共享库映射等线性区布局的随机化处理,消减攻击者通过相对固定的内存地址查看内存的风险,减少内存溢出攻击。

又比如,通过数据执行保护技术(Data Execution Prevention),把内存中的特定区域标注为不可执行,禁止处理器将数据区域中的数据当作代码执行。

又比如,针对具有连续覆盖(连续破坏)特征的栈溢出攻击,可以在编译阶段,在局部变量和函数返回地址之间写入 一个Canary(金丝雀)变量,函数返回前,比较栈上和堆上的Canary,就可以判断返回地址是否被破坏。

又比如,ROP/JOP常利用程序漏洞来覆盖内存中的函数指针,将程序控制流重定位到现有程序代码段,通过组合代码段实现攻击。因此,可使用控制流完整性CFI技术来检查程序控制流是否停留在设定的范围中,如检测到未定义程序行为,则丢弃程序执行。

三、权限管控

1、内存权限管控

页表提供的RWX权限管理,结合MMU(Memory Management Unit)内存访问保护,可实现进一步的内存权限控制,主要是以下三种:

PAN(Privileged Access Never,特权模式访问禁止):攻击者篡改某些内核数据结构的数据指针,使其指向攻击者在用户态准备好的数据结构,达成攻击。PAN 可防止内核访问用户态数据,阻止上述攻击。

PXN(Privileged Execute Never,特权模式执行禁止):攻击者篡改某些内核数据结构的数据指针,使其指向攻击者在用户态准备好的恶意代码,达成攻击。PXN可防止内核直接执行用户态代码,阻止上述攻击。

XOM(eXecute Only Memory,只执行内存):内核对用户态代码只执行不可读。

2、强制访问控制策略

操作系统默认开启强制访问控制策略(MAC),如SELinux等,无法被应用程序修改配置。MAC在启动阶段即加载到内核中,对所有进程访问目录、文件、设备节点生效,实现对系统资源的细化访问控制;对需要高权限才能运行的服务进程,也要满足最小必要原则,只保留业务必需的高权限,去掉不必要的其他权限。这样的设计,使得即使恶意进程获取了高权限,也被限制在局部范围,不至于扩大攻击面。同时,开启 seccomp,基于预定义的规则,过滤某些可能对系统造成危害的调用。

四、数据加解密

1、密钥管理

系统中有各种密钥,但有一个密钥处于基础位置,即设备唯一密钥HUK(Hardware Unique Key),它是在产线中通过硬件随机数发生器生成的,并写入eFuse中保护,仅支持特定软硬件(加解密硬件引擎)访问,可用于其他业务密钥的派生和业务密钥的加密,但不可直接用于数据的加密,以防止HUK暴露。

为保障各类密钥的安全性和使用的便捷性,还要设计以密钥分层分级和访问控制为核心的密钥管理机制,提供密钥全生命周期管理、加解密算法调用、证书管理等能力,使得应用方便的调用属于自己的密钥。

2、硬件加解密引擎与真随机数发生器

为了安全业务专门设计的密码学计算电路,也叫硬件加解密引擎,相比软件实现的密码算法,安全性和性能更佳,一般可支持各类对称算法、公钥算法和哈希算法。另外,系统应支持密码学意义上的真随机数的生成,用于密钥、盐值的派生。

3、文件加密

文件加密有全盘加密和文件级加密(File based Encryption-FBE)两种。

全盘加密,是指对磁盘上的所有用户数据进行加密,后续创建的数据在存入磁盘前也会自动加密,并且所有读取操作都会自动解密数据。由于体验、性能和细粒度的原因,业界一般更多采用文件级加密FBE。

FBE针对不同的系统分区,采用不同的加密策略,一般分为三个种分区:凭据加密(CE)、设备加密(DE)、非加密(NE)。

CE加密数据的类密钥(Class Keys)由锁屏密码和HUK共同保护,加密的数据在开机后用户首次输入锁屏密码解锁手机前不能访问,重新锁定屏幕后仍然可以访问,如图库、联系人、短信、日历、通话记录等。应用数据默认存储在CE区。另外,基于CE,可进一步增强,如锁屏时文件不可打开但可写入、完全不可打开等。

DE加密数据的类密钥由HUK保护,与锁屏密码无关。手机上电后即可访问,如壁纸、闹 钟、铃声等。

NE则完全不加密,这种情况极少,如升级包。

五、可信执行环境

可信执行环境(Trusted Execution Environment, 简称TEE),本质是利用软硬件隔离技术,在风险较大的“富文本环境(REE)”中隔离出一个“安全环境”。TEE有不同的实现架构,工程上常见的是:芯片级TEE和TrustZone TEE。

芯片级TEE,也叫安全元件,较知名的是高通的SPU、苹果的SE等,其原理是通过设计专门的安全硬件和安全子系统(比如,苹果的SEP是基于K4微内核实现的安全操作系统),与AP的计算资源进行隔离,实现特定的安全功能,如密钥管理、证书管理、硬件加解密等,以保护高安全性要求的数据,如锁屏密码和指纹等生物识别信息,或者保护高安全性要求的操作,比如支付等。

而TrustZone是ARM提出的TEE架构,ARM Cortex A架构基本都支持TrustZone的实现。其本质是通过CPU SMC指令,在REE和TEE中切换,达到硬件隔离的目的,取得性能、安全和成本的平衡,因此是手机行业采用最广泛的解决方案(当然,对服务器侧,还有基于X86的SGX),常见的实现有QSEE、Trustonic以及个别企业自研的TEE等。

由于可以把TEE看成一个专门处理安全业务的独立操作系统,因此很多上述提到的安全技术同样可以用在TEE身上,如TEE操作系统的安全启动、安全升级、镜像加密、TEE内核形式化证明,和TEE操作系统的防漏洞技术,如地址随机化、数据不可执行,以及可信应用(TA)的生命周期管理,包括TA的签名验证、TA的资源隔离、TA的权限管控(如白名单)、TEE-REE安全通信等等。

由于TEE处理的都是高安全性要求、高敏感性的数据,其存储的安全性也非常重要。TEE的安全存储一般分为两种RPMB和SFS。RPMB(Replay Protected Memory Block,重放保护内存块))是eMMC 内特定的存储区域,对REE不可见,可以防止重放和回滚攻击,其容量较小,所以一般存放核心敏感短数据,比如手机IMME号、指纹信息等。SFS实际上也是REE侧的存储,只是存储的数据经过了TEE加密,因此支持的容量较大,但由于存储在REE侧,安全性比RPMB低。

另外,由于Trustzone架构无法防物理攻击,因此,对安全性要求很高的如支付、卡证等等业务,要结合安全芯片进行保护,否则安全等级是不够的。

总之,打造一部安全的手机设备,以上五个要素是非常基础的,对每个要素,都值得花大量的时间深入学习和实践。

参考文献

1、《苹果平台安全白皮书》

2、《OriginOS安全白皮书》

3、《ColorOS安全技术白皮书》

4、《HarmonyOS 3 安全技术白皮书》

5、CC MDPP标准

6、TCSEC标准


文章来源: https://mp.weixin.qq.com/s?__biz=MzAxMjIyNDE4Mg==&mid=2651759252&idx=1&sn=e3fffabe3122be8ebe4573672a780f38&chksm=804f114db738985bb39be21ed3f5732a71e2a8fadf8d14656d620309ea997c33620f594eab44&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh