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