NetCAT:來自網絡的實用緩存攻擊

不斷增加的外圍設備正在增加現代處理器中內存管理子系統的壓力,例如:DRAM的可用吞吐量已經不能滿足現代網卡的傳輸速率。爲了達到承諾的傳輸性能,Intel處理器使IO操作直接在末級緩存(LLC)上進行,而不需要經過DRAM。雖然直接緩存訪問替代直接內存訪問對提升性能使可行的,但是,忽略了安全性的考慮,因爲末級緩存(LLC)是在CPU和所有外圍設備之間共享,包括網卡。

DCA,在最近的Intel處理器中,通常被稱爲直接數據訪問IO,本文對其進行逆向工程,並對其進行安全分析。本文中的NetCat,是第一個基於網絡的針對遠程機器處理器LLC的PRIME+PROBE緩存攻擊。NetCAT不僅可以在協作設置中啓用攻擊,在這種設置中,攻擊者可以在網絡客戶端和沙箱服務器進程(沒有網絡)之間建立隱蔽通道。更令人擔憂的是,在一般的對抗設置中,NetCat可以泄露基於網絡延時的敏感信息。

本文展示了對同一服務器上另一個SSH連接的擊鍵延時攻擊。

1. 簡介

爲了提高效率,運行在同一CPU上的不同進程可能會共享微架構中的元器件,比如CPU緩存。注意:這些進程屬於不同的安全域,這種共享打破了微架構級別的進程隔離思想。許多已經存在的攻擊表明,可以通過監測受害者進程對共享微架構資源狀態的操作來獲取祕密信息,這些攻擊甚至可以通過瀏覽器的javascript腳本進行。這些攻擊的基本假設是,攻擊者需要執行代碼或利用在目標處理器上運行的受害者進程代碼的能力,才能觀察到微架構中共享資源狀態的修改。本文中,將挑戰這兩種假設,實驗結果顯示,在現代Intel處理器模型中,任何外圍設備(比如網卡)都能操縱和觀察到處理器末級緩存的狀態。

之所以可以這樣做,是因爲處理器使外設能夠執行直接緩存訪問(DCA)而不是直接存內存訪問(DMA),以提高I / O性能。 本文首次探究了這種被廣泛採用的機制的安全隱患,結果表明,攻擊者可以用它從能被惡意輸入的任何外圍設備中泄漏敏感信息。爲了說明這種威脅,NetCAT可以將連接啓用DCA服務器的受害者客戶端作爲目標,在SSH會話中泄漏該客戶端的私鑰。

已經存在的微架構攻擊:

爲了通過微體系結構攻擊泄漏敏感信息,攻擊者需要能夠檢測出受害者對微體系結構狀態的一部分所做的修改。

例如,在PRIME + PROBE攻擊中,攻擊者首先 prime 共享資源以使其狀態已知。 第二步,攻擊者通過再次訪問它來 probe 相同的資源集。 如果這次的訪問速度變慢,則意味着受害者進程的祕密操作已經訪問了該資源。 這些觀察結果足以泄漏來自進程或在同一處理器上運行的VM的祕密信息,例如加密密鑰。此外,通過執行JavaScript,甚至在與能被攻擊的進程進行交互時,通過網絡也能進行類似攻擊。基於JavaScript的攻擊雖然不需要在本機執行代碼,增強了其威脅,但可以用沙箱緩解,使得仍然需要受害者執行攻擊者的JavaScript代碼。

實際上,遠程網絡攻擊通過一個存在漏洞的進程來替代交互,降低了在目標計算機上執行代碼(無論是JavaScript還是本機代碼)的要求,該進程運行在遠程處理器上,包含特定利用代碼,或者能與客戶端同時運行 。 這些攻擊無法直接看到CPU緩存狀態,因此它們需要進行大量耗時的網絡測量,以及一個存在漏洞的受害者進程,因此,在實踐中難以使用。

NetCAT,本文表明,在擁有DDIO功能的Intel平臺上,能夠在遠程處理器上,通過網絡來監測一個LLC緩存的“命中”或“未命中”狀態。這使得攻擊變成可能,是因爲數據中心網絡已經變得越來越快,以至於它們允許遠程進程觀察從遠程處理器的緩存提供服務的網絡數據包與從內存提供的數據包之間的時序差異。NetCaAT,使用prime+probe攻擊遠程處理器的LLC,可以觀察到遠程處理器的活動,還有其他和該遠程服務器交互的客戶端活動。例如,NetCAT可以進行按鍵時序分析,以恢復與目標服務器的正在進行SSH會話的受害者客戶端鍵入的單詞。與本地攻擊者相比,NetCAT跨網絡的攻擊通過對比SSH數據包的到達間隔,只會降低平均11.7%的預測準確性。

面臨的挑戰:

  1. 必須逆向工程DDIO(Intel的DCA技術)和LLC的交互過程,因爲這部分信息未被公開;

  2. 爲了完成PRIME+PROBE,只能探索性地製作對的網絡包序列,從而構建遠程驅逐集;

  3. 爲了實現端到端攻擊,需要能追蹤到遠程服務器在什麼時候接收到受害者客戶端發來的數據包。

本文找到了一個新穎的緩存集跟蹤算法,能夠恢復NIC環緩存上的狀態,這種方法能夠用來追蹤不同的SSH交互。獲得的緩存活動足夠分析出受害者客戶端從鍵盤輸入的單詞。

2. 背景知識

2.1 內存分級

爲了加速CPU對內存的訪問速度,大多數商用處理器架構都存在多級緩存,這些緩存離CPU越近,訪問速度越快,但是由於成本原因,空間就越小。緩存就緒是爲了空間利用率和臨時數據訪問。在三級緩存結構中,每個CPU核心有自己的專用緩存L1和L2,此外,所有處理器核心還共享有1個三級緩存,也就是末級緩存(LLC),LLC有一個特別的區域,用於跨CPU核心數據訪問,最近,這個LLC也開始用在PCIe數據交換過程中。拋開速度和尺寸,緩存有兩個主要的特性:包含和不包含。舉個例子:在以前的Intel服務級處理器中,LLC包含L2,即,L2中的所有緩存行在L3中都有一份,從Skylake X架構開始,LLC不包含LL2,即L2中的緩存行可能不存在LLC中。

2.2緩存攻擊

緩存攻擊通常分類在微架構攻擊中,一般的想法是去泄露CPU上或者周邊的共享資源狀態。攻擊者利用這些共享資源來泄露(竊取)信息。在緩存攻擊中,攻擊者構建一個基於時序信息的側信道,時序信息在從不同級別緩存或內存中取數據時獲得(緩存命中和未命中時,需要的時間不一樣),這些時序信息可以用來獲取其它進程中的數據,從而恢復密鑰。一個成功的側信道攻擊能夠繞過高級別的安全機制,例如:特權分離(操作系統用戶態和內核態權限隔離算一種)。
Osvik等人探索了在L1上使用PRIME+PROBE的攻擊方法,具體分爲3步:

  • 構建緩存驅逐集;
  • Prime:通過訪問驅逐集,讓緩存狀態成爲一種可知的狀態;
  • Probe:在受害者進行加密操作過程中,再次訪問驅逐集,如果訪問某個集合需要的時間更長(之前在緩存中的數據數據被覆蓋,再次訪問驅逐集需要觸發缺頁機制,從memory中取值),則該集合所在位置被受害者進程訪問過。

Ristenpart等人使用PRIME+TRIGGER+PROBE負載測量技術來檢測L1和L2緩存上的擊鍵活動,從而使攻擊者可以推斷出分時共享一個CPU核心的虛擬機(VM)上的活動。Liu等人擴展了PRIME+PROBE,使其適用於LLC,允許攻擊者從同一臺機器上的VM中提取祕密,而無需共享同一內核。

基於瀏覽器的緩存攻擊

基於瀏覽器的緩存攻擊在JavaScript沙箱環境中執行,增強了本機代碼緩存攻擊的威脅模型。他們得出瞭如下結論:JavaScript代碼在邏輯上執行沙箱操作(在Javascript環境中執行),但在微體系結構級別並非這樣。Oren等人介紹了一種不規範的PRIME+PROBE攻擊,該攻擊在Javascript中執行,並且不需要直接的物理地址或虛擬地址內存訪問。NetCAT在構建驅逐集的時候參考了這個工作。Gras等人使用EVICT+TIME攻擊,通過Javascript環境打破了ASLR機制。Lipp等人介紹了一種基於Javascript的擊鍵時序攻擊,從而監視用戶在瀏覽器地址欄的輸入。Frigo利用針對集成GPU的微架構攻擊來逃離安卓環境的Firefox Javascript沙箱。

這些攻擊都面臨着一些挑戰,例如:高精度計時器,以及現代瀏覽器中存在其他沙箱級緩解措施,並且還要求受害者執行攻擊者的JavaScript代碼。

2.3 遠程緩存攻擊

現有的僅利用網絡的遠程緩存攻擊利用了這樣一個事實:攻擊者可以在將請求發送到Web服務器之後觀察其在服務器上的執行時間。針對OpenSSL的遠程攻擊顯示這是可行的。Bernstein從已知的AES明文中恢復了完整的AES key,Neve等人在這基礎上作了進一步工作。Schwarz等人描述了一種基於網絡的Spectre攻擊,該攻擊針對遠程受害者中的特定代碼模式(或代碼片段),從而泄露信息。所有這些攻擊都是針對特定目標的,並且由於需要對大量網絡數據包進行平均以消除網絡噪音,因此需要較長時間(數小時至數天)。這兩個工作它們都需要包含特定代碼片段的易受攻擊的(或以其他方式合作的)受害者服務器程序。此類代碼片段必須確保依賴輸入的操作佔整個執行時間的大部分,以泄漏信息。

本文是一個通用的遠程緩存側信道攻擊,展示了一份真實的、不完全的實例攻擊場景列表,這些場景不需要依賴目標軟件。

2.4 直接緩存訪問(DCA)

在傳統的架構中,NIC使用了一種DMA(直接內存訪問)的技術,很快,僅內存延遲就成爲10 Gb / s接口上以網絡I / O爲中心的工作負載的瓶頸。爲了環節DRAM的瓶頸,提出了DCA(直接緩存訪問)的技術,折中架構中,PCIe設備能夠直接訪問CPU的LLC(末級緩存)。

DCA緩存區域不是在LLC中專用或保留的,但是分配的寫操作靜態地限制在LLC的一個區域,以避免由I / O突發或未使用的數據流引起的浪費。

下圖展示了DMA(藍色線)和DCA(橘色線)的區別,LLC中,用於DCA的可用寫分配緩存行爲橙色,其它緩存行爲綠色:

最初,英特爾使用預取提示方法實施DCA,其中,DMA寫操作將在到達內存後觸發內存預取,將內存的數據預取到LLC,但這需要設備的支持以提示DCA,並且,還需要設備驅動程序支持預取這些DCA提示。

從2011年英特爾至強E5和至強E7 v2處理器家族開始,服務器級CPU以數據直接I / O技術(DDIO)的名稱實施DCA,這對軟件和硬件完全透明。 藉助DDIO,服務器計算機可以在最佳情況下接收和發送數據包,而不會發生任何跳到主內存的情況。 在下一部分中,將進一步描述DDIO並對其行爲進行逆向工程。

3 攻擊模型

本文的威脅模型針對使用最新配備DDIO的英特爾處理器的服務器,自2012年以來默認情況下在所有英特爾服務器級處理器中透明啓用此功能。本文假設攻擊者可以與服務器上的目標PCIe設備(例如NIC)進行交互。爲了在實際情況下實例化攻擊,我們特別假設攻擊者與受害者服務器位於同一網絡上,並且可以將數據包發送到受害者服務器的NIC,從而與遠程服務器的DDIO功能進行交互。

特別地,在本文的示例中,作者通過網絡對目標服務器發起了緩存攻擊,以從服務器與其他客戶端之間的連接中泄漏祕密信息(例如擊鍵)。儘管我們在本文中主要關注客戶端到客戶端的攻擊,但是DDIO也可以在其他環境中使用。第9節介紹了其他威脅模型,在這些模型中,我們的NetCAT可能會應用於目標服務器處理器(而不是其他客戶端)以及其他PCIe設備上的應用程序。

本文的示例攻擊利用了NIC中的RDMA技術來控制傳輸的數據包訪問的內存位置,並提供當今高速網絡提供的低延遲。RDMA現在可在許多主要提供商和許多數據中心(例如Azure,Oracle,華爲和阿里巴巴)的雲中使用。在虛擬化雲設置中,只要NetCAT可以通過虛擬RDMA接口與這些VM之一進行通信,它就可以以目標服務器上的任何VM爲目標。此外,如果攻擊者的VM(或虛擬服務器)使用SMBDirect 或NFS 之類的協議通過RDMA連接到存儲服務器,則NetCAT使攻擊者可以監視連接到該存儲服務器的其他客戶端。類似的,key-value服務和集成RDMA以提高其性能的應用程序,包括大數據,機器學習和數據庫,可能會被類似NetCAT的攻擊所利用。

4. 攻擊概述

我們的目標是利用啓用DDIO的應用程序服務器在CPU內核和PCIe設備之間具有共享資源(LLC)這一事實。通過利用LLC,我們可以從應用程序服務器的LLC泄漏敏感信息。存在很多種可能的方法來利用DDIO,例如:對受害者計算機具有物理訪問權限的攻擊者可以安裝惡意PCIe設備來直接訪問LLC的DDIO區域。本文的目的是證實:即使對於僅具有對受害機器的遠程(非特權)網絡訪問而無需任何惡意PCIe設備的攻擊者,類似的攻擊也是可行的。

爲此,我們使用了現代NIC中的RDMA,RDMA在數據層面繞過操作系統,從而爲遠程計算機提供對先前指定的內存區域的直接讀寫訪問,操作系統負責設置和保護此RDMA區域,但是,當啓用DDIO時,RDMA讀取和寫入不僅可以訪問固定的內存區域,還可以訪問LLC的一部分。Mellanox進一步鼓勵使用RDMA來最大程度地減少由於防禦最新的推測性執行攻擊而導致的性能下降。但是,RDMA使我們更容易執行基於網絡的緩存攻擊。

下圖說明了我們的目標拓撲結構,這在數據中心中很常見:

攻擊者控制一臺計算機,該計算機通過RDMA與支持DDIO並且還爲來自另外NIC上的受害者的請求提供服務的應用程序服務器通信。這樣,我們可以成功地監視其他PCIe設備。我們也可以不依賴這種分隔(該分隔指:攻擊者和受害者不使用同一網卡),即:監視處理PRIME+PROBE數據包的同一PCIe設備。在我們的對抗攻擊中,我們將假定受害者客戶端通過ssh連接鍵入敏感信息。攻擊者的目的是使用PRIME+PROBE數據包找到受害者客戶端鍵入的內容。

爲了實現這個攻擊,有三個挑戰:

  1. 弄明白DDIO的內部工作方式
    我們的攻擊需要對DDIO每種操作的影響有確切的瞭解,DDIO的分配限制,以及檢測緩存命中的可行性。

  2. 遠程PRIME+PROBE

    我們的攻擊要求我們爲PRIME + PROBE攻擊遠程構建緩存逐出集,而無需瞭解遠程計算機上RDMA內存區域的虛擬或物理地址,從而在測量網絡緩存活動方面帶來了獨特的挑戰。

  3. 端到端攻擊

    要實施端到端攻擊,我們需要對哪些敏感數據可能駐留在LLC的DDIO可訪問部分中並可能被泄漏有深入的瞭解。

5. 逆向工程DDIO

爲了遠程測量緩存活動,我們需要PCIe設備的DDIO功能提供的遠程讀/寫函數。本節討論如何構建這些必需的函數以發動攻擊,同時詳細說明DDIO的相關細節。

5.1 訪問延遲

實施攻擊的第一步是確定我們是否可以通過網絡來測量緩存命中與內存讀取(未命中)之間的時間差。我們使用了兩臺運行Ubuntu 18.04.1 LTS的服務器(Intel Xeon Silver 4110),每臺服務器都配備了Mellanox ConnectX-4 Infiniband NIC(於2016年生產)。我們將其中一臺服務器用作RDMA服務器,將另一臺服務器用作客戶端。作爲基準,ib_read_lat延遲基準測試了兩臺機器之間的平均延遲1,550 ns,標準偏差爲110 ns,第99個百分位數爲1,810 ns。爲了發送單邊的RDMA讀取和(在以後的實驗中)寫入,我們使用libibverbs(RDMA的庫)。

在我們的第一個實驗中,我們迭代了50,000個內存地址150次。在每次迭代中,我們向相同的內存地址發出兩次RDMA讀取,並測量了每次結果返回到客戶端所花費的時間。結果顯示,兩次訪問之間沒有顯着差異。仔細檢查發現,這是因爲通過DDIO讀取一個不存在LLC中的地址時,直接從內存中獲取數據,而沒有在LLC中分配(即,隨後對未緩存存儲位置的讀取仍然未緩存)。

在第二個實驗中,我們在每次迭代中做以下操作:Read(x) - Write(x) - Read(x),這樣做的考慮是:第一次讀取是從內存中進行的,而分配緩存並寫入後的讀取是從LLC中進行的,這使我們能夠測量內存讀取和緩存命中之間的時間差異。

下圖顯示了兩種類型讀取的結果分佈是可區分的。 第6節討論了進一步區分基於LLC的讀取和內存讀取的機制。

5.2 DDIO的緩存方式

如前所述,DDIO限制了寫分配,以防止PCIe設備造成緩存損壞。由於此限制會影響我們創建逐出集和發起緩存攻擊的能力,因此我們研究了該限制的機制。爲此,我們構建了一個地址池,這些地址映射到相同的緩存集,並且可以通過RDMA訪問。我們通過在RDMA服務器上分配一個較大的緩衝區,然後應用Maurice等人的方法來查找具有相同LLC標記的頁面來實現此目的。然後,我們重新映射RDMA緩衝區,以便RDMA客戶端可以直接通過DDIO訪問這些地址,從而使我們能夠遠程創建驅逐集,而無需知道在一般情況下實現此目的所需的確切算法。藉助這個被標記的RDMA緩衝區,我們能夠探索LLC中DDIO方式的佈局。

更具體地說,我們的實驗重複寫入被標記緩衝區(位於同一緩存集內)中的n個地址,然後讀取這些相同的地址,從而測量是否從緩存中提供的這些讀取。我們從n = 0開始,每輪之後增加n,期望這將使我們能夠通過找到高速緩存命中數變爲恆定的n來確定DDIO寫分配限制。

我們在兩臺裝有運行CentOS 7.4的英特爾至強E5-2630 v3處理器的計算機上執行此實驗,每臺計算機均配備Mellanox ConnectX-3 Infiniband NIC(2014年生產)。每臺機器的LLC大小爲20 MB,並根據規範進行20路關聯。如下圖所示,從n = 2(寫0-1)開始,我們看到一個恆定的模式,即從緩存中提供兩個地址,其餘地址從主存儲器中提供。

對於低延遲,存儲圖較暗,對於高延遲,存儲圖較淺。該實驗提供了有力的證據,證明我們的測試機上有兩種DDIO方式。原始的英特爾文檔也支持這一點,該文檔指出寫分配限制爲LLC的10%(即,總共20路中的2路爲LLC的10%)。

上圖還提供了對LLC中DDIO區域使用的緩存替換策略的見解。 如我們所見,最後兩個被寫的值由LLC提供。 我們對隨機讀寫操作的進一步實驗表明,替換策略最有可能驅逐DDIO區域中使用最少的(LRU)高速緩存行。

在Intel Xeon Silver 4110上,我們的實驗同樣揭示了兩種DDIO方式,考慮到該模型使用11 MB和11路集的關聯LLC,這意味着DDIO寫分配限制大約是LLC的18.2%,如下表所示:

6. 遠程PRIME+PROBE

爲了發起成功的遠程PRIME+PROBE攻擊,我們需要在遠程計算機的內存區域上進行讀寫操作。如第5節所述,RDMA在LLC上爲我們提供了這些功能。

6.1 創建遠程驅逐集

PRIME+PROBE的第一步是構建緩存驅逐集。本文中,在DDIO的寫分配限制下,我們不爲LLC中的所有緩存集構建驅逐集,而僅爲DDIO可訪問的有限數量的緩存路構建驅逐集。構建驅逐集並隨後使用其泄漏數據依賴於基本RDMA操作,因此,使用單邊RDMA並允許RDMA客戶端寫入數據的任何應用程序都可以用於NetCAT攻擊。以RDMA-memcached(具有RDMA支持的鍵值存儲)爲例,RDMA-Memcached實現GET和SET操作,將內存分配分爲1MB大小的塊。爲了分配足夠大的內存區域來構建驅逐集,我們分配了多個1MB大小的鍵值項。這些內存區域一旦被分配,我們可以使用基本的單邊RDMA操作以任意偏移量訪問它們。構建驅逐集的一個挑戰是,我們不瞭解遠程計算機上RDMA內存區域的虛擬或物理地址。但是,我們可以通過相對於基準的偏移量來控制訪問,並結合分配的內存塊是頁面對齊的知識。Oren等人通過JavaScript攻擊LLC時,針對類似問題設計了非規範的PRIME + PROBE。我們以他們的算法爲基礎,但必須解決由於在網絡上運行算法而帶來的挑戰。這些挑戰包括抵禦網絡差異引起的時間偏移的彈性,以及第二臺機器參與測量過程。而且,通過網絡進行的讀寫操作要比本地運行慢幾個數量級。該算法的更廣泛的想法是使用一組與頁面對齊的地址 S(與頁面起始位置具有相同的偏移量)的頁面對齊地址,以及一個候選地址x。該集合最初非常大,因此自然會形成地址x的逐出集合,然後,該算法通過迭代刪除地址並檢查該集合是否仍構成逐出集合來減少該集合。使用此向後選擇策略,該算法將創建一個最小驅逐集,其大小等於高速緩存路的數量。在爲頁面中的給定偏移量找到一個逐出集之後,該算法可以爲其餘偏移量建立逐出集。頁面大小爲4KB,高速緩存行大小爲64B時,將產生另外63個逐出集。我們的第一種樸素方法是使用多個回合來測量集合S是否仍構成逐出集合,以解決網絡上的測量噪聲。但是,這使算法相當慢,尤其是在分析所有可用的緩存集時(需要數小時)。 因此,我們引入了許多優化。

  • 優化1:作爲第一個優化,我們介紹了一種前向選擇算法,該算法創建了一個可能的較小集合S,該集合S逐出地址x。我們從一個空集S開始,在每次迭代中,我們向S添加一個地址,直到測量出逐出爲止。該選擇過程平均將S中的地址數從數千減少到數百。 該優化效果很好,因爲DDIO緩存路是所有緩存路的子集,例如在Intel Xeon E5-2630 v3 CPU上,我們只需要在構成地址x逐出的二十個潛在地址中找到兩個即可。 然後,該減少的集合S是向後選擇算法的輸入。 前向選擇算法在附錄A中有詳細說明。
  • 優化2:第二個優化是向後選擇算法。 在原始算法中,集S首先被完全寫入,然後再次寫入,同時在每次迭代中都留下一個地址s, 根據S \ s是否仍爲逐出集,將x的緩存未命中時間與x的未命中/命中時間進行比較。 在我們的方法中,我們首先通過寫入和讀取x來測量x上的緩存命中,然後將訪問時間與S \ s進行比較。 之所以可行,是因爲S在成功進行性能分析運行時總是將x逐出,同時在此步驟中將寫操作的次數減少了兩倍。
  • 優化3:作爲第三種優化,我們實現了動態調整算法,該算法不只從反向選擇過程中僅從集合S中刪除一個地址s,而可以同時從S中刪除多個地址。 在前一次的迭代成功減少S後,該算法將要刪除的地址數量增加了十。相反,如果前一次迭代未減少S,則該算法將要刪除的地址數量減少了一個。要刪除的地址數量最多限制爲S大小的一半。當S的大小較小時,將禁用動態調整算法,因爲進行調整可能會對運行時間產生負面影響,並需要額外的迭代。 我們在附錄B中概述了更新的向後選擇算法。在最近的研究中,Vila等人提供了一種優化算法,可將逐出集減少爲最小逐出集。 應用新算法可以進一步提高後向選擇的性能。
  • 優化4:我們的最後一個優化引入了清理步驟。在爲一個緩存集成功構建一個逐出集之後,我們遍歷整個地址池以查找其他地址,這些地址也映射到同一緩存集。 它們要麼不是S的一部分,要麼在S中是多餘的,可以將其從最小驅逐集中刪除。 此清理步驟有助於縮小由子緩存集的前向選擇算法(以及流水線的其餘部分)產生的地址池。

適應能力

我們的實驗採用多種策略來應對網絡噪聲,網絡排隊以及測量機本身的副作用。 首先,我們使用多個測量回合併進行中值延遲測量。 這種簡單而有效的方法顯着提高了建立驅逐集的穩定性。 輪次是性能和可靠性之間的折衷,可以根據不同環境中的噪聲因素進行調整。 但是,請注意,只有在控制要測量的操作時,才能使用此方法。 構建驅逐集時就是這種情況,但是正如我們稍後將要看到的那樣,擊鍵檢測不是這種情況。

其次,如第5節所示,如果DDIO讀取是由主內存提供的,則不會導致緩存分配。 因此,我們已經知道DDIO讀取不會更改LLC的狀態。所以,我們可以利用這一特點,通過連續讀取同一地址多次並記錄每次讀取的延遲時間,取這些時間的中值。在不能單獨測試每次的讀取時間時,這種方法很有用。

最後,三個不同的階段(正向選擇,向後選擇和清除)具有多個內置的完整性檢查。 如果測試失敗,則管道要麼返回到上一階段,要麼完全重新啓動此緩存集的性能分析。

6.2 評估

我們在DAS-5羣集上評估了遠程驅逐集構建算法。 這使我們能夠使用具有不同等待時間的機器對來測試該算法,具體取決於它們在數據中心的位置以及交換機跳數的不同。 所有機器都具有相同的處理器(Intel Xeon E5-2630 v3)和機器配置。 此外,我們在另一個Intel Xeon Silver 4110羣集上評估了該算法,以顯示攻擊的一般性。 我們使用了5,000個頁面對齊地址的初始池來構建逐出集。 我們分析了總共16,384個緩存集(256種標記,4KB頁面大小)。

如下圖所示,總分析時間在3分鐘到19秒之間,以及5分鐘到52秒之間:

我們可以看到,網絡延遲對配置整個LLC所需的時間有直接影響。此外,當池中的地址較少時,算法的性能也會提高。該加速歸因於清理步驟,在該步驟中,從池中刪除了屬於同一緩存集的地址,從而隨着時間的流逝減少了算法的搜索空間。圖中顯示的延遲是由ib_read_lat延遲基準報告的。三種集羣機器組合的延遲標準偏差在0.08µs至0.10µs之間。 Intel Xeon Silver 4110羣集的延遲標準偏差爲0.11µs。在至強Silver的記錄中,我們還可以觀察到完整性檢查在第三分鐘左右失敗,這時算法將通過重新啓動當前的配置回合而恢復。爲了驗證驅逐集的正確性,我們實現了一個驗證程序,以針對映射到同一緩存集的其他地址測試每個驅逐集,以檢查它們是否被驅逐。此外,我們對逐出集進行測試以驗證其唯一性。

總而言之,我們表明可以在6分鐘內爲數據中心拓撲中的DDIO高速緩存行創建一個驅逐集。

7. 隱藏信道

在本節中,我們介紹兩種基於DDIO的協作攻擊。 在第一種情況下,我們在兩個不在同一網絡上但可以將數據包發送到共享服務器的客戶端之間建立一個隱蔽通道。 在第二種情況下,我們在客戶端和服務器上的沙盒進程之間建立一個祕密通道。 我們使用Lui等人的高帶寬隱蔽信道協議,該協議最初用於在同一物理機上運行的兩個虛擬機之間發送數據。 與我們的隱藏信道類似,Maurice等描述了進程之間的跨CPU核隱藏信道,Oren等人描述了用JavaScript構建的隱藏渠道。 此外,莫里斯等人開發了一種健壯且無錯誤的隱藏信道協議,該協議用於在兩個虛擬機之間傳輸SSH連接。 在第8節中,我們介紹了一種基於網絡的對抗擊鍵計時攻擊。

7.1 網絡客戶端之間的隱藏信道

在第一種情況下,兩個客戶端將RDMA數據包發送到目標服務器,但是它們不共享公共RDMA內存區域(即,無法直接通信),此外,客戶端不能直接通過網絡彼此通信,可以通過兩個不同的物理網絡或網絡之間的邏輯隔離來強制實現這種情況。 從第六節,我們知道我們可以測量LLC整個DDIO部分的緩存活動。 這意味着我們還可以測量LLC中網絡上另一個客戶端的活動。

因此,在協作環境中,兩個客戶端可以通過將數據包發送到其各自RDMA緩衝區中的不同偏移量進行通信,而另一個客戶端檢測到哪個偏移量是由另一個客戶端的數據包激活的。 在我們的單向隱蔽通道中,建立通信的第一步是就哪些高速緩存集將用於傳輸達成一致。 發送方選擇頁面對齊的內存位置,然後使用覆蓋該位置的緩存集進行通信。 爲了進行同步,發送方然後對頁面中所有連續的緩存集進行迭代,並在很長一段時間內以不同的模式將數據包發送(使用RDMA寫入)到這些緩存集。

接收者遍歷所有被分析的緩存集以檢測模式。 這樣,接收方就可以找到64個緩存集(即一個頁面),這些緩存集覆蓋了與發送者頁面標記相同的頁面。 雙方現在已經就服務器上的64個共享緩存集達成了一致。 因此,在每一輪中,發送方可以通過激活或不激活64個高速緩存集的每一個來發送64位。 爲了寬鬆地同步測量,我們使用Lui等人的方法,發送方在預定義的時間內多次發送當前信息,接收方在相同的時間內測量緩存活動,因此知道傳輸回合何時完成。 接收者需要PRIME+PROBE 64個緩存集的時間是每一輪的最小時間窗口。

結果:隱蔽通道的合適時間窗口取決於接收器可以啓動至少一個PRIME + PROBE迭代的時間。 在我們的測試網絡中,可靠地允許接收器在該窗口內完成其操作的最小時間窗口爲0.44 ms,這意味着峯值帶寬爲145.45 Kb / s。 在這種情況下,我們的錯誤率爲9.43%。 我們評估了多個時間窗口,保守選擇爲4 ms(16 Kb / s)。 在更長的窗口中,接收器可以啓動多個PRIME + PROBE迭代。 因此,接收器獲得更多的數據點,從而導致較低的錯誤率。 在4 ms的窗口內,我們測得的錯誤率爲0.20%。 下圖說明了在不同時間窗口大小下的實驗:

注意,這種簡單的隱藏通道協議沒有內置的可靠性。 如果需要更高的可靠性(即冗餘),則隱蔽通道的帶寬將成比例地減小。

7.2 到沙箱程序隱藏信道

在這種情況下,我們在服務器上具有無法訪問任何網絡功能的沙盒進程。但是,沙盒過程仍可以寫入LLC。爲了建立一個隱藏信道,我們觀察到此場景與前一個場景相似,不同的是沙盒進程是發送方,客戶端是接收方。與兩個網絡客戶端之間的隱藏信道的區別在於,沙盒進程進行的內存訪問並不必會溢出到專用於DDIO的接收方可見的LLC部分。

在我們的設置中,LLC的DDIO區域由兩條高速緩存行(LLC中的2路)組成。因此,爲了確保成功傳輸,沙盒進程必須在n路集聯LLC中寫入n-1個高速緩存行,以確保該寫入在DDIO區域中可見。在非包含LLC中,該過程還必須考慮L2緩存,因爲必須在將數據寫入LLC之前填充L2。無論LLC是否包含在內,沙箱進程都必須先按照先前的工作策略創建一個LLC驅逐集。一旦找到了針對64個不同緩存集的逐出集,便可以類似於使用兩個網絡客戶端的情況來構建隱藏信道,主要區別在於,沙盒進程必須針對每個目標緩存集寫入整個逐出集,而不是每個緩存集寫入一次。然後,接收器可以使用PRIME+PROBE監視來自網絡的驅逐。

結果:類似於我們在網絡客戶端之間的隱藏信道,傳輸回合與預定義的時間窗口鬆散地同步。 同樣,隱藏信道的帶寬受到接收客戶端檢查64個緩存集的速度的限制。 因此,即使發送方必須比以前的隱藏信道發出更多的寫操作,這些操作還是在本地CPU上完成的,這比接收方基於網絡的操作要快得多。 因此,沙盒過程隱蔽通道的帶寬與網絡到網絡隱藏信道的帶寬相同。

8. 基於網絡的擊鍵攻擊

在本節中,我們展示了對抗環境中的結果。 我們測量來自受害者的SSH連接上的擊鍵時間,以重建敏感(類型化)數據。 我們的目標不是要改進現有關於擊鍵攻擊的文獻,而是要證明我們的緩存測量值足夠準確,可以實施實際的對抗性的時間延遲攻擊。

在較高級別,我們的攻擊如下:攻擊者控制了具有RDMA鏈接到應用程序服務器的計算機。攻擊者使用遠程PRIME + PROBE來檢測LLC中的網絡活動。 然後,用戶從另一臺計算機打開到應用程序服務器的交互式SSH會話。 在交互式SSH會話中,每個擊鍵都以單獨的數據包發送。 攻擊者可以使用環形緩衝區位置從緩存中恢復數據包間的時間,並將其映射到對應擊鍵。如本節所示,可以通過單次跟蹤敏感數據來發起此類攻擊。 啓動遠程PRIME + PROBE以測量LLC活動後,成功的攻擊需要執行以下步驟:

  1. 找到RX隊列的網絡環形緩衝區;
  2. 跟蹤RX包頭以恢復傳入的數據包時間;
  3. 使用機器學習將時間映射到按鍵。

8.1 定位LLC中的循環緩衝區

環形緩衝區是一種循環數據結構,可促進進程異步讀取和寫入數據。 在聯網的情況下,環形緩衝區用作NIC和操作系統之間的隊列。 環形緩衝區不直接保存數據包數據,而是指向實際數據包數據結構的指針(套接字內核緩衝區)。 現代操作系統通常具有用於接收(RX)和發送(TX)數據包的不同隊列(環形緩衝區)。 網絡環形緩衝區通常分配在多個不同標記的頁面上,這應防止環形緩衝區從緩存中自動退出。 我們的實驗表明,環形緩衝區的訪問在內存圖中留下了非常不同的模式。 具體來說,兩個連續的傳入數據包激活相同的驅逐集,接下來的兩個數據包然後激活下一個驅逐集,依此類推。 因此,對於多個連續的數據包,在內存圖中可以看到階梯狀圖案,如下圖所示:

(使用遠程PRIME + PROBE的環形緩衝區實驗的內存圖。 較深的顏色表示較快的顏色,較淺的顏色表示較慢的訪問時間。 在每一輪中,我們發送兩個網絡數據包。 我們可以看到環形緩衝區在每個回合中都向前移動。)

要在遠程LLC中找到環形緩衝區,我們首先按照第6節中的說明構建遠程驅逐集。 接下來,我們啓動一個PRIME + PROBE變體,在該變體中,我們在每次prime後向服務器發送兩個網絡數據包,然後立即通過probe步驟測量延遲。 對於256種標記的每一種,我們執行PRIME + PROBE 512次,每種標記總共1024個數據包。 完成所有回合後,我們在其中一頁中找到了獨特的樓梯圖案。 在RX隊列長度爲128的情況下,該模式重複八次,如上圖所示。

由於大多數現代操作系統的默認網絡環形緩衝區大小爲512–4096個記錄,因此仍會出現階梯模式,但會覆蓋多個頁面。由於模式是循環的,因此攻擊者可以重建環形緩衝區的所有可能位置,並預測下一次緩存活動的預期位置。

現代NIC和操作系統通常支持多個RX和TX隊列,並根據數據包數據的哈希值,使用諸如接收方縮放(RSS)之類的機制在接收方的不同隊列上分發數據包。具體而言,哈希函數通常是在源IP地址,源端口,目標IP地址,目標端口和協議上的五元組輸入哈希。通過更改源端口和協議,攻擊者可以使用上述概要分析方法映射所有不同的隊列。爲簡單起見,但又不失一般性,我們說明了對啓用了一個RX隊列和一個駐留在一頁(即128個條目)內的環形緩衝區的系統的攻擊。

8.2 追蹤環形緩衝區

一旦確定了包含環形緩衝區的頁面,便要跟蹤環形緩衝區的確切活動以泄漏傳入的數據包間時間。 一個挑戰是,當我們看到某個緩存集已激活時,我們無法確定這是由於環形緩衝區還是由於其他緩存活動。 此外,由於兩個後續數據包都激活相同的緩存集,因此觀察到的環形緩衝區活動可能意味着接收到一個或兩個數據包。 最後,與協作攻擊不同,我們不能使用多個測量回合,因爲環形緩衝區的位置可能在兩次測量之間發生變化。

爲了克服這些挑戰,我們設計了一個兩階段流水線來提取分組間時間。online tracker 負責在測量期間跟蹤以太網NIC環形緩衝區,併發送以太網probe數據包以連續確認其在緩存中的位置,該位置由發送RDMA緩存PRIME + PROBE數據包確定。offline extractor 獲取跟蹤器生成的數據,並使用它來計算最可能出現的客戶端以太網網絡數據包(非探測數據包,更具體地說是客戶端SSH數據包)。 以下兩段詳細介紹了這兩種算法的設計方式。

online tracker:重複檢查所有64個逐出集太慢,無法測量未同步的網絡數據包。因此,我們通過形成測量窗口w並根據環形緩衝區指針的當前位置移動w來減少同時測量的逐出集的數量。這種方法的挑戰之一是確定何時移動窗口以跟隨環形緩衝區的頭部。爲了解決這一挑戰,我們在測量回合之間從攻擊者計算機發送數據包。這些數據包可確保環形緩衝區前進和相應的高速緩存未命中。如果在線跟蹤器沒有觀察到這一點,我們知道必須調整窗口w的位置。在較高級別,在線跟蹤算法的工作原理如下:首先,我們必須確定環形緩衝區的當前位置pos。我們通過在初始PRIME + PROBE階段發送許多網絡數據包來做到這一點。一旦我們的算法檢測到正確的當前環形緩衝區位置,便停止。

接下來,在線跟蹤程序使用已知的pos在大小爲w的窗口中prime pos周圍的驅逐集。在我們的測試中,爲了在測量速度和可靠性之間取得良好的平衡,我們選擇w=10。現在我們進行prome(探測),直到算法在窗口w中檢測到緩存激活爲止,這時我們保存測量並開始另一輪prime。在啓動緩存後,我們通過發送數據包來定期進行同步。每次同步後,該算法都會發送一個網絡數據包,以確認我們已按預期註冊了緩存激活。對於這些實驗,我們需要時延閾值以區分導致緩存命中的數據包與導致緩存未命中的數據包。我們發現我們需要動態地維持此閾值,因爲它可能會由於未說明的原因(可能是由於電源管理)而在受害機器上稍微浮動。除了我們對環形緩衝區活動的測量之外,我們還保存了所有已確認和丟失的同步點,以幫助進行下面描述的離線分析階段。我們在附錄C中提供了詳細描述在線跟蹤器行爲的僞代碼。

Offline extraction:脫機提取器階段的目標是計算受害機器在哪個時間步接收到不是攻擊者發送的probe數據包。爲此,脫機提取器接收緩存行等待時間測量值,以及每個測量點的在線跟蹤器狀態。在線跟蹤器僅在估計在測量中的任何地方都觀察到高速緩存行未命中時才記錄時間步長,而無論它是否是由probe引起的。

離線提取器檢查高速緩存行等待時間測量並重建環形緩衝區訪問。提取器可以依賴於探測數據包的已知時間,該時間作爲提取器的基準。我們計算該到達模式產生的相應的環形緩衝區進程。我們通過對所有測量延遲求和來對這一猜測進行評分,根據該進展,這些測量延遲應該是緩存未命中。我們將延遲限制在10%之下和99%之上,以限制異常值的影響。

我們嘗試通過從0開始在任何時間步大量地插入一個額外到達的數據包來增強最基本的猜測。如果這些插入中的任何一個比當前的結果更好地得分猜測,我們將採用這種新的數據包到達模式。 如果在步驟N中插入了新數據包,則我們嘗試插入另一個從N開始的數據包(非0),並且僅在有改進的情況下才採用新的猜測,然後重複此過程,直到無法進一步改善猜測爲止。 提取器的輸出是其他客戶端發送的可能數據包時間戳的列表。

在最後一步,我們過濾最有可能是SSH數據包的網絡數據包。 此步驟是通過啓發式方法完成的,因爲我們沒有任何頭數據包信息來將SSH數據包與其他網絡數據包區分開。 啓發式的想法是,在發送擊鍵後,客戶端將發送一個ACK數據包。 此啓發式方法在空閒網絡上工作。 但是,這也是基於網絡的攻擊的固有侷限性。 如果有更多網絡流量,即數據包靠近在一起,則我們的算法無法將其與SSH數據包區分開。

8.3 擊鍵預測

在上一節中,我們描述了攻擊者如何測量與環形緩衝區相關的緩存活動,然後提取可能的SSH數據包。下一步是根據提取的分組間時間來預測擊鍵。 Song等人率先從交互式SSH會話中恢復了擊鍵。在他們的工作中,他們展示了在網絡分路器上捕獲SSH數據包時進行這種攻擊的可行性。爲此,他們使用了雙字母組和隱馬爾可夫模型(HMM)來猜測輸入的密碼。密碼數據集的挑戰在於從用戶那裏收集真實密碼是不道德的。這將留下讓用戶鍵入預定密碼集的選項,但是,真實的密碼鍵入頻率是唯一的,當不訓練用戶頻繁且長時間地不輸入這些密碼時,很難估算出這種頻率。此外,這樣的數據集將需要數百個不同的密碼才能進行公平評估。與該領域的最新工作類似,我們決定使用單詞猜測來表明攻擊者可以根據緩存的測量結果成功執行擊鍵預測。

爲了促進可重複性和可比性,我們使用了公開可用的數據集。 數據集由二十個主題輸入自由和轉錄的文本組成。 我們從自由輸入會話中提取的單詞僅包含小寫字符。 過濾後的數據集總共包含4,574個獨特詞,每個主題平均228.7個獨特詞。 我們爲每個用戶在訓練和測試集中劃分數據集。 對於多次鍵入的每個單詞,我們在訓練集和測試集之間以2:1的比例劃分數據集。 我們確保測試集中的單詞鍵入在訓練集中至少具有同一單詞的其他鍵入。 此外,我們還將單詞鍵入保留在訓練集中僅出現一次。 平均而言,訓練集由376.25個單詞鍵入和每個用戶121個鍵入的測試集組成。 正如我們將在後面顯示的那樣,評估具有足夠大的單詞語料庫的數據集至關重要。

爲了預測單詞,我們使用了k最近鄰算法(k-NN),與最近有關微體系結構攻擊的工作類似。 k-NN算法通過使用距離法來查看k個最近的鄰居,從而對看不見的樣本進行分類。 在我們的實驗中,我們使用k = 15和均勻權重。 這種簡單的方法非常適合對擊鍵序列進行分類,因爲我們希望用戶每次都以類似的方式鍵入單詞。 但是,用戶的鍵入仍存在一定程度的差異,這使按鍵定時恢復變得困難。 先前的擊鍵計時攻擊也已經嘗試了更復雜的方法,例如HMM,支持向量機制和神經網絡,以將擊鍵映射到字符,單詞或用戶。 我們在這裏只關注簡單的k-NN基線,並希望通過應用更復雜的方法,可以進一步提高我們的預測準確性。

8.4 評估

我們在具有3臺計算機的Intel Xeon Silver 4110羣集上評估了NetCAT,攻擊者可以將數據包發送到受害計算機所連接到的NIC。如前所述,這使攻擊者可以發送同步數據包。受害者開始與應用程序服務器的SSH連接,然後開始輸入測試集中的單詞。我們使用 expect(它是一個與交互程序進行交互的可編程接口),通過使用數據集中的 key-down-to-key-down 時間來恢復SSH會話中的單詞。這種方法使我們可以使用不同的設置和環境因素來重複實驗。在線跟蹤器會在7秒內測量緩存活動。expect 程序開始在此次捕獲窗口中恢復單詞。請注意,確切的開始時間不會輸入到跟蹤或提取算法中。除了測量緩存活動之外,我們還使用tcpdump捕獲應用程序服務器上的傳入網絡流量。儘管tcpdump基線獲得一個強大的攻擊者模型,該模型需要對服務器的物理訪問(即,網絡竊聽),但這些跟蹤信息使我們能夠對 key-down-to-key-down 的分類器進行並排比較實際的網絡數據包到達時間(通過tcpdump)以及從緩存活動中恢復的數據。

我們總共有2,420個測試字跡。訓練數據的總捕獲需要大約6h。這段時間包括在7秒鐘內測量每個單詞的緩存,以及一些時間來設置tcpdump。重要的是要注意,我們只追蹤單詞一次,並在分類中使用結果數據。

SSH包恢復的評估:我們在二十個主題的整個測試集中評估了聯機跟蹤器和脫機提取器的工作情況。如果該數據包在SSH按鍵數據包的間隔I內,則將其定義爲True Positive(TP)。如果在SSH擊鍵的時間間隔I內沒有預測的數據包,則註冊爲 False Negative。如果信號提取預測的數據包多於發出的數據包,則將這些計數計爲誤報(FP)。同樣,如果僅針對一個按鍵預測了多個數據包,則一個將導致TP,而其餘將成爲FP。我們在三個不同的時間間隔I上評估了提取。下表給出了我們的結果:

對於I = 0.05s,我們可以提取TP率爲84.72%(FN率爲11%)的SSH擊鍵數據包。當減小間隔I時,FN的數量增加。當I = 0.001s時,TP率仍接近50%。張等人建立了I = 0.001s的標準數字,足以成功實現擊鍵共計。爲了進行比較,該表還顯示了從tcpdump提取SSH數據包及其時間的結果。這些(理想的)結果用作網絡上延遲的數據包的基線,因此不再位於間隔I之內。

下圖顯示了SSH擊鍵發出時間與所有I = 0.001內正確預測的SSH數據包之間的絕對差值:

我們可以看到,與tcpdump捕獲的數據包相比,來自緩存的正確分類的數據包具有更高的內部四分位數範圍。 總的來說,這表明與基線和tcpdump相比,我們僅需很小的時間差異即可提取輸入數據包時間。 然而,挑戰在於首先要從緩存測量中正確提取數據包。 爲了直觀地瞭解SSH數據包的恢復成功,我們在下圖中顯示了“because”一詞的蹤跡:

在這種情況下,恢復的SSH數據包幾乎與原始擊鍵完全吻合。 這種對齊方式在低延遲網絡中是可能的。 否則,網絡和緩存數據將根據傳輸時間移動。 由於我們分割1.2秒(以0.2秒爲一個單位)來顯示數據點,因此無法看到測量的微小擾動。

端到端評估:爲了執行端到端的準確性評估,我們現在從緩存活動中獲取預測的數據包,並將其輸入到在鍵盤訓練數據上訓練的k-NN模型中。 我們選擇此設置是因爲攻擊者可能有權訪問擊鍵數據集,但無法在目標網絡拓撲上恢復它們。 爲了使分類器的評估結果更直觀,我們在下圖中總結了鍵盤數據,從tcpdump提取的數據以及來自緩存測量的數據的準確性和Top-10準確性:

我們可以看到,即使是 擊鍵數據,k-NN模型的準確性也低於40%,這告訴我們準確預測此數據集中的真實單詞具有挑戰性。 因此,我們使用常用的Top-10準確性度量標準,結果表明:在有限的猜測數(10)中預測正確的單詞可以準確地達到85.75%。

將前10準確率的網絡數據與原始擊鍵數據進行比較時,我們可以看到準確性顯着下降。將這些結果與表II中以0.001s爲間隔的93.48%準確率進行比較,我們可以看到,即使在相交的時間中出現輕微擾動,也可能誤導對原始鍵盤數據進行訓練的分類器。與緩存測量一樣,這對於不完美的SSH數據包恢復來說,預測正確的單詞更具挑戰性。但是,在所有用戶中,分類器平均會在58.95%的單詞的前十個猜測(前10個準確度)內預測正確的單詞。令人鼓舞的是,這僅比tcpdump分類的性能低約15%。對於50%的單詞,攻擊者能夠以7.85個猜測(中值距離)猜測單詞。平均而言,所有用戶和所有單詞的猜測距離爲20.89。平均每個用戶我們有228.7個單詞。因此,隨機猜測者的平均距離爲114.35個字。我們得出的結論是,緩存測量的信號足夠強大,可以通過遠程PRIME + PROBE發起成功的按鍵時延攻擊。每個測試數據源和主題的完整測試分數可在附錄D中找到。

爲了分析詞庫對分類器的影響,我們更改了用於訓練和測試的唯一詞的數量。在每一輪中,我們從用戶特定的語料庫中隨機選擇x個單詞,然後在下一輪中將x增加十。唯一的單詞不必增加十個,因爲我們每個主題的單詞語料庫大小不同。如下圖所示,與原始數據集中唯一詞的總數相比,使用較少唯一詞的分類器具有更高的準確性:

此外,準確性的差異在字數較少的情況下非常顯着,並且每個實驗在大約170個唯一單詞的時候變平。可以對所有三個不同的測試數據源進行這些觀察。使用大量唯一詞的一個缺點是我們的訓練數據集相對較小,即訓練集中的大多數詞只有一條用戶的記錄。一個每個單詞具有許多重複,足夠大的單詞語料庫和足夠數量的測試對象的數據集自然會提高預測的準確性。

9. 推論

現在,我們討論在未來的工作中,如何將類似於NetCAT的攻擊推廣到我們的概念驗證場景之外。

PCIe到CPU的攻擊

如前所述,DDIO的寫分配限制阻止了攻擊者爲整個LLC構建驅逐集,這使得直接從主機CPU泄漏信息成爲挑戰。爲了完成此類信息泄漏,我們相信我們可以利用在受害者身上運行的服務器軟件。例如,AnC攻擊可能會通過網絡發動。給定具有任意偏移量的讀取原語(如Redis會給出的那樣),攻擊者可能會生成訪問模式,該訪問模式將刷新TLB集和反向緩存的轉換緩存,正如[“Trans- lation Leak-aside Buffer: Defeating Cache Side-channel Protections with TLB Attacks” 和 “RevAnC: A framework for reverse engineering hardware page table caches”]兩篇論文提到的逆向工程。然後,攻擊者將取消引用目標虛擬地址,從而保證生成具有依賴於虛擬地址的偏移量的頁表遍歷。如果以相同的偏移量(模數頁面大小)重複執行此實驗的次數足夠多,則逐出最終將達到DDIO級別,並且NetCAT可以觀察到該信號。同樣,我們期望當某些Spectre小工具以相同的偏移量(頁面大小模數)重複取消引用時,它們將導致DDIO級別的可見驅逐,並允許祕密泄露,就像本地Spectre攻擊一樣。

另一個挑戰是解決時間,通過該時間我們可以衡量緩存中的更改。 DDIO上下文中一個緩存集的逐出集包含兩個地址。 因此,連續探測一個高速緩存集需要兩次單邊RDMA讀取。 ib_read_lat延遲基準測試了我們的Intel Xeon Silver 4110集羣之間單次讀取的平均延遲,爲1,550 ns。 在我們的實驗中,我們將兩個讀取操作同時計時,與單次計時操作相比,其開銷較小。 平均而言,我們可以在Intel Xeon Silver 4110集羣(第99個百分位數:3066 ns,SD:115 ns)上描述一個總時間爲2892 ns的逐出集。 解析時間受網絡往返時間的限制,並且會因設置而異。 與本地緩存定時攻擊相比,基於網絡的攻擊減少了解析時間,這意味着對於加密密鑰恢復,可能需要更多的測量。 這是進一步研究的有趣途徑。

將其它PCIe設備作爲目標

儘管本文重點介紹通過DDIO監視NIC活動,但通常我們可以在其他PCIe設備上進行監聽。 例如,USB鍵盤可以通過DDIO將用戶按鍵事件發送到LLC。 這爲JavaScript攻擊提供了可能性,這些攻擊可以測量LLC的活動並可以獲取敏感的擊鍵數據或網絡活動,如先前的攻擊所示[“The Spy in the Sandbox: Practical Cache Attacks in JavaScript and their Implications”,“Practical Keystroke Timing Attacks in Sandboxed JavaScript”]。 與以前的攻擊不同,通過DDIO進行的攻擊將能夠監視緩存訪問模式並辨別特定於硬件的行爲,如本文在NIC接收緩衝區訪問模式中所展示的那樣。 這有可能使啓用DDIO的攻擊達到更高的精度。

10. 修復

本節討論了針對來自PCIe設備的最後一級緩存側通道攻擊的潛在緩解措施,例如本文提出的攻擊。

禁用DDIO:針對基於DDIO的攻擊(例如我們的攻擊),最明顯、最直接的緩解措施是禁用DDIO。 這可以通過調整集成I / O(IIO)配置寄存器來完成。 有兩種可能,即全局更改(Disable_All_Allocating_Flows位)或每個根PCIe端口(NoSnoopOpWrEn和Use_Allocating_Flow_Wr位)進行更改。 通過在英特爾至強E5羣集上設置這些位,我們成功地緩解了NetCAT。 對於Intel Xeon Silver 4110,尚未公開記錄這些位的偏移量。 儘管這種方法通過阻止我們構建緩存逐出集來減輕攻擊,但它的性能成本很高。 例如,即使對於10 GB / s的NIC,禁用DDIO也會帶來性能瓶頸。 對延遲敏感的應用程序可能會使延遲增加11%至18%。 此外,每個兩端口NIC的功耗可能會增加7瓦。

LLC隔離:另一個可能的防禦方法是使用CAT在硬件或軟件中對LLC進行分區,以將逐出限制爲每個集合一定數量緩存路。但是請注意,由於所有啓用DDIO的設備仍共享相同的緩存路,因此無法解決設備間DDIO偵聽的問題。可以通過頁面標記在軟件中實現此防禦,這可以通過隔離頁面來隔離安全域。內核通過按標記組織物理內存(每種標記都是LLC中的一個分區),並確保獨立的安全域永遠不會共享一種標記。不幸的是,由於域經常共享設備,因此這種防禦措施在實踐中可能很難應用。在[“A software approach to defeating side channels in last-level caches”]中詳細探討了基於軟件的LLC分區。現有的另一種軟件緩存防禦是基於TSX的。但是,此防禦措施無助於抵抗我們的攻擊,因爲TSX僅保護CPU生成的緩存活動,而不保護設備。其他軟件防禦措施同樣無法解決設備間監聽的可能性。使用CAT也會產生負面影響,因爲它可能被濫用來加速rowhammer(行翻轉)攻擊。

升級DDIO:原則上最替代的方法是更改DDIO的當前設計。 在理想的設計中,每個用戶(例如,網絡客戶端)將接收他們自己的緩存部分。 通過緩存路進行分區似乎很有吸引力,但由於LLC中的緩存路數量有限,因此無法擴展。 最終,我們認爲最佳的解決方案是靈活的硬件機制,該機制允許系統軟件(例如OS)有選擇地將LLC的區域列入白名單,以供支持DDIO的設備使用。

11. 相關工作

11.1 本地微架構攻擊

在信息泄漏和破壞的背景下,已經對局部微體系結構攻擊進行了廣泛研究。 這些攻擊通常監視受害進程或位於同一位置的VM。

Osvik等人在L1緩存上開拓了PRIME + PROBE攻擊,而Ristenpart等人開發了PRIME + TRIGGER + PROBE來測量共享內核的VM上的L1和L2活動。 Liu等人在假定存在大內存頁面的情況下將PRIME + PROBE擴展到了LLC,從而使攻擊者可以從共同託管的VM中提取祕密。 後來的工作將威脅模型擴展到JavaScript,從而允許從Web服務器傳遞攻擊代碼。

我們的遠程PRIME + PROBE基於Oren等人的方法來構建非規範的驅逐集。 而且,我們的攻擊根本不需要在受害者計算機上執行攻擊代碼。

11.2 網絡側信道和微架構攻擊

基於網絡的旁通道攻擊通常會在受害機器上觸發代碼執行,然後觀察執行時間以泄漏信息。 例如,伯恩斯坦通過監視Web服務器中對已知明文消息進行加密的請求時間來恢復AES密鑰。 本地計算機是受害者Web服務器的克隆,它支持監視。Cock等人利用OpenSSL漏洞利用MAC檢查的非恆定執行時間對Datagram TLS發起了明顯的攻擊。Schwarz等人遠程利用了包含通過網絡觸發的Spectre v1小工具的Web服務器。

Kim等人表明,Rowhammer漏洞可以由軟件觸發,後來發現可以通過越來越複雜的手段加以利用,所有這些手段都是本地的。 最近的工作表明,Rowhammer也可以從網絡觸發。 塔塔爾(Tatar)等人展示瞭如何利用RDMA在數據中心設置中構建端到端Rowhammer漏洞。 Lipp等人表明,在某些緩存受限的條件下,Rowhammer也可以在以太網中觸發。

許多基於網絡的攻擊都需要重複操作以過濾掉諸如網絡方差之類的噪聲因素。 相比之下,我們的攻擊僅通過單次操作即可泄露敏感信息。 之所以可行,是因爲我們可以通過精確地確定要測量的緩存集來精確地測量緩存活動,從而爲我們提供比以前的工作更準確的活動度量。 而且,NetCAT甚至可以監視其他PCIe外圍設備(而不僅僅是CPU),這使NetCAT成爲同類中第一個基於網絡的攻擊。

11.3 擊鍵攻擊

先前的擊鍵恢復攻擊針對的是進程、音頻、CPU調度、Wi-Fi信號、中斷和圖形渲染。 Song等人是第一個使用SSH網絡數據包來利用交織時間進行密碼恢復的人,它使用了隱馬爾可夫模型(HMM)對字符對進行建模。 Hogye等人認爲,網絡時序變化會掩蓋現實網絡中的這種交錯時間。 Lipp等人使用JavaScript來監視輸入到瀏覽器地址欄中的URL,使用的是封閉世界字典,並使用k最近鄰居(k-NN)將其信號映射到URL。我們使用相同的基本技術來演示攻擊的信號強度。但是,我們使用可公開獲取的數據集,該數據集提供了大量的單詞和主題,以表明我們的擊鍵攻擊在現實環境中是可行的。如第8節所述,大的單詞語料庫是驗證分類器結果的關鍵。

在我們的原型設置中,我們能夠以10kHz至20kHz的輪詢頻率檢索緩存行信息。這樣,我們的離線提取邏輯就足夠可靠了,因此與從原始鍵盤數據預測單詞相比,單詞預測準確性平均僅降低11.7%。

12. 總結

在過去的十年中,不斷提高的外圍設備性能迫使英特爾將LLC置於其處理器的快速I / O路徑上。本文探討了此設計選擇的安全隱患,並表明現代Intel CPU上的DDIO功能使系統可以通過網絡緩存攻擊。我們的概念證明利用NetCAT可以通過計時網絡請求的持續時間來泄漏目標OpenSSH服務器的受害客戶端的祕密擊鍵。 NetCAT的實現要求我們對Intel處理器上DDIO技術的細節進行逆向工程,以便分別測量從LLC或內存提供的數據包之間的時序差異。僅使用此基本定時元操作,NetCAT就能構建逐出集並將其用作基於網絡的LLC PRIME + PROBE攻擊的第一階段,最終導致我們的按鍵定時攻擊。儘管有一些假設,NetCAT仍然具有強大的功能。我們只是爲基於網絡的緩存攻擊打下了基礎,並且我們預計將來還會有基於NetCAT的類似攻擊。我們希望我們的努力能警告處理器供應商不要將微體系結構元素暴露給外圍設備,而不進行全面的安全設計以防止被利用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章