OpenSSF发布npm 最佳实践指南,应对开源依赖风险

开源安全基金会(OpenSSF)发布了 npm 最佳实践指南,以帮助 JavaScript 和 TypeScript 开发人员降低使用开源依赖项相关的安全风险。OpenSSF Best Practice Group 发布的 npm 最佳实践指南,重点关注 npm 的依赖管理和供应链安全,涵盖各个领域,例如如何设置安全的 CI 配置、如何避免依赖混淆以及如何应对劫持依赖导致的后果。随着开发人员越来越多地共享和使用依赖项,依赖项在促进更快地开发和创新的同时,带来的风险也随之增加。

开源依赖项可能带来重大安全风险

OpenSSF 的贡献者表示,虽然看起来使用开源依赖项的好处远大于其坏处,但依赖项导致的安全风险可能很大,大到有些企业(尤其是中小型企业)甚至无力承受。此外,和任何其它软件一样,依赖项可能存在漏洞或被劫持的可能,这将会在很大程度上影响使用其的项目。

同时,Linux 基金会开源供应链安全主管 David A. Wheeler 强调,相比使用依赖项本身带来的安全风险,开发人员使用开源依赖项带来的最大安全风险是低估了直接和间接依赖项中的漏洞可能产生的影响。 不可否认的是任何软件都可能出现缺陷,如果使用不慎,可能会严重影响相关的软件供应链。然而很多时候,大部分依赖项都是不可见的,因此对应的安全风险更大。但缓解开源依赖项风险的解决方案并不是停止使用软件,而是智慧地使用软件,并为发现漏洞及时更新组件做好充分的准备。

当然,制定一套有效的依赖安全管理策略是十分具有挑战性的,因为这其中涉及的问题并非开发人员所熟悉的解决方案。而 npm 最佳实践指南能够为开发人员及其组织在面临此类问题时提供帮助,让他们能够更从容、更安全地使用和管理开源依赖项。指南概述了 npm 可用的供应链安全功能,描述了与使用依赖项相关的风险,并提出在不同项目阶段降低风险的建议。

解决开源风险的依赖管理要点

npm 最佳实践指南主要侧重于依赖管理,其中详细介绍了开发人员能够采取的一些帮助减少潜在威胁的步骤。例如在指南中明确提出,使用依赖项的第一步是研究其来源、可信度和安全状况。同时,指南还特别指出开发人员需要提防域名仿冒攻击,比如有时攻击者会创建一个看起来像官方的软件包名称来诱导用户安装恶意软件包,那么这时开发人员就需要通过识别软件包的 GitHub 存储库,并且评估其可信度(参考贡献者数量,星级等)。

同时指南还强调,在确定感兴趣的 GitHub 项目后,开发人员应当确定相应包的名称,并使用 OpenSSF Security Scorecards 来了解依赖项当前的安全状况。同时,开发人员还应当使用 deps.dev 了解传递依赖项的安全状况,并使用 npm-audit了解项目依赖项中现有的漏洞。

在此指南中也提到可重复安装(Reproducible installation)能够为企业提供安全优势,因为它能够确保每次安装软件包时都使用准确的依赖项副本,在依赖项存在漏洞时快速识别潜在的网络危害、缓解恶意依赖项等威胁,以及检测包损坏。

与此同时,指南中还提到开发人员还应当使用锁定文件,该文件使用加密哈希(cryptographic hashes)实现哈希固定(hash pinning)。哈希固定通知包管理器(package manager)每个依赖项的预期哈希,而不是信任镜像仓库。然后,包管理器在每次安装期间验证每个依赖项的 hash 是否保持不变。任何对依赖项的恶意更改都会被检测到并被拒绝。

需要注意的是,依赖关系的持续维护也很重要,开发人员需要定期更新,以配合新漏洞密钥的披露和修补。为了管理企业的依赖关系,建议使用 dependabot 或 renovatebot 等工具。这些工具提交合并请求,开发人员可以查看这些请求并将其合并到默认分支中。此外,如果要删除依赖项,开发人员应当定期运行 npm-prune 并提交合并请求。

参考链接:

https://openssf.org/blog/2022/09/01/npm-best-practices-for-the-supply-chain/

https://github.com/ossf/scorecard

你可能感兴趣的:(开源安全,npm,开源,javascript,安全,云计算)