TEE-OS 入门前置篇:安全基础概念核心精讲
TEE-OS 入门前置篇安全基础概念核心精讲安全三要素、隔离技术、攻击面与威胁模型这三个概念是所有安全技术的基石更是理解TEE本质的关键。很多人觉得这些概念太基础、太理论但我可以明确告诉你90%的TEE安全漏洞本质上都是对这三个基础概念理解不到位导致的。一、安全三要素CIA三元组所有安全的终极目标所有安全技术从最简单的密码到最复杂的TEE最终都是为了实现三个核心目标机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)合称为CIA三元组。1. 机密性不让不该看的人看到定义确保信息只能被授权的主体访问防止未授权的泄露。衡量标准信息是否被未授权的主体读取、复制、传播破坏方式窃听、内存dump、侧信道攻击、逆向工程TEE中的典型应用指纹模板数据永远不会离开TEE即使Android系统被root攻击者也无法获取原始指纹图像支付密钥银行卡密钥、支付密码都在TEE中生成和使用不会出现在非安全世界的内存中DRM解密密钥视频内容的解密密钥存储在TEE中防止被提取用于盗版常见误区很多人认为加密就等于机密性。这是错误的——加密只是实现机密性的手段之一。如果密钥本身被泄露再强的加密也毫无意义。TEE的核心价值就在于它能保护密钥本身的机密性。2. 完整性不让不该改的人改定义确保信息在传输和存储过程中没有被未授权的篡改。衡量标准信息是否被未授权的主体修改、删除、插入破坏方式中间人攻击、固件篡改、数据注入、重放攻击TEE中的典型应用安全启动每一级固件在加载前都会验证签名确保没有被篡改OTA升级升级包在安装前会在TEE中验证哈希值和签名防止刷入恶意固件RPMB分区内置计数器和完整性校验防止重放攻击和数据篡改重要性完整性是所有安全机制的前提。如果攻击者可以随意修改系统代码那么任何机密性保护都会失效。这就是为什么安全启动是TEE安全的第一道防线。3. 可用性让该用的人能用定义确保授权的主体在需要时能够正常访问信息和服务。衡量标准系统正常运行的时间比例、服务响应时间破坏方式拒绝服务攻击(DoS)、系统崩溃、死锁、资源耗尽TEE中的典型应用TA隔离每个TA运行在独立的沙箱中一个TA崩溃不会影响其他TA和TEE内核硬件冗余关键安全组件有备份机制单个组件故障不会导致整个系统瘫痪异常处理TEE内核有完善的异常处理机制能够从错误中恢复而不会导致系统崩溃最容易被忽略的要素很多安全工程师只关注机密性和完整性却忽略了可用性。一个无法使用的系统再安全也没有意义。比如如果TEE内核崩溃导致手机无法开机这就是严重的可用性问题。4. 三要素之间的权衡安全三要素之间不是相互独立的而是存在着天然的矛盾需要根据具体场景进行权衡过度追求机密性会增加系统复杂度降低可用性过度追求可用性会放松安全限制降低机密性和完整性过度追求完整性会增加验证开销降低性能和可用性TEE的设计哲学在三个要素之间找到最佳平衡点。TEE提供最高级别的机密性和完整性同时通过硬件加速和优化设计尽可能减少对可用性和性能的影响。二、隔离技术安全的第一道防线隔离是所有安全技术中最基础、最有效的手段。安全的本质就是隔离——把危险的东西和安全的东西分开把不同安全级别的东西分开。1. 隔离的核心思想隔离的本质是建立边界然后控制边界上的访问。首先根据安全级别将系统划分为不同的区域然后在区域之间建立不可逾越的边界最后只允许经过授权的、最小必要的访问通过边界隔离的强度决定了系统的安全强度。边界越难突破系统就越安全。2. 软件隔离应用级安全的基础软件隔离是通过操作系统内核实现的隔离是所有普通应用安全的基础。常见的软件隔离技术进程隔离每个进程拥有独立的虚拟地址空间一个进程无法直接访问另一个进程的内存用户/内核隔离用户态和内核态运行在不同的特权级用户态代码无法直接访问内核资源SELinux/AppArmor强制访问控制(MAC)系统限制进程只能访问自己被授权的资源沙箱技术为不可信代码提供一个受限的执行环境防止它访问系统资源软件隔离的局限性软件隔离的最大问题是隔离边界本身也是软件。如果内核本身存在漏洞攻击者就可以突破所有软件隔离获得整个系统的控制权。Android应用沙箱是基于Linux进程隔离和SELinux实现的一个Linux内核漏洞就可以让恶意应用获得root权限突破所有应用沙箱这就是为什么即使你的手机安装了杀毒软件也无法完全抵御高级攻击3. 硬件隔离系统级安全的终极解决方案硬件隔离是通过CPU硬件实现的隔离隔离边界由物理电路保证比软件隔离强得多。常见的硬件隔离技术ARM TrustZone在CPU硬件层面划分出安全世界和非安全世界两个世界完全隔离Intel SGX在CPU中创建隔离的飞地(Enclave)即使操作系统被攻破也无法访问飞地中的数据RISC-V PMP物理内存保护将内存划分为不同的区域每个区域有不同的访问权限eSE/UICC独立的安全芯片拥有自己的CPU、内存和操作系统与主系统完全隔离硬件隔离 vs 软件隔离对比维度软件隔离硬件隔离实现方式操作系统内核CPU物理电路隔离强度中等极高突破难度一个内核漏洞即可突破需要硬件级漏洞攻击面大整个内核小只有硬件隔离接口性能开销低中等典型应用应用沙箱、SELinuxTEE、安全支付、生物识别TEE的本质TEE就是建立在ARM TrustZone硬件隔离基础上的安全执行环境。它利用CPU硬件提供的强隔离为敏感操作提供一个比Android系统安全得多的运行环境。4. 分层隔离模型现代安全系统采用分层隔离的设计不同安全级别的数据和操作运行在不同的隔离层中最高安全级别 ↑ eSE/UICC独立安全芯片 ↑ TEECPU硬件隔离 ↑ Linux内核用户/内核隔离 ↑ Android应用沙箱进程隔离 ↑ 最低安全级别普通应用运行在Android应用沙箱中系统服务运行在内核态敏感操作指纹识别、支付签名运行在TEE中最敏感的根密钥存储在eSE中这种分层隔离模型确保了即使低层被攻破高层的安全依然不受影响。三、攻击面与威胁模型安全工程师的核心思维作为一名安全工程师你的核心能力不是如何防御而是如何思考攻击。只有知道攻击者会从哪里进攻、会用什么方法进攻你才能设计出有效的防御方案。1. 攻击面系统的软肋定义攻击面是系统中所有可以被攻击者利用的入口点的总和。任何可以接收输入的地方都是潜在的攻击面攻击面越大系统就越不安全安全设计的核心原则之一就是最小化攻击面如何识别攻击面识别攻击面的方法很简单找出所有系统与外部交互的地方。网络接口本地套接字文件系统设备驱动系统调用用户输入TEE的攻击面TEE的攻击面非常小这是它安全的重要原因唯一的外部接口是SMC指令每个TA只暴露有限的几个命令接口TEE内核只提供最必要的系统调用常见的攻击面扩大错误很多开发者在开发TA时为了方便会给TA添加很多不必要的功能和接口这会大大增加TA的攻击面。一个好的TA应该只做一件事并且只暴露完成这件事所必需的最小接口。2. 威胁模型系统地思考攻击威胁模型是一种系统地分析系统安全风险的方法。它帮助你回答三个问题谁会攻击你攻击者他们会用什么方法攻击你攻击方式他们攻击你能得到什么攻击目标最经典的威胁模型STRIDE模型STRIDE是微软提出的威胁建模方法将所有威胁分为6类威胁类型描述对应的安全目标TEE中的典型威胁Spoofing欺骗冒充他人身份认证冒充合法CA调用TATampering篡改修改数据或代码完整性篡改OTA升级包Repudiation抵赖否认自己做过的操作不可否认性否认自己发起的支付交易Information Disclosure信息泄露泄露敏感信息机密性通过侧信道攻击提取密钥Denial of Service拒绝服务使系统无法正常使用可用性发送恶意请求导致TEE崩溃Elevation of Privilege权限提升获得未授权的权限授权从TA漏洞提升到TEE内核权限威胁建模的步骤绘制系统架构图明确系统的所有组件和它们之间的交互识别所有攻击面找出所有系统与外部交互的地方应用STRIDE模型为每个攻击面分析可能存在的6类威胁评估威胁等级根据威胁发生的可能性和造成的影响划分威胁等级制定缓解措施为每个高等级威胁制定对应的防御方案3. 攻击者能力分级在进行威胁建模时我们需要假设攻击者拥有不同的能力。不同的攻击者能力对应不同的防御要求。常见的攻击者能力分级Level 1普通用户只能使用系统提供的正常功能没有特殊权限Level 2应用开发者可以开发和安装第三方应用Level 3系统管理员拥有Android系统的root权限Level 4内核攻击者可以利用Linux内核漏洞执行任意代码Level 5物理攻击者可以物理接触设备使用JTAG、逻辑分析仪等工具Level 6硬件攻击者可以拆解芯片进行侵入式攻击TEE的设计目标能够抵御Level 4以下的所有攻击。对于Level 5和Level 6的物理攻击TEE也能提供一定程度的防护。四、基础概念在TEE中的统一体现现在我们把这三个基础概念结合起来看看它们在TEE中是如何统一体现的硬件隔离是TEE的基础它为TEE提供了一个独立的执行环境机密性和完整性是TEE提供的核心安全服务最小化攻击面是TEE的设计原则确保TEE的安全强度威胁模型指导TEE的安全设计确保所有可能的攻击都被考虑到五、本篇总结本篇核心要点安全三要素是所有安全技术的终极目标机密性、完整性、可用性隔离是安全的第一道防线硬件隔离比软件隔离强得多安全工程师的核心思维是攻击思维要学会识别攻击面和建立威胁模型TEE的本质是建立在硬件隔离基础上的安全执行环境安全工程师的三个基本素养怀疑一切永远不要假设任何输入是合法的永远不要相信任何外部系统最小权限只给主体完成任务所必需的最小权限纵深防御不要依赖单一的安全机制要建立多层防御体系