利用硬件性能计数器(HPCs) 检测嵌入式系统中的固件修改

作者:{Persist}@ArkTeam

原文作者:Xueyang Wang, Charalambos Konstantinou, Michail Maniatakos
, Ramesh Karri

原文题目:ConFirm: Detecting Firmware Modifications in Embedded Systems using Hardware Performance Counters

原文来源:ICCAD ’15 Proceedings of the IEEE/ACM International Conference on Computer-Aided Design

程序的行为可以通过其执行期间硬件事件的总出现次数以及不同被监视事件的计数之间的关系来唯一地表征。 此类硬件事件包括退役指令,分支机构,返回,浮点运算等。当对软件进行恶意修改时,执行的硬件事件的计数将与合法的固件运行期间的计数不同。利用HPC来统计硬件事件,开销低。本文在基于ARM和PowerPC的嵌入式平台上实现了ConFirm的原型。 并通过两种固件和攻击证明了该技术的可行性。

HPC是内置于现代微处理器的PMU中的专用寄存器,用于存储有关硬件事件的信息,事件选择器可以指定要监视的用户定义的硬件事件。

本文提出了一种计算路径分析方法,固件的子程序通常在其控制流程图中具有多个计算路径。每个计算路径都经过不同的代码块,因此执行不同的代码。触发不同的硬件事件,从而可以生成不同的硬件事件的计数向量。令C(Ex)表示来自目标计算路径执行的事件x的计数。如果同时监视m个硬件事件,则可以获得具有m个元素的HPC向量V,如下所示:


如下图所示,在被监视的子例程中执行有效路径P1和P2就低级硬件事件的出现而产生不同的向量V1和V2。例如,恶意执行可以通过路径P3,生成与V1和V2不同的意外HPC向量V3。


图1 计算路径

ConFirm核心由三个组件组成:插入模块,将检查点插入受监控的固件,HPC处理程序,驱动HPC,数据库,存储有效的基于HPC的签名。所有这些组件都存储在在写保护的非易失性存储器中。这可以防止攻击损害ConFirm,同时仍允许授权更新


图2 ConFirm的结构示意图

初始化过程:当固件程序加载到内存当中执行之前,bootloader将控制权转交给Confirm,ConFirm中的检查点生成器就会在固件程序中插入检查点,两个检查点形成一个检查窗口,然后HPC handler就开始启动并初始化HPCs,最后Confirm会把控制权转交给bootloader,完成初始化工作。

ConFirm的工作工程如下图所示,当固件程序一旦执行到达检查点,ConFirm就会拦截控制流并将其重定向到核心模块。然后,核心与HPC处理程序和基于HPC的签名数据库进行通信。具体地,读取先前检查窗口的事件计数并与数据库中的相应签名进行比较。然后重置HPC等待下一个检查窗口,并继续执行受监视的固件。HPC会一直计算硬件事件的发生次数,直到达到下一个检查点。


图3 Confirm工作过程示意图

本文还提出利用一种随机化检查点的方法来阻止恶意的检测绕过,如下图所示,如果攻击者知道正确的AB的值,可以修改AC的值,同时修改CB的值,从而使AB不变,系统就检测不到恶意修改。所以随机化检查点可以避免检查窗口被预测。


图4 随机化检查点

Confirm整个检测分为离线和在线两个阶段,如图下图所示,离线阶段执行一些干净的副本,并将检查点插入固件程序中,生成正常的向量存入数据库中,所谓在线阶段就是检测阶段,利用离线阶段的向量数据来检测是否有恶意修改,如果有终止程序或发出警报。


图5 在线阶段和离线阶段示意图

ConFirm是一种检测恶意行为的新思路!

发表评论

电子邮件地址不会被公开。 必填项已用*标注