Hvv样本合集分析(二)- Golang恶意样本分析

阅读量441796

|

发布时间 : 2021-04-28 10:30:00

 

概述

由于golang的跨平台性,以及golang框架的复杂性所带来的免杀效果,现在越来越多的攻击者/红队开始使用golang开发恶意样本,这里做一个小结,记录下

此文章总结了hvv期间攻击者利用golang加载cs的一些样本,故也可以称之为“CobaltStrike的多种加载方式”

样本基本都来源于微步社区,确定为hvv期间攻击队使用样本。

 

样本分析

golang反调试

还原golang符号之后,在main_main入口的地方看到有一个main_sandbox_CheckForPass函数,很明显这是一个检测虚拟环境的函数。

该函数里面的第一个函数checkThreadBook疑似判断是否在微步沙箱中:

此外,程序还有可能进行CPU检查、内存检测、启动检测、启动时间检测等

若经过检测代码运行在虚拟环境中,程序则会直接退出:

手动调试之后,将这个验证过掉,然后F9运行,同时监控该文件行为

程序在tmp目录下释放并加载了两个PE,其中_install.exe是恶意模块,TencentMeeting是带有签名的正常腾讯会议安装包。

程序加载恶意模块的时候同时会启动腾讯会议的安装包以迷惑用户:

恶意模块依旧由golang编译而成,和第一层的Dropper类似,该组件执行时也会先进行虚拟环境检测:

接着解码一段base64的数据得到后续的shellcode

重新开辟内存空间,并将解密之后的shellcode拷贝过去:

解密后的shellcode是CobaltStrike的远控模块,直接尝试在shellcode头部设置执行断点,成功命中:

开辟内存空间,填充shellcode之后修改该片内存的可执行属性

解密多个C2循环请求

关于CobaltStrike远控模块的详细分析,可以参考笔者之前的文章。

golang加载CS

087b3490d320adb9d719139dd521e934
WeChat1.exe

原始样本由golang编写,样本运行后,首先将会解析并请求一个干净的地址:http://www.shibor.org/shibor/web/DataService.jsp 以判断网络是否连通:

循环请求该地址,直到请求成功才会跳转到后面执行:

若请求成功,程序则会将预定义的base64字符串作为参数传递到main_build中,并且在该函数中解码加载该段base64字符串

解码之后的shellcode由CobaltStrike生成,请求C2:www.microport.com

golang白加黑

23aaa6e9c289f61737e12671c70a098a
五一劳动节职工福利名单(1)(1).zip

一个比较经典的golang加载器,原始程序为压缩包,内含了一个exe文件和两个”jpg”文件,且在hvv一开始,就同时被传到了微步和vt,可以说是打响了hvv的第一枪。

压缩包解压之后可见exe文件仿冒了WORD图标

通过十六进制查看工具可知这里的两个jpg文件实则都是PE文件

五一劳动节职工福利名单.exe运行之后,首先会判断 c:/windows/tapi/crashreport.dll 是否存在,若存在则说明已经感染,若不存在,则会分别将当前目录的name.jpg和name2.jpg拷贝为yyexternal.exe和crashreport.dll

通过搜索引擎可知yyexternal.exe为YY客户端程序,这里很明显是一个白加黑的执行逻辑

程序在将文件拷贝到tapi目录下并重命名之后,则会加载yyexternal.exe,由该程序去调用恶意dll

在白exe加载该恶意dll时,会调用名为 InitBugReport 的导出函数:

在InitBugReport函数中,首先会从byte_100277A8开始的地方,步长为4取值赋值给esi所指的内存,取出来的数据总长度为0x0f97

将待解密的数据取出来之后,程序将会对前0x7cc的数据进行异或计算,然后开辟一个7cc的内存空间,将解密之后的shellcode拷贝过去,最后通过call eax的方式加载到shellcode中执行。

调试器加载YY主程序,并直接对LoadLibrary设置断点,找到加载crashreport.dll的地方

返回回来找到InitBugReport函数的入口点并F7进入

成功解密shellcode,这里可以看出来是CobaltStrike的shellcode

连接C2并尝试从C2下载后续cs远控组件实现对用户主机的完全控制。

golang硬编码

c54eb668cf76a37bf28f95c173770adf
skylarinst-winc(10.199.1.19_80).exe

样本最早由4月2日上传到微步社区,应该属于hvv开始前的试探

此样本依旧由golang编写,逻辑较为简单,在入口点,程序会将rdata段的部分数据拷贝过来,将其转换为byte之后再格式化为hex数据

拷贝过去的数据其实就是cs payload的hex形式,攻击者将其编码为了字符串并存储在文件中以躲避检测

直接将这部分数据拷贝出来解码即可到的完整的cs shellcode,并且在末尾看到C2:149.248.18.93

虽然该样本比较简单,但是根据微步的信息,可知样本最开始上传到VT的时候,报毒是很少的,不过各大厂商都比较给力,及时补充了查杀特征,笔者根据cs的加载方式,关联到了一个类似的恶意样本:131e4a3511e4e8e5f9436da4d45484d6,该样本最近才上传,但是VT查杀已经较多。

不同的是,此样本用了cdn进行通信,暂时无法确定此类加载是统一框架生成还是同一个攻击者/队伍使用

本文由jux1a原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/239246

安全客 - 有思想的安全新媒体

分享到:微信
+12赞
收藏
jux1a
分享到:微信

发表评论

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66