几乎每周你都能读到通过妥协的npm库执行的攻击。国家预防机制的生态系统是广阔的和无法管理的,对它来说,处理所有使用npm可能带来的威胁是令人沮丧的。
在一般情况下,有很多最佳实践来处理第三方库,但老实说,在我看来,这还不够。其中大多数解释了如何避免违约,但实际上,讨论一种假设-违约-方法似乎更为现实。
关于npm供应链攻击,我的印象是,它们可以由
或
现在人们可能会说,等待等待--有大量的攻击可以通过妥协的npm包发生,比如远程代码执行、敏感数据窃取、加密/ransomware等等(1、2)。您是对的,但要使这些工作正常进行,您必须在计算机上运行脚本,或者在应用程序中与外部威胁参与者控制的命令和控制服务器进行通信,例如:
因此,底线是,将运行中的应用程序(例如,通过使用带有连接白名单的防火墙)和在安装过程中阻止任何脚本执行(3.)就足够了?
在(非常短的)场景中,开发人员下载一个任意妥协的npm库,并将其安装在他的计算机上。然后,将该库集成到开发的软件中,然后在CI/CD中构建并最终部署。
在这种情况下,我有三个层,需要阻止脚本和沙箱我的应用程序。在我看来最困难的部分是沙箱,在开发人员的机器上运行的应用程序,因为你需要考虑生产力,以安全为基础,限制互联网访问。
我知道所有与第三方库一起工作的最佳实践:
您还可以监视(您的)包,寻找可能的漏洞信号(4.)。但仍然有可能是一个妥协的图书馆溜进了公司。错误总会发生。但在这种情况下,人们想要确保不会发生任何损害,对吗?
虽然这张照片有点肤浅,但我错过了一件事吗?我只想了解一下这个令人沮丧的话题。
发布于 2022-09-10 13:44:00
在我个人看来,我们听说了很多,因为:
( a)媒体对此有所了解
( b)根据最近的统计数据,npm和node.js相当流行--大约2%的网络将Node.js作为应用服务器运行(这2%的服务器包括传统的Web服务器,如NGINX和Apache!)。
问题是,执行脚本通常是init脚本所必需的,npm
或npx
(实际上是npm exec
)使用PATH
中的脚本进行有用的操作。您基本上可以使用npm
,如pip
和其他流行的包管理器,在您的路径中有一个程序,您可以将其用于各种用途。
在这个问题的答案中,https://security.stackexchange.com/a/256297/204820的答案是针对devDependencies的,但显然这也适用于常规的依赖关系,其中一些信息在这里非常相关。
为了现实地减少你的攻击表面,在我个人看来,你应该使用尽可能少的库。这个定律实际上在任何编程语言中都是通用的。我参与了CTF,即使是流行的、广泛使用的(和滥用的)包也存在严重的漏洞。那么,您必须自己维护代码,但我认为这是一个很好的权衡。
没有,因为只有两种方式的供应链攻击,我不太确定。处理本地API时,对包API进行覆盖也是一种选择。例如,Babel
这样做是为了合法的目的,但是第三方包中存在着恶意目的的可能性。
你也应该明确地看看德诺,它承诺解决一些问题。
https://security.stackexchange.com/questions/264722
复制相似问题