NPM安装是否在沙箱中运行?

e1xvtsh3  于 2022-11-14  发布在  其他
关注(0)|答案(3)|浏览(298)

基本上是什么来阻止我发布一个NPM模块与任意安装脚本,窃取一切从您的计算机时,你npm install my-malicious-package,如果安装不是在沙箱运行?
this article中,他们认为大多数攻击者会将他们的恶意脚本放在pre/postinstall钩子中。这很容易被检测和过滤掉。我最关心的是软件包的实际安装,在那里可以运行任意脚本。

qzwqbdag

qzwqbdag1#

npm本身运行包代码的唯一方式是在安装钩子中。
如果禁用安装挂钩,则不受信任的代码将无法运行,直到您将其实际加载到应用程序中(此时您将被淘汰)。

67up9zun

67up9zun2#

我制作了node-safe,它允许您在使用nodenpmyarn时使用本地macOS沙箱:

# Allow reading files, but only in the current folder
node --enable-sandbox --allow-read="./**" myscript.js

当使用沙盒软件包管理器时,恶意依赖项将无法再通过postinstall脚本和其他方式危害您的系统。

2j4z5cfb

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

  • 请参阅LavaMoat文档以了解更多详细信息 *

1.通过@lavamoat/allow-scripts禁用/允许依赖关系生命周期脚本(例如“postinstall”)

npm i --ignore-scripts -D @lavamoat/allow-scripts
npx --no-install allow-scripts setup
npx --no-install allow-scripts auto
  • 然后,编辑package.json中的允许列表
  • 每次安装/重新安装后,运行allow-scripts

1.在lavamoat-node中运行您的服务器或构建进程

npm i -D lavamoat

在您的package.json中添加类似以下内容:

"scripts": {
  "lavamoat-policy": "lavamoat app.js --autopolicy",
  "start": "lavamoat app.js"
  • 每次更改依存关系树时运行lavamoat-policy并查看策略(另请参阅:策略覆盖)
  • 运行npm start以启动应用程序

免责声明:我为LavaMoat和Endo做了贡献。他们是开放源码项目,许可证是允许的。

相关问题