當前,FPGA 已經(jīng)成為云數(shù)據(jù)中心里重要的硬件加速單元。例如,在之前的文章中詳細介紹過微軟的“Catapult”項目。通過這個項目,微軟在 Azure 云數(shù)據(jù)中心里部署了上百萬個基于 FPGA 的智能網(wǎng)卡,并使用 FPGA 對一系列應(yīng)用進行了硬件加速。這其中包括必應(yīng)搜索(Bing)的文件排名運算,以及通過 FPGA 構(gòu)建的實時 AI 系統(tǒng)“Brainwave”。
亞馬遜 AWS 則采用了名為 FPGA 即服務(wù)(FaaS)的業(yè)務(wù)模式,也就是將 FPGA 作為了 AWS 云的硬件加速實例,面向云服務(wù)的廣大用戶和開發(fā)者。這種業(yè)務(wù)模式提供了 FPGA 云服務(wù)的完整基礎(chǔ)設(shè)施架構(gòu),包括 FPGA 的開發(fā)、調(diào)試、部署、維護等等,使得開發(fā)者可以直接利用云中的 FPGA 資源進行算法的硬件加速和開發(fā)。騰訊云、阿里云、華為云等公有云提供商也紛紛跟進,也在云服務(wù)中加入了 FPGA 的硬件加速實例。
然而,隨著 FPGA 在云數(shù)據(jù)中心的不斷部署,由此引發(fā)的安全性隱患也逐漸成為業(yè)界關(guān)注的重點之一。和 CPU、GPU、網(wǎng)絡(luò)交換芯片等數(shù)據(jù)中心常見的硬件單元不同,F(xiàn)PGA 帶來的潛在安全性問題有著非常獨特的一面。
一方面,F(xiàn)PGA 芯片本身可能存在高危漏洞。在之前的文章中,我們介紹過賽靈思的 7 系列 FPGA 被曝出名為“StarBleed”的漏洞,它使得攻擊者能同時攻破 FPGA 配置文件的加密和鑒權(quán)兩個重要環(huán)節(jié),并由此隨意更改 FPGA 中實現(xiàn)的邏輯功能。這個漏洞的嚴重之處在于,一旦 FPGA 芯片被攻破,就無法通過軟件補丁的方式進行修復,而只能停機換芯片。
另一方面,由于 FPGA 的特殊性,即使芯片沒有任何功能漏洞,攻擊者也可以使用一些很巧妙的手段進行破壞性的操作,并破解并竊取加密信息。今天這篇文章,就將介紹這其中的一個攻擊方法。
FPGA 虛擬化與多租戶 FPGA
在 FPGA 的云計算應(yīng)用中,虛擬化技術(shù)是目前比較常見的 FPGA 管理和資源調(diào)度方式。關(guān)于 FPGA 虛擬化技術(shù),有興趣的讀者可以看看老石之前的文章《FPGA 虛擬化:突破次元壁的技術(shù)》,里面詳細介紹了 FPGA 虛擬化的很多技術(shù)細節(jié)。簡單來說,虛擬化技術(shù)在傳統(tǒng)的 FPGA 開發(fā)層級中加入了額外的一層,從而將用戶的應(yīng)用邏輯與底層硬件分離開,使開發(fā)者無需太關(guān)心硬件的實現(xiàn)方式,這能大幅降低 FPGA 的開發(fā)難度,縮短開發(fā)周期。
通過 FPGA 虛擬化技術(shù),就可以實現(xiàn)在單個 FPGA 上劃分出多個邏輯區(qū)域,并分配給不同的用戶進行使用,這就是 FPGA 的多租戶(Multi-tenent)技術(shù)。
在多租戶 FPGA 中,理論上不同用戶的區(qū)域是相互獨立的,這可以通過劃分不同的 FPGA 設(shè)計區(qū)域?qū)崿F(xiàn)。不同的用戶并不會共享 FPGA 上的邏輯資源,此外,他們的 FPGA 配置文件、上層軟件等都應(yīng)該是加密和獨立的。這些都由虛擬層進行調(diào)度和管理,在技術(shù)上,這可以通過 FPGA 的部分可重構(gòu)(Partial Reconfiguration)特性實現(xiàn)。
例如,下圖中就展示了兩種不同的多租戶 FPGA 實現(xiàn)方法,第一種使用了兩個相互獨立的設(shè)計區(qū)域,第二種則實現(xiàn)了多個用戶設(shè)計 A、B、C、D 在 FPGA 上的混合排列。
事實上,不同用戶的設(shè)計區(qū)域很難做到完全獨立。比如,在同一個 FPGA 芯片上,供電、時鐘等全局資源往往需要共享。僅僅如此,就會給多租戶 FPGA 設(shè)計帶來安全隱患。
針對 FPGA 的電壓攻擊
在今年的 FCCM 大會上,來自馬薩諸塞大學的 Russell Tessier 教授做了名為“Security and Privacy Concerns for the FPGA-Accelerated Cloud and Datacenters”的報告,并介紹了一種針對 FPGA 的電壓攻擊方法。
這篇論文的全文和大會報告,已上傳至知識星球“老石談芯 - 進階版”,請于文末掃碼進入星球查看。
簡單來說,攻擊者可以在 FPGA 上實現(xiàn)一些消耗大量功耗的電路,由此會引發(fā)芯片上電壓的下降。由于使用同一個 FPGA 的用戶共享芯片上的供電網(wǎng)絡(luò),這種電壓下降會波及到 FPGA 上其他用戶的設(shè)計區(qū)域。值得注意的是,這種利用電壓進行攻擊的方式會無視多租戶之間相互獨立的邏輯區(qū)域。
一旦電壓下降過大,就會帶來很多問題。其中最主要的問題,就是會造成電路延時的增加。這樣一來,原本時序收斂的設(shè)計就不能滿足時序,從而造成各種錯誤的功能和計算結(jié)果。
例如,對于常見的加法運算來說,它的關(guān)鍵路徑取決于最長進位傳播(carry propagation)的時間。正因此,F(xiàn)PGA 中內(nèi)置了固化的進位鏈結(jié)構(gòu),以提高進位傳播的速度。然而,一旦電路延時增加,可能會導致時鐘沿到來時,加法的進位尚未完成傳播,由此導致計算結(jié)果出現(xiàn)重大誤差。
下圖就是一個行波進位加法器(Ripple Carry Adder)的例子,它計算四位二進制加法 1111 + 0001 時,應(yīng)該得到二進制數(shù) 10000(十進制 16),但由于電壓降低導致延時增加,使得進位未能傳播到最高位,最終得到的結(jié)果是 00000。
耗電單元(Power Waster)
可以看到,這種電壓攻擊的關(guān)鍵,就是在 FPGA 上實現(xiàn)某種可以消耗大量功耗的電路。數(shù)字電路的一個重要知識點是,動態(tài)功耗和所謂的開關(guān)速率(switch activity)呈線性相關(guān),也就是下面這個公式中的 f。因此只要實現(xiàn)一個能高速進行狀態(tài)切換的電路,就能消耗大量功耗。
基于此,這種耗電模塊事實上非常簡單,可以直接用一階環(huán)形振蕩器實現(xiàn),見下圖。
實驗表明,當例化 28000 個這樣的環(huán)形振蕩器時,每個振蕩器可以消耗 2.2mW 的功耗,并由此帶來芯片上電壓的迅速下降。在下圖中可以看到,50 微秒之內(nèi),離這些耗電單元最近區(qū)域的電壓(黑線)就由 1.1V 下降到 0.85V 左右。如果離耗電單元稍遠,也會出現(xiàn)不同程度的電壓下降,甚至在芯片的邊緣部分也會受到波及。
使用這種電壓攻擊的方法,除了可以對其他用戶的電路功能造成破壞之外,還可以用來竊取其他用戶的加密信息。例如,Tessier 教授就展示了如何破解并獲取 RSA 算法的私鑰。簡單來說,有一種名為中國剩余定理(CRT,也稱為孫子定理)的算法,在實現(xiàn) RSA 計算時可以得到 4 倍的性能提升。然而,如果在這個過程中通過電壓攻擊的方法引入錯誤的計算結(jié)果,就會簡單的反推出 RSA 的私鑰,并且這個過程與 RSA 密鑰長度無關(guān),且只需要一次迭代就可以完成。這個過程的具體細節(jié)在本文不再贅述,有興趣的讀者可以在知識星球“老石談芯進階版”或微博與我互動討論。
《孫子算經(jīng)》中的物不知數(shù)問題
FPGA 電壓攻擊的防治策略
如前文所述,這種基于大量耗電單元、并導致芯片電壓下降和電路延時增加的攻擊方式,會對使用 FPGA 的全部用戶都造成影響,而且不受設(shè)計區(qū)域劃分的限制。與之前介紹過的 StarBleed 漏洞不同,這種攻擊方法并不利用 FPGA 芯片本身的設(shè)計缺陷,而是利用了 FPGA 的特點,大量例化耗電單元并實施攻擊。因此這種方法理論上適用于任何 FPGA。
為了應(yīng)對這樣的新型攻擊方式,一種防御方法就是在芯片上布置若干電壓檢測模塊,并實時監(jiān)控不同區(qū)域的電壓值。如果一旦出現(xiàn)電壓攻擊,這些檢測模塊就可以鎖定導致電壓下降的源頭,并配合管理軟件對這個用戶區(qū)域進行封鎖。
在下圖中,使用了 12000 個耗電模塊,以及不同數(shù)量的電壓檢測單元,出現(xiàn)異常的電壓檢測單元以黑點表示。可以看到,當使用 40 個電壓檢測單元時(最右圖),就可以把攻擊源頭鎖定在一個相對較小的區(qū)域中。
此外,電壓下降帶來的延時增加并非都是壞事。這涉及到一個重要的思維方式的轉(zhuǎn)變。近年來,一個比較流行的研究領(lǐng)域叫做“近似計算”,即 Approximate Computing。它的主要觀點是,在很多特定的應(yīng)用場景中,并不需要做到 100%的精確計算,而這會帶來可觀的性能提升與功耗降低。
例如,有人專門對 FPGA 中數(shù)學運算進行過近似計算的研究。事實上,對于上文提到的 4 位行波進位加法器,它的最長進位鏈出現(xiàn)的概率只有 3.1%。也就是說,在某種程度的電壓攻擊時,有 96.9%的概率不會影響計算結(jié)果。
關(guān)于近似計算的內(nèi)容,本文也不再展開。上面提到的這個 FPGA 近似計算的研究,老石會上傳到知識星球,歡迎文末掃碼進入星球查看并參與討論。
結(jié)語
當前,F(xiàn)PGA 在云計算領(lǐng)域的應(yīng)用正在蓬勃興起。使用 FPGA 虛擬化技術(shù),讓多個用戶共同使用同一個 FPGA 的硬件加速資源,也成為了一種常見的 FPGA 業(yè)務(wù)模型。然而,這種業(yè)務(wù)模式也帶來了一些前所未有的安全性問題。本文介紹的利用耗電單元進行 FPGA 電壓攻擊的方法,就是這其中的一個。
事實上,從 FPGA 出現(xiàn)至今,在大部分情況下它都是作為單一用戶的器件而存在的。也就是說,正是 FPGA 使用場景的不斷擴展,才會出現(xiàn)這些人們從未考慮過的問題,并由此引發(fā)對 FPGA 技術(shù)本身更多、更新的思考。而這也將推動整個行業(yè)不斷向前邁進。
(注:本文僅代表作者個人觀點,與任職單位無關(guān)。)