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

标签 security npm npm-install

基本上,如果安装未在沙箱中运行,那么当您npm install my-malicious-package时,什么可以阻止我发布带有任意安装脚本的 NPM 模块,该模块会从您的计算机中窃取所有内容?

this article他们建议大多数攻击者将其恶意脚本放置在 pre/post install Hook 中。这很容易检测和过滤掉。我最关心的是可以运行任意程序的包的实际安装。

最佳答案

没有什么可以阻止这些脚本以当前用户身份执行任何操作。您需要避免运行安装脚本。

大多数恶意软件包都在使用这些软件包,但在极少数情况下(例如最近的 lofygang),软件包的功能中也可能携带恶意代码。

如何保护项目免受恶意软件包的侵害

  1. 确保不要运行生命周期(安装后)脚本,除非它们是已知且必要的(请参阅我的 talk on this topic )
  2. 将 3rdparty 代码放在一个隔间中,锁定环境,决定将哪些强大的 API 传递给每个包。

第二步需要使用 Compartment,这是 TC39 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
  • 在 lavamoat-node 中运行您的服务器或构建进程
  • npm i -D lavamoat
    

    在你的package.json中添加如下内容:

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

    Disclaimer: I contribute to LavaMoat and Endo. They are Open Source projects on permissive licenses.

    关于security - NPM 安装是否在沙箱中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45846172/

    相关文章:

    node.js - 获取或搜索 npm 中的可执行文件列表

    angularjs - 通过bamboo build调用package.json中的npm脚本触发构建

    ios - 错误 : Cannot read property 'replace' of undefined when building iOS Cordova

    rest - 使用一次性密码来保护 REST 应用程序是个好主意吗?

    asp.net-mvc - N次登录失败后如何显示验证码?

    linux - 如何从命令行重置 Jenkins 安全设置?

    angular - 无法在 Angular 项目上安装 typescript@4.9

    python - 摧毁一个 Flask Restful token

    node.js - 无法在 ubuntu 16.4 上安装 Node 8 依赖项

    node.js - 运行Codebox时查找Node包的问题