今年4月,來(lái)自德國(guó)的研究者披露了一個(gè)名為“StarBleed”的漏洞,它存在于賽靈思的Virtex、Kintex、Artix、Spartan等全部7系列FPGA中。通過(guò)這個(gè)漏洞,攻擊者可以同時(shí)攻破FPGA配置文件的加密(confidentiality)和鑒權(quán)(authenticity),并由此可以隨意修改FPGA中實(shí)現(xiàn)的邏輯功能。更嚴(yán)重的是,這個(gè)漏洞并不能通過(guò)軟件補(bǔ)丁的方式修復(fù),一旦某個(gè)芯片被攻破,就只能通過(guò)更換芯片的方式修復(fù)。
漏洞的發(fā)現(xiàn)者已于2019年9月將這個(gè)漏洞知會(huì)了賽靈思,并在第二天就獲得了賽靈思的承認(rèn)。根據(jù)賽靈思之前發(fā)布的財(cái)報(bào),7系列FPGA貢獻(xiàn)了公司35%的營(yíng)收。這些FPGA被廣泛用于通信設(shè)備、醫(yī)療、軍工宇航等多個(gè)領(lǐng)域,而這些領(lǐng)域很多都需要系統(tǒng)有著很高的穩(wěn)定性與安全性。因此,這次爆出的重大漏洞,無(wú)疑會(huì)對(duì)賽靈思及其客戶帶來(lái)較大的負(fù)面影響。
近年來(lái),有關(guān)CPU的漏洞時(shí)有發(fā)現(xiàn)。例如在2018年初,幾乎全部主流的CPU廠商都被發(fā)現(xiàn)在其CPU產(chǎn)品中存在熔斷(Meltdown)和幽靈(Spectre)漏洞。相比之下,F(xiàn)PGA的漏洞問(wèn)題并不那么“常見(jiàn)”。在這篇文章中,老石將深入解析造成這個(gè)漏洞的技術(shù)原因,并總結(jié)一些可行的應(yīng)對(duì)方法與預(yù)防措施。
關(guān)于詳細(xì)介紹這個(gè)漏洞的論文全文,已上傳至知識(shí)星球“老石談芯進(jìn)階版”,請(qǐng)于文末掃碼進(jìn)入星球查看。
FPGA的主要加密方式
隨著FPGA在數(shù)據(jù)中心、通信基礎(chǔ)設(shè)施、AI加速、醫(yī)療設(shè)備、邊緣計(jì)算等多個(gè)領(lǐng)域的廣泛使用,針對(duì)FPGA安全性的研究在近年來(lái)逐漸成為學(xué)術(shù)界和工業(yè)界關(guān)注的熱點(diǎn)之一。
與CPU、ASIC等芯片相比,F(xiàn)PGA芯片本身并不會(huì)完成任何邏輯功能,它只包含大量的可編程邏輯陣列,以及若干固化的IP核。FPGA系統(tǒng)功能的實(shí)現(xiàn),基本完全取決于開(kāi)發(fā)者的邏輯設(shè)計(jì)。由于不同的設(shè)計(jì)者可以開(kāi)發(fā)不同的系統(tǒng)邏輯,這就使得相同的FPGA芯片可以廣泛用于眾多不同的行業(yè)領(lǐng)域。通常來(lái)說(shuō),一個(gè)FPGA設(shè)計(jì)都是由很多IP組合而成,而這些IP才是FPGA設(shè)計(jì)中最有價(jià)值的部分。
為了將設(shè)計(jì)加載到FPGA中運(yùn)行,唯一的方式就是通過(guò)一個(gè)所謂的“比特流(bitstream)”文件完成,業(yè)界也通常稱之為系統(tǒng)映像。系統(tǒng)映像由FPGA設(shè)計(jì)軟件自動(dòng)生成,它包含了FPGA設(shè)計(jì)的全部信息,因此是FPGA加密環(huán)節(jié)的重中之重。
通常來(lái)說(shuō),對(duì)比特流或系統(tǒng)映像文件的保護(hù)方式有兩個(gè)層面,第一是加密,第二是鑒權(quán)。加密指的是使用特定算法對(duì)比特流文件進(jìn)行處理,將其轉(zhuǎn)換成密文,使得其中的內(nèi)容對(duì)外不可見(jiàn)。在賽靈思的7系列FPGA中,使用了CBC-AES-256算法進(jìn)行比特流加密。
鑒權(quán)指的是對(duì)加密后的比特流文件進(jìn)行身份驗(yàn)證,防止對(duì)其進(jìn)行篡改和刪減,這類似于我們?nèi)粘I钪械纳矸蒡?yàn)證。如果比特流文件被修改,勢(shì)必會(huì)導(dǎo)致錯(cuò)誤的鑒權(quán)結(jié)果。如果將這個(gè)比特流下載到FPGA中,會(huì)因?yàn)樯矸菪r?yàn)失敗而拒絕執(zhí)行,從而避免被攻擊的可能。在賽靈思的7系列FPGA中,使用了基于SHA-256的HMAC(散列消息認(rèn)證碼,Hash-basedMessageAuthenticationCode)方法進(jìn)行鑒權(quán)。
可以想象,如果比特流的加密過(guò)程被破解,那么攻擊者就可以讀出比特流文件中的所有信息,從而進(jìn)行反向工程、IP破解、信息收集等工作。如果鑒權(quán)過(guò)程被破解,那么攻擊者就可以對(duì)比特流文件進(jìn)行任意修改,比如修改系統(tǒng)功能、木馬注入等。所以說(shuō),這兩種保護(hù)方式缺一不可。
只可惜,這次的StarBleed漏洞恰恰利用了這兩種保護(hù)方式各自的短板,從而徹底破解比特流的加密和鑒權(quán),并達(dá)到了完全控制比特流和FPGA芯片的目的,可以說(shuō)這個(gè)漏洞的破壞性和潛在危害性極強(qiáng)。
StarBleed漏洞的具體攻擊方法
整個(gè)攻擊過(guò)程分為兩大部分,第一是對(duì)加密的比特流文件進(jìn)行破解,第二是獲取鑒權(quán)密鑰。
為了破解加密的比特流文件,攻擊者利用了賽靈思FPGA里的一個(gè)特殊的配置寄存器WBSTAR,這個(gè)寄存器原本保存了FPGAMultiBoot功能的起始地址,當(dāng)啟動(dòng)FPGA時(shí),就通過(guò)讀取這個(gè)寄存器從片外非易失性存儲(chǔ)器找到映像文件。因此,當(dāng)FPGA復(fù)位時(shí),這個(gè)寄存器的內(nèi)容是不會(huì)被抹掉的。
對(duì)加密比特流的破解過(guò)程分為5個(gè)步驟。
第一步,攻擊者對(duì)一個(gè)合法的比特流文件進(jìn)行了簡(jiǎn)單篡改。具體來(lái)說(shuō),他需要修改比特流的一個(gè)32位字,將其改成對(duì)WBSTAR寄存器的寫操作。寫入的內(nèi)容,就是比特流本身。
雖然比特流是加密的,但這個(gè)篡改過(guò)程并沒(méi)有想象中那么困難。由于Vivado生成的比特流文件的格式和很多內(nèi)容是固定的,攻擊者可以對(duì)比不同的比特流文件,從而確定對(duì)WBSTAR寄存器操作命令的位置,然后對(duì)其進(jìn)行修改即可。由于篇幅所限,這部分的具體的細(xì)節(jié)不再贅述,歡迎在知識(shí)星球或微博與老石進(jìn)一步交流。
比特流數(shù)據(jù)結(jié)構(gòu),灰色部分是加密的內(nèi)容
第二步,將篡改后的比特流加載到FPGA里。此時(shí),F(xiàn)PGA會(huì)對(duì)比特流進(jìn)行解密,并將一個(gè)32位字寫入WBSTAR寄存器。值得注意的是,這里寫入的是已經(jīng)解密的比特流內(nèi)容!
第三步,加載完畢后,由于比特流發(fā)生了修改,因此校驗(yàn)失敗,并自動(dòng)觸發(fā)系統(tǒng)復(fù)位。
第四步,使用另外一個(gè)未加密的比特流文件,讀取WBSTAR寄存器的內(nèi)容。由于WBSTAR寄存器的特殊性,它的內(nèi)容不會(huì)隨著復(fù)位而清除。因此,此時(shí)攻擊者再使用另外一個(gè)未加密的比特流文件讀取這個(gè)寄存器的內(nèi)容,就可以得到解密后的FPGA比特流的32位內(nèi)容了。這個(gè)未加密的比特流文件已開(kāi)源,請(qǐng)?jiān)谖哪叽a進(jìn)入知識(shí)星球查看。
第五步,手工復(fù)位,然后重復(fù)上述步驟,直到整個(gè)比特流都解密完成。
可以看到,攻擊者利用了上面提到的鑒權(quán)過(guò)程晚于加解密過(guò)程這個(gè)缺陷,通過(guò)“螞蟻搬家”的方式完成了對(duì)比特流的完全解密。最可憐的是,此時(shí)的FPGA本身也淪為了幫助解密的工具。這也解釋了為什么只能通過(guò)更換FPGA芯片才能修補(bǔ)這個(gè)漏洞。
下面的表格總結(jié)了不同的7系列FPGA的比特流大小,以及解密所需要的時(shí)間。讀出一個(gè)32位字大概需要7.9毫秒,那么破解一個(gè)KintexFPGA的比特流就大概需要3小時(shí)42分鐘。
接下來(lái),就可以對(duì)鑒權(quán)過(guò)程進(jìn)行破解了。這個(gè)過(guò)程相對(duì)簡(jiǎn)單,事實(shí)上,身份校驗(yàn)所需的HMAC密鑰就存儲(chǔ)在比特流文件中,并且未經(jīng)其他額外的加密。這正是所謂的“謎底就在謎面上”。所以只需要讀取完整的比特流,就可以免費(fèi)附贈(zèng)HMAC密鑰一枚。有了它,就可以任意修改比特流文件的內(nèi)容,并重新計(jì)算身份校驗(yàn)。此外,攻擊者甚至可以修改HMAC密鑰本身。
綜上所述,StarBleed漏洞正是利用了賽靈思7系列FPGA的兩大設(shè)計(jì)缺陷:
1.身份校驗(yàn)發(fā)生在解密過(guò)程之后
2.身份校驗(yàn)的密鑰直接存儲(chǔ)在加密后的比特流文件里,且無(wú)額外加密
通過(guò)StarBleed漏洞,攻擊者破解了全系列的賽靈思7系FPGA,包括SAKURA-X板卡上的Kintex-7,Basys3板卡上的Artix-7等等。同時(shí),攻擊者還利用同樣的原理攻擊了6系FPGA,例如ML605板卡上的Virtex-6FPGA,也能實(shí)現(xiàn)不完全破解。
防御方法
由于StarBleed漏洞直接利用了賽靈思7系列FPGA芯片的設(shè)計(jì)缺陷,且攻擊過(guò)程直接在加載映像文件時(shí)展開(kāi),因此不能使用軟件補(bǔ)丁或固件升級(jí)的方法規(guī)避這個(gè)漏洞。目前唯一的修復(fù)方法只有更換芯片,賽靈思官方已經(jīng)向研究者承認(rèn)了這一點(diǎn)。
事實(shí)上,攻擊者使用這種方法無(wú)法破解UltraScale或更新的FPGA系列。這說(shuō)明上面所說(shuō)的設(shè)計(jì)缺陷已經(jīng)在新型FPGA架構(gòu)中得到了修復(fù)。例如,首先對(duì)比特流文件進(jìn)行鑒權(quán),通過(guò)后再進(jìn)行加載。
雖然除了換芯片外沒(méi)有完全防御的方法,我們?nèi)匀豢梢圆捎靡恍┰O(shè)計(jì)手段增加破解的成本和復(fù)雜度。一個(gè)常見(jiàn)的方法是在設(shè)計(jì)中增加額外的冗余邏輯,這些額外的部分并不影響邏輯功能,但會(huì)極大的提升設(shè)計(jì)的復(fù)雜度,從而增加破解的時(shí)間成本。比如,在狀態(tài)機(jī)中增加很多無(wú)用狀態(tài)等等。
此外,還可以在板卡設(shè)計(jì)時(shí)封鎖FPGA的配置端口,比如研究者使用的JTAG和SelectMAP端口等。事實(shí)上,在量產(chǎn)的FPGA設(shè)計(jì)中,應(yīng)該也很少有暴露的JTAG端口。
同時(shí),研究者還思考了如何盡早發(fā)現(xiàn)這類設(shè)計(jì)缺陷和漏洞,而形式化方法就是一個(gè)很好的解決手段。設(shè)計(jì)者可以根據(jù)芯片的設(shè)計(jì)規(guī)約,建立形式化模型,并通過(guò)滿足性驗(yàn)證(satisfiability)等方式對(duì)這個(gè)模型進(jìn)行分析和證明。老石在之前的文章《形式化芯片驗(yàn)證:救世主還是烏托邦》中,曾對(duì)形式化方法做過(guò)詳細(xì)介紹,有興趣的讀者可以看看。
結(jié)語(yǔ)
FPGA的安全性研究并非一個(gè)全新的課題。然而,傳統(tǒng)的FPGA攻擊方法都需要使用額外的物理設(shè)備或操作,實(shí)用性遠(yuǎn)不如此次爆出的StarBleed漏洞。
一旦FPGA被攻破,攻擊者可以任意讀取FPGA比特流的數(shù)據(jù)、IP內(nèi)容等,并實(shí)現(xiàn)反向工程;也可以任意改變FPGA實(shí)現(xiàn)的邏輯功能,這使得FPGA所在的系統(tǒng)可能淪為攻擊者的高性能“肉雞”。由于FPGA能以40Gbps甚至更高的速度線速發(fā)送數(shù)據(jù)包,這使得大規(guī)模DDOS攻擊變得“簡(jiǎn)單”。此外,攻擊者也可以通過(guò)邏輯實(shí)現(xiàn)的方式,大幅提升芯片溫度并對(duì)系統(tǒng)硬件進(jìn)行不可逆的物理破壞,等等。
可以說(shuō),這次的StarBleed漏洞給業(yè)界敲響了警鐘,也將會(huì)提升人們對(duì)FPGA安全性的重視,并以此指導(dǎo)未來(lái)的FPGA安全性設(shè)計(jì)。亡羊補(bǔ)牢,猶未晚也。
評(píng)論