作为 JavaScript 生态系统中最大的包管理器,npm 正遭遇安全困扰。其开发人员中,仅有 9.27%的人使用 2FA,这意味着绝大多数 npm 开发人员的账户处于不安全状态。一旦黑客窃取开发人员账户,后果相当严重。
近日,npm 安全副总裁 Adam Baldwin 发推文称,npm JavaScript 库的所有维护者中,只有 9.27%的人使用 2FA(双因素认证)来保护其账户。
这一数字竟如此之低!
Adam Baldwin 表示,开发人员账户安全已经成为 npm 安全团队关注的主要问题。
从安全角度考虑,npm 安全团队希望 2020 年,有更多的 npm 开发者使用 2FA。
2FA,即双因素认证,它是一种相对更安全的认证方法。与传统单一的密码认证不同,2FA 使用两种不同的元素,合并在一起,来确认使用者的身份。比如,我们常用的手机短信验证码验证就是 2FA 的一种形式。
NPM,全称是 Node Package Manager。它不仅是 JavaScript 生态系统中最大的 JavaScript 包管理器,而且还是所有编程语言中最大的包存储库,拥有超过 350000 个索引库。
此外,它每个星期大约有 30 亿次的下载量,包含超过 600000 个包(package)。
而这种“地位”和影响力,也让 npm 成为供应链攻击的主要目标。黑客会入侵开发人员的 npm 账户,从而在其库中插入恶意代码。
最近几年,这类事件层出不穷:
2019 年 7 月,有开发者在 purescript npm 安装程序中发现一些恶意代码。原来是有攻击者获取了 @shinnn(purescript npm 安装程序原始作者)的 npm 账户,随后在 purescript npm 安装程序中插入恶意代码。
2019年6月,黑客向 npm 发布一个“useful”的包(electron-native-notify),等到它被目标(某应用程序)使用后更新包内容,加入恶意代码。而某应用程序又是 Agama 加密货币钱包的一部分。
2018年11月,npm 下载量超过 200 万的 package 被注入了恶意代码,黑客利用该恶意代码访问热门 JavaScript 库,目标是 copay(开源比特币钱包)及其衍生产品的用户,以此窃取用户的数字货币。
2018 年 7 月,黑客利用恶意代码破坏 ESLint 库。该恶意代码被设计用来窃取其他开发人员的 npm 证书。
2018 年 5 月,黑客试图在名为 getcookies 的流行 npm 包中隐藏后门。
一份发表的学术研究表明,大多数 npm 软件包“彼此交织在一起”,并且入侵 20 个备受瞩目的开发人员账户,就可能使黑客植入被整个 npm 生态系统一半使用的恶意代码。
因此,确保 npm 库所有者的账户安全应该是未来的重中之重。
或许,Mozilla 的做法提供了一种不错的方式。Mozilla 最近宣布,从 2020 年 1 月起,所有 Firefox 浏览器扩展程序的开发人员都必须为其账户启用 2FA,才能更新其扩展程序。
此前,InfoQ 在《npm安全事故频频发生,程序员都绝望了》的文章中报道过,有一位名叫 Sebastian K 的网友认为 npm(客户端和 registry)是一个有缺陷的系统,需要完全替换,新系统应具有这些功能:
没有 unscoped 的包;
作用域是 1 对 1 绑定到单个用户或组织;
发布包必须要双因子验证,包必须通过 GPG 签名;
除 registry 的维护人员外,任何人都不允许取消发布包;
不允许在最终版本中使用模糊依赖项版本,我曾多次目睹在新克隆之后,运行 npm install 时修改项目的包锁定文件,下载了比锁定文件中指定的更高版本的可传递依赖项。
此外,npm 安全副总裁 Adam Baldwin 还披露了一些其他数据:
2019 年发布的安全公告:595
npm 数据库的安全警报总数:1285
错误吊销到 the registry 或 GitHub 的 npm 令牌数:737
评论