在計算機安全領域,沙箱(Sandbox)是一種程序的隔離運行機制,其目的是限制不可信進程的權限。沙箱技術經常被用於執行未經測試的或不可信的客戶程序。為了避免不可信程序可能破壞其它程序的運行,沙箱技術通過為不可信客戶程序提供虛擬化的磁盤、內存以及網絡資源,而這種虛擬化手段對客戶程序來說是透明的。由於沙箱裡的資源被虛擬化(或被間接化),所以沙箱裡的不可信程序的惡意行為往往會被限制在沙箱中。
沙箱技術一直是系統安全領域的挑戰,不存在說哪一種方案是足夠安全的。沙箱技術方案通常是需要結合多種系統安全技術來實現,采用防御縱深(Defence in Depth)的設計原則,築建多道防御屏障,盡可能地將安全風險將為最低。下面我們主要討論如何利用Linux kernel所提供的安全功能來建立有效的沙箱技術。
在討論之前,我們簡單回顧一下Linux安全模型相關的內容(假設讀者已經非常熟悉):
(1) 每個進程都有自己的地址空間;
(2) MMU硬件機制來保證地址空間的隔離;
(3) Kernel是系統的TCB(Trusted Computing Base),是安全策略的制定者和執行者;
(4) 進程是最小的權限邊界;
(5) root具有最高權限,它能控制一切;
(6) 其它用戶受DAC(Discretionary Access Control)限制,如文件系統的UGO權限控制。
進程是最小的權限邊界,其根本原因是MMU能保證進程地址空間的隔離。
Linux Kernel還提供了與進程降權(drop privilege)相關的一些功能:
1. setuid
2. POSIX.1e capability
3. chroot jail
4. Quota control (eg, cgroup, namespace)
5. Linux Container
6. Linux Security Module (LSM)
下篇我們會介紹如何在實踐中利用這些訣竅來構建一個有效的sandbox。
見