快捷搜索:  网络  渗透  后门  CVE  扫描  木马  黑客  as

双枪2木马驱动阐发讲演

媒介

前段时间360安全卫士发表了一篇对双枪2感染开释驱动举动的阐发讲演,讲演地址:

http://www.freebuf.com/articles/web/167776.html

相比于双枪一代,它增添了HIVE文件维护,新增了WFP收集功能拦截,还有维护了自身的体系归调不被修改,并且针对部分查杀驱动摘除了所有的关机归调,该驱动木马从一代后始终在更新活跃。

接下来我们将对该驱动进行再一次周全的阐发,揭破它难以查杀的具体缘故起因。

1、驱动初始化部分

1.1驱动入口函数

首要为判定初始化一些变量,然后开启初始化线程工作。

入口函数所有代码:

Clipboard Image.png

图1

先获取Nt基地址,后续生成设备名,随机化线程地址以及获取注册表操作函数用:

Clipboard Image.png

图2

然后初始化一些必要函数后续用于注入DLL模块:

Clipboard Image.png

图3

从Ntdll函数中取出SSDTIndex,在KeServiceDescriptorTable取得函数地址 :

Clipboard Image.png

图4

获取实现后判定下加载时机,由于该驱动重启后为Boot0驱动,数据库黑客,判定下Ntfs文件体系驱动是否加载,:

Clipboard Image.png

图5

创建设备名以及符号链接跟应用层交互:

Clipboard Image.png

图6

设备名是通过随机Nt基地址数字生成:

Clipboard Image.png

图7

生成随机设备名,并使用这个随机设备注册关机归调,然后开启初始化线程:

Clipboard Image.png

图8

1.2初始化线程

线程入口最先就调用KeEnterCriticalRegion

而该函数作用为禁止内核APC,停息线程操作调用的就是内核APC

调用这个函数后线程就没法被停息,然后再隐躲自身线程起地址,将其配置为ntos内里的一个随机地址。

Clipboard Image.png
图9

然后最先挂钩模块加载归调初始化获取一些注册表函数地址并且重新创建随机文件名将本人驱动拷贝过去:

Clipboard Image.png

图10

然后创建三个工作行列步队并且将模块注入到体系进程:

Clipboard Image.png

图11

然落后入死轮回,始终往体系中放置工作行列步队用于后续感染BootKit等一系列操作:

Clipboard Image.png

图12

1.3注册表函数初始化

在初始化线程中调用了KeyHelperStartup,该函数首要为获取CmSetValueKey更底层的操作函数,函数内容为:

Clipboard Image.png

图13

GetCellRoutineOffset 函数内里首要为获得一些硬编码偏移。

然后挂钩函数GetCellRoutine:

Clipboard Image.png

图14

开启线程触发调用,触发实现后恢复钩子:

Clipboard Image.png

图15

触发调用函数为:

Clipboard Image.png

图16

在挂钩函数中使用RtlWalkFrameChain栈归溯来找到CmSetValueKey等函数调用。

并且校验线程是否为触发的线程,根据调用类型CallType来查找,

Clipboard Image.png

图17

初始化代码实现后,接下来我们最先从收集阻断,文件维护,注册表维护,模块加载禁止,改首页模块注入,BootKit感染,自身归调防护几个部分的具体阐发。

二、收集阻断

开启线程主若是分体系挂钩收集组件Xp体系为挂钩TCPIP Win7以上注册WFP相干例程:

Clipboard Image.png

图18

入口点先隐躲自身,将自身配置为

\\SystemRoot\\system32\\drivers\\volmgr.sys驱动。

Clipboard Image.png

图19

然后根据体系不同挂钩不同体系收集组件,对于XP体系:

Clipboard Image.png

图20

Win7体系:

Clipboard Image.png

图21

然后注册WFP归调:

Clipboard Image.png

图22

归调函数中判定进程名字,一旦有匹配的进程名,则阻断该进程收集操作:

Clipboard Image.png

图23

匹配是通过Hash计算进程名字:

Clipboard Image.png

图 24

3、文件维护

先生成随机文件名驱动,并且将原来文件删除,删除前去除维护开关。

Clipboard Image.png

图25

维护开关函数为,注册表函数类似,该函数频仍被调用,我们看下详细内容:

Clipboard Image.png

图26

将当前列程配置为信任线程,注册表以及文件挂钩就会放行该线程。

清理信任线程代码为:

Clipboard Image.png

图27

然后将一些要维护的文件配置上。

自身文件:

Clipboard Image.png

图28

Ntfs文件:

Clipboard Image.png

图29

FastFat文件:

Clipboard Image.png

图30

配置上维护后,挂钩Ntfs正式开启维护:

Clipboard Image.png

图 31

该函数中起首获取ntfs驱动对象:

Clipboard Image.png

图32

备份并替代所有的Ntfs FsdDisptach:

Clipboard Image.png

图33

备份所有FastIo操作例程:

Clipboard Image.png

图 34

替代:

Clipboard Image.png

图35

FastFat类似,这里我们就不看了。

挂钩函数中:

Clipboard Image.png

图36

CheckTheFileIsProtectAndCompleteTheRequest函数内里调用:

Clipboard Image.png

图37

该函数主若是否为之前初始化的维护文件列表,依然是通过文件名Hash比对的,并且查看当前列程是否为可以信任线程。

Clipboard Image.png

图38

要是否是则拒尽关上。

对于已经关上的文件对象,通过判定文件对象的FsContext来判定。

Clipboard Image.png

图39

之前会先获取Hive文件对象。

Clipboard Image.png

图40

判定是否一致:

Clipboard Image.png

图41

要是为维护的文件则返归 STATUS_INVALID_PARAMETER。

Hive文件特殊处理。

Clipboard Image.png

图42

Clipboard Image.png

图43

4、注册表维护

先配置自身开机顺序:

Clipboard Image.png

图44

获取优先启动组:

Clipboard Image.png

图45

然后将服务写入:

Clipboard Image.png

图46

写入函数为:

Clipboard Image.png

图47

优先使用更底层的CmSetValueKey函数,然后才使用体系调用:

Clipboard Image.png

图48

初始化维护列表:

Clipboard Image.png

图49

注册维护归调:

Clipboard Image.png

图50

归调维护中:

Clipboard Image.png

图51

Hash比对注册表键,检测是否为维护项目:

Clipboard Image.png

图52

要是是且不是可托进程则拒尽关上。

5、模块加载禁止

先配置归调:

Clipboard Image.png

图53

分驱动以及应用进程两种情形。

驱动文件判定是否需要Patch的模块。:

Clipboard Image.png

图54

Hash跟 正则匹配aw***.sys等一些驱动。

Clipboard Image.png

图55

要是是则Patch入口点:

Clipboard Image.png

图56

对于应用层进程判定是否为阅读器,要是是则禁止网盾模块加载:

Clipboard Image.png

图57

6、改首页模块注入

先解密DLL,动态获取ntdll地址偏移.

Clipboard Image.png

图58

Clipboard Image.png

图59

解密文件并校验:

Clipboard Image.png

图60

然后分别向Services.exe Explorer.exe注入。

Clipboard Image.png

图61

调配内存:

Clipboard Image.png

图62

拷贝代码:

Clipboard Image.png

图63

然后注入执行:

Clipboard Image.png

图64

7、BootKit感染

7.1查找活动分区

目前有不少机器装置了多块硬盘,需要先找活动磁盘的活动分区。

Clipboard Image.png

图 65

然后写入BooKit组件,分三步写入,先写入引导驱动BootImage,然后写VBR,最后写入MBR,只有当前面一步操作成功后才继续下一步写入。

Clipboard Image.png

图66

7.2 BootImage写入

写入BootImage前  先找磁盘末尾空余地区,要是没有空间则写入失败。

Clipboard Image.png

图67

获取磁盘参数:

Clipboard Image.png

图68

然后找到磁盘末尾写入地位:

Clipboard Image.png

图69

再将BootImage加密后写入:

Clipboard Image.png

图70

写入前先判定是否已经写入过了:

Clipboard Image.png

图71

写入成功后,再写入VBR部分。

7.3 VBR写入

判定分区参数以及是否为NTFS磁盘,仅支持Ntfs磁盘。

Clipboard Image.png

图72

然后找下VBR跳转指令:

Clipboard Image.png

图73

查找函数为:

Clipboard Image.png

图74

判定下是否为ESLDRLoader,要是是则删除所有项目。

Clipboard Image.png

图75

删除所有:

Clipboard Image.png

图76

然后将病毒VBR压缩,合并写入:

Clipboard Image.png

图77

并且将地位大小的参数整个异或加密保存在磁盘末尾。

Clipboard Image.png

图78

7.4 MBR写入

获取磁盘信息:

Clipboard Image.png

图79

先将VBR写入磁盘最最先的第3个扇区后0xF个扇区,后续即使VBR被修复,MBR部分依旧可以感染VBR

Clipboard Image.png
图80

读取原始MBR:

Clipboard Image.png

图81

将分区表拷贝进来,然后比对是否已经写入,要是没有则写入0号扇区:

Clipboard Image.png

图82

7.4 维护BootKit

维护函数:

Clipboard Image.png

图83

先初始化正常的VBR  MBR,用体系默认的。后续要是有应用程序读取则读到这份假的内容。

MBR部分:

Clipboard Image.png

图84

VBR部分:

Clipboard Image.png

图85

然后再装置磁盘底层钩子:

Clipboard Image.png

图86

挂钩中判定,写则返归拒尽.

Clipboard Image.png

图87

读取则返归假的数据:

Clipboard Image.png

图88

8 自身归调防护

LoadImage 函数维护,拷贝头部0×20个字节:

Clipboard Image.png

图89

比对是否一致,不一致则直接恢复:

Clipboard Image.png

图90

注册表归调,判定特定键值关上返归值:

Clipboard Image.png

图91

然后重新注册上:

Clipboard Image.png

图92

摘除关机归调则通过硬编码获取链表头部:

Clipboard Image.png

图93

获取:

Clipboard Image.png

图94

然后遍历全部链表,只需不是自身注册的随机设备就摘除该关机归调:

Clipboard Image.png

图 95

摘除:

Clipboard Image.png

图96

总结

针对MBR以及VBR系列木马泛滥的情形,360首创了针对此类固执木马的强力查杀手艺,并且能够同时自动检测以及修复MBR及VBR ,发现电脑阅读器主页被反复篡改没法恢复、或出现卡慢等情形时,可使用360安全卫士进行扫描查杀,彻底清除该木马,360安全卫士已经第一时间支持该驱动木马查杀.。

Clipboard Image.png

图97

*

您可能还会对下面的文章感兴趣: