WebAssembly生态将完善网络安全性
近日 Mozilla、Fastly、Intel 與 Red Hat 宣布成立聯(lián)合組織?Bytecode Alliance(字節(jié)碼聯(lián)盟),該聯(lián)盟旨在通過協(xié)作實(shí)施標(biāo)準(zhǔn)和提出新標(biāo)準(zhǔn),以完善 WebAssembly 在瀏覽器之外的生態(tài)。
WebAssembly 也叫 Wasm,它是為基于棧的虛擬機(jī)設(shè)計的二進(jìn)制指令格式,Wasm 作為可移植目標(biāo),用于編譯高級語言(如 C/C++/Rust),從而可以在 Web 上部署客戶端和服務(wù)器應(yīng)用。
WebAssembly 描述了一種內(nèi)存安全的沙箱執(zhí)行環(huán)境,該環(huán)境甚至可以在現(xiàn)有 JavaScript 虛擬機(jī)內(nèi)部實(shí)現(xiàn)。當(dāng)嵌入到 Web 中時,WebAssembly 將強(qiáng)制執(zhí)行瀏覽器的同源和權(quán)限安全策略。
目前 1.0 版本的 Wasm 已經(jīng)支持 Chrome、Firefox、Safari 與 Edge 瀏覽器。
此次四家公司為什么結(jié)成 Bytecode Alliance 呢?Mozilla 官網(wǎng)博客上?Lin Clark?作了介紹。
Lin 表示,當(dāng)前網(wǎng)絡(luò)用戶身處越來越大的風(fēng)險中,目前大家在構(gòu)建大規(guī)模的模塊化應(yīng)用,其中 80% 的代碼庫來自軟件包注冊中心,例如 npm、PyPI 與 crates.io。這樣的方式當(dāng)然使得生態(tài)繁榮,但是安全問題也在極速增加。
破壞這些安全的人利用的正是用戶的信任,當(dāng)用戶使用應(yīng)用時,他們并不清楚背后這些軟件依賴關(guān)系,它們之中有沒有惡意代碼用戶根本不知道,也無法明確是否可信任。
所以聯(lián)盟想通過 WebAssembly 技術(shù)來推動這一個領(lǐng)域的安全性。Bytecode Alliance 將建立起可靠安全的基礎(chǔ),無論在云中、本地桌面,還是小型 IoT 設(shè)備上,都可以安全地使用不受信任的代碼。開發(fā)人員可以以相同的方式使用開源代碼,而不會給用戶帶來風(fēng)險,而這些通用的可重用基礎(chǔ)集可以單獨(dú)使用,也可以嵌入其它庫和應(yīng)用中。
?
具體來說,所有這些因為依賴項而產(chǎn)生的安全問題都是因為不同軟件/模塊/文件有權(quán)限訪問到其它內(nèi)容,而基于 WebAssembly 可以提供某種隔離,這樣就可以安全地運(yùn)行不受信任的代碼。
可以設(shè)計一個類似于 Unix 的小型進(jìn)程或容器和微服務(wù)的架構(gòu),但是這種隔離十分輕量,它們之間的通信也不會比常規(guī)函數(shù)調(diào)用慢很多。
使用這樣的模式,可以封裝單個 WebAssembly 模塊實(shí)例,或者封裝一小部分想要在它們之間共享內(nèi)存之類的模塊實(shí)例。同時也不必放棄強(qiáng)大的編程語言特性,例如函數(shù)簽名和靜態(tài)類型檢查。
Lin 介紹了目前 WebAssembly 的一些技術(shù)方案,包括幾個要點(diǎn):
每個 WebAssembly 模塊默認(rèn)都被沙箱化,默認(rèn)情況下,模塊無權(quán)訪問 API 和系統(tǒng)調(diào)用。
內(nèi)存模型,與直接編譯為 x86 之類的普通二進(jìn)制文件不同,WebAssembly 模塊在其進(jìn)程中無法訪問所有內(nèi)存,而是只能訪問已分配給它的內(nèi)存塊。
接口類型,模塊可以使用更復(fù)雜的值進(jìn)行通信,比如 strings、sequences、records、variants,以及它們的嵌套組合。這使得兩個模塊可以輕松地交換數(shù)據(jù),并且這種方式安全且快速。
具有權(quán)限概念的 API 和系統(tǒng)調(diào)用,以便它們可以為不同的模塊賦予對不同資源的不同權(quán)限,也就是?WASI,WebAssembly 系統(tǒng)接口。它提供了一種方法,可以將不同的模塊彼此隔離,并賦予它們對文件系統(tǒng)特定部分和其它資源的細(xì)粒度權(quán)限,以及對不同系統(tǒng)調(diào)用的細(xì)粒度權(quán)限。
這些是目前已經(jīng)存在于 WebAssembly 技術(shù)中的技術(shù),但目前還沒有辦法將這些安全控制向下傳遞給依賴樹,這需要一種讓父模塊有賦予其依賴關(guān)系同樣的安全控制的方法。
這也就是?Bytecode Alliance?目前在進(jìn)行的工作,計劃采用各個模塊虛擬化的細(xì)粒度形式,研究人員已經(jīng)在研究環(huán)境中驗證了這一想法,目前正在努力將其引入 WebAssembly。
詳細(xì)技術(shù)細(xì)節(jié)查看原博客:
https://hacks.mozilla.org/2019/11/announcing-the-bytecode-alliance
總結(jié)
以上是生活随笔為你收集整理的WebAssembly生态将完善网络安全性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [功能发布]Excel催化剂地图可视化功
- 下一篇: 我们终于可以把 bug 留给子孙后代了