是什么
沙盒(sandbox),另稱沙箱,是一種按照安全策略限制程序行為的執行環境。“沙盒”技術的實踐運用流程是:讓疑似病毒文件的可疑行為在虛擬的“沙盒”里充分運行,“沙盒”會記下它的每一個動作;當疑似病毒充分暴露了其病毒屬性后,“沙盒”就會執行“回滾”機制:將病毒的痕跡和動作抹去,恢復系統到正常狀態。
PS:sandbox並不是sandboxie,sandboxie是一種專業沙盒軟件。
安全策略
1. 不能運行任何本地的的可執行程序。
2. 不能從本地計算機文件系統中讀取任何信息,也不能往本地計算機文件系統中寫入任何信息。
3. 不能查看除Java版本信息和少數幾個無害的操作系統詳細信息外的任何有關本地計算機的信息。特別是,在沙箱中的代碼不能查看用戶名、E-mail地址等信息。
4. 遠程加載的程序不能與除下載程序所在的服務器之外的任何主機通信,這個服務器被稱為源主機(originating host)。這條規則通常稱為“遠程代碼只能與家人通話”這條規則將會確保用戶不會被代碼探查到內部網絡資源(在Java SE 6 中,Java Web Start 應用程序可以與其他網絡連接,但必須得到用戶的同意)。
簡單說就是不能寫,不能讀,不給看。
以Chrome為例,Chrome采用的是多進程結構,進程類型主要有以下幾種:
1. 主進程:負責所有資源管理、系統交互,前者包括bookmark、cookie、history管理等;后者包括屏幕繪制、處理keyboard/mouse輸入、internet連接等。(不在Chrome的sandbox中運行。)
2. web渲染進程:負責html解析、javascript執行、image decoding、頁面布局等所有和網頁相關的任務。所有的此類進程都強制在sandbox中運行。和用戶、系統的聯系不直接進行(也無法直接進行),而是通過IPC(進程間通信)向主進程發送請求。
3. plugin進程:每個plugin對應一個此類進程,動態地創建、銷毀。目前的plugin大都需要直接操作系統資源,比如flash plugin會打開攝像頭、下載臨時文件到硬盤等,所以plugin進程不在sandbox中運行。
4. extension進程:一種特殊的web渲染進程。
PS:extension本身可以算是網頁,安裝了后是運行在沙盒里面的,但是點擊擴展按鈕后可能會啟動額外的進程,這時候所進行的操作就不一定在沙箱內了。
總結起來就是只有和網頁相關的任務(渲染進程)運行在Chrome的沙盒中。Chrome的沙盒是依賴操作系統本身提供的機制實現,根據操作系統本身提供了相關的API,限制進程的權限,比如讓進程無法訪問任何文件、無法獲得用戶輸入、無法hook其他進程、無法創建子進程等,Chrome的sandbox最大化的利用了這些限制。
限制:
1. 它主要防護惡意代碼對系統的破壞,對其它類型的安全問題辦法不多。比如:惡意代碼可以從主進程獲得所有的cookie,並通過主進程發送出去。
2. 如果操作系統API本身存在漏洞而被攻破,Chrome的sandbox也自然被穿。
3. plugin進程不受sandbox保護,所以利用plugin漏洞的惡意代碼在Chrome上都能發作。
PS:該文只是做一個筆記,只學習,如果有誤,請指正。
