谷歌開(kāi)源沙箱式 API,可助開(kāi)發(fā)者免受惡意用戶的輸入和漏洞利用
近日,谷歌開(kāi)源了 Sandboxed API(沙箱式 API)。該項(xiàng)目用于在 Linux 系統(tǒng)上運(yùn)行的 C/C++ 庫(kù),是谷歌公司內(nèi)部多年來(lái)一直在數(shù)據(jù)中心使用的工具,可以幫助開(kāi)發(fā)人員免受惡意用戶的輸入和漏洞利用。
Sandboxed API 怎么工作?
Sandboxed API 目前是針對(duì)用 C 語(yǔ)言編寫(xiě)的軟件庫(kù)實(shí)現(xiàn)的,未來(lái)可能增加更多編程語(yǔ)言的支持。
從高層次的角度看,Sandboxed API 將要加入沙箱的庫(kù)和其調(diào)用者分成兩個(gè)獨(dú)立的操作系統(tǒng)進(jìn)程:主機(jī)二進(jìn)制文件和沙箱。具體的工作流程是:實(shí)際的庫(kù)調(diào)用由主機(jī)端的 API 對(duì)象進(jìn)行編組,通過(guò)進(jìn)程間的通信發(fā)送到沙箱,沙箱的 RPC stub 會(huì)進(jìn)行解組,并將調(diào)用轉(zhuǎn)發(fā)到原始庫(kù)。
其中,API 對(duì)象(即圖中的 SAPI 對(duì)象)和 RPC stub 都由項(xiàng)目提供,前者由接口生成器自動(dòng)生成。用戶只需提供沙盒策略、允許底層庫(kù)進(jìn)行的一組系統(tǒng)調(diào)用,以及允許訪問(wèn)和使用的資源。這些準(zhǔn)備好了之后,基于沙盒 API 的庫(kù)就可以輕松地在其他項(xiàng)目中重用了。
生成的 SAPI 對(duì)象的 API 類(lèi)似于原始庫(kù)的 API,不過(guò)會(huì)有額外的代碼出現(xiàn)。這些代碼用來(lái)設(shè)置沙箱,以及將內(nèi)存?zhèn)魅牒蛡鞒錾诚洹5酥?,代碼流保持不變。