利用硬體效能計數器(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是一種檢測惡意行為的新思路!