演講嘉賓 | 王浩宇
回顧整理 | 廖 濤
排版校對 | 李萍萍
嘉賓簡介
王浩宇,華中科技大學教授,博士生導師,華中科技大學OpenHarmony技術俱樂部主任。研究關注于新興軟件系統中的安全、隱私和可靠性問題,近五年發表CCF A類和CSRankings頂會論文近70篇,在軟件安全和系統測量領域的頂會論文成果在國內名列前茅。
內容來源
第一屆開放原子開源基金會OpenHarmony技術峰會——開發者工具分論壇
正 文 內 容
WebAssembly(Wasm)是W3C標準化組織制定的一種高效、底層、可移植的字節碼格式。目前,Wasm越來越多地用于瀏覽器、無服務器計算、跨平臺容器和區塊鏈DApp等場景。Wasm與OpenHarmony生態能夠有哪些碰撞呢?華中科技大學網絡安全學院王浩宇教授在第一屆OpenHarmony技術峰會上,分享了當前在Wasm安全領域所做的探索,并展望了Wasm與OpenHarmony結合的新方向。
01?
Wasm軟件生態系統介紹
目前,如C、C++、Rust、Go、Java、C#等幾乎所有主流高級語言都可以被編譯到Wasm,所有的主流瀏覽器也均支持Wasm。此外業界也實現了很多獨立的Wasm虛擬機(運行時),支持解釋器、AOT、JIT等模式。
WebAssembly (Wasm) 及其運行環境
Wasm的執行架構與設計特點有:
-
類型安全的棧指令:線性時間類型檢查算法,完全確定棧上值的數量和類型;
-
結構化的控制流指令:內部指令僅能根據嵌套結構跳轉,簡化了編譯器實現;
-
可拓展的線性內存:一頁為64KB,模塊中指定初始內存頁和最大內存頁數量,運行時可動態增長;函數調用棧,返回地址等重要數據由外部運行時維護,保證了安全性;
-
指令和數據完全分離:函數“地址”通過下標表示,非直接跳轉通過跳轉表實現。
Wasm的應用前景十分廣闊。例如,Wasm能夠支持高效的Web計算,因此基于Wasm能夠實現大型應用在瀏覽器中運行;Wasm也支持跨平臺容器技術,適用于嵌入式、可信計算以及云計算等場景。此外,Wasm在Web 3.0/區塊鏈中的DApp和智能合約等領域也被應用廣泛。
Wasm多語言、跨平臺以及高性能的特性,使其非常契合OpenHarmony面向萬物互聯新場景的開源生態,在移動設備上應用前景廣泛。目前,WasmEdge開源項?維護者Michael Yuan等人已經發起了OpenHarmony Wasm-SIG提案,致?于宣傳、實施、推?Wasm與OpenHarmony的集成,在OpenHarmony終端設備上可以安全高效的運行第三方開發者用 C、C++、Rust 等語言編寫的 Wasm 程序,有利于擴大 OpenHarmony生態的開發者群體。
02?
Wasm安全及相關研究
Wasm生態中也有很多安全問題得到了學術界的重視,包括前端編譯器安全,代碼移植安全,Wasm二進制安全,Wasm相關的惡意應用,Wasm可信執行環境等等。
-
代碼內存安全:由于Wasm生態還較不成熟,在傳統二進制中已經有成熟防御措施的漏洞仍然能夠被利用。例如,由于缺乏stack canary機制,攻擊者可以輕松利用棧溢出漏洞;Wasm也缺乏相關的堆保護機制等。
-
程序移植安全:大量的現有程序可以被“直接”編譯到Wasm,但可能會引入bug或安全問題;移植會導致代碼行為(如指針大小、內存能力、環境變量等)不同;移植時處理不當可能導致不同的堆內存管理實現困難、缺乏安全措施等安全問題。
-
惡意Wasm程序:目前很大一部分Wasm程序被用于惡意挖礦等行為,Wasm也可以作為混淆或者加殼方式被惡意軟件利用。
Wasm (安全) 問題及學術界相關研究
然而,目前Wasm安全相關研究還處于初級階段。一方面,Wasm不斷引入的新特性與新場景持續帶來新的安全問題和挑戰;另一方面,Wasm幾乎沒有通用的程序分析框架,大部分工具都是針對特定平臺的Wasm二進制分析(只支持部分指令集、只對平臺相關庫函數做建模),無法分析通用 Wasm 二進制;此外,Wasm的二進制反編譯器還處于初期階段,Wasm虛擬機和編譯器不夠成熟,Wasm代碼混淆以及代碼保護技術還較為欠缺等。
針對上述安全問題,王浩宇教授所帶領的學術團隊在Wasm二進制翻譯、Wasm程序分析、Wasm運行時/編譯器bug檢測等方面做了安全增強相關工作。例如,在區塊鏈智能合約場景下,實現了從EVM字節碼到eWasm字節碼的安全Wasm二進制翻譯;提出了Wasm符號執行框架EOSafe、Wasm模糊測試框架WASAI、Wasm通用二進制重寫框架BREWasm、Wasm二進制混淆工具Chaos等分析技術。此外,王浩宇教授團隊提出了針對Wasm運行時的模糊測試技術,已經在wasmer,wasmtime,WAMR,wasm3,Wasm Edge等運行時中發現了數十個代碼缺陷。
王浩宇教授的團隊Wasm相關研究工作
03?
Wasm二進制重寫及其安全應用
在本次峰會的開發者工具分論壇,王浩宇教授介紹了其團隊提出的一個通用的Wasm二進制重寫工具。Wasm二進制重寫具有無需源碼、跨平臺和跨語言等優點,其應用場景包括Wasm程序修復、測試用例生成、代碼插樁、輔助動態分析、Wasm代碼漏洞檢測、Wasm模糊測試、Wasm二進制保護與混淆等。目前,學術界已有的Wasm二進制重寫和插樁的研究大都只局限于簡單的指令級別修改,比如在某一指令前后添加一些指令,對控制流的修改也僅局限于某一特定模式的更改等。然而,一個通用的Wasm二進制重寫框架是如上眾多Wasm研究工作的基礎。
實現一個通用的Wasm二進制重寫框架存在一些挑戰。
(1)Wasm不同段之間的耦合性:Wasm中,一個函數的所有信息,包括函數簽名,函數指令等內容分布在不同的Wasm段中,這導致對單獨一個段的重寫不足以實現Wasm中的一個微小功能。而且開發者需要熟悉多個段的不同的數據結構才能實現對Wasm中某一功能的重寫;
(2)結構化控制流與控制流修改:Wasm沒有goto-like的跳轉指令,且只有將代碼塊進行嵌套才能添加跳轉指令,這對實現靈活的控制流重寫帶來了較大挑戰
(3)Wasm棧平衡校驗和修復:一個正確的Wasm二進制需要滿足靜態校驗規則。例如,一個函數的所有信息都靠函數的index索引,且函數的指令需要滿足棧平衡。在對Wasm二進制重寫后,如果出現了index之間的索引不一致或某一函數指令沒有棧平衡等靜態校驗問題,則會生成錯誤的Wasm二進制。
王浩宇教授團隊針對上述挑戰,分別提出了相應的解決方案。針對挑戰(1),除了提供細粒度的對每個段中數據結構的重寫功能外,還將各個段的結構抽象成一組語義并提供大量針對語義的重寫API,使開發者不需要關心底層對各個段的修改邏輯。
針對挑戰(2),提出控制流結構原子化的方法,在加載Wasm模塊時,對指令進行分割和構建代碼塊(原子化),利用原子化的控制流結構可以組合構建更復雜的控制流結構,并在修改結束后,將基于原子化代碼塊的控制流結構轉換回Wasm指令。
針對挑戰(3),實現兩個輔助模塊indices-fixer和stack-calculator以修復索引錯誤和棧平衡。
BREWasm框架
基于上述解決方案,王浩宇教授帶領的團隊提出了一個通用的Wasm二進制重寫框架——BREWasm。該框架主要包括以下5部分功能:
-
Wasm Parser:給定一套簡易DSL,將Wasm段和數據結構抽象,并解析為一個可操作對象的列表;
-
Section Rewriter:基于Wasm段和數據結構抽象,實現細粒度段重寫API;
-
Semantics Rewriter:將段重寫API進行組合,實現一組語義更為豐富的Semantic API;
-
Control Flow Reconstructor:實現了一組能夠任意靈活修改控制流且無需關注棧平衡的Control Flow API;
-
Wasm Encoder:將重寫后的可操作對象列表按照段和數據結構抽象重新編碼為合法的 Wasm 二進制。
Wasm控制流原子化示意以及BREWasm中提供的部分Control Flow API
BREWasm能夠應用在Wasm代碼混淆、Wasm程序棧溢出保護、Wasm程序插樁等場景。例如,在Wasm二進制混淆上,BREWasm采取切分原有Wasm代碼塊來獲得控制流重寫的基本元素,并將這些元素構成一個switch-case的控制流結構,再將其插入到while控制流中,可以僅用幾行代碼實現對任意Wasm程序的控制流平坦化混淆;在Wasm程序棧溢出保護上,僅調用BREWasm提供的幾個API,即可實現對可能存在棧溢出問題的函數進行hook,在函數被調用前提前在棧上插入canary,在函數執行完成后去檢測canary的值是否發生改變,來確定函數執行過程中是否出現了棧溢出問題;在Wasm程序插樁上,BREWasm能夠對Wasm二進制插樁,實現動態污點分析,調用圖分析,內存訪問分析,惡意挖礦檢測等功能,也能夠給定插樁規則,對每個Wasm指令進行自動化插樁,為Wasm 二進制導入外部實現的分析API。此外,BREWasm還能夠非常方便地應用于Wasm代碼變換、Wasm程序修復以及Wasm模糊測試等場景。
BREWasm對任意Wasm程序實現控制流平坦化示例
04?
總結與展望
跨語言、跨平臺、跨場景的開源軟件生態是發展趨勢,也引入眾多新的攻擊面。Wasm的特性使其非常契合OpenHarmony面向萬物互聯新場景的開源生態,而其中的安全問題也不可忽視。期待學術界和工業界一起,為萬物互聯的開源生態添磚加瓦,持續為新興軟件安全賦能!
Wasm未來研究展望
E N D
點擊下方閱讀原文獲取演講PPT。
關注我們,獲取更多精彩。
審核編輯黃宇
-
OpenHarmony
+關注
關注
25文章
3663瀏覽量
16159
發布評論請先 登錄
相關推薦
評論