沙箱:概述
作者:anhkgg
日期:2019年10月4日
最早接觸沙箱,對它的印象就是:sandboxie。
因為學(xué)的是安全相關(guān)專業(yè),在網(wǎng)上下載東西非常謹(jǐn)慎,就算通過了殺毒軟件掃描,但是也怕有后門或者其他東西,畢竟我也可以靜態(tài)過掉殺軟。
很多軟件沒有官網(wǎng),各種下載站的東西真的是讓人不放心。
所以在下載某些軟件后,只要不影響功能,基本都會用sandboxie來運行軟件。如果不行,則放到虛擬機里。
所以我對沙箱最初的概念就是:sandboxie,它是一個輕量級虛擬機,軟件的操作都不會影響真正的系統(tǒng),包括文件、注冊表等等資源,可以放肆地想干嘛干嘛。
那時當(dāng)然是不怎么知道sanboxie是怎么做的。
題外話:最近因為微軟的關(guān)系,sanboxie已選宣布免費,后續(xù)還可能開源,感興趣的可以關(guān)注關(guān)注。
沙箱
注:沙箱現(xiàn)在的概念非常雜,某些分析平臺后端也叫沙箱,主要關(guān)注的行為獲取,我這里說的不一樣。
那么沙箱究竟是怎么做的呢?
一句話概括的話就是:沙箱內(nèi)萬物基于重定向。
重定向,顧名思義,就是重新指定方向,也就是說沙箱能夠做到讓沙箱內(nèi)軟件操作的文件、注冊表等路徑重定向到其他位置(沙箱指定位置),這樣軟件本來想操作的資源就不會被訪問或者操作,保證資源的安全性。
這也就是我使用沙箱跑一些不明軟件的原因,萬一軟件被惡意修改過,存在病毒,想破壞系統(tǒng)關(guān)鍵文件,也就不可能了。
言歸正傳。
重定向我們還有個高級的詞叫做“虛擬化”,也可以稱作"隔離",說到底沙箱就是為程序提供一個虛擬化環(huán)境,也就是隔離環(huán)境,并保證程序所有操作都在這個隔離環(huán)境內(nèi)。
再舉一個簡單的例子理解一下重定向。如果程序要刪除c:\boot.ini,沙箱如何做到隔離,保證文件不被刪除呢。
如此就完成了一個簡單的刪除文件的隔離。
一個完備的沙箱一般需要虛擬化(隔離)處理這些東西:
下面對比較重要的幾個內(nèi)容進行一下闡述。
文件重定向
保證沙箱內(nèi)程序創(chuàng)建、修改、刪除、讀取等文件操作都在沙箱內(nèi),不會影響系統(tǒng)中真實的文件。
功能實現(xiàn)方式由很多,主要可以按下面分為:
用戶態(tài)實現(xiàn)較為簡單,語義更清晰,但是強度不夠,有很多方式穿透ntdll.dll這層的文件操作函數(shù),導(dǎo)致文件重定向(隔離)失敗,比如用戶態(tài)通過直接扇區(qū)讀寫來修改文件。
內(nèi)核態(tài)如果使用minifilter來實現(xiàn),強度基本就夠了。
不過sandboxie是在用戶態(tài)實現(xiàn)的。
注冊表重定向
保證沙箱內(nèi)程序創(chuàng)建、修改、刪除、讀取等注冊表操作都在沙箱內(nèi),不會影響系統(tǒng)中真實的注冊表信息。
同樣,和文件重定向一樣,也可以在用戶態(tài)或內(nèi)核態(tài)使用不同的技術(shù)完成,先不細說。
DCOM虛擬化
其實做DCOM虛擬化,最主要是為了防止沙箱內(nèi)程序逃逸。
所謂逃逸,就是沙箱無法控制沙箱內(nèi)程序行為,程序可以繞過沙箱,對系統(tǒng)造成破壞。
逃逸的方式有很多,對于支持DCOM的程序,就是其中一種。
舉個例子,在wordpad.exe(寫字板)插入對象-畫筆圖片,會啟動mspaint,可以看到mspaint是svchost.exe -k DcomLaunch的子進程。
什么意思呢?
一般來說,如果在沙箱中啟動wordpad.exe,wordpad.exe的子進程默認也會進入沙箱,但通過DCOM啟動的mspaint就沒法拉入沙箱了,它不是wordpad.exe子進程。
所以,此時需要虛擬化DCOM,讓沙箱內(nèi)啟動一個DCOM服務(wù),這樣wordpad.exe直接和沙箱內(nèi)DCOM通信,啟動子進程mspaint.exe,作為沙箱內(nèi)DCOM服務(wù)的子進程,自然也被拉入沙箱內(nèi)。
如此做到組織逃逸。
這里面涉及到很多技術(shù)細節(jié),如RPC,后面細說。
服務(wù)虛擬化
其實服務(wù)也是逃逸沙箱的一種方式,但是也可以說如果沙箱不支持服務(wù)虛擬化,某些程序就不能在沙箱內(nèi)正常工作。
所以不管出于那種原因考慮,沙箱都得實現(xiàn)服務(wù)虛擬化。
至于說服務(wù)也能逃逸是怎么回事呢?
很簡單,程序通過服務(wù)API創(chuàng)建一個服務(wù),然后啟動服務(wù),對應(yīng)服務(wù)程序就沒法被沙箱接管,逃出沙箱控制。
實現(xiàn)就是接管服務(wù)相關(guān)API了。
其他
剩下的其他內(nèi)容,暫時也不分析了,如果有時間,后面繼續(xù)分享。
最后
前面說的內(nèi)容都是如何完成虛擬化的東西,一個成熟的沙箱肯定還包括其他很多東西,比如多沙箱的支持、沙箱清理、安全瀏覽器等等,不過這些都不在我們重點討論范圍,畢竟這些只有在實際產(chǎn)品才會考慮的問題,我們這里只是研究沙箱核心相關(guān)的技術(shù)。
另外,針對每種重定向技術(shù)細節(jié)后續(xù)會慢慢詳細分享,敬請關(guān)注。
最后,再來一張簡單的沙箱框圖。
如果覺得內(nèi)容還不錯,歡迎關(guān)注公眾號:漢客兒
總結(jié)
- 上一篇: nextcloud如何填写数据库_Nex
- 下一篇: 让VMware闹心,Nutanix和红帽