當前位置:
首頁 > 最新 > 無需漏洞也能攻破:雲計算FPGA的重大安全隱患

無需漏洞也能攻破:雲計算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的多租戶(Multi-tenent)技術。

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

例如,下圖中就展示了兩種不同的多租戶FPGA實現方法,第一種使用了兩個相互獨立的設計區域,第二種則實現了多個用戶設計A、B、C、D在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。

耗電單元(Power Waster)

可以看到,這種電壓攻擊的關鍵,就是在FPGA上實現某種可以消耗大量功耗的電路。數字電路的一個重要知識點是,動態功耗和所謂的開關速率(switch activity)呈線性相關,也就是下面這個公式中的f。因此只要實現一個能高速進行狀態切換的電路,就能消耗大量功耗。

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

實驗表明,當例化28000個這樣的環形振蕩器時,每個振蕩器可以消耗2.2mW的功耗,並由此帶來晶元上電壓的迅速下降。在下圖中可以看到,50微秒之內,離這些耗電單元最近區域的電壓(黑線)就由1.1V下降到0.85V左右。如果離耗電單元稍遠,也會出現不同程度的電壓下降,甚至在晶元的邊緣部分也會受到波及。

使用這種電壓攻擊的方法,除了可以對其他用戶的電路功能造成破壞之外,還可以用來竊取其他用戶的加密信息。例如,Tessier教授就展示了如何破解並獲取RSA演算法的私鑰。簡單來說,有一種名為中國剩餘定理(CRT,也稱為孫子定理)的演算法,在實現RSA計算時可以得到4倍的性能提升。然而,如果在這個過程中通過電壓攻擊的方法引入錯誤的計算結果,就會簡單的反推出RSA的私鑰,並且這個過程與RSA密鑰長度無關,且只需要一次迭代就可以完成。這個過程的具體細節在本文不再贅述,有興趣的讀者可以在知識星球「老石談芯進階版」或微博與我互動討論。

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

FPGA電壓攻擊的防治策略

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

為了應對這樣的新型攻擊方式,一種防禦方法就是在晶元上布置若干電壓檢測模塊,並實時監控不同區域的電壓值。如果一旦出現電壓攻擊,這些檢測模塊就可以鎖定導致電壓下降的源頭,並配合管理軟體對這個用戶區域進行封鎖。

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

此外,電壓下降帶來的延時增加並非都是壞事。這涉及到一個重要的思維方式的轉變。近年來,一個比較流行的研究領域叫做「近似計算」,即Approximate Computing。它的主要觀點是,在很多特定的應用場景中,並不需要做到100%的精確計算,而這會帶來可觀的性能提升與功耗降低

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

關於近似計算的內容,本文也不再展開。上面提到的這個FPGA近似計算的研究,老石會上傳到知識星球,歡迎文末掃碼進入星球查看並參與討論

結語

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

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

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

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!


請您繼續閱讀更多來自 TechSugar 的精彩文章:

華為承諾繼續助力英國網路建設;傳蘋果自研PC處理器本月公布;台積電在美選定晶元生產廠址
免費下載《放大器設計實踐125問全解》