概述
Gamaredon是一个俄罗斯的APT攻击组织,首次出现于2013年,主要是针对乌克兰进行网络间谍活动。在Gamaredon最近的一次攻击活动中,发现该组织利用Telegram来提供C&C服务器和payload下载地址。
2.流程图
2. 详细分析
1.钓鱼邮件分析
攻击者使用鱼叉式电子邮件钓鱼方式将包含由远程模板钓鱼漏洞的电子邮件发送给受害者。
当受害者打开电子邮件中的附件文档时, 或从服务器中下载包含恶意宏代码的文档。
在此次攻击中,远程模板使用的链接与Gamaredon在以往的攻击活动中使用的模板链接很相似,都包含字符”WIN-HP59CQH9A1H”,模板文件名使用”wft”作为后缀名, 该组织以往攻击活动中使用过的模板链接如下:
1 | hxxp://pretend.goal6.koportas.ru/WIN-HP59CQH9A1H/count/almost.wft |
恶意文档从远程服务器成功加载恶意模板文件后,在文档被关闭时开始执行恶意宏代码中的函数Document_Close。
宏代码使用的字符串混淆方式较为简单,就是将代码中的一些字符使用其他的无效字符来替换,在使用之前再将这些字符替换回来。使用方法CodeModule.AddFromString将去混淆后的字符串作为代码块添加到宏模块中。
方法PRESENT10599为前面添加到宏模块中的代码块中定义的方法,主要功能为将base64数据写入到文件中。
2.stage1 混淆VBS脚本
判断”%USERPROFILE%\Downloads\bars”是否存在, 如果不存在则创建该目录,fogm4为该方法的参数, 值为base64后的数据,在该方法内将解码后写入文件decrepit,然后通过创建计划任务的方式在执行该文件。
在计划任务创建成功后, 通过将宏代码从文档中移除来清除操作痕迹以避免被发现。
计划任务创建代码如下图,使用的计划任务名为”Synchronize-Time-US”,在当前时间7秒后触发计划任务,执行的间隔时间为5分钟,通过程序wscript来执行vbs脚本。
3.stage2 混淆VBS脚本
该阶段的vbs脚本由stage1中的base64编码的数据解码后写入文件并通过计划任务执行,主要功能为解密下一阶段的vbs脚本并执行。使用的混淆方法与前面类似, 最后通过Execute执行解密后的VBS脚本。
4.stage3 混淆vbs脚本
该阶段vbs脚本主要功能为获取C&C地址以及从C&C下载恶意程序。攻击者使用两种方式来获取C&C地址。
1.C&C地址获取
访问链接”hxxps://t.me/s/zacreq”, 并使用正则表达式提取对应的IP地址。
提取IP地址代码如下,主要是通过正则匹配提取两个”==”之间的内容并将字符”@”替换成”.”,替换后的数据为标准的点分式IP地址。
如果从Telegram 中获取到的字符长度小于5,则使用decrepit.mexv.ru的IP地址作为C&C服务器。
2.下载payload
恶意脚本使用Get请求从服务器上下载下一阶段的payload,请求的链接为:
1 | Hxxp://{c&c}/decrepit{0到100的随机数}/bars.x=?device |
在请求头的user_gent字段附加用于标识受害者的标识符,请求头的host被设置为”mirZ62178.net”等等,攻击者可能会请求头的数据进行校验,如果不符合则返回错误的数据或者访问失败,这样可以避免分析者通过直接访问网页来获取下一阶段payload并进行分析。
在分析过程中由于C&C服务器没有下发payload, 无法继续分析payload。但从后续的代码中可以得知返回的payload为base64编码的vbs脚本。
5.InfoStealer
攻击者最终投递到受害者的恶意程序为InfoStealer,主要为从受害者机器窃取重要数据。
1.创建互斥量
恶意程序在执行时创建互斥量并通过错误码来判断是否已经由实例在运行,避免程序重复运行。
2.C&C地址获取
随机生成一个12位的字母, 并将其作为域名”celticso.ru”的子域名部分。
2.文件窃取
1.窃取的文件类型
递归遍历指定目录下的所有文件或文件夹,如果遍历到的文件类型位目录,则判断是否包含特定的字符串,如果是则继续递归遍历文件夹。
这些字符串如下:
如果是文件则首先判断文件名是否包含”.”然后检测文件后缀名和判断文件是否为空,对于每个符合条件的文件由函数参数callback进行处理。
检测的所有后缀名如下:
1 | Doc docx xls rtf odt txt jpg jpeg pdf ps1 rar zip 7z mdb |
2.收集所有磁盘指定类型文件
枚举所有磁盘驱动器和网络磁盘并遍历所在磁盘下的所有目录找到符合条件的文件。如果磁盘驱动器位C盘,则只遍历目录”C:\\Users”下的目录。
恶意程序使用文件”**%appdata%/profiles_c.ini**”来标记文件是否已上传,此文件保存了多个文件的文件信息的md5, 每0x10大小的数据对应一个文件信息的md5值,文件信息使用如下格式拼接:
1 | {文件名}{文件大小}{文件创建时间} |
在需要上传文件时,读取profiles_c.ini数据来判断当前文件是否已经被上传,如果已经上传则不需要做任何操作;如果当前文件没有上传则上传并写入md5到文件profiles_c.ini。
3.收集可移动设备指定类型数据
遍历所有磁盘驱动器并判断是否是可移动设备,如果是则将符合条件的文件拷贝到临时目录中专门存放从可移动设备收集的文件的目录.目录名为12位随机字母, 拷贝成功后
窃取的文件存放的路径规格如下:
1 | %temp%\{12位随机字母}\connect\{可移动设备的序列号}\{文件的原始路径} |
以路径”e:\topsec\job.docx”为例, 则将其拷贝到路径:
1 | %temp%\{12位随机字母}\connect\{可移动设备的序列号}\topsec\job.docx |
4.上传临时目录指定类型文件
恶意程序在目录”%temp%”创建了一个以12位随机字母作为文件名的目录,用于存放所有从可移动设备窃取的文件,当需要上传数据时从该目录遍历所有符合条件的文件并上传到C&C服务器。
获取受害者的用户名、计算机名和C盘序列号,并以如下格式拼接并作为机器标识符machine_info。
1 | {计算机名}||{用户名}||{12位随机字符串}||{c盘序列号} |
对于每个文件,获取其文件名、文件修改时间和文件大小并按如下格式拼接成包含文件信息的字符串file_info。
1 | {固定值6000}&&{文件名}&&{文件修改时间}&&{文件大小} |
将machine_info和file_info以”{machine_info}&&__&&{file_info}”的形式拼接并base64编码后作为文件上传请求头的一部分。恶意程序使用”multipart/form-data”类型上传文件数据, 使用的请求头格式如下:
1 | ------{12位随机值}\r\n |
如果文件上传到C&C服务器成功后,如果C&C服务器返回数据则解析C&C指令并执行,最后还会将上传成功的文件删除。
3.执行C&C指令
首先从远程服务器接收0x14大小的数据并解析相关结构,具体结构如下:
1 | Struct packet{ |
当type为1表示文件为可执行文件,为2时表示为vbs脚本文件,如果为其他值则为二进制数据。
恶意程序将下载的数据保存到目录”%temp%”,文件名为12位的随机字母,并根据type的不同来设置文件后缀和如何执行文件。
3.ATT&CK矩阵
Tactic | ID | Name | Description |
---|---|---|---|
Execution | T1559.001 | Inter-Process Communication | 加载远程模板 |
T1059 | Command and Scripting | 执行powershell脚本 | |
Command and Control | T1102.002 | Web Service: Bidirectional Communication | 利用公共服务Telegram获取C&C地址 |
T1105 | Ingress Tool Transfer | 下载恶意脚本和恶意程序 | |
T1008 | Fallback Channels | 恶意程序准备了多个C&C地址 | |
T1071 | Application Layer Protocol | 使用HTTP协议进行通信 | |
Exfiltration | T1029 | Scheduled Transfer | 每隔一段时间上传文件 |
最后更新: 2024年03月27日 10:47:27
本文链接: http://shxi.cc/post/43274510.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!