Security
供应链毒药:当 'npm install' 背叛你时

执行摘要:你编写了安全的代码。你审计了你的智能合约。但你安装了一个带有秘密后门的库。本文涵盖了“供应链攻击”,引用了臭名昭著的 Ledger Connect Kit 黑客事件,以及如何锁定你的依赖项。
Midjourney 提示词 (Prompts)
/imagine prompt: A visualization of a "Supply Chain", a conveyor belt of software boxes, one box is glowing toxic green with a skull symbol, "Infected Dependency" --ar 16:9/imagine prompt: A hacker injecting a syringe into a network cable, symbolizing "Code Injection", cyberpunk aesthetic, blue and neon green --ar 16:9/imagine prompt: A shield made of interlocking chains, locking a server rack, "Dependency Pinning" --ar 16:9
1. 概念:在井里投毒
现代开发建立在“乐高积木”(库)之上。一个典型的 React dApp 可能使用 1,000 多个依赖项。
黑客知道他们无法黑掉 你(你是偏执狂)。所以他们黑掉 你使用的工具。
如果他们攻陷了像 axios 或 web3.js 这样的库,每一个更新到新版本的应用都会自动被感染。

2. 案例研究:Ledger Connect Kit (2023)
2023 年 12 月,整个加密世界冻结了。
Ledger 的一名前员工遭受了网络钓鱼攻击。黑客获得了他们的 NPM 发布密钥的访问权限。
攻击:
- 他们向
@ledgerhq/connect-kit推送了一个恶意更新。 - 这个库被 Sushiswap, Revoke.cash 和数百个 dApp 用于连接钱包。
- 结果: 当用户访问 合法 网站(如 Sushiswap)时,会出现一个假的“连接钱包”弹窗。这不是 Sushiswap 的错——是库从供应链加载了恶意代码。
- 签署弹窗的用户被抽干了钱包。

3. 攻击向量:拼写混淆 (Typosquatting)
黑客发布名称与流行包几乎相同的包。
- 真:
react-dom - 假:
react-dom-core(或rreact-dom)
如果你不小心打错了 npm install react-dom-core,你安装的就是一个像 React 一样工作……但也会窃取你的 .env 文件的包。
4. 如何保护你的 dApp
锁定你的版本 (Lock Your Versions)
对于关键安全库,永远不要在 package.json 中使用脱字符 ^ 或波浪号 ~。
- 坏:
"web3": "^1.9.0"(自动更新到 1.9.9,可能被感染)。 - 好:
"web3": "1.9.0"(确切停留在你审计过的版本)。
使用 npm audit 和 Snyk
在每次部署前运行 npm audit。它会根据已知漏洞数据库检查你的依赖项。
对于企业级安全性,像 Snyk 或 Socket.dev 这样的工具会分析包的 行为(例如,“为什么这个 CSS 库试图访问网络?”)。
警告: 恶意包通常通过 传染性面试 骗局针对求职者和开发人员。如果你怀疑安装了坏包,请立即用 Revoke.cash 检查你的钱包授权。
“金丝雀”测试
不要在周五晚上把更新推送到生产环境。让社区测试几天新版本的库。供应链攻击通常在 24-48 小时内被发现。

结论
在 Web3 中,你要为你项目中的每一行代码负责——即使是那些不是你写的代码。像对待金融交易一样谨慎对待 npm update。
