GitHub更新NPM功能,强化组件生态系安全

GitHub更新组件管理工具NPM,加入一系列新功能来强化NPM生态系的安全性,减少用户遭受到软件供应链攻击的机会,新功能包括NPM程序代码浏览器、精细度访问权限(Granular Access Token)。

官方提到,目前凭证被盗是资料泄露的主要原因之一,但是保护凭证却不是一件容易的任务,具有广泛权限的权限泄露,可能对软件供应链冲击巨大。GitHub目标是协助NPM维护者更有效的管理权限泄露风险,因此现在于NPM加入精细度访问权限权限类型,使得NPM组件维护者和组织拥有者,能够创建精细权限的访问令牌。

在过去用户并无法创建具有最小权限的权限,因此无法限缩意外或是故意被滥用权限的影响,而现在精细度访问权限则完全达到这个目的,用户可以创建只一组有限组件和范围的权限。NPM的自动化权限功能发布已经有一段时间,自动化权限让用户能够发布权限拥有者有权访问的所有组件,因此用户通常也使用发布权限来集成NPM自动化。

但官方提到,发布权限原本的设计目的是用于互动式工作流程,像是NPM CLI等,且因为2FA的要求,并不推荐在自动化中使用。精细度访问权限让NPM组织拥有者自动化组织管理,通过创建权限来管理一个或多个组织、团队和成员。

精细度权限还让用户以IP范围来限制NPM API,并且只有一年的最长有有效期。GitHub提到,只有不到10%的NPM权限被经常使用,这也就代表有许多NPM权限不必要处于活跃状态,如此增加了权限泄露的可能性,因此定期轮换权限可以明显减少NPM组织的攻击矢量。

过去程序代码浏览器是一项付费功能,仅供团队和专业用户使用,而现在官方改进程序代码浏览器,同时免费供用户使用,更新后的程序代码浏览器更稳定快速,而且适用NPM注册表中的所有组件。这项功能之所以能够提升NPM组件的安全性,是因为用户可以在安装之前,先查看组件程序代码。

过去组件用户必须下载组件才能检查其内容,虽然执行npm install来检查和验证组件内容很简单,但这项操作有其风险,因为安装的组件可能包含恶意程序代码,这些程序代码能够通过脚本的形式部署到系统中,而使用NPM程序代码浏览器,便能够在使用组件前就仔细查看。

除了两项新功能更新,官方也持续推行2FA的采用,从2022年11月1日起,所有具有高影响力组件的维护者账号,都已经被强制要求使用2FA。高影响力组件是指每周下载量超过100万次,或是拥有超过500名相依者的组件。官方提到,2FA能够有效防御账户劫持,有效提升NPM JavaScript生态系的安全性。