最早接觸沙箱時(shí),覺(jué)得他就是跟虛擬機(jī)一樣的作用剧浸,或者說(shuō)是一個(gè)影子系統(tǒng)
因此我最初認(rèn)為沙箱,sandboxie矗钟,它就是一個(gè)輕量級(jí)虛擬機(jī)唆香,軟件的操作都不會(huì)影響真正的系統(tǒng),包括文件吨艇、注冊(cè)表等等資源躬它,可以在里面想干嘛就干嘛
因?yàn)橹皩W(xué)的是網(wǎng)絡(luò)安全相關(guān)專業(yè),在網(wǎng)上下載東西非常謹(jǐn)慎东涡,就算通過(guò)了殺毒軟件掃描冯吓,但是也怕有后門或者其他東西,畢竟可以通過(guò)靜態(tài)逃過(guò)殺毒軟件
很多軟件沒(méi)有官網(wǎng)软啼,讓人用著不是很放心桑谍,或者一些軟件有官網(wǎng)但是正版太貴支持不起,只能在網(wǎng)上尋求破解版祸挪,但是呢破解版不知道別人會(huì)不會(huì)在軟件里做過(guò)什么
所以很多時(shí)候锣披,在網(wǎng)上下載的文件只要不影響使用的情況下我會(huì)將其放到虛擬機(jī)或者沙箱里
沙箱概述
但是現(xiàn)在對(duì)于沙箱的概念有些變化了
公司的后端分析平臺(tái)也叫沙箱,準(zhǔn)確一點(diǎn)來(lái)說(shuō)是云沙箱,主要用于上網(wǎng)行為管理等
沙箱的原理:重定向
相信有了解過(guò)Linux的朋友對(duì)重定向很熟悉雹仿,顧名思義增热,就是重新指定方向,也就是說(shuō)沙箱能夠做到讓沙箱內(nèi)軟件操作的文件胧辽、注冊(cè)表等路徑重定向到其他位置(沙箱指定位置)峻仇,這樣軟件操作的資源就不會(huì)被訪問(wèn)或者操作,保證資源的安全性
比如我從網(wǎng)上下載的軟件有問(wèn)題邑商,他可能有留有后門摄咆、植入了病毒等等,當(dāng)我使用該文件時(shí)他可以拿到我電腦的管理員權(quán)限進(jìn)而控制我的電腦人断。但是沙箱重定向后吭从,即使軟件被惡意修改、存在病毒恶迈,想破壞系統(tǒng)關(guān)鍵文件涩金,也不太可能了
這其實(shí)就跟使用影子系統(tǒng)是一個(gè)道理,影子系統(tǒng)是一個(gè)虛構(gòu)的環(huán)境暇仲,不管你在里面做了什么步做,當(dāng)你關(guān)閉后所有操作都不會(huì)保存也不會(huì)對(duì)物理機(jī)造成任何傷害。因此沙箱在運(yùn)行程序時(shí)其實(shí)就是為程序提供了一個(gè)虛擬化的環(huán)境奈附,并保證該程序的所有操作都會(huì)在這個(gè)虛擬化環(huán)境里面進(jìn)行
一個(gè)完備的沙箱一般需要處理這些東西
- 文件
- 注冊(cè)表
- DCOM(RPC)
- 進(jìn)程全度、線程
- token、類名桅狠、消息
- 驅(qū)動(dòng)加載
再舉一個(gè)簡(jiǎn)單的例子理解一下重定向讼载。如果程序要?jiǎng)h除c:boot.ini,沙箱如何做到隔離中跌,保證文件不被刪除呢 - 沙箱hook ZwDeleteFile,函數(shù)是HOOK_ZwDeleteFile
- 在HOOK_ZwDeleteFile中菇篡,講路徑c:boot.ini加上一個(gè)前綴c:sandboxboot.ini漩符,轉(zhuǎn)到沙箱內(nèi)文件路徑
- c:sandboxboot.ini不存在,會(huì)先把c:boot.ini拷貝到沙箱內(nèi)
- 然后調(diào)用原始ZwDeleteFile驱还,刪除c:sandboxboot.ini
NTSTATUS HOOK_ZwDeleteFile(
POBJECT_ATTRIBUTES ObjectAttributes
) {
AddPrefix(ObjectAttributes->ObjectName, L"sandbox");//路徑加上沙箱前綴
if(!PathFileExists(ObjectAttributes->ObjectName.Buffer)) {
CopyFile();//拷貝進(jìn)來(lái)
}
return OrigZwDeleteFile(ObjectAttributes);
}
DCOM虛擬化
DCOM虛擬化最主要的作用是為了防止沙箱內(nèi)程序逃逸
所謂逃逸嗜暴,就是沙箱無(wú)法控制沙箱內(nèi)程序行為,程序可以繞過(guò)沙箱议蟆,對(duì)系統(tǒng)造成破壞