當前,FPGA 已經成為云數據中心里重要的硬件加速單元。例如,在之前的文章中詳細介紹過微軟的“Catapult”項目。通過這個項目,微軟在 Azure 云數據中心里部署了上百萬個基于 FPGA 的智能網卡,并使用 FPGA 對一系列應用進行了硬件加速。這其中包括必應搜索(Bing)的文件排名運算,以及通過 FPGA 構建的實時 AI 系統“Brainwave”。
亞馬遜 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%的精確計算,而這會帶來可觀的性能提升與功耗降低。
評論