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