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