終極磁盤隱藏及防護
--SCSI miniport driver之利用
by CuteK
如何利用SCSI miniport driver呢, 先了解該驅動在系統中的位置,想想大家都可以做些什么吧,
虛擬光驅? 還原卡? bootkit ?
一, 看看windows啟動鏈條
MBR 16位實模式
boot sector 16位實模式 讀入根目錄 加載ntldr
Ntldr
- 將系統從16位模式切換到32位模式
- 開啟(內存)分頁管理
- 如果啟動卷為SCSI磁盤,從系統卷上讀取Ntbootdd.sys對SCSI磁盤進行I/O操作、檢測 不使用bios的scsi和ata使用Ntbootdd.sys 驅動讀取磁盤數據, 該驅動是SCSI miniport driver 由廠商自行開發, 開發后改為這個名字即可 ,
- 查找啟動卷中是否包含有效的Hiberfil.sys文件,如果有效,跳過如下步驟,直接讀取Hiberfil.sys中的信息到內存中,是系統恢復到休眠前的狀態
讀取boot.ini 三種方式multi ,scsi, signature啟動, 后兩種需要scsi miniport driver 幫助讀取磁盤
Ntdetct.com 16位實模式
Ntoskrnl.exe/ntkrnlpa.exe
Hal.dll
smss
winlogon
二, 驅動所處位置
SCSI miniport driver 開發比較容易因為可以調用微軟提供的scsiport.sys提供的通用功能.針對具體的硬件做srb的處理
驅動棧層次
-----------------------
文件系統過濾驅動
-----------------------
文件驅動ntfs.sys
-----------------------
磁盤過濾驅動
-----------------------
disk.sys 類驅動
-----------------------
miniport driver (實例sptd.sys cercsr6.sys)
(miniport driver 調用 port driver的函數,scsiport.sys為port driver ,
deamo tool復制scsiport.sys為sptd0157.sys ,然后在sptd.sys中調用sptd0157.sys 的導出函數ScsiPortInitialize )
------------------------
磁盤
三 如何使用
1 做虛擬光驅已經實現了,不講了
2 做還原卡 機器狗發irp 到disk.sys中然后分發到scsi miniport driver,
IRP_MJ_SCSI SCSI_REQUEST_BLOCK 這個在我們寫的小端口驅動中判斷重定位.....
3 做bootkit,可以先于windows系統加載, 在有anti rootkit 直接檢測磁盤數據時可以進行欺騙
最近的Stealth MBR rootkit被rku通過發IRP_MJ_SCSI檢測/gmer通過Driver\Disk -> MajorFunction[IRP_MJ_READ] = CLASSPNP!ClassReadWrite檢測, 可以用miniport來讓rku和gmer檢不出來, miniport中HwStartIo處理傳入的srb, 檢查cdb中OperationCode 當為SCSIOP_READ和SCSIOP_WRITE的時候,判斷扇區位置,如果是MBR則返回正確的mbr信息
研究時間比較短,大有錯誤之處,還請各位指正
參考文獻