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