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

今年 4 月,來自德國的研究者披露了一個名為“StarBleed”的漏洞,它存在於賽靈思的 Virtex、Kintex、Artix、Spartan 等全部 7 系列FPGA中。通過這個漏洞,攻擊者可以同時攻破 FPGA 配置文件的加密(confidentiality)和鑑權(authenticity),並由此可以隨意修改 FPGA 中實現的邏輯功能。更嚴重的是,這個漏洞並不能通過軟件補丁的方式修復,一旦某個芯片被攻破,就只能通過更換芯片的方式修復。

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

漏洞的發現者已於 2019 年 9 月將這個漏洞知會了賽靈思,並在第二天就獲得了賽靈思的承認。根據賽靈思之前發佈的財報,7 系列 FPGA 貢獻了公司 35%的營收。這些 FPGA 被廣泛用於通信設備、醫療、軍工宇航等多個領域,而這些領域很多都需要系統有著很高的穩定性與安全性。因此,這次爆出的重大漏洞,無疑會對賽靈思及其客戶帶來較大的負面影響。

近年來,有關 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 安全性設計。亡羊補牢,猶未晚也。


分享到:


相關文章: