文件過濾驅(qū)動-FSFilter_第1頁
文件過濾驅(qū)動-FSFilter_第2頁
文件過濾驅(qū)動-FSFilter_第3頁
文件過濾驅(qū)動-FSFilter_第4頁
文件過濾驅(qū)動-FSFilter_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

文件過濾驅(qū)動

FSFilter

引言文件系統(tǒng)程序是操作系統(tǒng)核心的部分,對于Windows操作系統(tǒng)來講,文件系統(tǒng)和網(wǎng)絡部分并列為驅(qū)動程序中最難的部分,難度大大超過聲卡、顯卡之類的硬件驅(qū)動程序。深入學習和調(diào)試文件驅(qū)動程序,文件過濾驅(qū)動程序,更有助于學習Windows系統(tǒng)底層核心技術。本膠片主要介紹文件過濾驅(qū)動開發(fā)和其應用:透明加解密,膠片內(nèi)容比較廣泛,希望能夠普及這方面的知識,希望更多有興趣的人一起研究,一起進步。學習曲線Windows系統(tǒng)Windows開發(fā)C/C++MFC機制COM機制

進程、線程、內(nèi)存管理PE文件格式、SHE機制HOOK技術、反匯編。。。文件過濾驅(qū)動應用層驅(qū)動開發(fā)緩存管理文件頭標識存放密鑰、策略管理讀寫加解密處理。。。驅(qū)動層文件系統(tǒng)進程、線程、內(nèi)存機制核心數(shù)據(jù)結構。。。大綱驅(qū)動開發(fā)簡介開發(fā)特點開發(fā)要素文件過濾驅(qū)動基本概念分發(fā)函數(shù)設備綁定讀寫過濾文件路徑獲取透明加解密簡介概念類型和邏輯流程基本數(shù)據(jù)結構重要技術難點透明加解密開發(fā)怎樣開發(fā)透明加解密程序開發(fā)參考框架代碼,Sfilter、Filemon、Filespy、toolflat的代碼微過濾驅(qū)動Minifilter架構開發(fā)工具小集合DSM透明加解密技術透明加解密發(fā)展

驅(qū)動開發(fā)特點編程資料較少,微軟提供接口和文檔很少,經(jīng)常需要反匯編、逆向在Ring0特級運行,權力很大,代碼安全要求比較高不能采用VC直接調(diào)試,單機調(diào)試比較困難,必須采用windbg雙機調(diào)試(Windbg+Vmare)定位問題困難,編程出錯容易照成藍屏,后果比較嚴重穩(wěn)定周期較長兼容性測試最重要(各種防火墻軟件、防病毒軟件、主動防御軟件、Rookit技術軟件等等)Windows操作系統(tǒng)的升級導致驅(qū)動不能平滑過渡(win98/wind2000/winxp/vista/windows7)編程模式周期長調(diào)試困難驅(qū)動開發(fā)字符串操作進程空間、線程上下文內(nèi)存分配線程互斥訪問數(shù)據(jù)結構(雙鏈表)中斷優(yōu)先級DeviceObject、DriverObjectIrp理解文件過濾驅(qū)動基本概念分發(fā)函數(shù)設備綁定讀寫過濾文件路徑獲取基本概念

卷,有卷管理器生成,一個卷一般對應一個邏輯盤文件系統(tǒng)NTFS:ntfs.sysFAT32:fastfat.sysCDFS:cdfs.sys文件系統(tǒng)擁有兩類設備:控制設備,卷設備。如C:、D:為ntfs,E:F:為FAT32,那么E:、F:為FAT32文件系統(tǒng)的兩個卷設備,而C:、D:為NTFS文件系統(tǒng)的兩個卷設備文件操作針的irp都是發(fā)到卷設備上,發(fā)給控制設備的irp主功能號為IRP_MJ_FILE_SYSTEM_CONTROL,發(fā)給卷設備的irp一般都是文件操作irp分發(fā)函數(shù)主功能IRPDriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL]=FsControl;DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL]=DispatchDirectoryControl;DriverObject->MajorFunction[IRP_MJ_CREATE]

=DispatchCreate;DriverObject->MajorFunction[IRP_MJ_READ]

=DispatchRead;DriverObject->MajorFunction[IRP_MJ_WRITE]

=DispatchWrite;DriverObject->MajorFunction[IRP_MJ_SET_INFORMATION] =DispatchSetInfo;DriverObject->MajorFunction[IRP_MJ_CLOSE]

=DispatchClose;DriverObject->MajorFunction[IRP_MJ_CLEANUP]

=DispatchClean;DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] =DispatchDeviceIoControl;FAstIO 注冊這些函數(shù)后,一般不做任何處理直接返回 快速IO主要是當文件數(shù)據(jù)存在緩存里面時,windows為了提高性能,直接向緩存管理器放送快速io去緩存獲取數(shù)據(jù)設備綁定創(chuàng)建控制設備對象,對象類型必須FILE_DEVICE_DISK_FILE_SYSTEM調(diào)用IoRegisterFsRegistrationChange,注冊文件系統(tǒng)激活或者卸載的回 調(diào)函數(shù),文件系統(tǒng)常用的為ntfs、fat32、cdfs,默認情況下,文件系統(tǒng)是存在 的,沒有觸發(fā)激活機制,這時候在xp和windows2000sp4以上,仍然會觸發(fā) 調(diào)用注冊的回調(diào)函生成設備附加到文件系統(tǒng)上,這樣能監(jiān)控到文件系統(tǒng)的irp,主要是監(jiān)控 此irpIRP_MJ_FILE_SYSTEM_CONTROL,在此irp中監(jiān)控卷的掛載和卸載在卷的掛載過程中,生成設備附加到卷上,這樣才完成設備的附加,做 完此操作后,就能監(jiān)控到所有卷上的文件操作irp讀寫過濾如何獲取到讀取的內(nèi)容,取決于

irp操作的io方式:緩沖方式、直 接方式、其他方式緩沖方式:在文件讀寫請求中沒 有出現(xiàn)過,這種方式的特點是緩 沖從發(fā)出irp的應用程序的用戶空 間,拷貝一份到內(nèi)核空間,不同 進程空間的內(nèi)存各自生效,但是 需要拷貝一份,效率較低直接方式是用MDL來傳遞緩沖區(qū) ,將用戶空間的地址范圍直接映 射到內(nèi)核空間,這里面要修改頁 表的屬性其他方式就是直接把用戶空間的 指針傳遞到內(nèi)核空間,不做任何 處理,這個指針就是irp- >UserBuffer讀寫過濾讀操作 文件的長度:Length=IrpSp->Parameters.Read.Length;文件的偏移量:Offser.QuadPart=IrpSp->Parameters.Read.ByteOffset.QuadPart文件內(nèi)容:Irp->MdlAddress不為空,則使用Irp->MdlAddress,緩沖區(qū)位置為MmGetSystemAddressForMdlSafe(Irp->MdlAddres),否則直接使用Irp->UserBuffer#defineCdMapUserBuffer(IC,UB){\*(UB)=(PVOID)(((IC)->MdlAddress==NULL)?\(IC)->UserBuffer:\(MmGetSystemAddressForMdlSafe((IC)->MdlAddress,HighPagePriority)));\}寫操作 文件的長度:Length=IrpSp->Parameters.Write.Length文件的偏移量:LARGE_INTEGERlnOffset=IrpSp->Parameters.Write.ByteOffset;文件內(nèi)容:Irp->MdlAddress不為空,則使用Irp->MdlAddress,緩沖區(qū)位置為MmGetSystemAddressForMdlSafe(Irp->MdlAddres),否則直接使用Irp->UserBuffer#defineCdMapUserBuffer(IC,UB){\*(UB)=(PVOID)(((IC)->MdlAddress==NULL)?\(IC)->UserBuffer:\(MmGetSystemAddressForMdlSafe((IC)->MdlAddress,HighPagePriority)));\文件路徑獲取在文件創(chuàng)建時獲取文件路徑透明加解密簡介概念類型和邏輯流程基本數(shù)據(jù)結構重要技術難點概念 透明指的是用戶在 操作的時候,雖然后臺 在自動的進行加解密, 但是用戶根本就不知道 加密的存在,就像中間 隔了一層透明的玻璃一樣。 透明的好處在于不改變用戶的操作,一切都和加密之前一樣,甚至在有些企業(yè)安裝加密后都無需通知所有的員工,就像加密并不存在一樣,只是加密文件到了企業(yè)安全環(huán)境的外部才會發(fā)現(xiàn)文件無法打開類型和邏輯加密類型加密原理舉例靜態(tài)加密

把整個文件加密掉、或者把整個文件加密掉。動態(tài)加密

文件整體是加密狀態(tài),需要解密時讀取多少就解密多少,寫入多少就加密多少,而不需要把整個文件都解密掉。

主動加密由使用者自行要求文件變成加密狀態(tài)稱之為主動加密

主動加密的方式很多,例如用WinRar把文件壓縮并定義一個口令,或者給Word、Excel文件一個打開或者修改的口令,這樣其他人使用時必須由正確的口令才能打開,這是使用者主動進行的加密,如果使用者不進行加密則文件不會在加密狀態(tài)。只針對某些文件夾加密的方式也可以理解為主動加密方式。主動加密主要應用于個人的文件保護。被動加密使用者并不知道或者并不想文件變成加密狀態(tài),系統(tǒng)自動將文件加密,稱之為被動加密。

被動加密主要用于企業(yè)內(nèi)部防止文件泄密,即使使用者不想文件被加密,系統(tǒng)還是會根據(jù)定義加密文件,這樣文件被拷貝等各種方法脫離企業(yè)環(huán)境后,由于文件在加密狀態(tài)而無法打開。被動加密具有另一個特性就是透明操作,即使用者并不需要進行加密和解密操作,一切都是后臺自動完成,使用者可以不知道加密的存在。被動加密與作者的意愿無關,相關文件都會被加密,磁盤加密和文件透明加解密屬于此類。

類型和邏輯1、加密指定后綴: 通過指定后綴加密是指保密程序?qū)ι傻哪骋活愇臋n進行加密,而對其他后綴仍然采用明文。其優(yōu)點是只加密制定類型的文檔,而不影響其它文件,在加密范圍上相對較小,系統(tǒng)的穩(wěn)定性容易提高;缺點是可能產(chǎn)生“另存為其他類型的文檔”的泄密漏洞,因為此時存儲的結果并不是被指定加密的文件類型。即使把程序可能產(chǎn)生的后綴格式都指定也沒有用,因為有很多辦法另存出來,例如在Word中可以點擊另存為然后在文件名欄輸入2個雙引號(“),然后在這2個雙引號之間輸入任意后綴(例如test.123),那么保存后的文件就是明文的,拷貝出來文件名改回doc后綴就可能導致文檔泄密。 而且有些程序的文件格式?jīng)]有定式,甚至可以保存為任意后綴,例如記 事本,這樣加密指定的文件后綴就帶來了安全漏洞。

2、加密不區(qū)分后綴: 加密不區(qū)分后綴是指保密程序?qū)ι傻乃形募歼M行加密。這種加密方式由于對指定進程產(chǎn)生的任何文件都加密從而堵住“另存為其他類型的文檔”的漏洞,可保證不論用戶如何將文件另存都不會出現(xiàn)明文文件。其工作原理為指定進程只要發(fā)生寫操作就加密被寫的文件,任何中間文件和臨時文件都會被加密。不區(qū)分文件后綴有更高的安全性,技術難度也大得多。類型和邏輯加密指定后綴加密不區(qū)分后綴重定向原理重定向原理+加密指定后綴(1)

重定向原理+加密不區(qū)分后綴(2)

透明加解密原理動態(tài)加解密原理+加密指定后綴(3)

動態(tài)加解密原理+加密不區(qū)分后綴(4)

基本流程讀流程基本流程寫流程基本數(shù)據(jù)結構FileObject,打開一個文件,io管理器為其創(chuàng)建一個文件對象結構FCB,一個文件可能被多個程序同時打開,這樣會生成多個FileObject,但是只存在一個FCB段對象指針重要技術難點緩存管理單緩存合法進程打開存在文件,關閉文檔,明文保存在緩存,此時緩存沒有刷 至硬盤,也沒有清空內(nèi)存中的資源。此時非法進程再打開文檔,在

IRP_MJ_CREATE例程會刷新緩存操作,所以非法進程打開為亂碼合法進程打開存在文件,明文保存在緩存,此時緩存沒有刷至硬盤,也 沒有清空內(nèi)存中的資源。此時非法進程再打開文檔,如果是word這種占著句 柄沒有關閉的文檔,判斷為非法進程,禁止打開;如果是notedpad采用內(nèi)存 映射文件的方式的,句柄關閉,則非法進程打開正在被合法進程打開的文檔,在IRP_MJ_CREATE例程會刷新緩存操作,所以非法進程打開為亂碼非法進程打開未打開過的加密文檔,密文。合法進程再打開加密文檔,會先刷新緩存。合法進程打開加密文檔,在關閉的時候在IRP_MJ_CLEANUP例程中對新 建的文件才刷新緩存獲取緩存資源的順序:文件系統(tǒng)資源最先獲得緩存管理器資源次之獲得VMM資源最后獲得重要技術難點文件加密標識存放標記存儲位置類型文件變長方法數(shù)據(jù)庫中文件外部否文件的加密狀態(tài)記錄在數(shù)據(jù)庫中,判斷文件加密狀態(tài)時讀取數(shù)據(jù)庫,缺點巨大,在驅(qū)動中是很難訪問數(shù)據(jù)庫的,且若數(shù)據(jù)庫丟失則所有文件都可能無法打開了。文件目錄中

文件外部否文件的加密狀態(tài)記錄在其所在的目錄中,文件所屬目錄變化時程序需要處理各種細節(jié),且存在記錄丟失整個目錄文件無法打開的可能性。

文件名上

文件內(nèi)部否將文件的名字加上一個后綴來識別是否加密過且使用技術手段對用戶隱藏掉這個后綴,通用性不好且容易被人為不小心去掉加密標記。文件屬性里

文件內(nèi)部否將文件的時間或者其他屬性改變一下,例如將時間加上1000年且向用戶隱藏掉這個變化,通用性太差且加密標記極易丟失。壓縮在文件里文件內(nèi)部否最好的思路可惜無法兼容所有的文件,一方面如果文件太小,可能很難進行壓縮,對于一些壓縮軟件產(chǎn)生的壓縮文件無法繼續(xù)壓縮等,通用性很差。文件頭上

文件內(nèi)部是在文件頭部附加一段內(nèi)容來記錄文件的加密標記

文件尾上

文件內(nèi)部是在文件尾部附加一段內(nèi)容來記錄文件的加密標記

重要技術難點讀寫加解密什么點能獲取到數(shù)據(jù)與硬盤的交互(IRP_NOCACHE、IRP_PAGING_IO和IRP_SYNCHRONOUS_PAGING_IO

)在什么時刻進行讀寫加解密(讀在完成歷程,寫直接在寫例程完成)加解密的數(shù)據(jù)在哪里獲取加解密算法、密鑰管理重入管理文件追蹤體管理透明加解密開發(fā)怎樣開發(fā)透明加解密程序開發(fā)參考框架代碼,Sfilter、Filemon、Filespy、toolflat的代碼微過濾驅(qū)動Minifilter架構開發(fā)工具小集合參考資料怎樣開發(fā)透明加解密程序

語言、基本技

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論