在样本分析的过程中,其实很难捕获到一次完整的攻击过程,由于攻击者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
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2019-12-20 14:21
被jux1a编辑
,原因: