终极磁盘隐藏及防护
--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信息
研究时间比较短,大有错误之处,还请各位指正
参考文献