基本上是什么来阻止我发布一个NPM模块与任意安装脚本,窃取一切从您的计算机时,你npm install my-malicious-package
,如果安装不是在沙箱运行?
在this article中,他们认为大多数攻击者会将他们的恶意脚本放在pre/post
install
钩子中。这很容易被检测和过滤掉。我最关心的是软件包的实际安装,在那里可以运行任意脚本。
基本上是什么来阻止我发布一个NPM模块与任意安装脚本,窃取一切从您的计算机时,你npm install my-malicious-package
,如果安装不是在沙箱运行?
在this article中,他们认为大多数攻击者会将他们的恶意脚本放在pre/post
install
钩子中。这很容易被检测和过滤掉。我最关心的是软件包的实际安装,在那里可以运行任意脚本。
3条答案
按热度按时间qzwqbdag1#
npm本身运行包代码的唯一方式是在安装钩子中。
如果禁用安装挂钩,则不受信任的代码将无法运行,直到您将其实际加载到应用程序中(此时您将被淘汰)。
67up9zun2#
我制作了
node-safe
,它允许您在使用node
、npm
和yarn
时使用本地macOS沙箱:当使用沙盒软件包管理器时,恶意依赖项将无法再通过
postinstall
脚本和其他方式危害您的系统。2j4z5cfb3#
没有什么可以阻止这些脚本以当前用户的身份执行任何操作。您需要避免运行安装脚本。
大多数恶意软件包都在使用这些功能,但在极少数情况下(如最近的lofygang),这些软件包也可能在功能中携带恶意代码。
如何保护项目免受恶意软件包的攻击
1.确保您不运行生命周期(postinstall)脚本,除非它们是已知的和必要的(请参阅我的talk on this topic)
1.将第三方代码放在隔离舱中,锁定环境,决定将哪些强大的API传递给每个软件包。
第二步需要使用隔室,这是TC 39 https://github.com/tc39/proposal-compartments/中正在进行的工作
但是有一个垫片,一些工具是在垫片上制造的。
您可以直接使用SES-shim并实现自己的控件,或者使用LavaMoat的便利性
LavaMoat允许您生成和调整每个包的策略,您可以决定它应该访问哪些全局和内置程序。LavaMoat还提供了一个工具来管理安装脚本。
这是我的talk on SES and LavaMoat,最后是一个演示。
如何设置LavaMoat
1.通过@lavamoat/allow-scripts禁用/允许依赖关系生命周期脚本(例如“postinstall”)
allow-scripts
1.在lavamoat-node中运行您的服务器或构建进程
在您的package.json中添加类似以下内容:
npm start
以启动应用程序免责声明:我为LavaMoat和Endo做了贡献。他们是开放源码项目,许可证是允许的。