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

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

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

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

難點:

?如何界定非法和合法

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

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

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


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

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

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

 增加請求回調(diào),在回調(diào)中進行安全性:

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

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

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

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

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


Create過濾(3.1.4節(jié))

目的:

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

要點:

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

優(yōu)點:

  處理簡單。

缺點:

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


Write過濾(3.2節(jié))

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

要點:

  •   向下讀取(用FltReadFile)避免系統(tǒng)重入

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

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

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

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

SetInformation請求過濾(3.3節(jié))

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

改名要點:

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

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

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

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

刪除要點:

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

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


演示效果

漏洞的分類

設計漏洞:

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

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

  • 技術(shù)漏洞:

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

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

  • 實現(xiàn)漏洞:

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



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



設計漏洞:

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

技術(shù)漏洞

  暫無

實現(xiàn)漏洞

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

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

  沒有考慮NTFS的事務操作

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


?