摘要:針對傳統(tǒng)利用中斷方式的磁盤保護(hù)有不少安全隱患,分析了一種基于磁盤過濾驅(qū)動的硬盤保護(hù)工作機(jī)制。該機(jī)制的核心思想是在對上層操作系統(tǒng)透明的情況下,重定向?qū)Υ疟P操作的I/O請求包,在重啟系統(tǒng)后自動清除緩存數(shù)據(jù)。由于工作在操作系統(tǒng)內(nèi)核層增強(qiáng)了保護(hù)功能的安全性。
關(guān)鍵詞:中斷;過濾驅(qū)動;硬盤保護(hù);I/ O 請求包
中圖分類號:TP334文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2009)35-10106-02
The Technology of Hard-disk Protection Method Based on Disk Filter Driver
WEI Xi-san1,2, DONG Wei2
(1.Computer School of Wuhan University, Wuhan 430072, China; 2.Computer Teaching Center, Xiangfan University, Xiangfan 441053, China )
Abstract: The traditional method of disk protection using interrupted many security risks, analysis of a filter driver for hard disk-based protection mechanism. The core idea of the mechanism is operating in the upper transparent circumstances, the redirection operation of the disk I/O request packet, in the reboot the system automatically clear the cache data. As a result of the operating system kernel layer of enhanced security protection.
Key words: INT; filter driver; hard-disk protection; IRP
傳統(tǒng)的硬盤保護(hù)軟/硬件,主要是攔截和接管INT13H中斷,比如現(xiàn)有常見的還原卡就是在引導(dǎo)系統(tǒng)前就預(yù)先修改中斷表,用自己的處理函數(shù)替換了正常的INT13H,在上層系統(tǒng)對磁盤進(jìn)行存取時,進(jìn)行相應(yīng)的偏移,這種保護(hù)技術(shù)幾乎兼容所有的操作系統(tǒng),并且對硬盤上的數(shù)據(jù)能起到完整的保護(hù)作用,但它消耗大量的存儲空間(和被保護(hù)空間為1:1),不兼容特殊工作的硬盤(如SCSI硬盤),保護(hù)空間大小有限制(如DOS兼容模式的2.1G,LBA28位尋址的137G限制),并且容易被破解(找到原始的IHT13H的地址,修改即可)。
本文介紹了一種基于磁盤過濾驅(qū)動的硬盤保護(hù)(還原)技術(shù),利用微軟本身的系統(tǒng)架構(gòu),對系統(tǒng)中讀寫磁盤的操作進(jìn)行檢測和過濾,以達(dá)到對磁盤數(shù)據(jù)的保護(hù)。
1 磁盤過濾驅(qū)動的原理
微軟的Windows在內(nèi)核里對設(shè)備對象的管理是分層的,同時,用戶對任何設(shè)備的訪問都最終會以IRP(I/O請求包)的形式發(fā)送到目標(biāo)設(shè)備對象驅(qū)動中。
用戶按一定的規(guī)范編寫并安全驅(qū)動,由系統(tǒng)在特定時候加載,使用戶層在對某些設(shè)備進(jìn)行的操作請求按一定的次序,一層又一層地經(jīng)過這些驅(qū)動,每一層的驅(qū)動可以選擇對這些請求進(jìn)行修改、下傳或者是拋棄。
通常使用一個磁盤過濾驅(qū)動,建立一個磁盤過濾設(shè)備,Attach到磁盤卷設(shè)備,即Device\\HarddiskVolumeX(X為數(shù)字)上,這樣可以監(jiān)控系統(tǒng)對磁盤數(shù)據(jù)的讀寫、重定向等。
這種硬盤保護(hù)技術(shù)的優(yōu)點(diǎn)在于:因為過濾驅(qū)動介于磁盤驅(qū)動和用戶層之間,所以它是設(shè)備無關(guān)的,不用考慮當(dāng)前機(jī)器上安裝的是多大的磁盤,也不用考慮磁盤是IDE的還是SCSI的,因為這些工作都由更底層的磁盤驅(qū)動來完成了。系統(tǒng)會把用戶級對文件的讀寫操作轉(zhuǎn)化成IRP,交由內(nèi)核的磁盤對象,內(nèi)核再根據(jù)設(shè)備棧上掛著的驅(qū)動順序,一個個地把IRP發(fā)給它們。因為由驅(qū)動完成,可以在驅(qū)動中做稍微復(fù)雜的計算,實現(xiàn)以下功能:使用比被保護(hù)區(qū)要小的存儲區(qū),存儲區(qū)可以不連續(xù),還可以指定存儲區(qū)的有效期等功能。
2 具體實現(xiàn)
微軟自帶的系統(tǒng)還原系統(tǒng)主要是基于文件系統(tǒng)的過濾功能,通過安裝的文件系統(tǒng)過濾驅(qū)動sr.sys,配合Srrstr.dll、Srsvc.dll、Srclient.dll,監(jiān)聽系統(tǒng)以及某些應(yīng)用程序文件的改變,并使用寫時拷貝(copy on write)技術(shù),自動創(chuàng)建易于識別的還原點(diǎn)。這種系統(tǒng)還原只要跳過文件系統(tǒng)的讀寫操作保護(hù)就會失效。
而基于磁盤過濾驅(qū)動的保護(hù)系統(tǒng)要對所包含的分區(qū)或磁盤的讀寫都經(jīng)過過濾處理,并不會真正修改物理磁盤上的真實數(shù)據(jù)。重啟系統(tǒng)后,所有緩存的數(shù)據(jù)被丟棄,系統(tǒng)重新回到原來設(shè)置的初始狀態(tài)。
系統(tǒng)加載文件系統(tǒng)后,按照正常運(yùn)行,下一步是加載磁盤驅(qū)動。如需要保護(hù)分區(qū),就在這里進(jìn)行掛接磁盤驅(qū)動。在文件系統(tǒng)加載后磁盤驅(qū)動加載前,截斷操作,加入自己的過濾驅(qū)動,這樣再掛接磁盤驅(qū)動繼續(xù)進(jìn)行系統(tǒng)啟動。
一個完整的磁盤過濾驅(qū)動的例子可以參考微軟DDK里的一個例子:\\src\\storage\\filters\\diskperf。
首先要考慮多線程和多CPU,有時候可能會有多個對磁盤的讀寫IRP同時到達(dá)了驅(qū)動內(nèi)部,要考慮到對存儲區(qū)的轉(zhuǎn)存應(yīng)該互斥進(jìn)行,這時可以對IRP進(jìn)行排隊。在創(chuàng)建驅(qū)動對象的時候指定DriverStartIo例程。另外IRP_MJ_WRITE和IRP_MJ_READ都要進(jìn)行排隊,兩者的IRP類似,可以將兩者的例程指定為同一個:
……
DriverObject->DriverStartIo = DFIoStart;
DriverObject->MajorFunction[IRP_MJ_READ]= DFReadWrite;
DriverObject->MajorFunction[IRP_MJ_WRITE] = DFReadWrite;
……
在IRP_MJ_WRITE和IRP_MJ_READ例程里把接收到的IRP投遞到StartIO隊列
NTSTATUS DFReadWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{ IoMarkIrpPending(Irp);
IoStartPacket(DeviceObject, Irp, 0, NULL);
return STATUS_PENDING; }
在StartIo例程里,處理完一個IO事件以后要用IoStartNextPacket函數(shù)申請下一個IO事件
void DFIoStart(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{……
IoStartNextPacket(DeviceObject, TRUE);
……}
對IRP排完序,接下來就要對IRP包的數(shù)據(jù)進(jìn)行移位和存寫,這里有兩種實現(xiàn)方式:備份保護(hù)和映射保護(hù)。
備份保護(hù)是最常用的保護(hù)方法。如圖2所示,假設(shè)用戶想要對扇區(qū)10的數(shù)據(jù)進(jìn)行保護(hù),數(shù)據(jù)將被備份到另一個區(qū)域,這里假設(shè)這個區(qū)域是扇區(qū)100,那么當(dāng)用戶再進(jìn)行操作時,實際還是對扇區(qū)10進(jìn)行操作,如果扇區(qū)10遭到破壞,那么恢復(fù)的時候?qū)焉葏^(qū)100的數(shù)據(jù)重新拷貝到一個暫存區(qū)扇區(qū)10。
備份保護(hù)要做兩方面的事情:
1) 判斷是否需要保護(hù);
2) 記錄備份到的扇區(qū)信息。
如:建立一個索引表格記錄扇區(qū)10->扇區(qū)100這個關(guān)系。
優(yōu)點(diǎn):簡單,安全。
缺點(diǎn):占用空間太多。因為一個扇區(qū)只能存儲512字節(jié),但是每次記錄索引表格備份關(guān)系的時候都要用到8個字節(jié),這樣磁盤空間被大量占用。
解決方法:建立有效數(shù)據(jù)位圖,這樣可以把索引表格縮小。
除了備份保護(hù),還有一種映射保護(hù)。
同樣,假設(shè)需要保護(hù)的扇區(qū)是扇區(qū)10,那么這個扇區(qū)將被保護(hù)起來,當(dāng)用戶進(jìn)行寫操作的時候,表面上看,用戶還是對扇區(qū)10進(jìn)行操作,其實數(shù)據(jù)已經(jīng)被寫到別的扇區(qū),比如是扇區(qū)100,那么用戶再對扇區(qū)10進(jìn)行操作的時候,就會被轉(zhuǎn)移到扇區(qū)100。如果用戶想恢復(fù)數(shù)據(jù),直接就是恢復(fù)的扇區(qū)10的數(shù)據(jù)。
圖4是用戶進(jìn)行讀操作的過程,當(dāng)數(shù)據(jù)進(jìn)入后,首先要讀取保護(hù)位圖,查看模塊是否被保護(hù),如果被保護(hù),進(jìn)入映射表查找數(shù)據(jù)存儲的模塊。
同時,為了防止應(yīng)用程序直接存取物理磁盤設(shè)備,即\\Device\\HarddiskX\\DRX,繞過磁盤卷的過濾驅(qū)動,通常還會再創(chuàng)建一個磁盤過濾設(shè)備,并Attach到物理磁盤設(shè)備上,來過濾對真實物理磁盤設(shè)備的讀寫 。
3 結(jié)束語
目前的硬盤保護(hù)卡(還原卡)多使用磁盤過濾驅(qū)動來做數(shù)據(jù)還原和保護(hù)。由于它工作在內(nèi)核層,所以破解的難度系數(shù)高,工作穩(wěn)定。但隨著機(jī)器狗等更多能穿透保護(hù)的病毒出現(xiàn),使得這種保護(hù)不是一勞永逸。今后在更底層比如直接端口IO監(jiān)控上還有完善的空間。
參考文獻(xiàn):
[1] MJ0011,還原系統(tǒng)保護(hù)攻防[EB/OL].http://hi.baidu.com/mj0011/blog.
[2] 張帆,史彩成.Windows驅(qū)動開發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2008.
[3] 劉蓬.用DDK開發(fā)WDM驅(qū)動程序[J].計算機(jī)應(yīng)用,2003(S2).
[4] 彭海云,胡洪安.磁盤免疫系統(tǒng)設(shè)計與實現(xiàn)[J].河南大學(xué)學(xué)報:自然科學(xué)版,2009,39(3).
[5] Cant C.Windows WDM 設(shè)備驅(qū)動程序開發(fā)指南[M].孫義,馬莉波,譯.北京:機(jī)械工業(yè)出版社,2000.