APT Group系列——Darkhotel 之中间组件篇

一、手法简述

Darkhotel组织攻击链中使用的注入和中间下载组件,目的是为了得到下一阶段程序。这类组件类型从可执行文件到脚本不等,通常包含大量环境检测,以对抗调试环境和杀软。

Darkhotel还使用专门的升级工具,用于升级攻击链末端的RAT和窃密组件,这与传统RAT自身集成更新功能有所不同。

此外,使用感染类和传播类工具亦是Darkhotel的一大特色,这直接延升了该组织的攻击范围。

二、中间执行工具

2.1 注入器

2.1.1 环境检查

注入器执行时会进行时间年份检查,若满足则执行后续动作,不满足则退出。之后通过LZNT1算法解压部分内存数据并校验。

随后对运行环境进行一系列检查,检测包括Mutex存在性,文件名是否为Hash值,是否运行于VMware、Sandbox、Cuckoo、Avast等虚拟机或沙箱环境,是否有其他分析工具进程存在。

通过检查目录”c:\avast! sandbox”来检测Avast沙箱。

通过检查SbieDll.dll来检测Sanboxie沙箱。

通过检查管道\\.\pipe\cuckoo来检测Cuckoo沙箱。

通过设备检查来检测是否运行于VMware环境。

通过检查特定进程如Filemon.exe和Regmon.exe来检测Windows sysinternals等套件。

2.1.2 持久化

使用COM组件IShellLink,于自启动菜单下创建名为Windows Update的软链接,并在以下注册表项位置设置自启动键:

2.1.3 注入

先经过3DES解密内存数据再经LZNT1解压得到dll,将其注入进程,包括:

2.2 HTA下载组件

Darkhotel在10年前就开始使用HTA文件在目标系统上植入恶意程序。

初始hta文档采用在body内置脚本,脚本使用url编码,通过eval执行代码,所执行代码为嵌套式hta,如此往复。

重复多次解码操作,我们最终得到如下js脚本:

脚本内置16进制字符数组通过逐字节与0x3D异或,得到完整的可执行文件,并写入系统Temp文件夹下,名称为internet_explorer_Smart_recovery.exe,后通过shell将其运行。

该可执行文件作为下载器,首次运行会分段解密并将bat命令写入隐藏文件并重命名执行,目的是实现自删除。

同时解密出C&C地址,带参数执行进程创建任务,总计3个参数,格式为:

其中,Argv1为硬编码字串,Argv2为下载链接,Argv3为待下载文件名。若程序带参运行,则进入下载流程,并删除下载自身的HTA文件。

三、组件升级工具

3.1 微下载器

Darkhotel在2014年使用过一类微下载器,由WinRar SFX自解压文件释放,专门用于升级恶意组件。这类下载器与后文提到的Karba下载器共用了部分代码,可视为是Karba下载器的简化版。

3.1.1 持久化 & 环境检测

下载器会将为当前可执行文件注册为自启动项:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\

这类下载器在连接C&C之前,会检查之前的组件信息,使用指定字节覆盖,为取证制造困难。示例目录如下:

其中的googletoolbar.exe暗示了该组织在谷歌工具栏升级包中植入后门。

此外,下载器还存在延时操作,例如查找当前目录下是否存在某个文件,没有则正常连接C&C。若文件存在,且创建时间距今已超过指定时间,则同样使用指定字节覆盖,否则不发生任何下载升级行为。

3.1.2 C&C通信

下载行为分为两个阶段。

第一阶段先请求,向第一个C&C发起HTTP请求,返回的内容需包含符合以下正则格式:

其中,数字和点部分代表IP地址。若不符合格式,则更换C&C和资源路径反复下载。此外,是否一次连接成功并得到正确格式的数据也会影响C&C和请求资源的组合。

第二阶段,检查C&C返回的IP是否为本机地址,即判断本机与C&C发生通信的是否为外网地址。检查的结果同样会导致下一步连接的C&C和请求资源发生变化。接收内容的格式如下:

对”DEXT87up”后面的内容按分号切割,分号前面为文件长度,后面为经过简单异或加密的PE文件。解密的PE文件被保存在当前目录并被执行。之后下载器将睡眠3000秒,醒来后对该PE使用指定字节进行覆盖,之后再重复上述通信行为。这表明下载的可执行程序具有时效性,因此需要不断更新。

3.2 Karba下载器

3.2.1 功能性质

Karba下载器是微下载器的升级版,区别在于更多的信息收集和环境监测,通信协议也有变化。

3.2.2 持久化 & 环境检测

  1. 检查注册表自启动项,若未发现自身文件名则进行注册:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

  1. 检测是否处于VMWare且网段是否为192.168.100,若是则退出程序。同时,下载器删除当前目录下所有后缀为exe的可执行文件,以隐藏旧组件痕迹。
  1. 检测杀软名进程名单,在上传到C&C时使用预置的杀软缩写和索引位。若检测到多个杀软,则其索引号之间由+号连接,若未检测到任何指定杀软,则保留一个+号。

3.2.3 搜集系统信息

搜集计算机名称和用户名。

访问注册表,搜集CPU名称、系统语言id和系统版本编号信息,格式化后做简单加密和Base64编码用来上传。

根据语言代称,初始化不同的字符串用于后续发送:

在当前目录查找名为proto.dat文件,该文件包含的加密的短字符串,用于选择C&C。

3.2.4 C&C通信

该组件根据proto.dat中BBX字符串的索引号来选择C&C,使用HTTP URL参数来上传搜集的信息,成分如下:

  1. C&C索引和系统语言代称,为BB?字符串解密后的数值加上语言代称“step2-down-?” 
  2. MAC地址的hash值。
  3. 加密后的系统信息。
  4. 杀软索引列表。

请求参数的格式为:

返回的内容需包含某个特定字符串方可有效,例如”minmei”。之后紧接指令:

若接收up,则对后面的内容按分号分割,分号前面的是文件长度,后面是加密的内容:

可见,这很接近前文微下载器的协议。

四、感染 & 横向移动

4.1 Pioneer组件

4.1.1 功能

Pioneer组件见于2014年,专用于感染用户磁盘上的特定PE文件,注入恶意代码以实现后续攻击。

4.1.2 环境检测

该组件创建互斥体保证唯一进程实例,执行I/O指令和查看网段来检测VMware,并检查用户所在内网网段,若属于192.168.100,则退出程序。

4.1.3 感染PE文件

该组件创建一个窗口,每次收到消息时都会实施感染PE文件的操作,记录遍历的盘符。该组件寻找本地硬盘,并记录USB的盘符名称和编号。

在遍历目录同时,专门对名称中包含”INSTALL”、”SETUP”和”UPDATE”的PE文件进行感染。这类文件多半是安装或升级包,可能被再次运行,故容易受到攻击者的利用。

感染时,该组件在内存中创建原文件副本并插入一个名为”.rdat”的新节区并覆盖原文件,并修改入口点,同时在当前目录创建文件(例如repnum.dat)以记录被感染文件的个数。

如图所示,被感染的PE文件多出一个节:

被感染程序执行时,先执行.rdat中的Shellcode,再跳回原来的入口点执行。Shellcode中包含了加密的PE组件、组件名、释放路径和注册表自启动项路径等信息。

Shellcode会解密PE组件并释放至指定目录,并注册为自启动项,同时删除指定PE文件的注册表项(可能是之前的组件,如tintsetp.exe),启动释放的组件后便执行被感染程序的正常流程。

4.1.4 持续感染

感染PE文件的组件会监视USB设备插入拔出的情况。

若监测到USB设备插入,则该组件则会前往之前遍历的最后一个盘符进行感染操作。如果遍历最后的盘符为USB且与当前插入盘符相同,则USB中PE文件将可能被感染。有设备移除时,该组件将重复上文操作对本地磁盘再次发起感染操作。不过,这只针对Windows XP及以下版本,再次表明攻击具有定向性。

此外,该组件还监控用户目录C:\Windows\Users\username及其子目录下的文件变化情况,包括文件和目录的创建、删除和重命名。

若监测到变动,且文件为包含”INSTALL”、”SETUP”和”UPDATE”的PE文件,并位于常用特定子目录,则发起前文所述的感染操作。涉及的子目录名如下:

4.2 Ramsay组件集

4.2.1 功能

Darkhotel在2020年4月被发现使用Ramsay组件集在隔离网络中感染文档,以存放收集的信息。

4.2.2 释放组件

本次事件获取的样本为被Ramsay V2感染的7z安装程序,并不是最初的样本,显示有效数据外包含额外数据。

被感染的文件会被添加一个Dropper,负责释放后续的一系列功能组件:

Dropper运行以后先创建目录%APPDATA%\Microsoft\UserSetting\,然后检查命令行参数是否为“gQ9VOe5m8zP6,若是则开始从自身读取内容释放其他功能组件。

释放的组件及功能:

4.2.3 感染PE bindsvc.exe

bindsvc.exe的主要功能是实现横向移动,通过感染非系统盘和内网网络共享中的可执行性文件,等待被感染程序被攻击目标触发。感染的结果与本次发现的7z样本一致。修改可执行程序,等待在内网中传播。

4.2.4 Rookit组件Hfile.sys

Hfile.sys是一个32位驱动程序。通过分析发现,该驱动在内部被称为HideDriver,通过对SSDT表中函数ZwQuerySystemInformation和ZwQueryDirectoryFile挂钩,实现对文件和进程隐藏的功能。

ZwQuerySystemInformation的hook函数会处理SystemProcessInformation对应的返回数据。而ZwQueryDirectoryFile的hook函数则对文件相关的操作进行处理,涉及操作类型包括:

此外,通过控制码,可对文件和进程隐藏做进一步操作。例如,控制码0x222404可用来在宽字符的进程或文件路径后面增加”;*;*”:

wimsvc.exe文件隐藏前后示例截图:

所有控制码及功能如下:

4.2.5 多功能组件 msfte.dll/oci.dll

该组件包含32位和64位,通过对文件内容分析,文件于内部被命名为Ramsay。

msfte.dll被释放到系统system32目录下,会劫持系统服务WSearch,被系统程序SearchSystemHost.exe以系统权限运行。

4.2.5.1 感染文档

为了在隔离网络中进行活动,该组件通过文档进行自定义的传输和指令控制功能,方式是将信息附加到文档,等待时机传送出去。一旦这些文档到达已被攻击者植入了后门的主机时,相关后门会找到有附加信息的文档并将之取出,回传至C&C,同时读取运行文档中的隐藏程序。

通过释放winword.vbs以获取最近文档中的文本内容。访问Windows Recent目录,窃取最近文件并使用组件sharp.exe(WinRAR)进行打包,密码为PleaseTakeOut6031416!!@@##:

判断当前模块是否已注入HYON.exe、BON.exe或Cover.exe进程中,目前无法判定其为何种工具。

读取文档中的隐藏程序并运行,并将自身注入explorer.exe。

4.2.5.2 搜集系统信息

msfte.dll会将自身注入explorer.exe,并将版本号写入version.ini文件,通过一系列命令获取系统信息。这些信息经过加密,保存到%APPDATA%\Microsoft\UserSetting\MediaCache\目录下的rtt文件中。

通过以下命令搜集进程、系统和网络信息,并检查自身模块:

其他的搜集行为还包括:

  • IE浏览器网络缓存目录中的文档文件(.txt\.doc\.xls)。
  • 当前机器磁盘、目录和文件信息。
  • 创建名为lua的窗口,并设置回调函数,当有可移动存储设备接入时,采集相应的信息。
  • 内网共享目录扫描,除了获取共享目录和文件相关信息外,还试图搜集目录中的.txt .doc .xls文档文件。

此外,该组件会在内网中扫描永恒之蓝漏洞中的CVE-2017-0147,但只是发送畸形数据包,并未利用。

五、总结

升级功能从RAT中独立出来并加入清理功能,使得该组织得以不断更新组件,以及时调整后续攻击的方案。

此外,该组织对PE感染和文档感染工具的利用扩大了攻击范围,使得隔离环境下的木马传播和信息传递得以实现。而利用文档移动来转移内容,并让相关组件潜伏在内部网络中以等待时机,表明该组织掌握了目标所处的网络环境和活动规律,计划之周详,绝非短期之谋。

相关阅读:

附:关于伏影实验室

伏影实验室专注于安全威胁研究与监测技术,包括但不限于威胁识别技术,威胁跟踪技术,威胁捕获技术,威胁主体识别技术。研究目标包括:僵尸网络威胁,DDOS对抗,WEB对抗,流行服务系统脆弱利用威胁、身份认证威胁,数字资产威胁,黑色产业威胁 及 新兴威胁。通过掌控现网威胁来识别风险,缓解威胁伤害,为威胁对抗提供决策支撑。

Spread the word. Share this post!

Meet The Author

伏影实验室专注于安全威胁与监测技术研究。研究目标包括僵尸网络威胁,DDoS对抗,WEB对抗,流行服务系统脆弱利用威胁、身份认证威胁,数字资产威胁,黑色产业威胁及新兴威胁。通过掌控现网威胁来识别风险,缓解威胁伤害,为威胁对抗提供决策支撑。

Leave Comment