NDSS 2025| 抖音集團安全研究團隊提出機密沙箱內存管理方案WAVEN
一、概述
NDSS會議(Network and Distributed System Security Symposium)是網絡與信息安全領域的四大頂級會議之一,也是中國計算機學會推薦的網絡與信息安全領域A類國際學術會議。會議以其高水準和創(chuàng)新性著稱,近五年平均錄用率約為17%,涵蓋密碼學、攻擊防御、隱私保護等主題,是推動信息安全發(fā)展的重要平臺。
本次入選的研究論文聚焦于為運行在可信執(zhí)行環(huán)境(TEE)內的WebAssembly(Wasm)運行時設計一套適合機密計算的內存管理方案,以實現機密計算環(huán)境中Wasm模塊之間的高效數據共享,并支持細粒度的內存訪問控制。
二、研究背景
可信執(zhí)行環(huán)境(TrustedExecution Environments, TEEs)是一種硬件擴展,為機密應用程序提供了名為飛地(enclave)的安全容器,能夠有效保護私有數據及計算的機密性和完整性。英特爾SGX是目前廣泛部署的TEE之一,其成功極大地推動了機密計算范式的發(fā)展,并為WebAssembly(Wasm)帶來了新的機遇。
Wasm是一種新的可移植、輕量級的二進制格式,也是許多高級語言(如C、C++和Rust等)的編譯目標。用其他語言編寫的程序首先被編譯成Wasm格式,然后可以在Wasm運行時中作為模塊執(zhí)行。通過強制每個模塊只能訪問其自己的內存區(qū)域,Wasm為不受信任的代碼提供了一個安全的沙箱執(zhí)行環(huán)境,這是其最顯著的安全特性。由于機密計算平臺需要同時執(zhí)行來自多個用戶的不可信代碼,因此需要在飛地內實現多租戶和隔離功能,而這正是Wasm所提供的。
Wasm和TEE的結合實現了飛地內多租戶隔離,使得這一搭配非常適合機密計算場景。然而,Wasm的線性內存模型缺乏有效的跨模塊數據共享和細粒度的內存訪問控制,這大大限制了其在機密計算中的應用。在機密計算領域,常見的情況是多個數據用戶共享一份機密數據,并且只允許少數特權用戶(例如數據所有者)對數據進行修改,例如機密函數即服務(FaaS)平臺,機密數據交易市場等場景(如下圖所示)。
針對上述問題,本項目主要研究英特爾SGX內Wasm運行時的內存管理,以使“Wasm+TEE”這一設計范式能夠更好地契合機密計算需求。具體而言,本項目提出了一種面向可信Wasm運行時的內存虛擬化方案,在SGX飛地內實現了多個模塊之間的安全高效數據共享。
三、技術方案
為了應對前述挑戰(zhàn),研究團隊設計了WAVEN(WebAssembly Memory Virtualization for Enclaves)內存虛擬化方案。WAVEN旨在支持飛地內Wasm模塊間的高效內存共享,并實現內存頁粒度的訪問控制。其核心設計包括以下幾個方面:
3.1 分頁方案
研究論文中提出的分頁方案支持任意頁大小,但根據Wasm規(guī)范,我們將頁面大小設置為64KB。對于一個32位的Wasm地址,其較高的16位表示頁索引,而較低的16位表示頁面內的偏移量。
一個Wasm模塊最多擁有4GB內存空間,即65536個內存頁面。頁表將Wasm模塊的32位地址(0x00000000~0xFFFFFFFF)轉換為Wasm運行時中的64位虛擬地址。我們采用了單級頁表來減少查表次數,從而減少內存虛擬化帶來的開銷。因此,一個模塊所對應的頁表由65536個條目組成,每個條目包含一個64位的虛擬地址。在這種設置下,一個頁表僅占用512KB內存空間。
在將Wasm地址翻譯成64位虛擬地址的過程中,Wasm運行時首先提取Wasm地址高16位作為頁索引,查找頁表以獲取該Wasm頁面的虛擬地址,然后加上低16位所代表的頁內偏移量來計算要訪問的虛擬地址。
上圖展示了前述分頁方案,箭頭表示從Wasm頁到虛擬頁的映射(即一個頁表項)。注意到,相鄰的Wasm頁面可以映射到非相鄰的虛擬頁面。與線性內存模型相比,分頁在該地址翻譯過程中引入了一個額外的內存讀取。
3.2 內存隔離與訪問控制
WAVEN通過控制頁表項來實現不同Wasm模塊間的內存隔離。在模塊實例化過程中,Wasm運行時不僅為其分配初始內存頁,同時也為其創(chuàng)建了一個64KB大小的空異常頁。對于初始內存空間內的Wasm地址(合法內存訪問),Wasm運行時將它們對應的頁表項設置為所分配的內存頁的虛擬地址;對于初始內存空間之外的Wasm地址(越界內存訪問),Wasm運行時會修改相關頁表項使得他們指向異常頁面。因此,當Wasm模塊執(zhí)行越界訪問時,地址翻譯流程會將非法地址指向模塊的異常頁,這可以有效地防止該模塊干擾或者訪問其他模塊的內存。
與現代計算機系統(tǒng)中的分頁方案類似,WAVEN也需要處理未對齊內存訪問:完全位于64KB頁面內的非對齊內存訪問不需要關注,而那些跨越頁面邊界的非對齊內存訪問則需要特殊處理??紤]到跨頁訪問的高開銷和低發(fā)生概率,WAVEN禁止跨頁訪問——它為每個虛擬頁填充若干個字節(jié),以確保所有內存訪問都位于單個虛擬頁內。由于一個Wasm訪存指令最多讀寫8個字節(jié)(不考慮SIMD指令),我們將頁填充大小設為7字節(jié)。
訪問控制方面,由于每個Wasm模塊都有自己的頁表,WAVEN利用雙頁表來實現高效的內存訪問控制。
具體而言,WAVEN使用兩個獨立的頁表來進行讀取和寫操作:寫頁表處理內存寫操作,并存儲可寫Wasm頁的虛擬地址;讀頁面表則用于內存讀取,并存儲可讀Wasm頁的虛擬地址??蓪慦asm頁的頁表項在讀、寫頁表內是相同的,均指向對應虛擬頁的虛擬地址。對于只讀頁而言,在讀頁表中與只讀頁指向有效的虛擬地址;而在寫頁表中,只讀頁指向異常頁的虛擬地址。
上圖是對WAVEN內存隔離和訪問控制方案的說明,異常頁用紅色高亮部分表示,頁填充則用黑色細長條矩形表示。同時,在該模塊的讀頁表中,Wasm頁面3被映射到一個普通的虛擬頁面;但是,在寫頁表中,它被映射到異常頁。因此,該模塊可以讀取Wasm頁面3的內容,但不能對其進行修改。這種細粒度的訪問控制在共享內存場景中特別有用。在共享內存場景中,多個Wasm模塊可能需要讀取共享內容,但不能隨意修改它。此外,只讀頁面的引入也提高了Wasm內存管理的安全性。
3.3 內存重映射
在WAVEN中,頁表項將Wasm頁面映射到虛擬頁面,這允許Wasm運行時特定覆寫頁表項來將Wasm頁面輕松地重新映射到另一個虛擬頁面。這種內存重映射特性極大地促進了多個Wasm模塊之間的共享內存,因為不同模塊可以將它們的Wasm頁面都映射到相同的虛擬頁面上,實現數據共享。此外,通過將內存重映射與前述內存訪問控制相結合,可以對共享內存區(qū)域規(guī)定只讀權限,這意味著一些模塊只能從共享內存中讀取內容,而另一些模塊還可以擁有修改權限。
四、總結
WAVEN通過創(chuàng)新的設計方案解決了Wasm線性內存模型的局限,滿足了機密計算中對高效數據共享和訪問控制的需求。其實現已在WAMR運行時及英特爾SGX環(huán)境中成功部署,并在多種測試中展示了良好的性能表現。研究結果表明,WAVEN在PolyBench測試套件平均引入10.42%的開銷,在高并發(fā)數據共享場景下性能最高提升2.4倍。
WAVEN目前已經被納入到Jeddak數據安全沙箱的能力矩陣中,在端云融合計算、數據共享計算等多類場景模式下,為用戶挖掘和創(chuàng)造更多數據價值。