第13讲 基于安全CPU的完整性保护 第8章:系统完整性保护 第3部分/共4部分
本讲内容 主题:基于安全CPU的完整性保护 教材内容: 第8.4节:基于安全中央处理器的完整性 © 2009 电子工业出版社
模型研究背景 AEGIS—基于安全CPU的完整性模型 关联 2003:麻省理工学院(MIT):G.E. Suh、D. Clarke、B. Gassend、M. van Dijk、S. Devadas 假定:惟有CPU可信,其它所有的硬件和软件(包括内存和操作系统在内)均不可信。 关联 AEGIS安全引导模型 1997:宾夕法尼亚大学 同名纯属巧合 © 2009 电子工业出版社
基本思路和目标 主要对象 基础 目标 进程的完整性 普通中央处理器 发现或防止可能影响进程行为的篡改事件 增加安全处理单元 提供进程完整性验证功能 目标 发现或防止可能影响进程行为的篡改事件 物理手段的篡改 软件手段的篡改 © 2009 电子工业出版社
进程完整性的体现(1/5) 进程的完整性: 完整性验证方法: 进程模式: 在初始状态中的完整性 在中断过程中的完整性 呈现于存储介质时的完整性 输出结果的完整性 完整性验证方法: 指纹法(哈希值法) 进程模式: 普通模式 篡改响应模式 © 2009 电子工业出版社
进程完整性的体现(2/5) 进程的完整性: 完整性验证方法: 进程模式: 在初始状态中的完整性 在中断过程中的完整性 呈现于存储介质时的完整性 输出结果的完整性 完整性验证方法: 指纹法(哈希值法) 进程模式: 普通模式 篡改响应模式 普通模式篡改响应模式:初始状态开始 * 计算并检查程序哈希值 * 检查运行环境 © 2009 电子工业出版社
进程完整性的体现(3/5) 进程的完整性: 完整性验证方法: 进程模式: 在初始状态中的完整性 在中断过程中的完整性 呈现于存储介质时的完整性 输出结果的完整性 完整性验证方法: 指纹法(哈希值法) 进程模式: 普通模式 篡改响应模式 环境切换 * 保护寄存器信息 保护环境信息的完整性 © 2009 电子工业出版社
进程完整性的体现(4/5) 进程的完整性: 完整性验证方法: 进程模式: 在初始状态中的完整性 在中断过程中的完整性 呈现于存储介质时的完整性 输出结果的完整性 完整性验证方法: 指纹法(哈希值法) 进程模式: 普通模式 篡改响应模式 代码和数据驻留的存储介质 * 片上cache * 片外内存 * 片外磁盘 读:片外 片内:验证完整性 ------ 完整性验证机制 受验证内存位置: * 只允许一个进程修改 * 最高地址位 = 1 © 2009 电子工业出版社
例:读信息与验证 问: 答: 进程A在篡改响应模式下欲读 已知: 读ADD1和ADD2中的数据时的区别? 读虚拟地址ADD1时:验证 进程虚拟内存空间 需要验证部分 地址最高位 = 1 无需验证部分 地址最高位 = 0 © 2009 电子工业出版社
进程完整性的体现(5/5) 进程的完整性: 完整性验证方法: 进程模式: 在初始状态中的完整性 在中断过程中的完整性 呈现于存储介质时的完整性 输出结果的完整性 完整性验证方法: 指纹法(哈希值法) 进程模式: 普通模式 篡改响应模式 结果信息------数字签名 例:程序Prog,结果M,CPU私钥KPRV-CPU,签名: {H(Prog), M}KPRV-CPU 断定: 特定的系统(系统认证)运行特定的程序(程序认证)得到特定的结果信息(信息认证)。 © 2009 电子工业出版社
AEGIS模型系统结构原理 添加的安全支持单元: 密码运算单元 完整性验证单元 安全环境管理单元 安全环境管理表 © 2009 电子工业出版社
完整性验证单元 完整性验证单元: 验证片外存储介质中的进程信息(包括代码和数据)的完整性 针对虚拟地址空间 © 2009 电子工业出版社
基于莫科尔树实施完整性验证 进程虚拟内存空间 验证 物理内存 完整性验证单元 片上cache 磁盘 © 2009 电子工业出版社
例:读虚拟空间中的信息 问题: 解答: 篡改响应模式:进程A要读取虚拟地址VADD1处的数据 虚拟地址VADD1----物理地址PADD1----存储块Mblock1 VADD1最高位 = 1 ? Yes No 验证Mblock1的完整性 读:Mblock1 片上cache © 2009 电子工业出版社
莫科尔树的构造与存储 (1个)进程 (1棵)莫科尔树 (1棵)莫科尔树 (1个)虚拟内存空间 树节点的片上cache缓存 树节点的哈希值 树节点的虚拟地址 进程虚拟地址空间 树节点的有效位: 1:有效 ---- 已计算哈希值 原虚拟地址空间 树虚拟地址空间 0:无效 ---- 未计算哈希值 新建树: 所有树节点:有效位 = 0 使用树节点: 计算哈希值 1 有效位 © 2009 电子工业出版社
树节点完整性验证算法 待验证的节点 当前节点 找到当前节点的兄弟节点; 连接兄弟节点信息; 计算连接结果的哈希值----Hc; 从莫科尔树的虚拟内存空间中找 连接兄弟节点信息; 计算连接结果的哈希值----Hc; 找当前节点的父节点的哈希值----Hp; Hp ≠ Hc 报告完整性失效,结束; 父节点是树根吗? 是 结束; 父节点 当前节点; 转到第2步。 © 2009 电子工业出版社
带cache块的树节点完整性验证算法 待验证的节点 当前节点 找到当前节点的兄弟节点; 连接兄弟节点信息; 从莫科尔树的虚拟内存空间中找 连接兄弟节点信息; 计算连接结果的哈希值----Hc; 找当前节点的父节点的哈希值----Hp; Hp ≠ Hc 报告完整性失效,结束; 父节点在cache块中或者是树根吗? “在”或者“是” 结束; 父节点 当前节点; 转到第2步。 © 2009 电子工业出版社
树节点更新算法 待更新节点 当前节点 修改当前节点; 当前节点 + 兄弟节点 重新计算并更新父节点; 父节点是树根吗? 是 结束; 父节点 当前节点; 转到第3步。 © 2009 电子工业出版社
莫科尔树的创建与使用 普通模式 篡改响应模式: 读片上cache块中的树节点: (计算程序哈希值) 分配莫科尔树虚拟内存空间 (在虚拟内存空间中)建立莫科尔树 宽度优先----存储树节点 树节点有效位 = 0 读片上cache块中的树节点: 有效位是0吗? 是 找子节点的cache块 子节点的cache块 计算树节点的哈希值 1 树节点有效位 © 2009 电子工业出版社
安全CPU提供的专用指令 enter_aegis: exit_aegis: sign_msg: get_random: 使进程从普通模式转入篡改响应模式; exit_aegis: 使进程从篡改响应模式转入普通模式; sign_msg: 数字签名:(程序哈希值+给定的信息)----CPU的私钥; get_random: (由安全硬件的随机数生成器)生成一个随机数。 © 2009 电子工业出版社
安全环境管理单元 分配SPID 分配安全环境管理表记录 安全环境管理表的存储: SPID----安全进程身份标识 普通模式下的进程: SPID = 0 篡改响应模式下的进程: SPID ≠ 0 分配安全环境管理表记录 (篡改响应模式下的1个)进程 (1个)记录: 进程的SPID enter_aegis指令:分配 程序的哈希值 exit_aegis指令:释放 寄存器组的值 莫科尔树根的值 安全环境管理表的存储: 于片外虚拟内存空间 专用片上cache:(缓存)当前进程的表记录 © 2009 电子工业出版社
初始状态完整性支持 执行enter_aegis指令: 计算程序的哈希值 检查进程运行环境 (为进程)分配SPID (为进程)创建安全环境管理表记录 (为进程)分配莫科尔树虚拟内存空间 (为进程)建立莫科尔树 进入完整性验证与保护状态 © 2009 电子工业出版社
中断过程完整性支持 安全环境管理表记录 响应中断 中断返回 © 2009 电子工业出版社
片上cache的完整性支持 使用cache标记 片上cache块包含的内容: 程序信息 缓存的主体 进程的SPID 信息的虚拟地址 程序信息 缓存的主体 进程的SPID 信息的虚拟地址 注明:哪个进程借助该cache块访问哪个虚拟地址上的信息。 访问 © 2009 电子工业出版社
片外存储介质的完整性支持 完整性验证单元: 保护虚拟内存空间 基于莫科尔树的完整性验证 验证 进程虚拟内存空间 物理内存 完整性验证单元 片上cache 磁盘 完整性验证单元: 保护虚拟内存空间 基于莫科尔树的完整性验证 © 2009 电子工业出版社
结果信息的完整性支持 执行sign_msg指令: 进程 ---- 程序Prog 结果M CPU私钥KPRV-CPU 签名: {H(Prog), M}KPRV-CPU 在结果信息传送过程中,保护结果信息的真实性和完整性。 © 2009 电子工业出版社
总结:硬件支持的完整性验证 初始状态完整性支持 中断过程完整性支持 片上cache的完整性支持 片外存储介质的完整性支持 结果信息的完整性支持 © 2009 电子工业出版社
问题? wenchang@ruc.edu.cn © 2009 电子工业出版社