首页
社区
课程
招聘
[原创] 一例Gamaredon APT攻击非PE部分分析
发表于: 2019-12-18 12:28 5375

[原创] 一例Gamaredon APT攻击非PE部分分析

2019-12-18 12:28
5375

在样本分析的过程中,其实很难捕获到一次完整的攻击过程,由于攻击者C2的存活周期通常不长,有时候只有几天,有时候一星期,更长一点的可能半个月左右,当攻击事件中至关重要的C2关停之后,就只能从手里已经获取到的样本进行一个分析,能多的数据就只能靠猜,或者靠开源的威胁情报去寻找踪迹。昨天下午的时候,在星球看到了一个Gamaredon APT相关的hash,于是就稍微分析了一下,由于环境问题,导致很多关联的文件只能通过Google或者vt去找,也就随便写写,分享一下。

攻击流程大概如下:
图片描述

样本hash:4778869cf2564b14b6bbf4baf361469a
拿到一个样本,第一件事应该是确定该样本属于哪类
我的做法一般是先拖到winhex中查看一下文件头什么的:
图片描述

这里看起来是一个压缩格式的文档,由后面的item1.xml可以推测应该是office2007之后的office文档
既然基本上确定是office文档了,尝试解压一下看看:
图片描述

根据以前的文档分析,这里应该是一个docx文档
更名为docx并使用office2013打开
看样子是个典型的模板注入
这里请求的地址较断,在这个页面就可以直接看到完整请求地址:
http://yotaset.ddns.net/yota.dot
图片描述

看一下文档内容:
图片描述

嗯 和网上之前曝光的Gamaredon组织的内容有点类似
在文档最后,留了一个电话和gmail邮箱,也稍微记录一下,万一有用呢
+380977269510, tiamoanni@gmail.com
图片描述

换个电脑请求一下出现的地址:
图片描述

页面长这样,内容大概是说页面访问不了啥的
抱着一个怀疑的态度,暂时先考虑从其他地方去找这个yota.dot文件
尝试直接在vt上搜索yota.dot
图片描述

好像没有东西,那尝试搜索http://yotaset.ddns.net/yota.dot
图片描述

看到上传时间是七天前,应该是本次攻击所对应的
查看DETAILS选项:
图片描述

那么这个文件应就是目标dot了:
图片描述

下载到本地:
图片描述

将下载的文件添加dot后缀,word打开:
图片描述

是一个空白的带宏代码的文档。
宏代码长如下这样:
图片描述

从上往下看,程序首先是创建了两个对象

wscript.shell
wscript.Network
应该分别用于执行shell以及网络请求的

然后通过代码创建Scripting.FileSystemObject对象以提供对文件系统的访问

接着Shellcode获取了用户计算机的信息,然后进行转换并拼接到后面的一个请求地址中
图片描述

请求地址拼接出来如下:
"http://korneliuswork.ddns.net/WIN-IHN30SD7IMB_9AC9AA87//rebootor.php"
其中WIN-IHN30SD7IMB_9AC9AA87是计算机的标识

获取用户环境变量,后续应该会基于该路径释放文件

声明了两个路径,这两个路径后面会拼接到释放的文件中
图片描述

接着写入了两个注册表键值
而设置该键是为了将宏标记为安全
图片描述

最后就是一大串的AZSmCKHa.Write,通常来说会写入三种类型的文件,vb powershell 和js
稍微调一下代码,就可以得知恶意代码执行后会在
C:\Users\user\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
目录下释放security.vbs文件

图片描述

写入完成:
图片描述

先跑一下这个vbs的行为,由于vbs都是调用windows的wscript.exe执行的,这里直接监视wscript.exe即可
图片描述

可以看到,Shellcode在执行过程中,不断的向%APPDATA%目录写入文件,随后又删除。
生成的文件名都是随机字符串
以及遍历文件列表的行为:
图片描述

行为摸了一下,接下来看具体的代码:

这个代码咋一看很吓人,不太清楚入口点在哪里,其实这样的代码,通常情况下入口点在最下面
这里的代码由多个function和sub组成,把这些function和sub分开,代码将会如下:

所以执行该脚本,代码实际上会从136行,也就是pKeIwNCN = 1开始执行,然后在下面的do Loop循环中对上面的fun进行调用。
在该脚本中,pKeIwNCN只有一次赋值,所以这里是永真循环
图片描述

接着程序会将http://korneliuswork.ddns.net/WIN-IHN30SD7IMB_9AC9AA87//rebootor.php作为参数传递到CLDCvmeg函数中:
图片描述

根据CLDCvmeg可得知,程序会尝试通过GET请求对传入进来的域名进行请求,如果请求成功,则将ResponseBody赋值给CLDCvmeg
而该值会作为参数传递到save函数中,在save函数中实现文件的本地保存:
图片描述

save函数首先会生成一个长度为5的随机字符,这也解释了在火绒剑中行为检测看到的随机文件名的由来:
图片描述

如果文件的大小小于12425,程序就会删除刚才的创建的文件
如果大于12425,说明成功从请求地址中获取到了返回值,程序就会调用Encode函数,而解密的秘钥是上面的arrMxUZhZHN = GetMxUZhZHN( "9AC9AA87"),将这个txt文件转换为exe文件
路径同vbs的释放路径:
C:\Users\user\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
图片描述

接着程序遍历当前vbs执行目录下的所有文件,尝试查找exe文件
图片描述

如果找到两个以上的exe文件,程序则会获取到用户计算机最后一次启动时间并将计算机重启。
图片描述

现在vbs代码也分析好了,通过对vbs的分析可以知道,该样本最后应该会在本地落地并执行一个exe文件
既然这个exe文件的数据来源是
http://korneliuswork.ddns.net/WIN-IHN30SD7IMB_9AC9AA87//rebootor.php

图片描述
exe这里就不分析了,接下来看看关联分析。

首先是查询初始样本的md5,这里可以看到关联了一个域名,两个地址
图片描述

解析ip为:141.8.195.60
样本最后访问的域名是:korneliuswork.ddns.net
图片描述

这里可以看到korneliuswork.ddns.net有两个历史解析ip,分别是
188.225.25.50
2.59.41.5

还有一些兄弟节点

在最下面可以看到有两条和本次样本格式相同,都是域名+计算机信息+rebootor.php


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-12-20 14:21 被jux1a编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 36
活跃值: (102)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢分享
2019-12-20 13:47
0
雪    币: 73
活跃值: (3095)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
谢谢分享。
2019-12-20 14:06
0
游客
登录 | 注册 方可回帖
返回
//