1. 程式人生 > 實用技巧 >Packet Chasing:通過快取側通道監視網路資料包

Packet Chasing:通過快取側通道監視網路資料包

摘要

本文介紹了一種對網路的攻擊--Packet Chasing,這種攻擊不需要訪問網路,無論接收資料包的程序的特權級別如何,都能發揮作用。一個間諜程序可以很容易地探測和發現網路驅動程式使用的每個緩衝區的確切快取位置。更有用的是,它可以發現這些緩衝區用於接收資料包的確切順序。這樣就可以通過快取側通道監控資料包頻率和資料包大小。該攻擊既可以在傳送者和無法訪問網路的遠端間諜程式之間建立祕密通道,也可以進行直接攻擊,識別網路上受害者的網頁訪問模式等。除了識別潛在的攻擊外,本工作還提出了一種基於軟體的短期緩解措施,以及一種輕量級、自適應的快取分割槽緩解措施,以阻止末級快取中的I/O和CPU請求的干擾。

關鍵詞:側通道攻擊,快取攻擊,DDIO,包處理,安全,微架構安全

1. 導言

現代處理器採用了越來越複雜的微結構技術,這些技術經過精心優化以提供高效能。然而,這種複雜性往往會滋生安全漏洞,最近的Meltdown和Spectre就證了這一點。本文探討了另一種複雜的高效能微架構技術--Intel資料直接I/O (DDIO) ,該技術在大多數伺服器級英特爾處理器中實現,用來加速網路資料包的處理速度。此外,本文還提出了針對網路I/O流量的新的高解析度隱蔽和側通道攻擊,雖然在沒有DDIO的情況下,這些攻擊也是可能的,但在DDIO存在時,這些攻擊的效果會大大增強。

多千兆乙太網和其他高速網路I/O技術(如Infiniband)的廣泛採用,凸顯了高速處理網路資料包以維持這種新出現的網路吞吐量,並進一步提高頻寬密集型資料中心工作負載的效能的重要性。因此,目前大多數英特爾伺服器級處理器都採用了DDIO技術,該技術允許直接在處理器的末級快取(LLC)中注入和後續處理網路資料包,繞過傳統的DMA(直接記憶體訪問)介面。DDIO對包括作業系統驅動程式在內的軟體來說是不可見的,而且總是預設啟用。

DDIO背後的關鍵動機是,現代伺服器級處理器採用了大型LLC(大小為20MB)從而使網路堆疊能夠在LLC內完全託管熱資料結構和程序中的網路資料包,減少對主儲存器的訪問。通過消除冗餘的記憶體傳輸,DDIO已經被證明可以在I/O頻寬和整體功耗方面提供實質性的改進。儘管英特爾限制為DDIO分配超過10%的LLC,以防止快取汙染,但它既沒有為DDIO靜態保留也沒有為DDIO動態分割槽快取的專用部分。

然而,儘管DDIO具有加速網路資料包處理的良好目標,但它有一個以前不為人知的漏洞,本文對此進行了揭露。在DDIO主機上,來自遠端客戶端的傳入網路資料包和來自本地主機上程序的應用資料結構會爭奪共享的LLC,在發生快取衝突時可能會相互驅逐。在本文中,我們展示了這種爭奪提供了顯著的資訊洩漏,允許快取側通道攻擊執行祕密通訊和推斷網路行為,而對網路堆疊的訪問幾乎為零。特別是,我們描述了一類新的覆蓋式和側通道快取攻擊,稱為資料包追逐,通過使用精心構建的記憶體訪問模式和網路資料包流在LLC中製造任意衝突來利用這種爭奪。

我們進一步表明,網路驅動程式使用的資料包緩衝區的位置(在快取中),以及它們被填充的順序,很容易被攻擊者發現,這大大減少了跟蹤被追逐的資料包序列所需的探測量。

我們在本文中所描述的基於資料包追逐的隱蔽通道,通過在末級快取中引起確定性的爭奪,允許一個與本地DDIO主機上的伺服器守護程序一起隱蔽執行的間諜程序從網路上的遠端客戶端上執行的木馬程序接收祕密資訊。我們表明,儘管木馬程序只發送廣播資料包,而且間諜程序與面向網路的伺服器守護程序(可能是跨容器和跨虛擬機器)完全隔離,並且進一步缺乏對網路堆疊的任何訪問,但這種祕密通訊手段是可行的,並且可以在高頻寬下實現。

除了祕密通道,我們還描述了一種新型的基於資料包追逐的側通道攻擊,這種攻擊利用了和網路瀏覽器同時執行(或在網路瀏覽器內)的本地間諜程序。在我們的實驗中,在客戶端的間諜程式是與瀏覽器(如Mozilla Firefox)同時執行的,它能夠在不接入網路的情況下對遠端受害者的網站訪問進行指紋識別。特別是,這種攻擊使攻擊者能夠根據資料包大小模式識別受害者的網路活動。這種型別的網路指紋可以被一個政府用來識別被禁止的網站的訪問,或者攻擊者可以僅僅通過成功登入會話的指紋來識別一個安全組織的成員(然後進行更有針對性的攻擊)。

此外,本文還描述了一種基於軟體的短期緩解措施,稱為環形緩衝區隨機化,以及一種自適應地將LLC劃分為I/O和CPU分割槽的硬體防禦機制,防止I/O資料包驅逐CPU或被攻擊者的快取塊。與存在漏洞的原始DDIO相比,我們在本文中描述的自適應分割槽防禦的效能開銷小於2.7%。

本文的主要貢獻如下:

(1) 在DDIO開啟的情況下,很容易發現普通網路驅動的包緩衝區的位置;

(2) 每傳送一個數據包的大小(以快取塊為增量)也可以被發現;

(3) 被發現的緩衝區被重複訪問的順序也可以被推斷出來;

(4) 在網路上傳送資料包的木馬和另一臺機器上的間諜之間可以建立祕密通道;

(5) 資料包大小的序列/模式會在側通道上洩露敏感資訊,如網路訪問活動的痕跡;

(6) 提出了一種短期的純軟體隨機化方案以及自適應的快取分割槽方案,以最小的效能開銷抵禦該攻擊。

2. 背景和相關工作

本節提供了網路資料包處理、DDIO和相關網路優化、基於網路和I/O的攻擊以及快取攻擊的背景知識。

A. 網路資料包的旅程

當一個應用程式通過網路傳送資料時,通常會發送一個數據流;而傳輸層的責任是將大的訊息分解成網路層可以處理的小塊。最大可傳輸單元(MTU)是指可以通過傳輸介質傳送的最大連續資料塊。例如,乙太網MTU是1500位元組,這意味著乙太網幀可以攜帶的最大IP資料包(或其他有效載荷)是1500位元組。加上乙太網頭部的26個位元組,則最大幀為1526位元組。

當NIC驅動程式初始化時,它首先分配一個用於接收資料包的緩衝區,然後建立一個描述符,其中包括接收緩衝區大小及其實體記憶體地址。然後,它將接收描述符新增到接收環 (rx ring),這是一個驅動器和 NIC 共享的迴圈緩衝區,用於儲存傳入的資料包,直到它們可以被驅動器處理。然後,驅動程式通知 NIC,它在 rx 環中放置了一個新的描述符。NIC 讀取新描述符的內容,並複製大小和實體地址到其內部儲存器。在這一步,初始化完成,NIC就可以接收資料包了。

圖1所示,當接收到傳入的資料包時,NIC使用直接記憶體訪問(DMA),將資料包複製到rx環中提供的實體地址,然後傳送一箇中斷來通知驅動程式。驅動程式從rx環中取出新的資料包,並將每一個數據包放在一個稱為socket buffer (skb)的核心資料結構中,以開始它們通過核心網路棧的旅程,直到擁有相關socket的應用程式。最後,驅動程式將接收緩衝區放回rx環中,以便用於未來的資料包。

B. 直接快取訪問和資料直接I/O

現代處理器和作業系統採用了一些網路I/O效能增強措施,以解決記憶體子系統中的資料包處理瓶頸。Hug-gahalli等人提出了直接快取訪問(DCA),它使網絡卡能夠向處理器的硬體預取器提供預取提示。DCA要求記憶體寫入到主機記憶體,然後處理器預取記憶體寫入指定的快取行。英特爾Sandy-Bridge-EP微架構引入了資料直接I/O (DDIO) 技術,該技術可以透明地將網絡卡或其他I/O裝置的資料直接推送到末級快取中。在DDIO之前,I/O資料總是通過主記憶體傳送,接收到的資料由I/O裝置寫入記憶體,然後資料在訪問前被預取,或者在處理器訪問時根據需要取進快取。但採用DDIO後,一個I/O區域的DMA事務會直接進入末級快取,而且會處於髒模式,只有在被驅逐時才會被寫回記憶體。

雖然DCA和DDIO已經被證明可以在許多場景下通過降低快取未命中率來提高資料包處理速度,但如果裝置具有大的描述符環,它們可能會將有用資料從LLC中驅逐出去而降低效能。此外,正如我們在本文中所展示的那樣,這些技術可能會導致新的漏洞,因為資料包被直接帶入LLC,而LLC是由處理器中的所有核心共享的。

C. 基於網路的側通道

基於網路隱蔽通道的文獻比比皆是,它們利用網路協議作為載體,將資料編碼成協議特徵。例如,隱蔽通道可以通過在幀或包頭的未使用或保留的位中編碼資料,如TCP緊急指標用於指示高優先順序資料。在TCP協議中,初始序列號(ISN)是第一個序列號,由客戶端任意選擇。Rowland提出將每個隱蔽位元組向左移位26位,直接作為TCP的ISN。Abad表明IP頭校驗欄位也可以被利用來進行隱蔽通訊,並進一步提出將祕密資訊編碼到校驗欄位中,並加入IP頭擴充套件的內容來彌補校驗欄位的修改,選擇的內容要使修改後的校驗字正確。其他的頭欄位如地址欄位和資料包長度也可以被利用來構建祕密通道。除了頭欄位外,資料包速率和時序、資料包丟失率和資料包排序也能被用來構建隱蔽通道。

這些隱蔽通道很多都是基於協議的非標準或異常行為,可以通過簡單的異常檢測方法進行檢測和預防。此外,這些基於網路的隱蔽通道都要求接收者能夠接入網路並能夠接收資料包,而我們的追包攻擊中接收者不需要任何接入網路的許可權和許可。

D. 快取攻擊

基於快取的側通道攻擊是最常見的一類架構時序通道攻擊,它利用快取作為其唯一的隱蔽通訊媒介。這些攻擊有可能通過利用受害者程序和間諜程序爭奪共享快取時產生的時間變化來揭示敏感資訊,如加密金鑰、按鍵和網頁瀏覽資料。例如,在PRIME + PROBE攻擊中,間諜程序通過學習受害者的時間祕密依賴性快取訪問模式,通過與受害者爭奪相同的快取集,並測量由於這種爭奪而產生的時序變化來推斷祕密。在prime步驟中,攻擊者僅僅通過訪問其資料,就能用自己的快取塊填充一個或多個快取集。然後,在idle步驟中,攻擊者等待一個時間間隔,讓受害者執行和使用快取,可能會驅逐攻擊者的塊。最後,在probe步驟中,攻擊者測量載入每一組快取塊所需的時間。如果明顯慢了,它就可以推斷出受害者訪問了該組中的一個塊,替換了攻擊者的塊。

為了在細微的時間粒度中執行這些攻擊,攻擊者必須針對末級快取中的特定集。因此,它必須知道地址如何對映到LLC中的集。然而,從Sandy Bridge微架構開始,英特爾採用了一種新的LLC設計,LLC被分割成多個片,每個核心一個(見 圖2),用一個未公佈的雜湊函式將實體地址對映到片中,據說是將實體地址統一分配到各核心中。對於大多數處理器,這個雜湊函式已經成功地被逆向工程分析出來,包括Intels Sandy Bridge、Ivy Bridge和Haswell架構。

除了PRIME+PROBE之外,還提出了其他多種快取攻擊的變種。FLUSH + RELOAD使用Intel的CLFLUSH指令將目標地址從快取中驅逐出,然後在測量階段,攻擊者重新載入目標地址並測量其訪問時間。但它依賴於間諜程式和受害者之間的共享記憶體,並且需要訪問精確的定時器。PRIME+ABORT利用英特爾的事務性記憶體擴充套件(TSX)硬體來裝載無計時器的末級快取攻擊。

文獻中已經提出了一些防禦措施來緩解快取時序通道。這些緩解策略包括識別軟體中的洩漏,觀察無規則快取行為,在硬體設計時關閉通道,動態快取分割,將物理核心嚴格保留給安全敏感執行緒,隨機化,記憶體跟蹤遺忘,以及使用誘餌載入微操作的快取狀態混淆。

E. I/O裝置和驅動程式的安全性

一些針對裝置驅動程式的安全攻擊已經公佈。Thunderclap描述了一種顛覆輸入輸出記憶體管理單元(IOMMU)保護的攻擊,以暴露DMA功能的I/O外設可用的共享記憶體。Zhu等人展示了另一種繞過IOMMU並危及GPU驅動的攻擊,以利用GPU微程式碼獲得對CPU實體記憶體的完全訪問。為了解決這些漏洞,研究者們將重點放在隔離裝置驅動上,當裝置驅動出現bug或有故意惡意的程式碼時,要使作業系統安全。Tiwari等提出了一個完整的系統,該系統包括一個I/O子系統和一個微核心,通過監視和控制系統的資訊流,實現隔離和安全通訊。

NetCAT是我們的"追包"攻擊的一個併發工作。它描述了一種利用類似底層漏洞的攻擊。然而,本工作和NetCAT在許多重要方面存在差異。首先,NetCAT只檢測資料包的到達時間,而Packet Chasing有能力同時檢測每個資料包的到達時間和大小--後者更可靠,噪音更小。這使得基於Packet Chasing的攻擊有機會發動更強大的攻擊,比如我們在本文中描述的網路指紋攻擊(第五節)。

NetCAT也是我關注的一篇文章,發表在 S&P 2020

其次,與Packet Chasing不同,NetCAT需要DDIO和RDMA技術的存在,限制了其通用性。因此,要緩解NetCAT,只需禁用DDIO或RDMA即可。然而,正如我們在本文中所展示的,即使在沒有這些技術的情況下,Packet Chasing攻擊也是實用的。因此,我們也提出了一種更復雜而又高效能的防禦措施來緩解攻擊。

3. Packet Chasing,發起攻擊

我們對載入到Linux Kernel 4.4.0-142版本中的英特爾千兆乙太網絡(IGB)驅動5.3.5.22版本進行分析和攻擊。我們在戴爾PowerEdge T620伺服器上執行攻擊,該伺服器使用Intel I350網路介面卡,由兩個Intel Xeon CPU E5-2660處理器執行。每個處理器都有一個20 MB的末級快取,有16384個快取集。為了對末級快取進行PRIME+PROBE,我們使用Mastik微架構側通道工具包0.02版。

我們的攻擊包括兩個階段。一個是離線階段,攻擊者恢復緩衝區的序列,另一個是線上階段,攻擊者利用這些資訊來監控傳入的資料包。

A. NIC驅動的解構

雖然本小節的程式碼樣本是針對英特爾千兆乙太網(IGB)驅動程式的,但我們注意到這些見解是可以通用的。最初的乙太網IEEE 802.3標準將乙太網幀的最小尺寸定義為64位元組,最大尺寸為1518位元組,後來最大尺寸增加到1522位元組,以允許VLAN標記。由於驅動程式和網絡卡事先並不知道傳入資料包的大小,所以網絡卡必須分配一個可以容納任何大小的緩衝區。IGB驅動程式為每個幀分配一個2048位元組的緩衝區,並將最多兩個緩衝區打包成一個4096位元組的頁面,該頁面將與網路介面卡同步。為了保證相容性,建議裝置驅動程式在為DMA對映記憶體區域時,只對映在頁邊界上開始和結束的記憶體區域,而頁邊界也保證是快取線邊界。另外,在主機處理資料包時,rx環緩衝區用於暫時儲存資料包。雖然在環中採用更多的緩衝區可以降低丟包率,但也會增加主機記憶體的使用量和快取的佔用。因此,雖然英特爾I350介面卡支援的最大大小是4096個緩衝區,但IGB驅動程式中的預設值是設定為256個。

linux核心在DMA API中,為裝置驅動程式提供了兩種不同型別的DMA記憶體分配。相干記憶體(或一致記憶體)和流式DMA對映。相干記憶體是DMA記憶體對映的一種型別,對於這種型別的記憶體,裝置或處理器的寫入可以被處理器或裝置看到和讀取,而不需要顯式同步,也不用擔心快取效應。但是,處理器在通知裝置讀取該記憶體之前,必須先重新整理寫緩衝區。因此,一致記憶體在某些平臺上可能會很昂貴,因為它由於寫障礙和緩衝區的重新整理,總是需要等待。緩衝區本身使用流式DMA對映,而環描述符則使用相干記憶體對映。因此,裝置和驅動程式對環描述符有相同的檢視。同時,這也使得對rx描述符環的寫入成本很高。因此,為了避免改變rx描述符的內容,驅動程式在接收資料包後通常會重複使用緩衝區,而不是分配新的緩衝區。所以,驅動程式通常只分配一次緩衝區,並在整個驅動程式的生命週期中重複使用。

圖3 顯示了IGB驅動程式碼中在接收資料包時被呼叫的部分,它的工作是將rx緩衝區的內容新增到socket緩衝區中,而socket緩衝區將被傳遞給IP層。如果資料包的大小小於一個預定義的閾值(預設為256),那麼驅動程式就會複製緩衝區的內容,然後嘗試為以後的資料包使用相同的緩衝區。如果緩衝區是在遠端NUMA節點上分配的,那麼對該緩衝區的訪問時間就會比在本地NUMA節點上分配緩衝區的時間多得多。因此,為了提高效能,驅動程式會取消分配的遠端緩衝區,併為該rx環描述符重新分配一個新的本地緩衝區。如果資料包大小大於256,那麼IGB驅動就不直接複製,而是將頁面作為一個片段附加到Socket緩衝區,然後呼叫 圖4 所示的 igb_can_reuse_page 函式。這個函式檢查兩個不太可能滿足的條件:第一個條件是緩衝區是在遠端NUMA節點上分配的,第二個條件是核心仍在另一半頁面中準備資料包,並且驅動程式不是頁面的唯一所有者。如果這兩個條件都不滿足,驅動程式就會翻轉 page_offset 欄位,這樣裝置就只使用頁面的後半部分。

NUMA:全稱 Non-Uniform Memory Access,譯為“非一致性記憶體訪問”。這種構架下,不同的記憶體器件和CPU核心從屬不同的 Node,每個 Node 都有自己的整合記憶體控制器。

在 Node 內部,架構類似SMP,使用 IMC Bus 進行不同核心間的通訊;不同的 Node 間通過QPI(Quick Path Interconnect)進行通訊,如下圖所示:

參考:https://www.jianshu.com/p/0607c5f62c51

總結一下,在常見的情況下,驅動程式在256個不同的頁面上使用少量的環形緩衝區(256個),每個緩衝區都是半頁對齊的,並且會不斷重複地使用這些緩衝區,通常直到下一次系統重啟或網路重啟。此外,為了保持較高的(和一致的)資料包處理速度,在整個驅動程式碼執行過程中,環描述符的順序不會改變。因此,只要驅動程式重複使用描述符的緩衝區,緩衝區的順序就會保持不變。

B. 恢復環形緩衝區的快取足跡

追包攻擊者的最終目標是通過窺探末級快取來獲取傳入資料包的大小和時序資訊。為此,我們安裝了PRIME+PROBE攻擊末級快取。然而,盲目地探測所有的快取集並不能給我們提供太多的資訊,這是因為探測時間受限於訪問整個快取的時間,在這種情況下,大約是1200萬個CPU週期,探測時間太長了,無法獲得任何有用的傳入資料包資訊。探測時間過長也使得攻擊更容易受到背景噪聲的影響,因為在快取行上觀察到不相關活動的概率會增加。

然而,從上一小節,我們知道在核心記憶體中儲存資料包的緩衝區是頁面對齊的。這意味著我們只需要探究頁對齊地址所對映的快取集。擁有4KB的頁大小意味著起始地址的最低12位為0。所以快取集索引的最低6位為零(也見圖2)。這就限制了我們在每個分片中只能有32個集合,總共有256個可能的集合。使用Mastik工具包,我們找到這些集合,併為它們構造驅逐集,它本質上是一個地址流,保證替換集合中所有快取塊的所有其他資料。有了這些,我們就有能力監控所有256個快取集,它們都是緩衝區位置的潛在候選者。

雖然所有的 NIC rx 緩衝區都對映到我們得到的其中一個頁對齊的快取集,但這個對映的分佈是不均勻的,這意味著一些rx緩衝區是不是均勻地對映到同一個快取集。為了展示這種快取集衝突的例子,我們通過驅動程式碼來列印環形緩衝區的實體地址,然後將其對映到快取集索引。圖5 顯示了這種非統一對映,僅僅是NIC中緩衝區分配的一個例項。水平軸顯示了其中一個頁對齊的快取集,在Y軸上,我們顯示了對映到每個頁對齊快取集的NIC緩衝區的數量。在這個例子中,我們看到有5個NIC緩衝區被對映到快取集號165,而沒有一個NIC緩衝區被對映到快取塊65。

Cache set 和 Cache line 的關係:

        ---   +---+-----+-----------------------------------+   
         ^    | v | tag | cache line                        |  每個cache set的cache line
         |    +---+-----+-----------------------------------+  的個數也是這個cache
   set   |    | v | tag | cache line                        |  way(路)的數目
         |    +---+-----+-----------------------------------+
         |    ...
         v    | v | tag | cache line                        |
        ---   +---+-----+-----------------------------------+

              +---+-----+-----------------------------------+
              | v | tag | cache line                        |
              +---+-----+-----------------------------------+
              ...
              | v | tag | cache line                        |
              +---+-----+-----------------------------------+
              | v | tag | cache line                        |
              +---+-----+-----------------------------------+

參考:https://blog.csdn.net/scarecrow_byr/article/details/82584489

圖6 進一步分析了這種對映,該圖顯示了多個驅動程式初始化例項執行相同實驗的結果。對於大約35%的頁對齊快取集,沒有共同對映的NIC緩衝區,而在1000個例項中,我們只看到有5個緩衝區對映到同一個頁對齊的快取集。

通過將監控的快取集數量縮小到只有256個可能的緩衝區起始位置,我們能夠看到NIC裝置在接收資料包時快取中的清晰足跡,如 圖7 所示。在這個實驗中,我們依靠一個遠端傳送者,他與間諜程式在同一個網路上,並不斷向網路傳送廣播乙太網幀。為此,我們使用Linux raw socket,它可以生成任意大小的廣播乙太網幀。由於協議欄位是未知的,這些幀會在驅動程式中被丟棄。因此,我們所看到的效果只是由驅動程式或介面卡訪問緩衝區引起的,而沒有核心網路棧的任何活動。在樣本25k左右,傳送者開始傳送資料包,並且一直持續到樣本100k。在一些快取集中,例如,快取集編號53,我們不看到任何活動,那是因為沒有一個NIC緩衝區被對映到這些集合。

追包攻擊者,能夠區分空閒系統與有傳入資料包的時候,利用這個特徵可以建立一個資訊洩漏通道,並利用這個通道在網路上隱蔽地傳遞資料。我們可以根據幀的大小來區分接收流,進一步提高這個通道的頻寬。由於接收到的資料包儲存在連續的rx緩衝區中,因此,利用我們構建頁對齊快取集的方式,我們構建頁中第二個快取塊的驅逐集。所有頁面中的第二個快取塊都被對映到這256個快取集中的一個。同樣,我們也找到了頁面中第三個和第四個快取塊所在的快取集。現在我們不僅可以識別資料包的存在,還可以識別資料包的大小。

圖8 顯示了一個簡單實驗的結果,我們傳送不同大小的資料包,並測試我們檢測資料包大小的能力。在列上,我們有四個不同的執行方式,傳送的資料包大小不變,從一個快取塊(64位元組)到四個快取塊(256位元組)。在行上,我們顯示了對四個不同的快取驅逐集的檢測,塊0到塊3,它們的目標是頁對齊緩衝區中的第一到第四塊。正如預期的那樣,我們看到對角線及以上的活動很明顯,而對角線以下沒有活動。唯一的例外是1塊資料包,它在第1塊和第0塊上都表現出活動。這是因為驅動程式碼中有一個性能優化,無論資料包大小,都會預取資料包的第二個塊。這種優化的原因是大多數乙太網資料包至少有兩個塊,64位元組的資料包(0-Block Packet)只在沒有有效載荷的控制資料包中常見,如TCP確認資料包。

攻擊可以區分出不同大小的資料包流,只需要檢測到達的資料包是小資料包流還是大資料包流(本質上是二進位制訊號),可以來構建頻寬達到1950位元組/秒的遠端隱蔽通道(詳見第四章)。然而,如果我們用更細的粒度來區分資料包大小,每個資料包都會發送多個位元的資訊,我們就可以把它變成一個更強大的通道。下面的小節描述了我們在執行PRIME+PROBE時用來進一步縮小監測集的方法。

C. 通過快取記憶體追逐資料包

攻擊者因為不知道哪些緩衝區會先被填滿,所以只能一次性探查所有256個頁對齊的快取集來檢測傳入的資料包,然後再探查更多的快取集來檢測資料包大小。然而,如果我們知道驅動中緩衝區被填充的順序,那麼我們實際上可以通過只探測下一個預期緩衝區對應的快取集來追趕快取上的資料包,建立一個強大的高解析度攻擊。我們表明,在一次性統計分析階段,幾乎可以完全恢復緩衝區的序列。由於緩衝區總是被回收,然後返回到環中,因此在驅動的生命週期內,環中緩衝區的順序是保持不變的。

演算法1 描述了我們用來恢復序列的 SEQUENCER 過程。它包括三個步驟。首先,在 GET_CLEAN_SAMPLES 步驟中,我們收集Nsets快取集的快取探測樣本。為此,我們從構建頁對齊的NIC緩衝區的驅逐集開始。然而,有時我們在一些集上會出現總是漏掉的情況,這很容易被先驗觀察到。對於這些快取集,我們只需使用頁對齊緩衝區的第二個快取塊來代替第一個快取塊。

之後,我們開始構建一個完整的加權圖,節點是被監控的快取集,連線節點x和節點y的邊上的權重是我們觀察到上一次活動在x快取集上,本次活動在y快取集上的活動的次數,如圖9 中最左邊的圖所示。為了處理多個緩衝區可以對映到同一個快取集的問題,當我們構建圖時,我們為每個邊緣維護一個節點歷史。這樣演算法就可以通過後繼的快取集來區分兩個或多個不同的緩衝區對映到同一個快取集上的活動。所以,例如在圖9 中,兩個不同的緩衝區被對映到快取集2,這些緩衝區佔據了環形緩衝區的93號和193號位置。因此,在最後的序列中,我們有兩個2號快取集的不同例項,一個跟在快取集3後面,另一個跟在快取集1後面。

最後一步,MAKE SEQUENCE,就是遍歷我們在前面幾步中建立的圖,從一個隨機節點開始,繼續向前移動,直到到達同一個節點。需要注意的是,由於最後的序列是一個環,其中每個節點的內度和外度正好是一個,所以起始節點的選擇並不會改變結果。

雖然這個過程可以恢復被對映到Nset中的緩衝區的順序,但它只能在我們監控有限的一部分頁對齊的快取集的情況下才能做到這一點(我們最多成功監控到64個快取集)。這是因為如果我們在監控列表中包含更多的集,那麼探測時間會變得比檢測傳入資料包的順序所需的時間要長。所以我們首先找到32個快取集的序列,然後我們用前31個節點(節點0到節點30)加上一個候選節點(如32)重複sequencer過程,我們嘗試找到候選節點在序列中的位置。然後,我們重複同樣的過程,在節點序列中移動,直到我們在序列中找到所有快取集的位置。

有時,兩個連續的緩衝區被對映到一個集合中。例如,考慮圖9 中93號和98號緩衝區被對映到2號集合的情況。通過我們的方法,我們不會在第一輪就捕捉到這些情況,但是從一開始,當我們遇到一個介於兩者之間的緩衝區時,我們可以在圖中把兩者分開。如果它們在最後一環中真的是連續的(不太可能),那麼緩衝區基本上就會被合併,但這對我們建立隱蔽通道的機制沒有影響,而且對我們觀察到的網路指紋洩漏攻擊中的整體指紋影響很小。

我們測量Levenshtein距離來量化我們獲得的序列和我們從驅動裝置中獲得的真實序列之間的差異。兩個序列之間的Levenshtein距離是將一個序列改變成另一個序列所需的最小單字元編輯數(即插入、刪除或替換)。我們在表I 中看到了這個實驗的結果,對探查速率進行微調是一項頗具挑戰性的任務,因為它需要足夠長的時間,以使每個傳入資料包的活動僅接觸一個樣本,並且還需要足夠小,以免丟失傳入連續資料包之間的時間關係。否則,我們會發現所獲得序列的準確性下降。然而,在我們的隱蔽通道構造中,很多攻擊場景下,我們只需要找到環中相隔足夠遠的緩衝區,所以序列的小誤差是可以容忍的。

在分析期間,我們依靠一個遠端傳送程式,其唯一的工作就是不斷髮送資料包。然而,只要系統在接收資料包,即使沒有外部發送者的幫助,間諜程式也可以恢復序列。事實上,這一步中的噪聲(傳送程式沒有傳送的額外資料包)只是幫助了間諜程式。

4. Packet Chasing:在沒有網路訪問的時候接收資料包

在本節中,我們通過在網路上構建一個隱蔽的通道來展示追包攻擊的有效性。我們假設一個簡單的威脅模型,一個遠端木馬試圖通過網路,向位於同一物理網路中的一個間諜程序傳送祕密資訊。間諜程式可以在容器內部,並且容器和主機OS都沒有root特權,也不允許使用網路堆疊。木馬程序具有向物理網路傳送資料包的能力,但沒有授權的方法與間諜進行通訊。

a) 通道容量。為了建立一個量化比較不同編碼和同步方案的框架,我們按照Liu等人描述的方法來測量我們的通道頻寬和錯誤率,同時傳輸一個週期為 215 - 1 的長偽隨機位元序列。偽隨機位元序列是使用一個15位寬的線性反饋移位暫存器(LFSR)生成的,它覆蓋了 215 個序列,除了所有位元都是0的情況。這樣我們就可以發現其在傳輸時發生的各種錯誤。包括位元丟失、位元的多次插入或位元交換。

b) 資料編碼和同步。間諜程式首先選擇x,即只有一個環形緩衝區被對映到的頁面對齊的快取集之一。使用第三節中描述的方法,找到這樣一個頁對齊的快取集並不困難。然後,間諜程式找到地址x + 64、x + 2 * 64和x + 3 * 64被對映到的快取集。換句話說,它找到頁對齊緩衝區的第二、第三和第四個快取塊被對映到的快取集。如第三節所述,間諜程式知道這些快取集的快取集索引位,但不知道雜湊函式的結果(分片位)。為了找出準確的分片,間諜程式執行一個試錯過程,在這個過程中,它根據快取集上的活動選擇八個分片中的一個。在這一步之後,初始化工作完成,間諜程式不斷監視找到的快取行。

間諜程式在時間幀n時,傳送256個(環形緩衝區的長度)大小為(S+2)* 64的資料包來傳輸符號S,由於我們在網路上執行並且延遲經常波動,因此我們無法使用歸零自同步編碼,而是選擇使用同步時鐘編碼方案,其中緩衝區的第一塊充當時鐘,使間諜程式與特洛伊木馬同步。我們測量了兩種情況下的頻寬和錯誤率。首先,我們在每個資料包中編碼一個二進位制符號,即我們傳送64位元組的資料包,編碼為"0",或者傳送256位元組的資料包,編碼為"1"。第二,我們在每個資料包中傳送一個三元符號,即傳送64位元組的資料包編碼"0",傳送192位元組的資料包編碼"1",傳送256位元組的資料包編碼"2"。

例如,圖10 顯示了真實實驗中間諜程式接收到的序列的一部分。在這個實驗中,木馬程式傳輸序列"2012012012......",間諜程式從三個快取集中收集一個樣本。每200000個週期,解碼時,間諜程式用三個樣本的視窗來區分不同的數值。這是因為有些時候我們看到一個數據包(一個符號)的快取活動跨越了兩個週期(圖中的寬峰)。間諜程式不應該將這些情況解碼成兩個不同的符號。此外,如果因為到達資料包的延遲而使快取集上的活動變得偏斜,有一個視窗會有所幫助。緩衝區所在的第一個快取集上的活動作為同步時鐘,其他兩組上的活動可以顯示傳輸的值。監控兩個快取集的活動只能給我們傳遞三個不同的符號,因為傳送一個包含3個快取塊的資料包,在第2個快取塊所在的快取集上一定有活動。

為了估計錯誤率,我們再次使用偽隨機位元序列的傳送和接收資料之間的編輯Levenshtein距離。圖11 顯示了我們的編碼方案的頻寬和錯誤率,以及改變探測速率的效果,即我們在連續探測之間等待的時間。在不同的探測速率下,通道的頻寬幾乎是不變的,這是因為這裡的限制是線路速率。我們使用的是1Gb/s的乙太網鏈路,傳輸的是平均大小為192位元組的資料包。幀大小為192的資料包的最大幀速率約為每秒50萬幀。由於我們是每256個數據包傳送一個符號,所以理論上我們的最大頻寬被限定在每秒1953個符號。通過對三個符號進行編碼,這個追包隱蔽通道的頻寬可以達到3095 bps。但是,隨著我們減少探測時間,錯誤率會降低。這是因為在兩次連續的探測之間有較長的等待時間,我們就會提高捕捉到快取集上不相關的活動的概率。當我們使用二進位制編碼時,我們同時使用快取集2和快取集3的樣本,如果它們在一個視窗內都有活動,我們就解碼為"1"。因此,錯誤率比三元編碼略低。

c) 利用環形緩衝區序列資訊。如果我們知道緩衝區的順序,這種機制很容易擴充套件到每256個數據包傳送一個以上的符號。在這種情況下,木馬可以選擇n個緩衝區,將環形緩衝區劃分為n個大小相近的部分,理想的情況是相隔256/n個緩衝區,每隔256/n個數據包就可以傳送一個祕密資訊。選定的緩衝區應該是隻對映到一個頁對齊的快取集的緩衝區。然後,間諜程式開始監視所選的快取集及其相鄰的快取塊,以檢測填充這些緩衝區的資料包的大小。

這個過程可以使祕密通道的容量成倍增加,如圖12a12b所示。這些數字顯示了間諜程式監控環中不同數量緩衝區情況下的頻寬和錯誤率。對於每一個緩衝區,間諜程式都會探測三個快取集,這些快取集與填充這些緩衝區的資料包的第一、第三、第四個快取塊相關聯。對於只有一個被監控緩衝區的情況,木馬以256個數據包傳送一個隱蔽訊息,對於16個被監控緩衝區的情況,木馬程式每隔256/16=16個數據包傳送一個新訊息。當我們將監控的緩衝區數量增加一倍時,通道的頻寬幾乎增加了一倍,對於16個監控緩衝區的情況,頻寬高達24.5kbps,錯誤率幾乎保持不變,直到傳入資料包之間的時間變得接近兩次連續探測之間的時間。請注意,當我們的監控列表中有更多的快取集時,每次探測需要更多的時間,這就降低了探測速率。此外,隨著被監控的緩衝區數量的增加,在環中找到相隔n個緩衝區並且不與環中的任何其他緩衝區共享快取集的緩衝區變得更加困難。由於這些原因,當我們監控環中16個緩衝區時,我們會看到錯誤率發生了跳躍。請注意,這些和後續的結果也考慮到了我們解構環序列時產生的不精確性。

圖12c12d 顯示了另一個實驗的結果,在這個實驗中,我們實際使用環的序列追逐資料包。我們每次探測一個緩衝區,一旦探測到的緩衝區上有活動,我們就轉到序列中的下一個緩衝區。不同步率是指追包錯過一個數據包的概率。錯過該資料包後,它必須等到整個環路完成,或者下一次資料包填滿該緩衝區時,才能再次得到同步。頻寬是由傳送方傳輸資料包的速率控制的,錯誤率是在傳輸的同步區域上計算的。從圖中可以看出,在不同的資料包速率下,錯誤率幾乎是不變的。這是因為當我們只探測一組資料時,探測的解析度要高於連續資料包之間的時間。此外,我們獲得的不同步率是我們獲得的序列質量的函式。錯誤率在640 kbps時會發生跳躍,因為在這個速度下,資料包開始在接收端失序到達。

d) DDIO/DCA的可檢測性和作用。在DDIO存在的情況下,攜帶隱蔽資訊的資料包是很難被檢測和過濾的(比如被防火牆系統丟棄傳送到受害節點的資料包),因為這些資料包可以是普通的廣播資料包,比如DHCP和ARP,甚至不要求這些資料包的目的地是運行了間諜程式的主機。這是因為,在DDIO/DCA的情況下,網路介面卡會直接將資料包傳輸到處理器的末級快取中,只有在這之後,驅動程式才會檢查每個幀的頭,並丟棄那些不針對該機器中任何協議的資料包。也就是說,在啟用DDIO後,即使A只向同一網路中的C機發送資料包,我們也可以在A機和B機之間建立通道。

DDIO使Packet Chasing獲得更清晰的訊號,因為有效負載的快取塊與屬於資料包頭的快取塊同時出現在快取中。這使得該攻擊能夠探測相鄰的快取塊,並快速檢測每個資料包的大小。然而,如果DDIO被禁用或不存在,資料包的傳輸過程就會有所不同。首先,網絡卡將資料包的報頭儲存在記憶體中,然後驅動程式讀取報頭,並根據報頭欄位對資料包進行處理。這樣就把包含頭的快取塊帶入快取中。對於大多數常見的高層協議(如http),軟體棧會在資料包報頭到達後不久訪問資料包的其他部分。

在沒有DDIO的時候,I/O寫入和驅動讀取之間的延遲成為攻擊中的一個因素。在這種情況下,攻擊者應該將探測時間設定為大於該延遲。當考慮了該延遲後,資料包的快取足跡與DDIO情況下保持一致。然而,增加探測間隔會導致每個間隔中捕獲更多的噪聲。但正如《Direct cache access for high bandwidth network i/o》中表徵的那樣,幾乎100%的資料包的延遲都小於20k週期。這個延遲還取決於資料包的大小。對於小於5個快取塊的小資料包,因為驅動程式會將這類資料包複製到另一個緩衝區,有效載荷幾乎會在資料包頭被訪問後立即被訪問。在這種情況下,不使用DDIO的攻擊與使用DDIO的攻擊一樣容易檢測到小資料包的資料包大小。

簡而言之,DDIO使攻擊更隱蔽,更可靠(噪音更小)。但如果沒有DDIO,攻擊也完全可以實現。舉個例子,下一節介紹的網路指紋攻擊會安裝在有DDIO和沒有DDIO的系統上。

5. Packet Chasing:利用包的大小

在本節中,我們將介紹一個Packet Chasing攻擊的應用示例,在這個應用中,我們利用資料包大小的高解析度樣本來獲取同一地點使用者的瀏覽資料資訊。例如,間諜程式可能在等待受害者進入某個網站後再發起一些行動,如密碼檢測攻擊。

這種簡單的攻擊包括兩個階段。首先是離線階段,攻擊者生成感興趣的不同網站的資料包大小痕跡,然後處理這些痕跡,計算出每個網站的代表性痕跡。這只是對資料包大小進行逐點平均,從而得到這些點(平均資料包大小)隨時間變化的向量。

在為攻擊做準備的過程中,攻擊者建立環形緩衝器的序列,如前面所述。之後,該攻擊者啟用了監聽模式,在這個模式下,它不斷地監視序列中第一個緩衝區的前兩個快取塊,直到她發現一個視窗,其中快取塊0和快取塊1都有活動。這表明有資料包正在填充該緩衝區。然後,與祕密通道中的接收器類似,在每次檢測到活動時,攻擊者就會移動到序列中的下一個緩衝區。每次,攻擊者都會監視緩衝區第一半頁的前四個塊,以及緩衝區第二半頁的前四個塊。這是因為當有大資料包時,驅動程式會在半頁之間切換(見第三節 - A),這使得攻擊者可以區分四個級別大小的資料包。在收集到資料包大小的樣本後,間諜程式將收集到的向量送入一個簡單的基於相關性的分類器,該分類器計算收集到的樣本與不同目標代表性痕跡的交叉相關性。

圖13 顯示了我們通過Packet Chasing獲得的訊號和使用tcpdump資料包分析器捕獲的實際資料包大小的例子。使用Mozilla Firefox 68.0.1版本瀏覽器訪問網站。圖中顯示了資料包大小,即使是在快取塊粒度下,也可以成為被訪問的網頁的識別符號。資料包通常在頻譜的兩側都很擁擠,它們要麼是攜帶了一個非常大的訊息,被碎片化成了MTU大小的幀,要麼是小的控制包。但是大訊息的最後一個包可以落在1快取塊到MTU之間的任何地方,給我們提供了一個很好的網頁指示。此外,將資料包大小與Packet Chasing從資料包中獲得的時間資訊相結合,給我們提供了足夠的資訊來區分webpages。我們使用一個小型的封閉資料集來評估我們的指紋攻擊,其中有5個不同的網頁:facebook.com、twitter.com、google.com、amazon.com、apple.com。在這個實驗中,我們檢查了兩種攻擊情景,一種是有DDIO的,一種是沒有DDIO的。在我們的1000次實驗中,使用DDIO的Packet Chasing檢測出正確網站的準確率為89.7%,而禁用DDIO後,準確率降至86.5%。這兩種攻擊的區別是增加了探測時間(導致更多的噪聲),如果資料包頭到負載的延遲很高,那麼錯過大資料包的概率也會增加。

在本實驗中,我們使用了一個簡單的分類器,但鑑於這種特殊攻擊所面臨的挑戰,可以容忍噪聲以及對向量進行輕微壓縮或解壓縮的分類器可能會改善這些結果。例如,《Automated website fingerprinting through deep learning》中的結果表明,只使用網路資料包的大小及其時序資訊(Packet Chasing可以獲得的確切資訊),足以建立一個準確率高達95%的分類器。

6. 潛在的軟體緩解措施

我們同時考慮了長期(需要改變硬體)和短期(僅軟體)的緩解措施。在本節中,我們討論了在部署長期硬體解決方案(例如,我們的I/O快取隔離)之前,人們可以採用的潛在軟體機制來幫助緩解攻擊。這些解決方案都會帶來一些效能影響。

a) 禁用DDIO/DCA。DDIO之所以使得這些攻擊能夠實現,是因為它能確保資料包頭和有效載荷同時出現在快取中,大大簡化了對資料包大小的檢測過程。然而,如果沒有DDIO,攻擊仍然是可行的。如果我們能夠檢測到資料包的存在(資料包頭總是立即被訪問,並且會依次出現在快取中),我們仍然可以使用資料包到達的間隔時間來建立隱蔽通道。我們還可以傳送不同型別的資料包,其中對有效載荷的讀取/處理是快速和確定的,這同樣允許我們區分資料包大小。因此,禁用DDIO不能完全阻止攻擊。

b) 隨機化緩衝區。當"資料包追逐"利用資料包填充環形緩衝區的順序來提高側通道和隱蔽通道的解析度時,我們表明,在不知道緩衝區順序的情況下,攻擊仍然是可能的(第四節)。然而,隨機化確實顯著降低了通道頻寬。隨機化的成本可能相當高,因為驅動和網路介面卡現在需要不斷同步下一個緩衝區的地址。我們發起攻擊需要一些時間,不過,可能只需要以半規則的間隔來改變緩衝區的順序,從而限制了開銷。

c) 增加環的大小。在沒有序列資訊的情況下,如果攻擊者想捕獲每個資料包,則所需的快取探測次數將隨環的大小而變化。因此,不定期地重新調整快取環和更大的快取環,可能會有效地使需要探測的快取集變得足夠大,從而使攻擊難以在不受到大量噪聲影響的情況下被髮起。

7. 自適應I/O快取分割槽防禦

第六節提出的所有短期的軟體緩解措施要麼不完全有效(禁用DDIO),要麼會帶來不小的效能損失。在本節中,我們描述了一種基於硬體的防禦措施,它能從根本上解決該漏洞,即I/O和CPU快取塊在末級快取中共享,這樣I/O操作會導致其他程序的快取行被驅逐出去。

英特爾的DDIO技術通過為I/O流引入末級快取寫分配來改善記憶體流量。當收到來自I/O裝置的寫請求時(例如,對於傳入的資料包),DDIO會在末級快取中分配快取塊,並將這些快取塊設定為傳入的I/O流量的DMA目的地。雖然出於效能方面的考慮,分配器在一個快取集中分配的快取塊不會超過兩個,但這些傳入的資料包仍然會對CPU的塊造成驅逐。這使得從執行在CPU上的攻擊者程序角度可以觀察到傳入的資料包。

為了規避這個問題,我們為每個集合(i)關聯一個計數器,以保持I/O分割槽的大小( IO_linesi )不變。通過將其作為一個常數(在單個區間內)而不是最大值,我們確保DDIO填充的快取行只會取代其他DDIO快取行。為了適應程式執行的不同階段,我們的分割槽方案通過增加或減少計數器( IO_linesi )週期性地改變CPU和I/O分割槽的邊界。為此,我們為每個快取集關聯了另一組計數器,以檢測每個快取集上的I/O活動( IO_present_counteri )。如果快取集上至少有一條有效的I/O行存在,這個計數器就會被增加,並在每一個自適應週期(p)開始時初始化為零。需要注意的是,維護這些計數器不會帶來額外的效能開銷,因為這些都是與快取的命中和未命中路徑並行完成的。

在每一個自適應週期,我們也會重新評估末級快取中的I/O和CPU的邊界。對於每一個集合(i),如果( IO_present_counteri )大於一個高閾值 Thigh (例如 Thigh = 0.5p ),則意味著 seti 有了大量的I/O活動。在這種情況下,我們會遞增 IO_linesi(使用一個飽和計數器),允許快取集內有更多的I/O快取塊。否則,如果I/O活動小於一個低閾值Tlow,我們就減少IO_linesi(同樣使用飽和計數器),以允許更多的CPU資料使用快取。如果分割槽的邊界發生變化,我們就會使受影響的快取塊無效,並對記憶體進行任何必要的回寫。

我們的自適應分割槽策略可以確保在CPU上執行的任何程序不會因為傳入的資料包或I/O活動而導致其快取行被驅逐。唯一例外的情況是在每個自適應週期,當邊界發生變化時,一些CPU快取塊被驅逐。然而,我們將適應期設定得足夠大,以防止攻擊者蒐集到任何關於單個數據包的有用資訊。充其量,它可以在每個自適應週期內收到一個位元(網路活動的高或低)。

a) 防禦性能評估的系統設定。表二 詳細顯示了我們基線環境的處理器架構配置。我們使用gem5架構模擬器對該架構進行建模。我們使用gem5的全系統模擬模式,它允許我們啟動核心版本為4.8.13的Ubuntu 18.04發行版Linux。我們對I/O分割槽中的最小和最大快取塊數(即 IO_lines)進行了硬性限制。因此,I/O分割槽的大小可以是一個、兩個或三個。另外,在這些實驗中,自適應週期(p)設定為10k個時鐘週期。我們將閾值 TlowThigh 分別設定為2k和5k。此外,為了得到有關我們提出的防禦對效能影響的合理估計,我們選擇了一個會產生相當多I/O活動的基準測試組合。為此,我們包含了一個磁碟拷貝(使用Linux的dd工具),從磁碟拷貝一個100MB的檔案。此外,我們還對一個不斷接收具有8位元組有效載荷的TCP資料包的程式進行了防禦評估。最後,我們還利用wrk2框架生成HTTP請求,評估了我們的防禦對Nginx Web伺服器效能的影響。

b) 防的效能結果。圖14 顯示了我們的自適應快取分割槽方案的效能,比較了Nginx網路伺服器的平均吞吐量。平均而言,我們觀察到的吞吐量損失不到2%。這主要是由於CPU快取分割槽的快取行數減少,導致LLC未命中率略有上升(也見圖15 )。該圖還顯示了防禦策略對末級快取大小的敏感性。在末級快取大小為20 MB的情況下,我們的方法會產生最大2.7%的吞吐量損失。圖15 進一步分析了防禦的效能,顯示了沒有任何直接快取訪問(No DDIO)的基線與有DDIO訪問和我們的自適應分割槽防禦策略的記憶體流量和LLC未命中率。自適應分割槽和DDIO都能有效降低記憶體流量。自適應分割槽方案的記憶體流量增加在DDIO的2%以內。

為了比較自適應快取分割槽和我們提出的基於軟體的緩解措施(第六節),我們設計了另一個使用wrk2工具的實驗。在這個實驗中,我們向目標主機上的Nginx Web伺服器傳送請求。wrk2工具使用8個執行緒,1000個開啟的連線,目標吞吐量設定為每秒140k次請求。圖16 顯示了本次實驗的結果。除了自適應快取分割槽和vanilla IGB基線之外,我們還研究了另外三種提出的方案:完全隨機化的環形緩衝區方案,為每個傳入資料包在隨機儲存位置分配新緩衝區,以及兩個部分隨機化方案,在收到指定數量的資料包後,定期重新分配緩衝區 -- 我們在收到1k或10k個數據包後隨機化。請注意,在我們的設定中,追包攻擊目前至少需要65536個數據包才能完全解構環形緩衝區(找到快取塊位置和序列資訊),另外還需要100個數據包才能發動合理的指紋攻擊。自適應分割槽方法在橫座標99%的時候,延遲只發生3.1%的損失,而完全隨機化方法則發生41.8%的損失。我們在這個實驗中使用了千兆乙太網,但我們預計隨機化的效能成本會隨著鏈路速率的提高而加劇。

8. 披露

我們向英特爾披露了這個漏洞,解釋了該漏洞的基本實質,並提供了更多細節。MITRE 在 Common Vulnerabilities and Exposures(CVE)資料庫中已經分配了一個編號:CVE-2019-11184,該漏洞被列為中度嚴重漏洞。

9. 結論

本文介紹了Packet Chasing,這是一種新型的快取側通道攻擊,它通過一個無法訪問網路、核心或程序的間諜程式來檢測通過網路傳送的資料包的頻率和大小。DDIO網路優化不是導致這種攻擊的原因,但卻大大促進了該攻擊。這項工作表明,網路驅動程式的內部工作原理很容易被設定攻擊的間諜程式解構,包括用於接收資料包的每個緩衝區的確切位置(在快取中)以及它們被訪問的順序。這兩個資訊極大地減少了間諜程式為跟蹤網路資料包序列而必須進行的探測次數。這些資訊使得遠端傳送程式和網路上任何地方的間諜程式之間可以有幾個隱蔽的通道,並有不同的頻寬和精度權衡。它還可以實現側通道資訊洩漏攻擊,檢測受害者程序的網路活動。

除了隱蔽通道和側通道攻擊外,本文還描述了一種自適應的快取分割槽方案,與易受攻擊的DDIO基線相比,該方案以極低的效能開銷減輕了攻擊。