一、Trivy的安装

官网链接🔗:
https://github.com/aquasecurity/trivy

Trivy是一款全面的多功能安全扫描器。Trivy 可以查找安全问题,并能在发现问题的地方锁定目标。现在是北京时间2024年4月22日,Trivy已经更新到v0.50版本了,下面是官方的参考文档:
https://aquasecurity.github.io/trivy/v0.50/

导入镜像no such_apache

选择适合自己系统的版本下载即可。下载完后解压:

导入镜像no such_maven_02

./trivy --version

导入镜像no such_jar_03

能成功运行,说明安装成功,可以开始使用它了!

二、常规代码项目扫描

maven编译java项目:

apache-maven-3.9.2/bin/mvn -gs /Users/xxxx/apache-maven-3.9.2/settings.xml clean install -Dmaven.test.skip -Dmaven.repo.local=/Users/xxxx/.m2/repository

2.1 输出为txt格式的报告

txt格式

./trivy fs {repo_path}  -o {output_file} --skip-db-update --skip-dirs "\*\*/code-generator" --dependency-tree --offline-scan --timeout 999m

扫描结果打开后如下:

导入镜像no such_maven_04

2.2 输出为json格式的报告

json格式

./trivy fs {repo_path} --format json -o {output_file} --skip-db-update --skip-dirs "\*\*/code-generator" --offline-scan --timeout 999m

2.3 常用参数详解

  1. fs 参数:常规扫描代码项目,fs参数后面指定代码项目的路径
  2. format 参数:输出结果的文本格式
  3. -o 参数:输出扫描结果的保存路径
  4. –skip-db-update 参数:拒绝自动更新trivy数据库。
    (因为trivy的数据库只支持3天的缓存,3天后则需要自动更新,有时候电脑没开🪜会可能导致下载速度非常缓慢,所以为了节省时间,可以添加这个参数,跳过数据库的更新,但是一般情况下建议都不要加这个参数,让它自动更新数据库)
  5. –skip-dirs 参数:需要忽略扫描的文件夹。
    (如果需要忽略多个文件夹,则用英文的,逗号隔开,在后面依次添加文件夹的路径即可,支持使用**/的方式来模糊匹配)
  6. –offline-scan 参数:离线扫描。
    (也就是说Trivy只检测本地依赖,如果不加这个参数,Trivy 会为每个依赖项向 Maven 资源库寻址,如果网络连接速度较低,这会大大增加运行时间。但需要注意的是,在使用 --offline-scan 参数时,可能会跳过某些依赖项)
  7. –timeout 参数:超时时间。假如超过这个时间,则Trivy自动停止运行并报错超时。
  8. –dependency-tree 参数:依赖树打印。Trivy最牛的参数!!!!!!!
    可以把依赖树的传递性关系打印出来,方便我们查看哪个依赖是由哪个依赖嵌套,大大提高时间成本。
  9. roofs 参数:扫描jar包。
  10. images参数:扫描docker镜像。

下面我用红色框起来的,就是依赖树的传递关系。

导入镜像no such_jar_05

三、Jar包依赖扫描

先用mvn命令将java项目打包成jar包。

代码示例如下:

/root/tools/apache-maven-3.9.2//bin/mvn -gs /root/tools/apache-maven-3.9.2/settings.xml clean package -Dmaven.test.skip -Dmaven.repo.local=/root/.m2/repository

导入镜像no such_apache_06

trivy扫描命令:

./trivy rootfs --skip-db-update --offline-scan  --dependency-tree --timeout 999m /root/code/xxxxxx-web.jar -o /root/code/trivy_扫描结果.txt

导入镜像no such_导入镜像no such_07

四、Docker images镜像依赖扫描

把文件导入到本地的docker环境:

docker load -i (tar文件或者镜像文件)

然后获得docker images的images id:

docker images

导入镜像no such_apache_08

扫描命令:

./trivy  image imageid -o docker扫描结果.txt --timeout 9999m

或者:

./trivy  image REPOSITORY:TAG -o docker扫描结果.txt --timeout 9999m