課時(shí)2:模塊執(zhí)行的防御

模塊執(zhí)行防御(3-6章)

目的:防止內(nèi)網(wǎng)用戶主動(dòng)或被動(dòng)執(zhí)行非法模塊

所用技術(shù):微過濾驅(qū)動(dòng)

難點(diǎn):

?如何界定非法和合法

?考慮各種例外情況:如緊急測(cè)試、系統(tǒng)自更新

?系統(tǒng)性能:不可讓用戶有明顯感知 

?漏洞:文件系統(tǒng)的各種不常見行為 避免重入等技術(shù)問題


主要編碼開發(fā)過程

GitHub上下載微軟的微過濾驅(qū)動(dòng)示例passThrough

   https://github.com/microsoft/Windows-driver-samples/tree/main/filesys/miniFilter/passThrough

 增加請(qǐng)求回調(diào),在回調(diào)中進(jìn)行安全性:

  •   Create:給文件添加讀權(quán)限,避免無法讀取導(dǎo)致無法判斷是否PE文件

  •   Write:判斷是否PE文件被寫,或者文件寫入后是否變成了PE文件

  •   SetInformation:過濾文件改名、文件刪除。判斷是否PE文件被改名或刪除。

  • 對(duì)于任何變動(dòng)或者新生的PE文件的全路徑,均加入到可疑名單中。被刪除的文件則移除。

  •   ACQUIRE_FOR_SECTION_SYNCHRONIZATION:過濾PE模塊的加載任何可疑模塊禁止加載,除非被管理者加入白庫。


Create過濾(3.1.4節(jié))

目的:

  給文件對(duì)象增加讀權(quán)限,避免無法讀取而導(dǎo)致

要點(diǎn):

  修改data->Iopb->Parameters.Create.SecurityContext->DesiredAccess即可修改權(quán)限。

優(yōu)點(diǎn):

  處理簡單。

缺點(diǎn):

  擴(kuò)大了權(quán)限,屬于漏洞的一種??梢杂脛?chuàng)建獨(dú)有FileObject來解決,但是編碼麻煩。


Write過濾(3.2節(jié))

目的:監(jiān)控到PE文件的修改和創(chuàng)建,對(duì)任何新PE文件加入可疑庫

要點(diǎn):

  •   向下讀?。ㄓ?/span>FltReadFile)避免系統(tǒng)重入

  •   FltDecodeParameters獲取要寫入的內(nèi)容

  •   用原內(nèi)容確認(rèn)寫入前是否是PE文件

  •   用原內(nèi)容合并要寫入的內(nèi)容判斷寫入后是否PE文件

  •   FltDoCompletionProcessingWhenSafe確保后回調(diào)中斷級(jí)在安全的中斷級(jí)中判斷文件并將可疑文件加入可疑庫(或從庫中移除)

SetInformation請(qǐng)求過濾(3.3節(jié))

目的:監(jiān)控到PE文件的改名和刪除,同時(shí)更新可疑庫

改名要點(diǎn):

  注意改名等于卷內(nèi)移動(dòng),但不等于跨卷移動(dòng)

  data->Iopb->Parameters.SetFileInformation.FileInformationClass如果為FileRenameInformation即為改名

  改名前路徑在后回調(diào)處理獲取不便,因此前回調(diào)處理,然后用上下文傳遞到后回調(diào)

  改名后的路徑可以在后回調(diào)中直接用FltGetFileNameInformation獲取

刪除要點(diǎn):

  刪除有兩種:打開時(shí)指定關(guān)閉時(shí)刪除和設(shè)置刪除

  在考慮“事務(wù)”的情況下,刪除非常復(fù)雜,詳見本書第6


演示效果

漏洞的分類

設(shè)計(jì)漏洞:

  •   設(shè)計(jì)本身就具有的漏洞:無論選擇何種技術(shù)來實(shí)現(xiàn),只要概要設(shè)計(jì)不變就不會(huì)消失的漏洞。此類漏洞應(yīng)該在設(shè)計(jì)時(shí)經(jīng)過充分的調(diào)研、引入多方共同討論和審核來避免。

  •   如果后期才發(fā)現(xiàn),可能造成要推翻重來的巨大損失。

  • 技術(shù)漏洞:

  •   選擇的技術(shù)方案本身就具有的漏洞。無論如何去修改實(shí)現(xiàn)的代碼都無法彌補(bǔ)。和設(shè)計(jì)漏洞一樣,需要在選擇技術(shù)方案的時(shí)候經(jīng)過充分的調(diào)研和討論、審核來避免。

  •   如果實(shí)現(xiàn)結(jié)束才發(fā)現(xiàn),可能要重選技術(shù)方案,重新實(shí)現(xiàn),帶來巨大損失。

  • 實(shí)現(xiàn)漏洞:

  •   編碼和配置中出現(xiàn)的漏洞。這是最廣泛存在和難以消滅的漏洞。但往往是可以以有限成本來彌補(bǔ)的。



模塊執(zhí)行漏洞討論



設(shè)計(jì)漏洞:

  沒有考慮新增磁盤的情況(容易修補(bǔ))

技術(shù)漏洞

  暫無

實(shí)現(xiàn)漏洞

  沒有考慮內(nèi)存映射文件

  沒有考慮硬鏈接等路徑變化情況

  沒有考慮NTFS的事務(wù)操作

  處理中有很多判斷條件,每處都是潛在漏洞


?