【技术分享】海莲花的CobaltStrike加载器

admin 2021年9月30日07:02:01评论214 views字数 1800阅读6分0秒阅读模式

【技术分享】海莲花的CobaltStrike加载器


【技术分享】海莲花的CobaltStrike加载器
【技术分享】海莲花的CobaltStrike加载器
概述

海莲花(OceanLotus)APT团伙是一个高度组织化的、专业化的境外国家级黑客组织,其最早由红雨滴团队发现并披露。该组织至少自2012年4月起便针对中国政府、科研院所、海事机构、海域建设、航运企业等相关重要领域展开了有组织、有计划、有针对性的长时间不间断攻击。

最近几个月又是海莲花活动的高峰期,在对样本一一分析之后,笔者发现大多数样本都会层层解密,最后加载CobaltStrike的Beacon。


【技术分享】海莲花的CobaltStrike加载器
【技术分享】海莲花的CobaltStrike加载器
样本分析

样本基本信息

样本md5:edf7dc76776cd05ecf1bc190ae591654
样本于6月3日首次上传到VT,由于海莲花的样本一般情况下都会修改文件时间戳,所以无法从CreateTime获取有用的信息:

【技术分享】海莲花的CobaltStrike加载器

有意思的是,vt厂商大多数检出为CobaltStrike相关的样本:

【技术分享】海莲花的CobaltStrike加载器

外层加载器分析

比较遗憾的是此次并未捕获到诱饵文件,原始样本为32位dll,dll恶意代码执行入口为DllMain,由于dll中暂无其他的信息,暂时无法推测加载模式是白利用还是非PE直接加载。

【技术分享】海莲花的CobaltStrike加载器

样本外层是一个loader,功能非常简单:读取名为W5X8T4的资源表项并为其分配内存空间,最后call edi执行资源中的代码:

【技术分享】海莲花的CobaltStrike加载器

如下所示:

【技术分享】海莲花的CobaltStrike加载器

资源shellcode分析

资源的shellcode加载之后,有大量的混淆代码,和海莲花之前的样本类似

【技术分享】海莲花的CobaltStrike加载器

第一个call中主要是调用CreateThread启动一个新线程:

【技术分享】海莲花的CobaltStrike加载器

该线程主要用于启动服务:

【技术分享】海莲花的CobaltStrike加载器

线程创建完成之后,程序将会加载所需dll,并依次获取函数的的地址。
加载动态库:

【技术分享】海莲花的CobaltStrike加载器

获取API地址:

【技术分享】海莲花的CobaltStrike加载器

这部分代码都不用管,直接跳过即可,所有API地址获取完成之后,程序将会设置异常处理

【技术分享】海莲花的CobaltStrike加载器

接着处理svchost.exe的路径,方便之后启动并注入该进程:

【技术分享】海莲花的CobaltStrike加载器

继续加载动态库:

【技术分享】海莲花的CobaltStrike加载器

获取api地址:

【技术分享】海莲花的CobaltStrike加载器

创建svchost进程

【技术分享】海莲花的CobaltStrike加载器

创建成功之后,通过GetProcessID获取目标进程ID:

【技术分享】海莲花的CobaltStrike加载器

通过VirtualAllocEx在目标进程中开辟内存空间

【技术分享】海莲花的CobaltStrike加载器

第二段内存空间:

【技术分享】海莲花的CobaltStrike加载器

分配完成之后,通过WriteProcessMemory先向第二次分配的内存空间写入指定的shellcode:

【技术分享】海莲花的CobaltStrike加载器

写入完成之后如下:

【技术分享】海莲花的CobaltStrike加载器

接着创建进程快照,查找被注入的4B4进程,找到之后OpenThread打开线程对象

【技术分享】海莲花的CobaltStrike加载器

暂停目标线程

【技术分享】海莲花的CobaltStrike加载器

接着向D0000写入代码,代码关键是:
mov eax,0xe0000
call eax
执行e0000处的代码

【技术分享】海莲花的CobaltStrike加载器

通过结构体设置新线程执行的目标函数:

【技术分享】海莲花的CobaltStrike加载器

最后ResumeThread,成功调用shellcode

【技术分享】海莲花的CobaltStrike加载器

要调试shellcode,可以附加目标进程调试该段shellcode,不过该样本的shellcode比较简单,可以不用那么麻烦,直接设置eip也可以成功调试。

【技术分享】海莲花的CobaltStrike加载器

该段shellcode主要只有两个call,第一个call ebx会解密出cs的Beacon后门并加载,加载之后将Beacon的DllEntryPoint地址赋值给eax通过call eax再次调用。

【技术分享】海莲花的CobaltStrike加载器

第一个call首先会VirtualAlloc分配内存空间,然后将shellcode拷贝到该地址处:

【技术分享】海莲花的CobaltStrike加载器

通过VirtualProtect更改shellcode的可执行属性:

【技术分享】海莲花的CobaltStrike加载器

接着call 到指定的地址执行,call过来的shellcode地址就是dll entrypoint
call调用之后,程序还会将该地址([ebp-0x34])赋值给eax,等下call eax再次调用

【技术分享】海莲花的CobaltStrike加载器

将该段内存dump出来,跳转到01f75cb0这个入口点,笔者使用了IDA7.5的拉取符号功能,这里自动识别出了DllEntryPoint函数

【技术分享】海莲花的CobaltStrike加载器

从通过参数序列,很容易就找到具体的DllMain函数

【技术分享】海莲花的CobaltStrike加载器

根据DllMain的代码,感觉很像是CobaltStrike的远控模块,于是笔者找到了之前分析过的cs模块,对比之后可以确认该样本为CobaltStrike生成:

【技术分享】海莲花的CobaltStrike加载器

解密请求C2

【技术分享】海莲花的CobaltStrike加载器

解密请求头:

【技术分享】海莲花的CobaltStrike加载器

通过InternetOpen请求C2:185[.]225[.]19[.]22

【技术分享】海莲花的CobaltStrike加载器

该ip关联域名:impeplaism.info
该域名已经有OceanLotus标签

【技术分享】海莲花的CobaltStrike加载器【技术分享】海莲花的CobaltStrike加载器


- End -
精彩推荐
@所有人,安全客2021电子刊活动本周二来袭,速速集结!
REvil勒索软件7000万美元赎金计划败北
【技术分享】安卓逆向面试题汇总 技术篇
【技术分享】重逢——Java安全之反射
【技术分享】海莲花的CobaltStrike加载器
戳“阅读原文”查看更多内容

本文始发于微信公众号(安全客):【技术分享】海莲花的CobaltStrike加载器

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年9月30日07:02:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【技术分享】海莲花的CobaltStrike加载器http://cn-sec.com/archives/419809.html

发表评论

匿名网友 填写信息