概述

現代處理器體系結構的復雜性導致了其組件之間的復雜交互,這樣的交互可能出現側信息的泄露。想要利用這些側信息需要對目標組件有著詳細的了解,然而對許多CPU來說,這些詳細信息并不會公開。

因此,2022年Ahmad Ibrahim等人在CCS會議上討論了計算機系統中基于緩存的側信道攻擊問題,并設計實現了一個框架,可以從已知會導致泄露的代碼序列中派生出“微架構泄露模板”,從而去識別和分析不同的高速緩存側信道攻擊。

泄露模板

生成泄露模板的框架被命名為Plumber,其總體架構如下圖所示。假設分析人員有具體應用于特定硬件架構的代碼示例,這些代碼在微架構上針對于不同的輸入有不同的行為,從而暴露出一些可能泄露敏感信息的行為。

Plumber總體架構

根據生成式測試用例規范(GTS), Plumber將泄漏代碼片段的抽象描述作為輸入,分析人員的目標是利用這種行為從實際應用程序中捕捉泄漏信息。那么,為了實現這一點,分析人員需要識別目標應用程序中的代碼段,這些代碼段在某些可控分析條件下觸發某些微架構行為。由此,我們需要從具體的代碼序列中進行抽象,找到:(1)一個廣義的代碼序列,(2)一組相關的屬性,(3)暴露特定側信息的屬性之間的關系。我們把這樣的信息稱為泄漏模板或LT。

我們把LT定義為一個三元組:(P(A),B,R(A,b)),其中,P(A)是一個帶有一組屬性的代碼模板,B是一組觀察到的不同行為,P(A)是A上的謂詞集。

在GTS中,指令M表示內存加載,指令A表示算術或邏輯操作,指令N表示nop指令,一些常見的符號表示如下所示:

  • Mt1,s1用來自標記為t1和緩存集為s1的地址的加載
  • [ ]dirattr,n,??:重復指令??次,同時將指令dir的屬性attr增加??的值
  • 通配符#n:擴展為??個不執行內存操作的任意指令
  • 洗牌()!:生成GTS的所有可能排列
  • 子集()?:生成GTS的所有可能子集,而忽略那些具有類似指令的子集

Plumber

在Plumber的總體結構中,輸入為GTS,它直觀地定義了要在(突變的)操作數上執行的指令序列,以及要監視的微架構組件(例如,緩存的內容)。我們通過描述從GTS派生LT所需的步驟來介紹每個組件:

1)預處理器解析GTS并將結果轉發給Testcase實例器。

2)實例器然后根據解析過的預處理GTS系統地生成測試用例。

3)Runner在受控環境中執行每個測試用例并將行為返回給分類器。

4)分類器根據程序的行為對程序進行分類存儲。

5)分析器解釋分類行為,并返回觸發特定微體系結構行為的屬性關系。

案例研究

首先,明確兩個概念:第一個是Previction,是最近發現的一種未被廣泛記錄的處理器行為,即在相應的緩存集滿之前刪除緩存;第二個是Prefetching,一種預取數據的行為,允許處理器檢測常規的內存訪問模式,并通過主動地繼續該模式來用預期的地址填充緩存。

1、Previction

首先,針對Previction做了若干實驗,來驗證什么樣的測試用例可以觸發Previction這種行為。

比如:驗證指令順序對Previction的影響,創建GTS,生成包含所有可能指令序列的測試用例,如(Mt1,s1 Mt1,s1 Mt1,s1 Mt2,s1 Mt3,s2),在這個GTS中,前三個load(記為1、2和3)的目標是相同的緩存,但偏移量不同,其排列如下表所示,其中,PR表示發生了Previction,nPR表示沒有發生,得出結論有以下:

1)標簽位置:標簽位置之間的關系影響previction。只有三個連續加載指令且標記相同的程序才會引起預防。

2)標簽值:三個連續加載的確切標簽值和位置并不重要。

3)字偏移量:根據加載地址的字節(字)偏移量, previction行為不同。在我們的示例中,多個具有相同緩存集和標記順序的程序同時位于PR和nPR中,例如2-1-3-5-4 (PR)和2-3-1-5-4 (nPR)。

示例排列結果(帶下劃線表示來自相同標簽地址的加載)

2、Prefetching

針對Prefetching也做了若干實驗,來驗證什么樣的測試用例可以觸發Prefetching這種行為。

比如,驗證中間指令對Prefetching的影響,創建GTS,生成包含具有不同數量中間算術指令的程序的測試用例,對于0<??≤100和0<??≤30,我們創建下圖所示測試用例。結果表明,在連續的加載之間添加指令可以改變Prefetching地址的數量,比如,在兩個連續的加載之間添加3條算術指令可以將Prefetching地址的數量從3個增加到4個,添加4個算術指令將增加到7個,加上5個指令將它再次減少到3個。

中間指令測試用例

總結

此篇論文主要針對于計算機系統中基于緩存的側信道分析設計了一個Plumber框架,這個框架可以從已知會導致泄漏的單個代碼序列中派生出通用的泄漏模板。Plumber通過探索微架構優化的不同行為,在易受攻擊的代碼輸入上得出充分條件,從而觸發特定的行為去識別和分析不同的高速緩存側信道分析。

參考資料

[1] IBRAHIM A, NEMATI H, SCHLüTER T, 等. Microarchitectural Leakage Templates and Their Application to Cache-Based Side Channels[C/OL]//Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security. 2022. http://dx.doi.org/10.1145/3548606.3560613. DOI:10.1145/3548606.3560613.