日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

沙箱:概述

發布時間:2024/3/26 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 沙箱:概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:anhkgg
日期:2019年10月4日

最早接觸沙箱,對它的印象就是:sandboxie。

因為學的是安全相關專業,在網上下載東西非常謹慎,就算通過了殺毒軟件掃描,但是也怕有后門或者其他東西,畢竟我也可以靜態過掉殺軟。

很多軟件沒有官網,各種下載站的東西真的是讓人不放心。

所以在下載某些軟件后,只要不影響功能,基本都會用sandboxie來運行軟件。如果不行,則放到虛擬機里。

所以我對沙箱最初的概念就是:sandboxie,它是一個輕量級虛擬機,軟件的操作都不會影響真正的系統,包括文件、注冊表等等資源,可以放肆地想干嘛干嘛。

那時當然是不怎么知道sanboxie是怎么做的。

題外話:最近因為微軟的關系,sanboxie已選宣布免費,后續還可能開源,感興趣的可以關注關注。

沙箱

注:沙箱現在的概念非常雜,某些分析平臺后端也叫沙箱,主要關注的行為獲取,我這里說的不一樣。

那么沙箱究竟是怎么做的呢?

一句話概括的話就是:沙箱內萬物基于重定向。

重定向,顧名思義,就是重新指定方向,也就是說沙箱能夠做到讓沙箱內軟件操作的文件、注冊表等路徑重定向到其他位置(沙箱指定位置),這樣軟件本來想操作的資源就不會被訪問或者操作,保證資源的安全性。

這也就是我使用沙箱跑一些不明軟件的原因,萬一軟件被惡意修改過,存在病毒,想破壞系統關鍵文件,也就不可能了。

言歸正傳。

重定向我們還有個高級的詞叫做“虛擬化”,也可以稱作"隔離",說到底沙箱就是為程序提供一個虛擬化環境,也就是隔離環境,并保證程序所有操作都在這個隔離環境內。

再舉一個簡單的例子理解一下重定向。如果程序要刪除c:\boot.ini,沙箱如何做到隔離,保證文件不被刪除呢。

  • 沙箱hook ZwDeleteFile,函數是HOOK_ZwDeleteFile。
  • 在HOOK_ZwDeleteFile中,講路徑c:\boot.ini加上一個前綴c:\sandbox\boot.ini,轉到沙箱內文件路徑。
  • c:\sandbox\boot.ini不存在,會先把c:\boot.ini拷貝到沙箱內。
  • 然后調用原始ZwDeleteFile,刪除c:\sandbox\boot.ini。
  • NTSTATUS HOOK_ZwDeleteFile(POBJECT_ATTRIBUTES ObjectAttributes ) {AddPrefix(ObjectAttributes->ObjectName, L"sandbox");//路徑加上沙箱前綴if(!PathFileExists(ObjectAttributes->ObjectName.Buffer)) {CopyFile();//拷貝進來}return OrigZwDeleteFile(ObjectAttributes); }

    如此就完成了一個簡單的刪除文件的隔離。

    一個完備的沙箱一般需要虛擬化(隔離)處理這些東西:

  • 文件
  • 注冊表
  • DCOM(RPCSS)
  • 服務
  • 其他如:窗口、類名、消息、token等。
  • 進程、線程安全
  • 全局鉤子、注入等防護
  • 驅動加載
  • 下面對比較重要的幾個內容進行一下闡述。

    文件重定向

    保證沙箱內程序創建、修改、刪除、讀取等文件操作都在沙箱內,不會影響系統中真實的文件。

    功能實現方式由很多,主要可以按下面分為:

  • 用戶態實現,hook ntdll.dll文件相關函數,然后路徑重定向
  • 內核態實現,ssdt hook文件相關函數,或者minifilter等技術
  • 用戶態實現較為簡單,語義更清晰,但是強度不夠,有很多方式穿透ntdll.dll這層的文件操作函數,導致文件重定向(隔離)失敗,比如用戶態通過直接扇區讀寫來修改文件。

    內核態如果使用minifilter來實現,強度基本就夠了。

    不過sandboxie是在用戶態實現的。

    注冊表重定向

    保證沙箱內程序創建、修改、刪除、讀取等注冊表操作都在沙箱內,不會影響系統中真實的注冊表信息。

    同樣,和文件重定向一樣,也可以在用戶態或內核態使用不同的技術完成,先不細說。

    DCOM虛擬化

    其實做DCOM虛擬化,最主要是為了防止沙箱內程序逃逸。

    所謂逃逸,就是沙箱無法控制沙箱內程序行為,程序可以繞過沙箱,對系統造成破壞。

    逃逸的方式有很多,對于支持DCOM的程序,就是其中一種。

    舉個例子,在wordpad.exe(寫字板)插入對象-畫筆圖片,會啟動mspaint,可以看到mspaint是svchost.exe -k DcomLaunch的子進程。

    什么意思呢?

    一般來說,如果在沙箱中啟動wordpad.exe,wordpad.exe的子進程默認也會進入沙箱,但通過DCOM啟動的mspaint就沒法拉入沙箱了,它不是wordpad.exe子進程。

    所以,此時需要虛擬化DCOM,讓沙箱內啟動一個DCOM服務,這樣wordpad.exe直接和沙箱內DCOM通信,啟動子進程mspaint.exe,作為沙箱內DCOM服務的子進程,自然也被拉入沙箱內。

    如此做到組織逃逸。

    這里面涉及到很多技術細節,如RPC,后面細說。

    服務虛擬化

    其實服務也是逃逸沙箱的一種方式,但是也可以說如果沙箱不支持服務虛擬化,某些程序就不能在沙箱內正常工作。

    所以不管出于那種原因考慮,沙箱都得實現服務虛擬化。

    至于說服務也能逃逸是怎么回事呢?

    很簡單,程序通過服務API創建一個服務,然后啟動服務,對應服務程序就沒法被沙箱接管,逃出沙箱控制。

    實現就是接管服務相關API了。

    其他

    剩下的其他內容,暫時也不分析了,如果有時間,后面繼續分享。

    最后

    前面說的內容都是如何完成虛擬化的東西,一個成熟的沙箱肯定還包括其他很多東西,比如多沙箱的支持、沙箱清理、安全瀏覽器等等,不過這些都不在我們重點討論范圍,畢竟這些只有在實際產品才會考慮的問題,我們這里只是研究沙箱核心相關的技術。

    另外,針對每種重定向技術細節后續會慢慢詳細分享,敬請關注。

    最后,再來一張簡單的沙箱框圖。

    如果覺得內容還不錯,歡迎關注公眾號:漢客兒

    總結

    以上是生活随笔為你收集整理的沙箱:概述的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。