無需漏洞也能攻破:雲計算FPGA的重大安全隱患

亞馬遜AWS則採用了名為FPGA即服務(FaaS)的業務模式,也就是將FPGA作為了AWS雲的硬體加速例項,面向雲服務的廣大使用者和開發者。

這種業務模式提供了FPGA雲服務的完整基礎設施架構

,包括FPGA的開發、除錯、部署、維護等等,使得開發者可以直接利用雲中的FPGA資源進行演算法的硬體加速和開發。騰訊雲、阿里雲、華為雲等公有云提供商也紛紛跟進,也在雲服務中加入了FPGA的硬體加速例項。

然而,隨著FPGA在雲資料中心的不斷部署,由此引發的安全性隱患也逐漸成為業界關注的重點之一。和CPU、GPU、網路交換晶片等資料中心常見的硬體單元不同,FPGA帶來的潛在安全性問題有著非常獨特的一面。

一方面,FPGA晶片本身可能存在高危漏洞。在之前的文章中,我們介紹過賽靈思的7系列FPGA被曝出名為“StarBleed”的漏洞,它使得攻擊者能同時攻破FPGA配置檔案的加密和鑑權兩個重要環節,並由此隨意更改FPGA中實現的邏輯功能。這個漏洞的嚴重之處在於,一旦FPGA晶片被攻破,就無法透過軟體補丁的方式進行修復,而只能停機換晶片。

另一方面,由於FPGA的特殊性,

即使晶片沒有任何功能漏洞,攻擊者也可以使用一些很巧妙的手段進行破壞性的操作,並破解並竊取加密資訊

。今天這篇文章,就將介紹這其中的一個攻擊方法。

FPGA虛擬化與多租戶FPGA

在FPGA的雲計算應用中,虛擬化技術是目前比較常見的FPGA管理和資源排程方式。關於FPGA虛擬化技術,有興趣的讀者可以看看老石之前的文章《FPGA虛擬化:突破次元壁的技術》,裡面詳細介紹了FPGA虛擬化的很多技術細節。簡單來說,虛擬化技術在傳統的FPGA開發層級中加入了額外的一層,從而將使用者的應用邏輯與底層硬體分離開,使開發者無需太關心硬體的實現方式,這能大幅降低FPGA的開發難度,縮短開發週期。

無需漏洞也能攻破:雲計算FPGA的重大安全隱患

透過FPGA虛擬化技術,就可以實現在單個FPGA上劃分出多個邏輯區域,並分配給不同的使用者進行使用,這就是FPGA的多租戶(Multi-tenent)技術。

在多租戶FPGA中,理論上不同使用者的區域是相互獨立的,這可以透過劃分不同的FPGA設計區域實現。不同的使用者並不會共享FPGA上的邏輯資源,此外,他們的FPGA配置檔案、上層軟體等都應該是加密和獨立的。這些都由虛擬層進行排程和管理,在技術上,這可以透過FPGA的部分可重構(Partial Reconfiguration)特性實現。

例如,下圖中就展示了兩種不同的多租戶FPGA實現方法,第一種使用了兩個相互獨立的設計區域,第二種則實現了多個使用者設計A、B、C、D在FPGA上的混合排列。

無需漏洞也能攻破:雲計算FPGA的重大安全隱患

事實上,不同使用者的設計區域很難做到完全獨立。比如,在同一個FPGA晶片上,供電、時鐘等全域性資源往往需要共享。僅僅如此,就會給多租戶FPGA設計帶來安全隱患。

針對FPGA的電壓攻擊

在今年的FCCM大會上,來自馬薩諸塞大學的Russell Tessier教授做了名為“Security and Privacy Concerns for the FPGA-Accelerated Cloud and Datacenters”的報告,並介紹了一種針對FPGA的電壓攻擊方法。

這篇論文的全文和大會報告,已上傳至知識星球“老石談芯 - 進階版”,請於文末掃碼進入星球檢視。

簡單來說,

攻擊者可以在FPGA上實現一些消耗大量功耗的電路,由此會引發晶片上電壓的下降

。由於使用同一個FPGA的使用者共享晶片上的供電網路,這種電壓下降會波及到FPGA上其他使用者的設計區域。值得注意的是,這種利用電壓進行攻擊的方式會無視多租戶之間相互獨立的邏輯區域。

一旦電壓下降過大,就會帶來很多問題。

其中最主要的問題,就是會造成電路延時的增加

。這樣一來,原本時序收斂的設計就不能滿足時序,從而造成各種錯誤的功能和計算結果。

例如,對於常見的加法運算來說,它的關鍵路徑取決於最長進位傳播(carry propagation)的時間。正因此,FPGA中內建了固化的進位鏈結構,以提高進位傳播的速度。然而,一旦電路延時增加,可能會導致時鐘沿到來時,加法的進位尚未完成傳播,由此導致計算結果出現重大誤差。

下圖就是一個行波進位加法器(Ripple Carry Adder)的例子,它計算四位二進位制加法1111 + 0001時,應該得到二進位制數10000(十進位制16),但由於電壓降低導致延時增加,使得進位未能傳播到最高位,最終得到的結果是00000。

無需漏洞也能攻破:雲計算FPGA的重大安全隱患

耗電單元(Power Waster)

可以看到,

這種電壓攻擊的關鍵,就是在FPGA上實現某種可以消耗大量功耗的電路

。數位電路的一個重要知識點是,動態功耗和所謂的開關速率(switch activity)呈線性相關,也就是下面這個公式中的f。因此只要實現一個能高速進行狀態切換的電路,就能消耗大量功耗。

基於此,這種耗電模組事實上非常簡單,可以直接用一階環形振盪器實現,見下圖。

無需漏洞也能攻破:雲計算FPGA的重大安全隱患

實驗表明,

當例化28000個這樣的環形振盪器時,每個振盪器可以消耗2.2mW的功耗

,並由此帶來晶片上電壓的迅速下降。在下圖中可以看到,50微秒之內,離這些耗電單元最近區域的電壓(黑線)就由1。1V下降到0。85V左右。如果離耗電單元稍遠,也會出現不同程度的電壓下降,甚至在晶片的邊緣部分也會受到波及。

無需漏洞也能攻破:雲計算FPGA的重大安全隱患

使用這種電壓攻擊的方法,除了可以對其他使用者的電路功能造成破壞之外,還可以用來竊取其他使用者的加密資訊。例如,

Tessier教授就展示瞭如何破解並獲取RSA演算法的私鑰

。簡單來說,有一種名為中國剩餘定理(CRT,也稱為孫子定理)的演算法,在實現RSA計算時可以得到4倍的效能提升。然而,如果在這個過程中透過電壓攻擊的方法引入錯誤的計算結果,就會簡單的反推出RSA的私鑰,並且這個過程與RSA金鑰長度無關,且只需要一次迭代就可以完成。這個過程的具體細節在本文不再贅述,有興趣的讀者可以在知識星球“老石談芯進階版”或微博與我互動討論。

無需漏洞也能攻破:雲計算FPGA的重大安全隱患

《孫子算經》中的物不知數問題

FPGA電壓攻擊的防治策略

如前文所述,這種基於大量耗電單元、並導致晶片電壓下降和電路延時增加的攻擊方式,會對使用FPGA的全部使用者都造成影響,而且不受設計區域劃分的限制。與之前介紹過的StarBleed漏洞不同,這種攻擊方法並不利用FPGA晶片本身的設計缺陷,而是利用了FPGA的特點,大量例化耗電單元並實施攻擊。因此這種方法理論上適用於任何FPGA。

為了應對這樣的新型攻擊方式,

一種防禦方法就是在晶片上佈置若干電壓檢測模組,並實時監控不同區域的電壓值

。如果一旦出現電壓攻擊,這些檢測模組就可以鎖定導致電壓下降的源頭,並配合管理軟體對這個使用者區域進行封鎖。

在下圖中,使用了12000個耗電模組,以及不同數量的電壓檢測單元,出現異常的電壓檢測單元以黑點表示。可以看到,當使用40個電壓檢測單元時(最右圖),就可以把攻擊源頭鎖定在一個相對較小的區域中。

無需漏洞也能攻破:雲計算FPGA的重大安全隱患

此外,電壓下降帶來的延時增加並非都是壞事。這涉及到一個重要的思維方式的轉變。近年來,一個比較流行的研究領域叫做“近似計算”,即

Approximate Computing

。它的主要觀點是,

在很多特定的應用場景中,並不需要做到100%的精確計算,而這會帶來可觀的效能提升與功耗降低

例如,有人專門對FPGA中數學運算進行過近似計算的研究。事實上,對於上文提到的4位行波進位加法器,它的最長進位鏈出現的機率只有3。1%。也就是說,在某種程度的電壓攻擊時,有96。9%的機率不會影響計算結果。

關於近似計算的內容,本文也不再展開。

上面提到的這個FPGA近似計算的研究,老石會上傳到知識星球,歡迎文末掃碼進入星球檢視並參與討論

結語

當前,FPGA在雲計算領域的應用正在蓬勃興起。使用FPGA虛擬化技術,讓多個使用者共同使用同一個FPGA的硬體加速資源,也成為了一種常見的FPGA業務模型。然而,這種業務模式也帶來了一些前所未有的安全性問題。本文介紹的利用耗電單元進行FPGA電壓攻擊的方法,就是這其中的一個。

事實上,從FPGA出現至今,在大部分情況下它都是作為單一使用者的器件而存在的。也就是說,正是FPGA使用場景的不斷擴充套件,才會出現這些人們從未考慮過的問題,並由此引發對FPGA技術本身更多、更新的思考。而這也將推動整個行業不斷向前邁進。

(注:本文僅代表作者個人觀點,與任職單位無關。)

TAG: FPGA電壓晶片使用者虛擬化