Darkhotel组织渗透隔离网络的Ramsay组件分析
1.概述
◆第一,假设目标终端部署杀软,则文件感染的方式很容易被检出,但根据活跃样本的狩猎情况并未发现更多的样本,说明Darkhotel活动限于特定的目标;
◆第二,办公场景的应用安装包多数来自于共享盘下载或者同事之间的信任分享,尤其在隔离网络场景,无法去应用官网下载;
◆第三,早期有关Darkhotel的披露中,如果缺少组件则会通过Powershell下载,但是本次Darkhotel活动的分析中并未涉及网络请求或者下载行为;
◆第四,本次Darkhotel活动不是基于网络协议的C2,而是基于自定义的文件传输控制指令,当Ramsay扫描到被带入隔离网络环境的感染文档,则读取对应的指令并执行指令对应的载荷对象作为攻击利器在隔离网络传播。
通过关联分析捕获到了Darkhotel初始投递阶段的载荷,一镜之中,窥以全豹。
图 1‑1 Darkhotel组织Ramsay组件渗透活动对应的ATT&CK映射图谱
表 1-1 Darkhotel组织Ramsay组件渗透活动具体技术行为描述表
ATT&CK阶段/类别 | 具体行为 |
初始访问 | 通过感染可移动介质传播自身或者疑似使用鱼叉式钓鱼邮件传播 |
执行 | 通过诱导用户执行,以及利用Windows服务、加载模块API执行 |
持久化 | 通过新建服务、利用Applnit DLL(注册表项)、利用计划任务 |
提权 | 绕过用户账户控制(UAC) |
防御规避 | 进程注入、软件加壳、DLL搜索顺序劫持、删除文件 |
发现 | 发现文件和目录、发现网络共享、发现进程 |
横向移动 | 拷贝远程文件、利用远程服务、通过可移动介质复制 |
收集 | 自动收集、收集本地系统数据、收集网络共享驱动数据、收集可移动介质数据、获取屏幕截图 |
命令与控制 | 通过可移动介质通信、使用自定义C2协议 |
渗出 | 压缩数据 |
2.恶意代码分析
2.1被感染软件的分析
图 2‑1 被感染软件图标
图 2‑2 安装包诱饵结构图示
正常7Zip运行器负责运行正常的7Zip安装包,在前台弹出交互界面。
图 2‑3 弹出正常7Zip安装界面
Dropper负责释放后续的一系列功能组件:
Dropper运行后需先检查是否要创建“%APPDATA%\\Microsoft\\UserSetting\\”目录,再检查自身命令参数是否为"gQ9VOe5m8zP6",是则开始释放多个功能组件。Dropper释放的方式与7Zip诱饵有所不同,且更直接:从Dropper自身的指定偏移开始,读取指定大小字节,再将前两字节改回MZ头,最后写入指定位置。
包含的各组件罗列如下,根据系统环境选择释放:
表 2‑1 各功能组件
释放路径 | 大小 | 主要功能 |
%TEMP%\\%S2.exe | 104960 字节 | 开源工具UACME,用于BypassUAC |
%System32%\\Identities\\wideshut.exe | 595968字节 | Dropper自身复制而来 |
%System32%\\Identities\\sharp.exe | 562064字节 | WinRAR官方主程序 |
%System32%\\Identities\\bindsvc.exe | 299082字节 | 感染本地和内网共享中的EXE,突破网络隔离 |
%system32%\\drivers\\hfile.sys | 65280字节 | 内核Rootkit |
%system32%\\msfte.dll (64位) | 221184字节 | 窃密 | 打包 | CVE-2017-0147漏洞扫描 | 基于文件传输的C2通讯 |
%system32%\\msfte.dll (32位) | 190464字节 | 同上 |
%system32%\\oci.dll (64位) | 221184字节 | 窃密 | 打包 | CVE-2017-0147漏洞扫描 | 基于文件传输的C2通讯 |
%system32%\\oci.dll (32位) | 190464字节 | 同上 |
%system32%\\wimsvc.exe | 595968字节 | Dropper自身复制而来 |
以下例举核心功能组件:
" bindsvc.exe "组件
"msfte.dll"组件
2.1.1 导出函数:DllEntryPoint()
图 2‑4 从用户近期Word文档中提取文本
图 2‑5 "msfte.dll"组件的内部名
2.1.2 导出函数:AccessDebugTracer()和AccessRetailTracer()
1.向explorer.exe进程注入自身。
2.将自身版本号写入"%APPDATA%\\Microsoft\\UserSetting\\version.ini",此次版本为8。
3.采集系统信息,包括系统版本、进程列表、网络连接、网络配置、路由信息、ARP表、调用msfte.dll的进程、网络分享、Pin "server"主机的结果(正常时不存在)、调用了hfile.sys的系统服务。这些信息会经加密,保存至"%APPDATA%\\Microsoft\\UserSetting\\MediaCache\\"目录下的. rtt文件。
图 2‑6 采集系统信息
4.搜集IE浏览器网络缓存目录中后缀名为".txt"、".doc"和".xls"的文档文件:
"%USERPROFILE%\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files\\Content.IE5\\"
5.收集各磁盘信息,包括目录和文件列表、磁盘名、总空间、剩余空间。
枚举A到Z,采集当前已有磁盘的信息。
创建名为"lua"的窗口,设置lpfnWndProc函数,实现当有外部的可移动存储设备接入时采集其信息:
图 2‑7 采集外部可移动存储设备的信息
6. 内网CVE-2017-0147漏洞扫描:
CVE-2017-0147为著名的永恒系列中的Windows SMB 信息泄漏漏洞,这里攻击者通过向内网中Microsoft 服务器的消息块 1.0 (SMBv1)发送特殊数据包,仅检查其是否存在该漏洞,并不利用:
图 2‑8 发送漏扫数据包判断是否可利用
7. 内网共享目录扫描:
信息搜集:采集内网网络分享的子目录和文件列表、磁盘名、总空间、剩余空间。
文件搜集:搜集网络分享目录中后缀名为".txt"、".doc"和".xls"的文档文件。
8. 加载"%SystemRoot%\\System32\\Identities\\"目录下名为"netmgr_%d.dll"的DLL,%d取1到9。该DLL由攻击者传入的隐藏数据释放(参见第3章Ramsay基于文件传输的通讯方式),目前未获得实体:
图 2‑9 加载netmgr_%d.dll
2.2漏洞利用文档分析
图 2‑10 诱饵文档的元数据包含韩语
图 2‑11 图片附加的特殊标志和PE数据
图 2‑12 文档诱饵的执行流程
运行后先检查自身参数是否为"gQ9VOe5m8zP6"。 运行一组CMD命令,采集系统信息。 收集本地和外部可移动存储设备的信息。 加载攻击者投递的“netmgr_%d.dll”,%d取1到9。 窃取近期用户文件的快捷方式。 释放开源脚本,从用户近期Word文档中提取纯文本。 使用开源UACME组件BypassUAC。 基于文件传输的命令控制,指令和功能都相同。
具有更少的功能组件 :
表 2‑2 各功能组件
释放路径 | 大小 | 主要功能 |
%PROGRAMDATA%\identities\netwiz.exe | 990208字节 | Dropper自身复制而来 |
%WINDIR%\syswow64\dpnom.dl | 71168字节 | 向.doc文档写入隐藏数据 |
%PROGRAMDATA%\sharp.exe | 562064字节 | WinRAR官方主程序 |
每隔30秒截取一次屏幕 当有外部可移动存储设备接入时,除了采集信息,还会截取此刻的屏幕。 RAR打包的密码为PleaseTakeOut!@# 基于自定义的文件传输控制指令,参见第3章。
3.突破隔离网络猜想
3.1突破隔离网络猜想
步骤1. 感染正常的EXE文件,通过受害者携带进入隔离网络的机器中执行。
步骤2. 被攻陷的隔离网络机器中的窃密数据,被附加到正常Word文档的末尾;
(1)附加窃密数据的Word文档被受害者携带撤出隔离网络;
(2)攻击者找到这些Word 文档,读取附加的窃密数据;
步骤3. 攻击者感染新的Word文档,附加命令和执行对象。
(1)Word文档被受害者携带进入隔离网络;
(2)附加的命令和执行对象在隔离网络中已被攻陷的机器中得到执行;
(3)执行结果的日志随着步骤2也被带出隔离网络。
图 3‑1 突破隔离网络猜想流程图
3.2突破隔离网络实现代码分析
攻击者突破隔离网络的手段,是通过感染本地非系统盘和内网共享目录中的EXE文件(特别是可移动存储设备中),形成跟7Zip软件诱饵结构相同的新诱饵,然后寄希望于攻击目标通过移动存储设备携带进入对外隔离的网络环境中得到运行。
图 3‑2 正常EXE文件的感染流程
图 3‑3 感染完成的结构模板
通讯方式:基于文件传输控制指令
指令和执行对象的传入:
攻击者可在隔离网络的外部,感染受害者主机中的.doc和.docx文档,在尾部附加指令和数据形成下图中的结构。等待攻击目标携带抵达隔离网络中的已感染机器,附加的数据将被Ramsay组件读取并得到执行。
图 3‑4 指令数据附加结构
表 3‑1 可接收的指令和功能
指令 | 功能 |
Rr*e#R79m3QNU3Sy | 读取执行对象,向TEMP目录释放exe并运行。 |
CNDkS_&pgaU#7Yg9 | 读取执行对象,向%ALLUSERSPROFILE%\\Identities\\目录释放netmgr_%d.dll并加载。 |
2DWcdSqcv3?(XYqT | 读取执行对象,运行CMD命令。 |
指令完成后,附加数据被删除,感染文档得到还原。
窃密数据渗出:
步骤1:搜寻本地的.doc和.docx文档,要求其创建时间或最后访问时间在1个月以内。
步骤2:RAR加密打包集中存放着窃密数据的文件夹,密码为PleaseTakeOut!@#
步骤3:对RAR压缩包再经一轮自定义加密。
步骤4:向.doc或.docx文档的末尾附加数据,包括Magic标志、本机硬件GUID和加密的打包数据。由于同一个文档文件可能被多次感染,因此尾部也可能有多个附加组合。
图 3‑5 窃密数据附加结构
步骤5(猜测):等待受害者携带这批附加着数据的文档渗出隔离网络,抵达已被攻击者攻陷的主机或共享目录。
步骤6(猜测):攻击者根据固定的Magic值,定时在攻陷的受害者主机或共享目录中搜寻文件,找到这批文档,取出尾部附加的受害主机GUID和窃密数据,完成渗出。
4.样本关联与组织归属分析
4.1样本关联
图 4-1 已知“accept.docx”包含的afchunk.rtf
图 4‑2 新关联出的afchunk.rtf
新关联出的“afchunk.rtf”的母体来自RAR压缩包“技術協議.rar”,整体执行流程如下:
图 4‑3 关联样本的完整执行流程
“googleofficechk.sct”首先将系统当前进程列表的信息构成如下URL,返回给C2:
http://find-image.com/img/image.php?K=F84hFhfeHUiFQE&test=Base64编码的进程列表
图 4‑4 获取进程列表并返回给C2
表 4‑1 可接收的指令和功能
指令 | 功能 |
tta | 将随机命名的文件,重命名为给定的字符 |
ttx | 将随机命名的文件,重命名为:给定的字符+.exe,休眠5秒后将其运行 |
ttt | 将随机命名的文件,移动到临时目录下的给定字符作文件名的文件 |
ttw | 将随机命名的文件,移动到“%LOCALAPPDATA%\Roaming\Microsoft\Word\STARTUP”目录下,文件名换为:给定的字符+.wll,以此实现在Word程序启动时将其调用运行 |
其他 | 将随机命名的文件,重命名为:给定的字符+.exe+其他 |
图 4‑5 “svupdate32.exe”的共享代码
图 4-6 DarkHotel基于Dropbox的历史木马 | 图 4‑7 Ramsay活动中的netwiz.exe |
图 4‑8 三者间存在的共享
4.2组织关联
1. 算法重叠
图 4‑11 此次样本的算法样例
图 4‑12 奇安信披露的算法
2. 功能和技术重叠:
劫持系统的WSearch服务,实现持久化,获得SYSTEM权限。 使用WinRAR加密打包窃取的文件。 创建名为"lua"的窗口,实现文件窃取功能。 通过一组CMD命令收集当前系统信息,这组命令大部分重合且顺序相同。
3. 特殊标志头重叠:
图 4‑13 此次Ramsay木马的标志头
图 4‑14 以往Darkhotel特种木马的标志头
图 4‑15 Darkhotel 特殊标志演化时间轴
与Darkhotel特种木马重叠的代码很多。例如,判断C2返回数据的开头是否为"<!DOCTYPE html>",是则开始解密。若返回的是"reset",则删除"vector.dat"文件:
图 4‑16 2019年的样本 |
图 4‑18 诱饵文档的元数据包含韩语
图 4‑19 攻击者通过韩语版Office插入图片
5.小结
参考资料
[1] 疑似Darkhotel APT组织针对中国贸易行业高管的定向攻击披露https://s.tencent.com/research/report/646.html
[2] Darkhotel APT团伙新近活动的样本分析https://ti.qianxin.com/blog/articles/analysis-of-darkhotel/
[3]“寄生兽”(Darkhotel)针对中国外贸人士的最新攻击活动披露https://s.tencent.com/research/report/741.html
[4] 震网事件的九年再复盘与思考
往期精选
●精准投放Tsunami僵尸网络和“魔铲”挖矿木马的行动分析
●勒索软件ProLock藏身图片,安天智甲有效防护
●安天对“超高能力网空威胁行为体”系列分析回顾
●履职这一年 | 全国政协委员肖新光:全面提升网络安全应急保障能力