对某bootkit的驱动分析

一.基本信息
驱动文件名:1F273549.sys(驱动名称随机)
病毒类型:感染MBR
MD5:xxx
文件大小:9,104 字节
 
二.危害简介
1. hook了4个SSDT函数,用于对抗杀软的驱动加载,以及保护自身样本不被复制
2. 替换了Disk.sys的StartIo处理例程,隐藏MBR的修改
3. 根据上层传入的进程pid来杀进程,主要用于结束杀软的进程
4. 使用磁盘IO来直接操作MBR
三.详细分析
1.  DriverEntry
a)  创建设备名为\\Device\\Guntior的设备对象
b)  获取如下4个函数的地址
ZwLoadDriver
ZwSetSystemInformation
ZwSetValueKey
ZwReadFile
c)  SSDT hook以上的4个函数
d)  获取Disk.sys的DEVICE_OBJECT
e)  直接发IRP读取MBR
f)   对读取出的MBR内容进行判断,判断是否是感染过的MBR
g)  Hook Apapi StartIo
2.  SSDT hook函数的处理
a) ZwLoadDriver & ZwSetSystemInformation
这两个驱动都是判断要加载的驱动是否在如下的列表中,如果在,则拒绝。
在ZwLoadDriver的处理中还会删除相关的服务注册表项。
这个是用来对抗杀软的驱动加载的。
b)  ZwSetValueKey
这个函数的处理中主要是判断注册表路径是否包含如下的两个列表,如果有,则拒绝
c) ZwReadFile
样本hook了这个函数,主要是判断要读取的文件是否是sfc_os.dll,如果是,则拒绝。
这里sfc_os.dll已经被样本替换了。
3.  Device Io的处理
该驱动一共有4个Control Code,
Control Code 222440用于接收sfc_os.dll打下来的如下4个函数的地址以及函数内部的偏移和指令
MmGetSystemRoutineAddress
PspTerminaterProcessByPointer
KeInsertQueueApc
KiInterQueueApc
ControlCode 222444:
用于根据sfc_os.dll打下的进程pid来调用PspTerminaterProcessByPointer来结束进程,同时还会根据222440传入的指令来检查上面的4个函数是否被hook,如果有被hook,则恢复钩子。
Control Code 22243D用来通过磁盘IO来读取MBR,并且返回给上层的sfc_os.dll。
Control Code 222439主要是为磁盘IO的相关操作做前期的准备,比如硬盘状态的判断等。
4. StartIo处理
在Guntior的StartIo函数中,会根据IRP判断来隐藏MBR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值