搜索此博客

2016年12月27日星期二

浅谈hook007的自启动手法

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
浅谈hook007的自启动手法  阅读原文»

0x1前言

hook007是国产远控木马的代表性产物,已经在远控市场上活跃了好几个年头。该款远控木马的攻击目标为游戏玩家,木马持有者以交易游戏装备为理由私信玩家,并利用QQ等即时通信软件联系玩家,发送伪装装备截图来诱导玩家点击,之后玩家计算机会出现鼠标被强制移动,黑屏等情况,等一切恢复正常后玩家的游戏装备已经被转移到木马持有者账号中。因此在游戏界该款木马也被称做"强制交易马"。

hook007是基于gh0st远控框架开发而成,在不断的版本更替中,其远控框架基本保持不变,随着版本变化的是其开机自启动方式以及上线ip解析方式,其中自启动方式是变化最为频繁的。为了躲避杀软的检测,hook007修改自启动方式的频率极高,并且由主流的自启动方式慢慢向偏门的自启动方式发展。而对于一款远控木马而言,在系统长期驻留是其必须保证的一项重要功能,特别是对于此类"强制交易马",如何在受害者发现异常并关闭计算机之后还能达到持续控制强制交易的效果是木马作者最为看重的一点。本文将介绍近几个月hook007木马自启动的方式及原理。

 

0x2 自启动方式介绍

  1. 基于dll劫持的自启动方式

dll劫持一直是Windows平台上应用程序普遍遇到的一个问题。由于Windows的动态链接机制,计算机中的应用程序会按照一定的路径顺序检索并加载动态链接库文件,而恶意软件可以往该顺序中的某个节点加入自己的恶意dll以达到劫持的效果。

对于一些系统应用程序,其加载的dll文件一般存放于一些较为敏感的文件夹,这将使dll劫持的行为变得非常敏感,而且非常容易被杀软察觉。如果可以在dll加载路径链之外进行dll劫持,将有极大可能躲避杀软的检测,hook007就是利用了这一点。它通过创建系统中不存在的dll来进行dll劫持,系统中虽然不存在该dll,但存在加载该dll的可执行文件,因此这种在dll加载路径链之外进行dll劫持的方法相当巧妙。完成这一任务的主角就是msdtc.exe。

msdtc.exe是微软分布式传输协调程序,以Windows服务的形式存在。该服务在启动过程中会调用一个系统中不存在的dll文件oci.dll。而木马可以生成一个oci.dll文件供msdtc.exe加载,而该dll文件也会随着服务的启动而启动。

1

图1 将木马文件复制为oci.dll

接着只需要将msdtc服务设置为自动启动即可。

2

图2 使用WMI命令行设置msdtc服务为自动启动

使用dll劫持完成自启动的方法虽然使用方便,但弊端也很明显,一是常规dll劫持难免会设计敏感目录,二是对于非常规dll劫持难以找到可利用的点。样本中利用系统服务加载不存在的dll的方法无非是借助于系统服务进行版本更替时在动态链接库加载方面更新的疏忽,或者是系统服务在加载动态链接库之前没有进行合理的判断。因此单纯利用dll劫持来完成自启动的方法并不多见,更多的是协同dll劫持和注册表项来完成工作,下面将要介绍的就是利用注册表修改和dll劫持的自启动方法。

2.基于注册表修改和dll劫持的自启动方式

如上所述,单纯的dll劫持由于需要替换特定目录下的特定dll,较容易被检测。而一些非常规的dll劫持可利用的点又相当少。因此,hook007远控木马绕开了这样一种劫持方式,通过联动注册表和dll文件路径来进行劫持。

Spooler服务是windows的打印机服务,在服务启动时,会检索注册表键HKLMSYSTEMCurrentControlSetControlPrintEnvironmentsWindows x64(Windows NT x86)下Directory的键值,而该键值对应的是一个文件夹名称,文件夹位于C:WindowsSystem32spoolprtprocs下。Spooler服务检索该注册表之后会查找该文件夹路径下的winprint.dll(x64下,x86下为TPWinPrn.dll)。hook007远控木马利用这一点修改了注册表键值使其指向另一文件夹,然后在C:WindowsSystem32spoolprtprocs路径下新建该文件夹,并将木马以dll的形式存放到文件夹中,重命名为winprint.dll。

3

图3 木马修改相应注册表项

4

图4 木马设置相应键值

5

图5 利用bitsadmin的transfer参数进行文件的复制

完成这些工作之后,只需要将Spooler服务设为自动启动即可。

6

图6 获得Spooler服务句柄

7

图7 将Spooler服务设为自动启动

由于木马将Spooler服务设为自动启动,因此开机后Spooler服务也将自动运行,而该服务会调用相应文件夹下的winprint.dll,同时该dll也遭到劫持,因此木马也就跟随Spooler服务启动。

利用注册表修改和dll劫持来达到自启动的方法相比较单纯的dll劫持而言可利用的点较多,而且灵活性也较强,但还是存在一些问题。以样本中的方法为例,虽然不需要直接劫持系统中的dll,但需要新建一个文件夹来存放木马dll以用于劫持,而在该文件夹的路径设置上也有许多的限制。如果可以在任意路径下达到劫持的效果将是最为方便且最为容易躲过检测的。下面将介绍的就是只利用注册表键值的劫持来达到任意路径下文件劫持的方法。

3.基于注册表劫持的自启动方式

前面提到的结合注册表修改和dll劫持的自启动方式虽然方便且高效,但存在文件目录敏感等问题,如果能够实现任意路径下都能劫持的效果,就可以躲避杀软对于一些敏感目录的检测。要做到这一点,就只能放弃dll劫持,而将目标锁定在注册表键值上,寻找一个可以设置任意路径并被读取的键值作为被利用的点。当然,hook007作者也找到了两个可以被利用的点。

第一个可利用的点来自于RemoteAccess服务。RemoteAccess服务在启动时会读取注册表键HKLMSoftwareMicrosoftRasAdminDll下的DLLPath的值,并加载DLLPath的值所表示的路径下的dll。因此木马可以将DLLPath的值设为木马dll的路径以达到劫持效果。如果将RemoteAccess服务设为自动启动,那么该dll也将随着RemoteAccess服务开机自启。

8

图8 创建相应注册表键

9

图9 设置相应键值

将DllPath的键值设为木马dll的路径后,同样需要设置RemoteAccess服务为自启动,这样木马dll就会随着RemoteAccess服务的启动而启动。

10

图10 使用WMI命令行设置RemoteAccess服务自启动

利用注册表劫持来完成自启动的方法相比较前两种方法更加灵活方便,木马程序不需要触碰敏感目录即可达到dll劫持的效果。

不过样本中使用的方法还是有一些缺陷,主要在于RemoteAccess服务会检测AdminDll的导出表,只有AdminDll的导出表中有MprAdminAcceptNewLink,MprAdmininitializaDll,MprAdminLinkHangupNotification,MprAdminTerminateDll四个导出函数的情况下RemoteAccess服务才能启动成功。因此为了让木马dll自启动更加稳定,就必须伪造这四个导出函数,不过这也会带来另一个问题。由于木马执行远程执行功能是需要一定时间的,而RemoteAccess服务启动成功后可能会调用这些函数中的一个或多个,当然调用伪造的导出函数必定会失败触发异常导致程序腿处,这就会影响木马的持续存在。因此需要一个能够较为稳定存在的dll。

第二个可利用的点就是利用了这样一个较为稳定的dll,它劫持一个常见的注册表键HKLMSYSTEMCurrentControlSetServices,这是一个存放系统服务相关信息的注册表键。样本中的木马劫持了系统服务eventlog,也就是事件查看器,通过修改注册表键HKLMSYSTEMCurrentControlSetServiceseventlog下ServiceDll的值来进行dll劫持。

原值对应的是%SystemRoot%System32wevtsvc.dll,木马作者将其改为木马dll的路径,每次事件查看器启动时就会加载该dll。

11

图11 打开对应注册表键

12

图12 将ServiceDll的值设为木马dll的路径

同样,设置该服务为auto-start即可达到自启动效果。

13

图13 利用WMI命令行设置服务为auto-start

这个点的利用相对于另一个注册表劫持的方法而言灵活了不少,也没有导出函数的限制,但存在注册表路径敏感的问题。由于可利用的点并不多,这相对来说算是一种比较可行的方法。

 

0x3总结

hook007木马持续不断改进自启动方式,其目的

"XTBL"敲诈者木马分析  阅读原文»

0x1前言

"XTBL"敲诈者是一款专门针对Windows服务器的敲诈者木马,最早出现于2015年,不过当时只在小范围传播,并未大面积影响国内服务器。自今年六月起,"XTBL"敲诈者再次爆发,开始大面积影响国内服务器,同时出现多个变种,其危害程度不容小觑。

1

图1 搜索引擎返回结果显示"XTBL"敲诈者盛行

服务器感染"XTBL"敲诈者后,服务器中文档,压缩包,图片等文件均遭到加密,并修改文件后缀为"XTBL",并在文件名中附带黑客的邮箱。图2显示的是某用户服务器感染"XTBL"敲诈者后的桌面截图。

2

图2 感染"XTBL"敲诈者木马后桌面截图

0x2 传播途径分析

"XTBL"敲诈者的攻击目标主要为Windows服务器。黑客入侵服务器后释放敲诈者木马程序,而敲诈者木马在加密文档的同时枚举网络资源,查找工作组和域内所有共享服务器的共享资源,并对其进行加密,以达到二次传播的效果。对照用户服务器登陆日志以及文档最后修改时间可以发现,服务器感染敲诈者木马之前一段时间曾遭到疑似爆破登陆。

3

图3 文件最后修改时间

4

图4 文件加密之前服务器曾遭到疑似爆破登陆

5

图5 "XTBL"敲诈者文件创建时间

0x3 样本分析

本文以最新捕获的"XTBL"样本为例进行分析。和大部分敲诈者木马相似,"XTBL"敲诈者木马解密数据段的数据,创建本进程另一实例作为"傀儡"进程进行进程替换,以达到运行shellcode的目的。初始进程可能伪装成安装包或其他应用程序,无恶意功能,载入shellcode的"傀儡"进程执行敲诈者木马的主要功能。

6

图6 "XTBL"敲诈者伪装成安装程序

从Dump出的shellcode可以看出,程序主要由五大功能模块组成。包含API字符串的解密及地址获取,启动项的添加,删除卷影,发送服务器信息以及加密文件。

7

图7 五大功能模块

对于API函数字符串的解密,则是取地址0x40D450中存放的常量字符串,偶数位四字节异或0x98765432,奇数位四字节异或0x12345678所得。之后通过得到的API字符串获取相对应的函数地址,构建导入表。

8

图8 解密API字符串

该程序对字符串的解密方法十分讲究,程序中使用的所有字符串包括RSA公钥都由一串位于地址0x41F900的密文动态解密得到,解密算法有多种,都是基于异或解密的方式,并由一常数控制密文索引起始值。下图显示程序中使用的部分字符串的解密结果。

9

图9 部分字符串解密结果

相比较灵活的字符串解密方式,程序的自启动方式显得"墨守陈规",通过设置相关注册表项以及复制文件到启动目录两种方式添加启动项。

10

图10 设置相关注册表项

11

图11 复制自身到启动目录

在进行加密之前,程序会删除卷影备份。

12

图12 删除卷影备份

值得一提的是,"XTBL"敲诈者使用管道来传递命令行,这和"Ceber"系列敲诈者使用方法相同,而通过"mode con select=1251"命令行设置MS-DOS显示为西里尔语可能与作者来自俄罗斯有关。

完成以上准备工作之后,程序产生两组密钥块,其中一组用于本地文件加密,另一组用于网络共享资源文件加密。

13

图13 产生两组密钥

密钥块大小为184字节,前32字节存放RC4加密后的随机数密钥,该密钥用于之后加密文档。为了加强随机数的随机性,程序以系统时间作种生成随机数作为循环次数,每次异或地址0x4326F0中的值与系统时间后求其SHA-1值,并将最终所得随机数经RC4加密得到密钥。

14

图14 产生RC4加密的随机数密钥

密钥块第33字节起存放系统序列号,用作服务器的唯一标识符。之后的128字节存放RSA加密后的随机数密钥,而RSA公钥的SHA-1值则存放在最末端的20字节中。

15

图15 密钥块生成过程

16

图16 密钥块分布图

密钥块产生之后,程序会将密钥块中部分内容以及其他系统信息以POST的方式发送至黑客的服务器上。每个字段的标识及参数值如下表所示。

000

表1 发送的数据

除了在加密文件之前发送数据,在加密完成后也会再次向黑客服务器发送数据,两者用函数最后一个参数作区别,当最后一个参数为0时表示即将进行加密,为1时表示加密完成,参数不同带来的结果是POST数据的目的地址不同。

17

图17 两次发送数据

之后程序开始进行加密,由两个线程完成加密工作,其中一个线程枚举网络资源并对获取的共享文件进行加密,另一个线程加密本地文件。

18

图18 枚举网络资源并加密

加密本地文件的线程中,通过枚举磁盘中的文件并判断文件后缀来确定需要加密的文件路径,完成文件路径的确认后,程序开启四个子线程进行加密。由于父线程负责传递文件路径给子线程以及开启子线程进行加密,如果只创建一个子线程进行加密,当子线程由于某些原因无法返回时,父线程将无法继续执行下去,这会导致父线程无法传递下一个文件路径并且无法再创建新的子线程。而开启四个子线程进行加密时,只需保证其中一个线程正常返回即可继续下一轮加密。

19

图19 开启四个线程进行加密

加密的第一步是判断文件大小。当文件大小大于0x180000字节时,直接对文件内容进行加密,并将文件重命名;当文件大小小于等于0x180000字节时,则创建新文件并加密旧文件内容后写入新文件,之后删除旧文件。

20

图20 根据文件大小选择加密方案

之后程序使用之前生成的随机数初始化AES密钥,加密文件内容

阅读更多内容

没有评论: