Page 149 - 《软件学报》2020年第10期
P. 149
张倩颖 等:抗电路板级物理攻击的操作系统防御技术研究 3125
片上内存相比片外内存(一般为 DRAM 芯片)在性能和安全性两方面都具有一定的优势.在性能方面,片上
内存因为通过内部高速总线与 CPU 连接,因此 CPU 访问片上内存的速度一般比片外内存快.在安全性方面,片
上内存具有更高的物理安全性,具有抵抗板级物理攻击的能力:片上内存没有向芯片外部暴露物理引脚
(physical pin),因此其数据信息和地址信息不会从芯片外引脚或总线上泄露出去.但是,物理攻击者可以通过冷启
动攻击加载恶意攻击代码或恶意 DMA 设备来获取片上内存的内容.对于冷启动攻击方式,英国哥伦比亚大学研
究团队 [50] 以及国内中科院软件所研究团队 [51] 在实际物理开发板上的实验表明智能终端处理器芯片的
BootROM 代码在重启后一般会对片上内存进行清空.而冷启动攻击的攻击程序只能在重启设备后才能加载,因
此冷启动攻击无法获取片上内存的内容.对于 DMA 方式的攻击,硬件系统或软件系统设计者需要将片上内存
与恶意 DMA 外设进行隔离以防止它们通过 DMA 方式获取片上内存的内容.国内中科院软件所的研究团
队 [49,52] 使用 ARM TrustZone 的隔离能力来抵抗这种攻击,其他可采用的隔离方式还包括嵌套内核隔离机
制 [53−56] ,该隔离机制允许系统软件设计者在处理器没有提供类似 ARM TrustZone 这种硬件隔离机制的情况下
逻辑隔离出一块地址空间.
2.2 基于Merkle Tree的内存完整性保护技术
Merkle Tree 是保护内存完整性的主要机制.传统的 Merkle Tree 内存保护方案如下(如图 3 左所示):首先将
内存划分为一个个内存块并对每个内存块进行消息验证码(message authentication code,简称 MAC)计算,得到
的 MAC 值作为 Merkle Tree 的叶子节点,然后自叶子节点向上一层一层进行 MAC 计算,最终计算到根节点.该
树根节点可以看作整个内存的完整性值,需要存储在芯片内部.每次从片外内存读取数据时,都需要从对应叶子
节点计算到根节点,用计算得到的根节点值与芯片内部的标准完整性值对比,以检测读取的片外内存是否被篡
改;每次将芯片内的数据(譬如缓存或片上内存的数据)写回片外内存上时,需要更新对应叶子节点以及该节点
到树根路径上所有节点的值.
Fig.3 Comparison between Merkle Tree and Bonsai Merkle Tree
图 3 Merkle Tree 与 Bonsai Merkle Tree 对比
基于 Merkle Tree 的内存完整性保护技术每次验证或更新数据都需要计算从叶子节点到树根路径上所有
节点的值,给系统带来较重的计算负载.为了降低计算负载,MIT CSAIL 实验室提出了将树节点存储在缓存上的
优化方法 [57] ,一旦某一节点被缓存在了芯片内部,该节点可以看作树根,完整性校验和更新只需要从叶子节点计
算到该缓存节点即可.但是该优化方法只有在 Merkle Tree 比较小时才能提高完整性验证的效率,如果 Merkle
Tree 较大,树节点会占用大量缓存,极端情况下会占用 50%的缓存,导致普通应用程序经常发生缓存缺失,降低应
用程序运行速度.
因此,降低 Merkle Tree 大小成为优化内存完整性保护的一个重要研究方向.北卡罗莱纳州立大学的研究团
队提出了 Bonsai Merkle Tree 的概念 [29] .Bonsai Merkle Tree 为每个内存块分配一个计数器,然后对每个内存块和
对应计数器计算 MAC 值,MAC 值就是该内存块的完整性值.因为 MAC 值已经对内存进行了完整性保护,所以