不斷增加的外圍裝置正在增加現代處理器中記憶體管理子系統的壓力,例如: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%的預測準确性。
面臨的挑戰:
- 必須逆向工程DDIO(Intel的DCA技術)和LLC的互動過程,因為這部分資訊未被公開;
- 為了完成PRIME+PROBE,隻能探索性地制作對的網絡包序列,進而建構遠端驅逐集;
- 為了實作端到端攻擊,需要能追蹤到遠端伺服器在什麼時候接收到受害者用戶端發來的資料包。
本文找到了一個新穎的緩存集跟蹤算法,能夠恢複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資料包找到受害者用戶端鍵入的内容。
為了實作這個攻擊,有三個挑戰:
-
弄明白DDIO的内部工作方式
我們的攻擊需要對DDIO每種操作的影響有确切的了解,DDIO的配置設定限制,以及檢測緩存命中的可行性。
-
遠端PRIME+PROBE
我們的攻擊要求我們為PRIME + PROBE攻擊遠端建構緩存逐出集,而無需了解遠端計算機上RDMA記憶體區域的虛拟或實體位址,進而在測量網絡緩存活動方面帶來了獨特的挑戰。
-
端到端攻擊
要實施端到端攻擊,我們需要對哪些敏感資料可能駐留在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活動後,成功的攻擊需要執行以下步驟:
- 找到RX隊列的網絡環形緩沖區;
- 跟蹤RX標頭以恢複傳入的資料包時間;
- 使用機器學習将時間映射到按鍵。
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的類似攻擊。我們希望我們的努力能警告處理器供應商不要将微體系結構元素暴露給外圍裝置,而不進行全面的安全設計以防止被利用。