分你所享、信息共享、轻松分享
来自民间的思想 | 送人玫瑰,手有余香。

双枪2木马驱动分析报告

前言

前段时间360安全卫士发表了一篇对双枪2感染释放驱动行为的分析报告,报告地址: http://www.freebuf.com/articles/web/167776.html 相比于双枪一代,它增加了HIVE文件保护,新增了WFP网络功能拦截,还有保护了自身的系统回调不被修改,并且针对部分查杀驱动摘除了所有的关机回调,该驱动木马从一代后一直在更新活跃。 接下来我们将对该驱动进行再一次全面的分析,揭露它难以查杀的详细原因。

一、驱动初始化部分

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 然后创建三个工作队列并且将模块注入到系统进程: