今年4月,來自德國的研究者披露了一個名為“StarBleed”的漏洞,它存在於賽靈思的Virtex、Kintex、Artix、Spartan 等全部7系列FPGA中。透過這個漏洞,攻擊者

可以同時攻破FPGA配置檔案的加密(confidentiality)和鑑權(authenticity),並由此可以隨意修改FPGA中實現的邏輯功能

。更嚴重的是,這個漏洞並不能透過軟體補丁的方式修復,一旦某個晶片被攻破,就只能透過更換晶片的方式修復。

FPGA驚爆無解漏洞 - “StarBleed”技術細節全解讀

漏洞的發現者已於2019年9月將這個漏洞知會了賽靈思,並在第二天就獲得了賽靈思的承認。根據賽靈思之前釋出的財報,

7系列FPGA貢獻了公司35%的營收

。這些FPGA被廣泛用於通訊裝置、醫療、軍工宇航等多個領域,而這些領域很多都需要系統有著很高的穩定性與安全性。因此,這次爆出的重大漏洞,無疑會對賽靈思及其客戶帶來較大的負面影響。

FPGA驚爆無解漏洞 - “StarBleed”技術細節全解讀

近年來,有關CPU的漏洞時有發現。例如在2018年初,幾乎全部主流的CPU廠商都被發現在其CPU產品中存在熔斷(Meltdown)和幽靈(Spectre)漏洞。相比之下,FPGA的漏洞問題並不那麼“常見”。在這篇文章中,老石將深入解析造成這個漏洞的技術原因,並總結一些可行的應對方法與預防措施。

FPGA驚爆無解漏洞 - “StarBleed”技術細節全解讀

關於詳細介紹這個漏洞的論文全文,已上傳至知識星球“老石談芯進階版”,請於文末掃碼進入星球檢視

FPGA的主要加密方式

隨著FPGA在資料中心、通訊基礎設施、AI加速、醫療裝置、邊緣計算等多個領域的廣泛使用,針對FPGA安全性的研究在近年來逐漸成為學術界和工業界關注的熱點之一。

與CPU、ASIC等晶片相比,FPGA晶片本身並不會完成任何邏輯功能,它只包含大量的可程式設計邏輯陣列,以及若干固化的IP核。FPGA系統功能的實現,基本完全取決於開發者的邏輯設計。由於不同的設計者可以開發不同的系統邏輯,這就使得相同的FPGA晶片可以廣泛用於眾多不同的行業領域。通常來說,一個FPGA設計都是由很多IP組合而成,而這些IP才是FPGA設計中最有價值的部分。

為了將設計載入到FPGA中執行,唯一的方式就是透過一個所謂的“位元流(bitstream)”檔案完成,業界也通常稱之為系統映像。系統映像由FPGA設計軟體自動生成,它包含了FPGA設計的全部資訊,因此是FPGA加密環節的重中之重。

通常來說,

對位元流或系統映像檔案的保護方式有兩個層面,第一是加密,第二是鑑權

。加密指的是使用特定演算法對位元流檔案進行處理,將其轉換成密文,使得其中的內容對外不可見。在賽靈思的7系列FPGA中,使用了CBC-AES-256演算法進行位元流加密。

鑑權指的是對加密後的位元流檔案進行身份驗證,防止對其進行篡改和刪減

,這類似於我們日常生活中的身份驗證。如果位元流檔案被修改,勢必會導致錯誤的鑑權結果。如果將這個位元流下載到FPGA中,會因為身份校驗失敗而拒絕執行,從而避免被攻擊的可能。在賽靈思的7系列FPGA中,使用了基於SHA-256的HMAC(雜湊訊息認證碼,Hash-based Message Authentication Code)方法進行鑑權。

可以想象,如果位元流的加密過程被破解,那麼攻擊者就可以讀出位元流檔案中的所有資訊,從而進行反向工程、IP破解、資訊收集等工作。如果鑑權過程被破解,那麼攻擊者就可以對位元流檔案進行任意修改,比如修改系統功能、木馬注入等。所以說,這兩種保護方式缺一不可。

只可惜,這次的StarBleed漏洞恰恰利用了這兩種保護方式各自的短板,從而徹底破解位元流的加密和鑑權,並達到了完全控制位元流和FPGA晶片的目的,可以說這個漏洞的破壞性和潛在危害性極強。

StarBleed漏洞的具體攻擊方法

整個攻擊過程分為兩大部分,第一是對加密的位元流檔案進行破解,第二是獲取鑑權金鑰。

為了破解加密的位元流檔案,攻擊者利用了賽靈思FPGA裡的一個特殊的配置暫存器WBSTAR,這個暫存器原本儲存了FPGA MultiBoot功能的起始地址,當啟動FPGA時,就透過讀取這個暫存器從片外非易失性儲存器找到映像檔案。

因此,當FPGA復位時,這個暫存器的內容是不會被抹掉的

對加密位元流的破解過程分為5個步驟。

第一步,攻擊者對一個合法的位元流檔案進行了簡單篡改。具體來說,他需要修改位元流的一個32位字,將其改成對WBSTAR暫存器的寫操作。寫入的內容,就是位元流本身。

雖然位元流是加密的,但這個篡改過程並沒有想象中那麼困難。由於Vivado生成的位元流檔案的格式和很多內容是固定的,攻擊者可以對比不同的位元流檔案,從而確定對WBSTAR暫存器操作命令的位置,然後對其進行修改即可。由於篇幅所限,這部分的具體的細節不再贅述,歡迎在知識星球或微博與老石進一步交流。

FPGA驚爆無解漏洞 - “StarBleed”技術細節全解讀

位元流資料結構,灰色部分是加密的內容

第二步,將篡改後的位元流載入到FPGA裡。此時,FPGA會對位元流進行解密,並將一個32位字寫入WBSTAR暫存器。

值得注意的是,這裡寫入的是已經解密的位元流內容!

第三步,載入完畢後,由於位元流發生了修改,因此校驗失敗,並自動觸發系統復位。

第四步,使用另外一個未加密的位元流檔案,讀取WBSTAR暫存器的內容。由於WBSTAR暫存器的特殊性,它的內容不會隨著復位而清除。因此,此時攻擊者再使用另外一個未加密的位元流檔案讀取這個暫存器的內容,就可以得到解密後的FPGA位元流的32位內容了。這個未加密的位元流檔案已開源,請在文末掃碼進入知識星球檢視。

第五步,手工復位,然後重複上述步驟,直到整個位元流都解密完成。

可以看到,

攻擊者利用了上面提到的鑑權過程晚於加解密過程這個缺陷,透過“螞蟻搬家”的方式完成了對位元流的完全解密

。最可憐的是,此時的FPGA本身也淪為了幫助解密的工具。這也解釋了為什麼只能透過更換FPGA晶片才能修補這個漏洞。

下面的表格總結了不同的7系列FPGA的位元流大小,以及解密所需要的時間。讀出一個32位字大概需要7。9毫秒,那麼破解一個Kintex FPGA的位元流就大概需要3小時42分鐘。

FPGA驚爆無解漏洞 - “StarBleed”技術細節全解讀

接下來,就可以對鑑權過程進行破解了。這個過程相對簡單,事實上,身份校驗所需的HMAC金鑰就儲存在位元流檔案中,並且未經其他額外的加密。這正是所謂的“謎底就在謎面上”。所以只需要讀取完整的位元流,就可以免費附贈HMAC金鑰一枚。有了它,就可以任意修改位元流檔案的內容,並重新計算身份校驗。此外,攻擊者甚至可以修改HMAC金鑰本身。

綜上所述,StarBleed漏洞正是利用了賽靈思7系列FPGA的兩大設計缺陷:

1. 身份校驗發生在解密過程之後

2. 身份校驗的金鑰直接儲存在加密後的位元流檔案裡,且無額外加密

透過StarBleed漏洞,攻擊者破解了全系列的賽靈思7系FPGA,包括SAKURA-X板卡上的Kintex-7,Basys3板卡上的Artix-7等等。同時,攻擊者還利用同樣的原理攻擊了6系FPGA,例如ML605板卡上的Virtex-6 FPGA,也能實現不完全破解。

FPGA驚爆無解漏洞 - “StarBleed”技術細節全解讀

防禦方法

由於StarBleed漏洞直接利用了賽靈思7系列FPGA晶片的設計缺陷,且攻擊過程直接在載入映像檔案時展開,因此不能使用軟體補丁或韌體升級的方法規避這個漏洞。目前唯一的修復方法只有更換晶片,賽靈思官方已經向研究者承認了這一點。

事實上,攻擊者使用這種方法無法破解UltraScale或更新的FPGA系列。這說明上面所說的設計缺陷已經在新型FPGA架構中得到了修復。例如,首先對位元流檔案進行鑑權,通過後再進行載入。

雖然除了換晶片外沒有完全防禦的方法,我們仍然可以採用一些設計手段增加破解的成本和複雜度。

一個常見的方法是在設計中增加額外的冗餘邏輯

,這些額外的部分並不影響邏輯功能,但會極大的提升設計的複雜度,從而增加破解的時間成本。比如,在狀態機中增加很多無用狀態等等。

此外,還可以在板卡設計時封鎖FPGA的配置埠,比如研究者使用的JTAG和SelectMAP埠等。事實上,在量產的FPGA設計中,應該也很少有暴露的JTAG埠。

同時,研究者還思考了如何儘早發現這類設計缺陷和漏洞,而形式化方法就是一個很好的解決手段。

設計者可以根據晶片的設計規約,建立形式化模型,並透過滿足性驗證(satisfiability)等方式對這個模型進行分析和證明

。老石在之前的文章《形式化晶片驗證:救世主還是烏托邦》中,曾對形式化方法做過詳細介紹,有興趣的讀者可以看看。

結語

FPGA的安全性研究並非一個全新的課題。然而,傳統的FPGA攻擊方法都需要使用額外的物理裝置或操作,實用性遠不如此次爆出的StarBleed漏洞。

一旦FPGA被攻破,攻擊者可以任意讀取FPGA位元流的資料、IP內容等,並實現反向工程;也可以任意改變FPGA實現的邏輯功能,這使得FPGA所在的系統可能淪為攻擊者的高效能“肉雞”。由於FPGA能以40Gbps甚至更高的速度線速傳送資料包,這使得大規模DDOS攻擊變得“簡單”。此外,攻擊者也可以透過邏輯實現的方式,大幅提升晶片溫度並對系統硬體進行不可逆的物理破壞,等等。

可以說,這次的StarBleed漏洞給業界敲響了警鐘,也將會提升人們對FPGA安全性的重視,並以此指導未來的FPGA安全性設計。亡羊補牢,猶未晚也。

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

關注公眾號“老石談芯”,看更多原創芯文、芯情、芯事

FPGA驚爆無解漏洞 - “StarBleed”技術細節全解讀

微博“老石談芯的老石”,看更多業界熱點解析

有關晶片與FPGA技術的深度解讀,歡迎加入知識星球:“老石談芯-進階版”,一個關乎技術與觀點的互動社群。

FPGA驚爆無解漏洞 - “StarBleed”技術細節全解讀