【Chromium中文文檔】Chrome/Chromium沙箱 - 安全架構(gòu)設(shè)計(jì)

轉(zhuǎn)載請(qǐng)注明出處:
https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh/General_Architecture/Sandbox.html

全書(shū)地址
Chromium中文文檔 for https://www.chromium.org/developers/design-documents
持續(xù)更新ing,歡迎star
gitbook地址:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//
github地址: https://github.com/ahangchen/Chromium_doc_zh

安全是Chromium最重要的目標(biāo)之一虽填。安全的關(guān)鍵在于理解下面這點(diǎn):在我們完整地理解了系統(tǒng)在所有可能的輸入組合下表現(xiàn)出的行為之后,我們才能夠真的保證系統(tǒng)安全墓陈。對(duì)于像Chromium這樣龐大而多樣化的代碼庫(kù),推理它的各個(gè)部分可能的行為的組合幾乎是不可能的庸毫。沙箱的目標(biāo)是提供這樣一種保證:不論輸入什么飒赃,保證一段代碼最終能或不能做的事情载佳。

沙盒利用操作系統(tǒng)提供的安全性蔫慧,允許不能對(duì)計(jì)算機(jī)做出持久性改變或者訪問(wèn)持續(xù)變化的信息的代碼的執(zhí)行姑躲。沙箱提供的架構(gòu)和具體保證依賴(lài)于操作系統(tǒng)黍析。這個(gè)文檔覆蓋了Windows實(shí)現(xiàn)與一般的設(shè)計(jì)橄仍。Linux實(shí)現(xiàn)和OSX實(shí)現(xiàn)也會(huì)在這里描述侮繁。

如果你不想要閱讀這整個(gè)文檔宪哩,你可以閱讀Sandbox FAQ锁孟。沙箱保護(hù)與不保護(hù)的內(nèi)容也可以在FAQ中找到品抽。

設(shè)計(jì)原則

  • 不要重新發(fā)明輪子: 用更好的安全模型擴(kuò)展操作系統(tǒng)內(nèi)核很有誘惑力圆恤。但不要這樣做盆昙。讓操作系統(tǒng)在所控制的對(duì)象上應(yīng)用它的安全策略。另一方面秕磷,創(chuàng)建有自定義安全模型的應(yīng)用程序?qū)蛹?jí)對(duì)象(抽象)是可以的澎嚣。
  • 最小權(quán)限原則: 這既應(yīng)該用于沙箱代碼也應(yīng)該用于控制沙箱的代碼币叹。換言之模狭,即使用于不能提升權(quán)限到超級(jí)用戶,沙箱也需要能夠工作驱富。
  • 假定沙盒代碼是惡意代碼: 出于威脅建模的目的褐鸥,我們認(rèn)為沙箱中的代碼一旦執(zhí)行路徑越過(guò)了一些main()函數(shù)的早期調(diào)用叫榕,那么它是有害的(即寓落,它會(huì)運(yùn)行有害代碼)荞下,實(shí)踐中尖昏,在第一外部輸入被接收時(shí)抽诉,或者在進(jìn)入主循環(huán)前掸鹅,這就可能發(fā)生。
  • 敏感: 非惡意代碼不會(huì)嘗試訪問(wèn)它不能獲得的資源荷鼠。在這種情況下允乐,沙箱產(chǎn)生的性能影響應(yīng)該接近零牍疏。一旦敏感資源需要以一種控制行為訪問(wèn)時(shí)鳞陨,一點(diǎn)性能損失是必要的厦滤。這是在操作系統(tǒng)安全合適事情情況下的常見(jiàn)例子掏导。
  • 仿真不是安全: 仿真和虛擬機(jī)方案本身不能提供安全羽峰。沙箱不會(huì)出于安全目的值纱,依賴(lài)于代碼仿真计雌,或者代碼轉(zhuǎn)換凿滤,或者代碼修復(fù)翁脆。

沙箱windows架構(gòu)

Windows沙箱是一種僅用戶模式可用的沙箱反番。沒(méi)有特殊的內(nèi)核模式驅(qū)動(dòng)罢缸,用戶不需要為了沙箱正確運(yùn)行而成為管理員爵川。沙箱設(shè)計(jì)了32位和64位兩種進(jìn)程寝贡,在所有windows7和windows10之間的所有操作系統(tǒng)版本都被測(cè)試過(guò)圃泡。

沙箱在進(jìn)程級(jí)粒度進(jìn)行運(yùn)作。凡是需要沙箱化的任何東西需要放到獨(dú)立進(jìn)程里運(yùn)行澡匪。最小化沙箱配置有兩個(gè)過(guò)程:一個(gè)是被成為broker的權(quán)限控制器,以及被稱(chēng)為target的一個(gè)或多個(gè)沙箱化進(jìn)程甫匹。在整個(gè)文檔和代碼中這兩個(gè)詞有著上述兩種精確的內(nèi)涵兵迅。沙箱是一個(gè)必須被鏈接到broker和target可執(zhí)行程序的靜態(tài)庫(kù)恍箭。

broker進(jìn)程

在Chromium中扯夭,broker總是瀏覽進(jìn)程交洗。broker构拳,廣泛概念里斗埂,是一個(gè)權(quán)限控制器蜜笤,沙箱進(jìn)程活動(dòng)的管理員把兔。broker進(jìn)程的責(zé)任是:

  1. 指定每個(gè)目標(biāo)進(jìn)程中的策略
  2. 生成目標(biāo)進(jìn)程
  3. 維護(hù)沙箱策略引擎服務(wù)
  4. 維護(hù)沙箱攔截管理器
  5. 維護(hù)沙箱IPC服務(wù)(與target進(jìn)程的通信)
  6. 代表目標(biāo)進(jìn)程執(zhí)行策略允許的操作。

broker應(yīng)該始終比所有它生成的目標(biāo)進(jìn)程還要活的久暖混。沙箱IPC是一種低級(jí)別的機(jī)制(與ChromiumIPC機(jī)制不同)晾咪,這些調(diào)用會(huì)被策略評(píng)估贮配。策略允許的調(diào)用會(huì)由broker執(zhí)行谍倦,結(jié)果會(huì)通過(guò)同樣的IPC返回給目標(biāo)進(jìn)程。攔截管理器是為應(yīng)該通過(guò)IPC轉(zhuǎn)發(fā)給broker的windows API調(diào)用提供補(bǔ)丁泪勒。

目標(biāo)進(jìn)程

在Chromium中昼蛀,渲染器總是target進(jìn)程,除非瀏覽進(jìn)程被指定了--no-sandbox命令行參數(shù)圆存。target進(jìn)程維護(hù)所有將在沙箱中允許的代碼叼旋,以及沙箱基礎(chǔ)設(shè)施的客戶端:

  1. 所有代碼沙箱化
  2. 沙箱IPC客戶端
  3. 沙箱策略引擎客戶端
  4. 沙箱攔截

第2,3,4條是沙箱庫(kù)的一部分,與需要被沙箱化的代碼關(guān)聯(lián)沦辙。

攔截器(也稱(chēng)為hook)是通過(guò)沙箱轉(zhuǎn)發(fā)的Windows API調(diào)用油讯。由broker重新發(fā)出API 調(diào)用,并返回結(jié)果或者干脆終止調(diào)用隅俘。攔截器+IPC機(jī)制不能提供安全性蒙畴;它的目的是在沙箱中的代碼因沙箱限制不能修改時(shí)蹬音,提供兼容性永部。為了節(jié)省不必要的IPC凫佛,在進(jìn)行IPC調(diào)用前毫炉,target中進(jìn)程策略也會(huì)被評(píng)估,盡管這不是用作安全保障趾疚,但這僅僅是一個(gè)速度優(yōu)化魄缚。

期望在未來(lái)大部分plugin會(huì)運(yùn)行在target進(jìn)程里咆瘟。

沙箱限制

在它的核心桩皿,沙箱依賴(lài)于4個(gè)Windows提供的機(jī)制:

  • 限定的令牌
  • Windows工作對(duì)象
  • Windows桌面對(duì)象
  • Windows Vista及以上:集成層

這些機(jī)制在保護(hù)操作系統(tǒng),操作系統(tǒng)的限制苞氮,用戶提供的數(shù)據(jù)上相當(dāng)?shù)母咝萁遥疤崾牵?/p>

  • 所有可以安全化的資源都有一個(gè)比null更好的安全描述符。換言之刮便,沒(méi)有關(guān)鍵資源會(huì)有錯(cuò)誤的安全配置谆沃。
  • 計(jì)算機(jī)并未被惡意軟件所損害据沈。
  • 第三方軟件不能弱化系統(tǒng)安全孔祸。

** 注意:上面具體的措施以及在內(nèi)核外的措施會(huì)在下面的“進(jìn)程輕量化”部分闡述。**

令牌

其他類(lèi)似的沙箱項(xiàng)目面臨的一個(gè)問(wèn)題是,限制程度應(yīng)當(dāng)如何,才能使得令牌和作業(yè)同時(shí)還保持有正常的功能永票。在Chromium沙箱里臭埋,對(duì)于Windows XP最嚴(yán)格的令牌如下:

普通組

登錄 SID : 強(qiáng)制

其他所有SID : 僅拒絕, 強(qiáng)制

限制組

S-1-0-0 : 強(qiáng)制

特權(quán)

無(wú)

正如上面所述的警告募胃,如果操作系統(tǒng)授予了這樣一個(gè)令牌,幾乎不可能找到存在的資源状勤。只要磁盤(pán)根目錄有著非空的安全性,即使空安全的文件也不能被訪問(wèn)日缨。在Vista中,最嚴(yán)格的令牌也是這樣的盅蝗,但它也包括了完整性級(jí)別較低的標(biāo)簽故痊。Chromium渲染器通常使用這種令牌,這意味著渲染器進(jìn)程使用的大部分資源已經(jīng)由瀏覽器獲取,并且他們的句柄被復(fù)制到了渲染器進(jìn)程中岂膳。

注意,令牌不是從匿名令牌或來(lái)賓令牌而來(lái)的,它繼承自用戶的令牌候址,因此與用戶的登錄相關(guān)聯(lián)既鞠。因此荆萤,系統(tǒng)或域名擁有的任何備用的審計(jì)仍然可以使用链韭。

根據(jù)設(shè)計(jì)旋讹,沙箱令牌不能保護(hù)下面這些不安全資源:

  • 掛載的FAT或FAT32卷: 它們上面的安全描述符是有效空。在target中運(yùn)行的惡意軟件可以讀寫(xiě)這些磁盤(pán)空間瓦糕,因?yàn)閻阂廛浖梢圆聹y(cè)或者推出出它們的路徑。
  • TCP/IP: Windows 200和Windows XP(但在Vista中不會(huì))中的TCP/IP socket的安全是有效空。使得惡意代碼與任何主機(jī)收發(fā)網(wǎng)絡(luò)包成為可能。

關(guān)于Windows 令牌對(duì)象的更多信息可以在底部參考文獻(xiàn)[02]查看壹蔓。

作業(yè)對(duì)象

target進(jìn)程也運(yùn)行著一個(gè)作業(yè)對(duì)象趟妥。使用這個(gè)Windows機(jī)制,一些有趣的佣蓉,不擁有傳統(tǒng)對(duì)象或者不關(guān)聯(lián)安全描述符的全局限制可以被強(qiáng)制執(zhí)行:

  • 禁止用SystemParametersInfo()做用戶共享的系統(tǒng)范圍的修改披摄,這可以用于切換鼠標(biāo)按鈕或者設(shè)置屏幕保護(hù)程序超時(shí)
  • 禁止創(chuàng)建或修改桌面對(duì)象
  • 禁止修改用戶共享的顯示設(shè)置,比如分辨率和主顯示器
  • 禁止讀寫(xiě)剪貼板
  • 禁止設(shè)置全局Windows hook(使用SetWindowsHookEx())
  • 禁止訪問(wèn)全局原子表
  • 禁止訪問(wèn)在作業(yè)對(duì)象外創(chuàng)建的USER句柄
  • 單活躍的進(jìn)程限制(不允許創(chuàng)建子進(jìn)程)

Chromium渲染器在激活所有這些限制的情況下允許偏螺。每個(gè)渲染器運(yùn)行在自己的作業(yè)對(duì)象里行疏。使用作業(yè)對(duì)象,沙箱可以(但當(dāng)前還不行)避免:

  • 過(guò)度使用CPU周期
  • 過(guò)度使用內(nèi)存
  • 過(guò)度使用IO

有關(guān)Windows作業(yè)對(duì)象的詳細(xì)信息可以在底部參考文獻(xiàn)[1]中找到套像。

額外的桌面對(duì)象

令牌和作業(yè)對(duì)象定義來(lái)一個(gè)安全邊界:即酿联,所有的進(jìn)程有著相同的令牌,同一個(gè)作業(yè)對(duì)象中所有進(jìn)程也處于同樣的安全上下文。然而贞让。一個(gè)難以理解的事實(shí)是相同桌面上都有窗口上的應(yīng)用程序也處于相同的安全上下文中周崭,因?yàn)槭瞻l(fā)window消息是不受任何安全檢查。通過(guò)桌面對(duì)象發(fā)送消息是不允許的喳张。這是臭名昭著的“shatter”攻擊的來(lái)源续镇,也是服務(wù)不應(yīng)該在交互桌面上托管窗口的原因。Windows桌面是一個(gè)常規(guī)的內(nèi)核對(duì)象销部,它可以被創(chuàng)建然后分配一個(gè)安全描述符摸航。

在標(biāo)準(zhǔn)Windows安裝中,至少兩個(gè)桌面會(huì)與交互窗口站相關(guān)聯(lián)舅桩,一個(gè)是常規(guī)(默認(rèn))桌面酱虎,另一個(gè)是登錄桌面。沙箱創(chuàng)建了第三個(gè)與所有target進(jìn)程關(guān)聯(lián)的桌面擂涛。這個(gè)桌面永遠(yuǎn)不可見(jiàn)读串,也不可交互,它有效地隔離了沙箱化進(jìn)程撒妈,使其不能窺探用戶的交互恢暖,不能在更多特權(quán)的環(huán)境下發(fā)送消息到Windows。

額外的桌面對(duì)象唯一的優(yōu)點(diǎn)是它從一個(gè)隔離的池使用接近4MB的內(nèi)存狰右,在Vista里可能更多杰捂。

信用等級(jí)

信用等級(jí)在Windows Vista及其之后的版本可用。它們不會(huì)用嚴(yán)格的方式定義安全的邊界挟阻,但他們確實(shí)提供了一種強(qiáng)制訪問(wèn)控制(MAC)琼娘,并且作為微軟IE沙箱的基礎(chǔ)而存在。

信用等級(jí)由一個(gè)特殊的SID和ACL對(duì)的集合實(shí)現(xiàn)附鸽,它們代表了五種遞增等級(jí):不受信任的脱拼,低級(jí)的,中級(jí)的坷备,高級(jí)的熄浓,系統(tǒng)的。如果一個(gè)對(duì)象處于比請(qǐng)求令牌更高級(jí)的信用等級(jí)省撑,訪問(wèn)它就會(huì)受限赌蔑。信用等級(jí)也實(shí)現(xiàn)了用戶界面權(quán)限隔離,這種隔離應(yīng)用了信用等級(jí)規(guī)則竟秫,讓同一個(gè)桌面中的不同進(jìn)程可用交換窗口消息娃惯。

默認(rèn)情況下,令牌可以讀高信用等級(jí)的對(duì)象肥败,但不能寫(xiě)趾浅。大多數(shù)桌面應(yīng)用運(yùn)行在中信用等級(jí)(MI)愕提,而較不受信任的進(jìn)程像IE保護(hù)模式和我們自己的沙箱運(yùn)行在低信用等級(jí)(LI)。一個(gè)低信用等級(jí)模式的令牌只可以訪問(wèn)下面這些共享資源:

  • 對(duì)大部分文件可以做讀訪問(wèn)
  • 對(duì)%USER PROFILE%皿哨、AppData浅侨、LocalLow目錄的寫(xiě)訪問(wèn)
  • 讀注冊(cè)表的大部分內(nèi)容
  • 對(duì)HKEY_CURRENT_USER\Software\AppDataLow目錄做寫(xiě)訪問(wèn)
  • 剪貼板(為某些格式做復(fù)制粘貼)
  • 遠(yuǎn)程過(guò)程調(diào)用(RPC)
  • TCP/IP Socket
  • 通過(guò)ChangeWindowMessageFilter暴露窗口消息
  • 通過(guò)LI標(biāo)簽共享內(nèi)存
  • 擁有LI啟動(dòng)激活的權(quán)限,訪問(wèn)COM接口
  • 通過(guò)LI標(biāo)簽暴露的命名管道

你會(huì)注意到之前描述的令牌屬性证膨,工作對(duì)象如输,額外的桌面限制性更大,并且事實(shí)上會(huì)阻礙對(duì)上面列出的所有東西的訪問(wèn)央勒。所以不见,信用等級(jí)比其他措施更寬松,但這也可以被視為一種對(duì)深度防御的否定崔步,并且脖祈,它的使用對(duì)性能或者資源使用不會(huì)有明顯的影響。

更多關(guān)于信用等級(jí)的信息可以在底部參考文獻(xiàn)[03]找到刷晋。

進(jìn)程輕量化策略

大多數(shù)進(jìn)程輕量化策略可以可以通過(guò)SetProcessMitigationPolicy方法應(yīng)用于Mtarget進(jìn)程。沙箱使用這個(gè)API為target進(jìn)程設(shè)置不同的各種策略慎陵,以強(qiáng)化安全特性眼虱。

重定位圖像:

  • >= Win8
  • 在進(jìn)程中對(duì)所有圖片做隨機(jī)地址加載(ASLR)(必須被所有圖片支持)

堆之終結(jié):

  • >= Win8
  • 結(jié)束Windows堆占用進(jìn)程

自底向上ASLR:

  • >= Win8
  • 設(shè)置隨機(jī)的下界作為進(jìn)程的最小用戶地址

高熵值A(chǔ)SLR:

  • >= Win8
  • 為自底向上ASLR增加隨機(jī)等級(jí)到1TB。

嚴(yán)格句柄檢查:

  • >= Win8
  • 對(duì)于惡意句柄引用立即拋出異常

Win32k.sys鎖定:

  • >= Win8
  • ProcessSystemCallDisablePolicy席纽,允許選擇性關(guān)閉target進(jìn)程可用的系統(tǒng)調(diào)用
  • 渲染器進(jìn)程現(xiàn)在把這個(gè)功能設(shè)置到了DisallowWin32kSystemCalls上捏悬,這意味著win32k.sys用戶模式的調(diào)用不再被允許。這極大地減少了來(lái)自渲染器的可用的內(nèi)核攻擊润梯。查看這里獲取更多細(xì)節(jié)过牙。

App容器(Low Box Token):

  • >= Win8

  • 在Windows里,這由內(nèi)核層的一個(gè)Low Box Token實(shí)現(xiàn)纺铭,它是有著限制優(yōu)先權(quán)(通常只有SeChangeNotifyPrivilege和 SeIncreaseWorkingSetPrivilege)的一個(gè)剝離版本寇钉,運(yùn)行在低信用等級(jí),這個(gè)容器還由一組“能力”實(shí)現(xiàn)舶赔,它們可以映射到進(jìn)程允許/拒絕做的事情(查看MSDN獲取更詳細(xì)的描述)扫倡。從沙箱角度看,最有趣的能力是否決是對(duì)網(wǎng)絡(luò)的訪問(wèn)竟纳,如果令牌是Low Box Token撵溃,INTERNET_CLIENT能力沒(méi)有出現(xiàn)的話,就會(huì)執(zhí)行網(wǎng)絡(luò)檢查锥累。

  • 因此沙箱對(duì)已有的限制令牌缘挑,添加了Low Box相關(guān)的屬性,并且不授予任何能力桶略,以獲得沒(méi)有來(lái)自沙箱化進(jìn)程的網(wǎng)絡(luò)訪問(wèn)這樣的額外的網(wǎng)絡(luò)保護(hù)语淘。

禁用字體加載:

  • >= Win10
  • ProcessFontDisablePolicy

禁用遠(yuǎn)程設(shè)備圖像加載:

  • >= Win10 TH2
  • ProcessImageLoadPolicy
  • 例:網(wǎng)絡(luò)資源的UNC路徑

禁用“強(qiáng)制低信用等級(jí)”的圖像加載:

  • >= Win10 TH2
  • ProcessImageLoadPolicy
  • 例:臨時(shí)Internet文件

禁用額外的子進(jìn)程創(chuàng)建:

  • >= Win10 TH2
  • 如果作業(yè)等級(jí)<= JOB_LIMITED_USER诲宇,用UpdateProcThreadAttribute()設(shè)置PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY為PROCESS_CREATION_CHILD_PROCESS_RESTRICTED。
  • 這是額外層面的防御亏娜,使得作業(yè)層可以從外部打破焕窝。[引用: ticket, Project Zero blog.]

其他警告

操作系統(tǒng)可能有一些bug。令人感興趣的是Windows API中允許跳過(guò)常規(guī)安全檢查的一些bug维贺。如果存在這樣的bug它掂,惡意軟件能夠穿透安全限制,broker策略溯泣,并且可能危害計(jì)算機(jī)虐秋。在Windows環(huán)境下,沒(méi)有實(shí)用的方式可以避免沙箱中的代碼調(diào)用系統(tǒng)服務(wù)垃沦。

另外客给,第三方軟件,尤其是反病毒解決方案肢簿,可能創(chuàng)建新的攻擊角度靶剑。最麻煩的是為了使用一些(通常是系統(tǒng)不愿其使用的)功能,注入動(dòng)態(tài)鏈接庫(kù)的應(yīng)用程序池充。這些動(dòng)態(tài)鏈接庫(kù)也會(huì)注入到沙箱進(jìn)程中桩引。在最好的情況下,他們會(huì)產(chǎn)生故障收夸,在最糟的情況下坑匠,可能為其他進(jìn)程或文件系統(tǒng)本身造出后門(mén),讓精心設(shè)計(jì)的惡意軟件逃離沙箱卧惜。

沙箱策略

應(yīng)用與target進(jìn)程的真實(shí)限制通過(guò)策略設(shè)置厘灼。這些策略只是一種broker調(diào)用的編程接口,它們定義了限制與權(quán)限咽瓷。四個(gè)函數(shù)控制這種限制设凹,對(duì)應(yīng)四種Windows機(jī)制:

  • TargetPolicy::SetTokenLevel()
  • TargetPolicy::SetJobLevel()
  • TargetPolicy::SetIntegrityLevel()
  • TargetPolicy::SetDesktop()

前三個(gè)調(diào)用接收從非常嚴(yán)格到非常寬松的整數(shù)等級(jí)參數(shù),例如令牌有七個(gè)等級(jí)忱详,作業(yè)有五個(gè)等級(jí)围来。Chromium渲染器通常運(yùn)行四種機(jī)制中最嚴(yán)格的模式。最后匈睁,桌面策略有兩種监透,只能用于表示一個(gè)target進(jìn)程是否運(yùn)行在額外的桌面對(duì)象中。

這些限制是粗糙設(shè)計(jì)的航唆,因?yàn)樗鼈儠?huì)影響目標(biāo)可訪問(wèn)的所有可保護(hù)資源胀蛮,但有時(shí)我們需要更精細(xì)粒度的分辨能力。沙箱策略接口允許broker指定例外的情況糯钙。一個(gè)例外是粪狼,在target中發(fā)出特定Windows API調(diào)用退腥,將其代理給broker的方式。broker可以檢查參數(shù)再榄,使用不同的參數(shù)重新發(fā)出調(diào)用狡刘,或者干脆拒絕調(diào)用。為了指定例外情況困鸥,需要有一個(gè)獨(dú)立的調(diào)用:AddRule⌒崾撸現(xiàn)在支持以下幾種針對(duì)不同的Windows子系統(tǒng)的規(guī)則:
*文件
*命名管道
*進(jìn)程創(chuàng)建
*登記
*同步對(duì)象

每種子系統(tǒng)的具體形式各不相同,但通常規(guī)則會(huì)基于字符串模式得到觸發(fā)疾就。例如澜术,一種可能的文件規(guī)則是:

AddRule(SUBSYS_FILES, FILES_ALLOW_READONLY, L"c:\\temp\\app_log\\d*.dmp")

這個(gè)規(guī)則指定了當(dāng)一個(gè)target進(jìn)程想要打開(kāi)文件時(shí),可以授予的權(quán)限猬腰,以及匹配字符串格式的文件的只讀權(quán)限鸟废;例如 c:\temp\app_log\domino.dmp是一個(gè)滿足上面那種格式的文件。查詢(xún)頭文件可以獲得最新支持的對(duì)象與行為的列表姑荷。

規(guī)則只能在每個(gè)進(jìn)程產(chǎn)生前添加盒延,當(dāng)target運(yùn)行時(shí)不能修改,但不同的target可以有不同的規(guī)則鼠冕。

Target引導(dǎo)

Target不會(huì)從策略定義的限制開(kāi)始執(zhí)行兰英。他們從與常規(guī)用戶進(jìn)程擁有的令牌非常接近的一個(gè)令牌開(kāi)始執(zhí)行。因?yàn)樵谶M(jìn)程引導(dǎo)的過(guò)程中供鸠,操作系統(tǒng)加載器會(huì)訪問(wèn)大量的資源,其中大部分是未認(rèn)證且隨時(shí)會(huì)變化的陨闹。另外楞捂,大部分應(yīng)用程序使用標(biāo)準(zhǔn)開(kāi)發(fā)工具提供的標(biāo)準(zhǔn)CRT,在進(jìn)程得到引導(dǎo)后趋厉,CRT也需要初始化寨闹,這時(shí)CRT初始化的內(nèi)部再次變成未認(rèn)證狀態(tài)了。

因此君账,在引導(dǎo)階段繁堡,進(jìn)程實(shí)際上使用了兩種令牌:鎖定令牌,也是進(jìn)程令牌乡数,還有初始令牌椭蹄,被設(shè)置為初始線程的模擬令牌。事實(shí)上净赴,真正的SetTokenLevel定義是:

SetTokenLevel(TokenLevel initial, TokenLevel lockdown)

在所有的初始化操作完成后绳矩,main()或WinMain()會(huì)繼續(xù)執(zhí)行,還有兩個(gè)令牌會(huì)存活玖翅,但只有初始線程可以使用更強(qiáng)大的那個(gè)初始令牌翼馆。target的責(zé)任是在準(zhǔn)備完成后銷(xiāo)毀初始令牌割以。通過(guò)下面這個(gè)簡(jiǎn)單的調(diào)用實(shí)現(xiàn):

LowerToken()

在target聲明這個(gè)調(diào)用之后,唯一可用的令牌是鎖定令牌应媚,完整的沙箱限制開(kāi)始生效严沥。這個(gè)調(diào)用不可以撤銷(xiāo)。注意初始令牌是一個(gè)模擬令牌中姜,它只對(duì)主線程有效消玄,target進(jìn)程創(chuàng)建的其他線程只使用鎖定令牌,因此不會(huì)嘗試獲取任何需要安全檢查的系統(tǒng)資源扎筒。

target始于特權(quán)令牌的事實(shí)簡(jiǎn)化了顯式策略莱找,因?yàn)槿魏翁貦?quán)相關(guān)的需要在進(jìn)程啟動(dòng)時(shí)一次完成的東西,可用在LowerToken()調(diào)用前完成嗜桌,并且不需要在策略中設(shè)置規(guī)則奥溺。

重要

請(qǐng)確保初始令牌獲取的任何敏感操作系統(tǒng)句柄在調(diào)用LowerToken()前關(guān)閉。任何泄露的句柄可能被惡意軟件利用以逃離沙箱骨宠。

參考文獻(xiàn)

[01] Richter, Jeffrey "Make Your Windows 2000 Processes Play Nice Together With Job Kernel Objects"

http://www.microsoft.com/msj/0399/jobkernelobj/jobkernelobj.aspx

[02] Brown, Keith "What Is a Token" (wiki)

http://alt.pluralsight.com/wiki/default.aspx/Keith.GuideBook/WhatIsA令牌.htm

[03] Windows Integrity Mechanism Design (MSDN)

http://msdn.microsoft.com/en-us/library/bb625963.aspx

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末浮定,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子层亿,更是在濱河造成了極大的恐慌桦卒,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匿又,死亡現(xiàn)場(chǎng)離奇詭異方灾,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)碌更,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)裕偿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人痛单,你說(shuō)我怎么就攤上這事嘿棘。” “怎么了旭绒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鸟妙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我挥吵,道長(zhǎng)重父,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任忽匈,我火速辦了婚禮坪郭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脉幢。我一直安慰自己歪沃,他們只是感情好嗦锐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著沪曙,像睡著了一般奕污。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上液走,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天碳默,我揣著相機(jī)與錄音,去河邊找鬼缘眶。 笑死嘱根,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的巷懈。 我是一名探鬼主播该抒,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼顶燕!你這毒婦竟也來(lái)了凑保?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤涌攻,失蹤者是張志新(化名)和其女友劉穎欧引,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體恳谎,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芝此,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了因痛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片癌蓖。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖婚肆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坐慰,我是刑警寧澤较性,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站结胀,受9級(jí)特大地震影響赞咙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糟港,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一攀操、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秸抚,春花似錦速和、人聲如沸歹垫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)排惨。三九已至,卻和暖如春碰凶,著一層夾襖步出監(jiān)牢的瞬間暮芭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工欲低, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辕宏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓砾莱,卻偏偏與公主長(zhǎng)得像瑞筐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恤磷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容