模塊執(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ù)操作
處理中有很多判斷條件,每處都是潛在漏洞