介绍 Securonix 威胁研究团队最近发现了针对多家军事/武器承包商公司的新的秘密攻击活动,其中可能包括 F-35 Lightning II 战斗机的战略供应商。stager主要使用 PowerShell,虽然用 PowerShell 编写的 stager并不是唯一的,但所涉及的程序具有一系列有趣的策略、持久性方法、反取证和层层混淆以隐藏其代码。 此外,stager 所涉及的远程基础设施或命令和控制 (C2) 相对复杂。我们注意到三个利用Cloudflare CDN的独特域,稍后我们将更深入地讨论每个域如何发挥作用。 目标分析与攻击链 正如我们将在下一节中深入探讨的那样,鱼叉式网络钓鱼是最初妥协的主要手段。这次袭击于 2022 年夏末开始,针对至少两家知名军事承包商公司。 整个攻击链可以在下面的图 1 中看到,它突出显示了攻击的初始妥协阶段,正如您所看到的,与我们过去看到的大多数加载程序相比,它非常强大。 图 1:攻击链 初始感染:代码执行的捷径 与许多有针对性的活动一样,最初的感染始于向目标发送包含恶意附件的网络钓鱼电子邮件。与我们今年早些时候报道的STIFF#BIZON 活动类似,网络钓鱼电子邮件包含一个压缩文件,其中包含一个快捷方式文件,在本例中为“ Company & Benefits.lnk ”。 图 2:公司和福利.pdf.lnk 快捷方式文件做了一些棘手的事情来避免检测。首先,它试图通过调用 forfiles 而不是像我们过去看到的那样调用 cmd.exe 或 powershell.exe 来隐藏它的执行。 然后它获取 powershell.exe 可执行文件,然后将其复制到 C:\Windows,将其重命名为 AdobeAcrobatPDFReader,然后使用它来执行 PowerShell 字符串的其余部分。从 Sysinternals Sysmon 生成的日志在下面的图 3 中确定了这一点。 图 3:显示重命名的 PowerShell.exe 的 Windows 日志 powershell 脚本的其余部分以 120 秒的超时时间循环运行,或者直到不产生错误为止。尝试在 URL:hxxps://terma[.]dev/0处进行 C2 通信以拉下初始阶段。 初始感染:Stager 攻击链 一旦用户执行了 .lnk 文件,就会执行一个相当大且健壮的 stagers 链。每个 stager 都是用 PowerShell 编写的,并且每个都被严重混淆。总共我们观察了八层到舞台,它们承载了广泛的技术。 让我们通过首先检查从远程 C2 服务器执行的第一阶段来开始剥离这个阶段的洋葱。通过调用表达式远程加载的文件是一个无扩展名的文件,简称为“ 0 ”。 下表中将突出显示每个编码或混淆的层以及代码片段,以获得更好的视觉效果。
阶段 (7):反分析技术 就在最后一个阶段下载并执行之前,阶段 7 提供了一些有趣的技术,包括混淆、反取证和反调试。 首先,恶意 PowerShell 脚本使用AMSI 规避技术启动。这种技术是众所周知的,并且有效地尝试禁用 AMSI 代码分析状态,从而防止恶意代码分析。 图 10:AMSI 规避 反取证或反调试技术非常普遍,几乎是敌对的!代码首先检查与一长串可用于监视进程执行流或反汇编的进程匹配的进程。 此列表包括: fiddler, procmon, sysmon, idapro,ida64, ida64pro, dnSpy, OllyScript, OllyDbg, x64dbg, ghidra, processhacker, pestudio, Radare2, peexplorer, relyze, pwndbg, binaryninja, ida37fw [sic!], httptoolkit, hexrays, Scylla, PEiD, bincat, BinDiff, efiXplorer, Windbg, Hiew, autoruns, PE-bear, pebear, depends, cerpro 然后该脚本利用 WMI 检查与桌面监视器相关的信息。任何屏幕高度低于 777 像素的系统都会导致脚本失败。 接下来,它再次使用 WMI 检查系统安装日期和内存信息。如果日期少于三天,脚本将失败。 原生 PowerShell 命令用于另外两项检查,一项是查找 Win32_PhysicalMemory 属性以匹配“ QEMU|VirtualBox|VirtualPC|VMware|Hypervisor ”的内存。然后,Get-ComputerInfo 用于包含(“CsDomain”、“HyperVisorPresent”) 的计算机属性,例如“*WORKGROUP*True* ”。这将检查是否存在管理程序或未加入域的系统。 图 11:反取证/反分析 大多数恶意软件在沙盒或反分析检查失败时,通常会停止执行并退出。这个剧本中的敌意很有趣。当检查失败时,它不会退出,而是禁用系统网络适配器,使用 netsh 配置 Windows 防火墙以阻止所有入站和出站流量,然后使用混淆的 PowerShell 命令“ (&gal [?r0]*m) ”代替“ Remove-Item ”命令行开关,以递归方式删除用户配置文件目录、G:\、F:\ 和 E:\ 驱动器中的所有内容。然后计算机将通过命令行开关“ Stop-Computer ”关闭。 下一段代码很有趣。如果系统语言设置为“*zh*”(中文)或“*ru*”(俄语),则代码将直接退出,计算机将关闭。 图 12:语言检测 阶段 (7):禁用日志记录 它执行的另一个微不足道的检查是寻找物理内存的数量,如果它小于 4gb,它会安静地关闭它正在运行的机器。如果所有检查都通过,恶意脚本将开始禁用检测引擎,并从 PowerShell 脚本块日志记录开始。 图 13:禁用脚本块日志记录 接下来,为了进一步绕过脚本块日志记录,“签名”变量带有一个新的空哈希集。将此与“force”参数配对将导致该语句永远不会为真,这再次绕过日志记录。 然后使用“ Remove-EtwTraceProvider ”命令行开关禁用 PowerShell 和应用程序日志记录的事件跟踪。 在下图 14 中,最后一个命令将“System.Management.Automation.Tracing.PSEtwLogProvider”和“etwProvider.m_enabled”字段设置为 0,这有效地禁用了 PowerShell 可疑脚本块日志记录功能。 图 14:脚本块记录绕过,续。 最后,通过“ LogPipelineExecutionDetails ”属性和注册表编辑禁用模块日志记录和标准 Microsoft PowerShell 日志。 阶段 (7):Windows Defender 绕过 下一个代码块使用“S-1-5-32-544”的 SID 匹配来检查管理员权限。如果匹配为真,它将使用“”PowerShell commandlet 为进程、forfiles.exe、powershell.exe 和 cmd.exe 添加排除项。然后,它将为任何以扩展名结尾的文件添加排除项:.lnk、.rar 和 .exe。还为以下路径设置了排除项: $env:TEMP\ $env:public\pictures\ $env:public\ $env:USERPROFILE\Downloads\ $env:USERPROFILE\Documents\ $env:USERPROFILE\Desktop\ $env:SystemRoot\Tasks\ 最后,存档扫描被禁用。下面图 15 的第 68 行的下一行代码是一个高度混淆的命令,它调用带有“ -RemoveDefinitaions -All ”标志的MpCmdRun.exe 图 15:绕过防御者 阶段 (7):持久性 - 注册表 该脚本尝试了几种持久性方法。第一个是将自身嵌入到注册表中。键“(默认)”是使用包含恶意 PowerShell 脚本的值创建的。
PowerShell 脚本尝试下载并调用 terma[.]vip/w4/u。在分析文件“u”后,它似乎与我们当前正在分析的脚本相同,即原始脚本的第 7 个去混淆阶段。 修改了其他几个可用于 IOC 检测的键,并将包含在文章末尾的 IoC 部分中。 图 16:持久性 - 注册表 阶段 (7):持久性 - 计划任务 该脚本还尝试将自身作为计划任务嵌入到受影响的主机上。任务根据权限级别将自己命名为两个名称之一: MicrosoftEdgeUpdateTaskMachine_System MicrosoftEdgeUpdateTaskMachine_User 该任务是使用一些巧妙的混淆创建的,以隐藏对“schtasks.exe”的调用。它使用与通配符匹配混合的调用表达式,因此“ $env:???t??r???\*2\??h???k?* ”转换为“ $env:SYSTEMROOT\System32\schtasks。exe ”。 该任务旨在运行我们在注册表持久性部分中注意到的完全相同的脚本,但是调用的脚本被命名为“w”而不是“u”,并且它托管在不同的 C2 URL 上,但是代码是相同的并生成匹配的文件哈希。 图 17:持久性 - 计划任务 阶段 (7):持久性 - 启动快捷方式和 Lolbins 在用户的“ APPDATA\Microsoft\Windows\Start\Menu\Programs\Startup\ ”目录中创建一个名为“MicrosoftWS.lnk”的启动快捷方式。与攻击的初始感染阶段使用的快捷方式类似,快捷方式被修改为执行 forfiles.exe,将 PowerShell.exe 伪装成 MicrosoftStartupTask 以执行其余的 PowerShell 字符串。 剩下的 PowerShell 脚本利用了两个众所周知的 Lolbins。第一个运行 Windows 二进制 pcalua.exe,它可以绕过应用程序白名单来调用另一个进程。在这种情况下,pcalua.exe 用于调用wsreset.exe,使用命令“ pcalua.exe -a wsreset.exe ” Lolbin wsreset.exe 自行执行时会获取存储在值“ HKCU\Software\Classes\AppX82a6gwre4fdg3bt635tn5ctqjf8msdd2\Shell\open\command ”中的任何数据并执行它。在执行流程的“注册表持久性”阶段,此密钥已被较早修改。 图 18:持久性 - 启动快捷方式 阶段 (7):持久性 - WMI 最后但并非最不重要的一点是,该恶意软件试图通过利用 Windows WMI 创建具有明确定义的过滤器和消费者的新订阅来维持主机上的持久性,以将代码作为命令行参数执行。虽然这种情况相当少见,但他的方法有据可查,过去曾被用作恶意软件的持久性方法。 图 18:持久性 - WMI 订阅 阶段 (7):有效负载执行 最后一段代码从 URL “ terma[.]app/s/static/img/header.png ”下载、解密并执行名为“ header.png ”的远程有效载荷。虽然我们能够下载并分析 header.png 文件,但我们无法对其进行解码,因为我们认为活动已经完成,我们的理论是该文件已被替换以防止进一步分析。我们尝试解码有效载荷只会产生垃圾数据。 有效载荷使用 AES 加密进行加密,并通过位于代码最后一行的混淆调用表达式进行解密和执行。 图 19:解码和执行 C2 和基础设施 威胁参与者维护了一个强大的 C2 网络,该网络由几个观察到的域组成。我们观察到攻击链的各个部分使用了以下域: terma[.]dev 伏藏[.]icu 伏藏[.]app terma[.]vip 伏藏[.]维基 伏藏[.]图片 术语[.]大声笑 术语[.]墨水 上述域于 2022 年 7 月首次出现,并指向 IP 地址 28[.]199.53.243 和 165[.]227.139.39 下的 DigitalOcean 服务器。他们后来被指向 CloudFlare 服务器来提供 CDN 和安全服务,这些服务还将掩盖其原始 IP 地址并提供其他功能,例如 HTTPS/TLS 加密以及地理封锁。 我们能够从原始 IP 地址收集更多与域相关的信息。我们发现相关网站“cobham-satcom.onrender[.]com”也被使用。 结论 总体而言,很明显,这种攻击相对复杂,恶意攻击者特别关注 opsec。有许多相对较新的攻击技术在起作用,其中一些是不熟悉的,需要额外的分析,例如利用 PowerShell Get-Alias commandlet 来执行调用表达式。 持久性也比我们通常看到的要高出一步。利用注册表、WMI 订阅、计划任务以及将 Lolbins 与流程结合起来总体上很聪明,需要对其进行监控。虽然这是一次非常有针对性的攻击,但使用的战术和技术众所周知,保持警惕很重要。Securonix 客户可以利用下面的检测和种子搜索查询。 建议和缓解措施 避免从不受信任的来源下载未知的电子邮件附件/lnk 文件 部署PowerShell 脚本块日志记录以协助检测 部署额外的进程级日志记录,例如Sysmon,以获得额外的日志覆盖率。此外,安装在主机上的 sysmon 将阻止下一阶段的有效负载执行 特别注意禁用安全监控工具的尝试,包括 SIEM 使用 Securonix 播种器搜索查询扫描端点 |
|