美文网首页
Security vulnerabilities

Security vulnerabilities

作者: 张培_ | 来源:发表于2020-09-18 09:20 被阅读0次

Background

你可能经常会在你的Github repo上看到这样的东西:

image

那么这是什么呢?

这是Github发出的GitHub Dependabot alerts, 每当github在你的project中检测到vulnerabilities的时候,Github就会发出这么一个alert。

what is vulnerabilities?

vulnerabilities其实就是你项目中的依赖的一些有害代码,可能那个项目中的npm dependency,也可能是一个docker镜像,就是那些可被利用来破坏该项目或使用该代码的其他项目的机密性,完整性或可用性。

那么这些vulnerabilities是如何被查找出来,并且修复呢?下面我就给大家介绍一些工具:

Use npm security audit to manage vulnerabilities in npm package

npm security audit是npm@6发布的一个新feature。可以通过查找和fix已知的vulnerabilities来保护你的项目以及项目的用户。

what is npm audit?

npm audit只是一个npm的command,当你运行这个command的时候,npm会帮助查看你整个项目的dependency tree,依次review项目中的每一个dependency(dependencies/devDependencies/bundledDependencies/optionalDependencies), 包括dependency的dependency,帮你找出这些dependency存在的vulnerabilities,并且生成一份详细的report。
还可以帮助你fix这些vulnerabilities。

npm audit指令还会在使用npm install安装新的dependency的时候被自动调用,npm会去check即将安装的dependency是否有任何的安全漏洞,然后生成report。
当然对于一个已经存在的项目,可以手动运行npm audit,检查项目中的所有dependency。

Note
npm audit指令只能在有package.json/package-lock.json的项目下使用,否则会报错。

How to fix vulnerabilities?

使用npm audit查找到vulnerabilities之后,你可以通过生成的report一次fix这些dependency的漏洞。report中会包含有问题的dependency的name/severity/dependency tree or path, 有时候report中还会提供这dependency可供升级的安全版本。

使用npm audit fix

很多时候你都可以通过直接调用npm audit fix,直接将一些dependencies的安全漏洞修复。但是还是会存在一些没有这个指令无法fix的漏洞,需要手动进行review。

根据npm建议的patch版本手动修复

你也可以通过手动的方式,找到有漏洞的dependency的path,看看它是你安装的哪一个dependency的dependency,直接将你安装的dependency升级到建议的版本。但是请注意留意SEMVER warnings,有可能npm建议的版本有breaking changes,这时候你需要自己去斟酌

当dependencies没有安全的版本

这种情况下report中会提供关于这个dependency的issue你需要自己去做调研。

best practice

出于对项目安全的考量,最好能将npm audit加入到CI中,保证每一次的提交都能经过npm的检查。
但是要知道使用npm audit,如果你的项目中存在任何的漏洞,这个指令就会以非零退出码退出,那么CI就会挂掉。
但是其实在很多情况下,一下low level的漏洞其实没必要让它挂掉CI,因此你可以通过设置--audit-level参数改变npm audit报错的阈值。
比如你的CI上使用这个指令npm audit --audit-level high,这时候只有指令check出high level的漏洞才会以非零的退出码退出。

Use GitHub Dependabot to manage vulnerabilities in whole project

大部分项目的所有代码都是集成在github上的,因此github更能够帮助你全面的发现你项目中的各种问题。因此你也可以采取使用Github帮助你管理项目依赖项中的漏洞。
因此Github推出了一个工具GitHub Dependabot,它会帮助你会检测你的project,如果发现里面有任何的vulnerabilities,就会给你发出Dependabot alerts,并且利用Dependabot security updates的功能帮助你进行vulnerabilities的fix。

how to use Dependabot check and fix vulnerabilities?

image

你需要根据上图首先enable Dependabot, 但是如果你需要Dependabot帮你做一些自动version update的工作,需要在repo中做一些配置。

你需要在project中创建.github folder,并且在folder中创建dependabot.yml

Example dependabot.yml file

# Basic dependabot.yml file with
# minimum configuration for two package managers

version: 2
updates:
  # Enable version updates for npm
  - package-ecosystem: "npm"
    # Look for `package.json` and `lock` files in the `root` directory
    directory: "/"
    # Check the npm registry for updates every day (weekdays)
    schedule:
      interval: "daily"

  # Enable version updates for Docker
  - package-ecosystem: "docker"
    # Look for a `Dockerfile` in the `root` directory
    directory: "/"
    # Check for updates once a week
    schedule:
      interval: "weekly"

关于Dependabot的详细介绍我会在另外一篇文章中详细讲解

相关文章

网友评论

      本文标题:Security vulnerabilities

      本文链接:https://www.haomeiwen.com/subject/gmmdyktx.html