一、Trivy的安装
官网链接🔗:
https://github.com/aquasecurity/trivy
Trivy是一款全面的多功能安全扫描器。Trivy 可以查找安全问题,并能在发现问题的地方锁定目标。现在是北京时间2024年4月22日,Trivy已经更新到v0.50版本了,下面是官方的参考文档:
https://aquasecurity.github.io/trivy/v0.50/
选择适合自己系统的版本下载即可。下载完后解压:
./trivy --version
能成功运行,说明安装成功,可以开始使用它了!
二、常规代码项目扫描
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
扫描结果打开后如下:
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 常用参数详解
- fs 参数:常规扫描代码项目,fs参数后面指定代码项目的路径
- format 参数:输出结果的文本格式
- -o 参数:输出扫描结果的保存路径
- –skip-db-update 参数:拒绝自动更新trivy数据库。
(因为trivy的数据库只支持3天的缓存,3天后则需要自动更新,有时候电脑没开🪜会可能导致下载速度非常缓慢,所以为了节省时间,可以添加这个参数,跳过数据库的更新,但是一般情况下建议都不要加这个参数,让它自动更新数据库)- –skip-dirs 参数:需要忽略扫描的文件夹。
(如果需要忽略多个文件夹,则用英文的,逗号隔开,在后面依次添加文件夹的路径即可,支持使用**/的方式来模糊匹配)- –offline-scan 参数:离线扫描。
(也就是说Trivy只检测本地依赖,如果不加这个参数,Trivy 会为每个依赖项向 Maven 资源库寻址,如果网络连接速度较低,这会大大增加运行时间。但需要注意的是,在使用 --offline-scan 参数时,可能会跳过某些依赖项)- –timeout 参数:超时时间。假如超过这个时间,则Trivy自动停止运行并报错超时。
- –dependency-tree 参数:依赖树打印。Trivy最牛的参数!!!!!!!
可以把依赖树的传递性关系打印出来,方便我们查看哪个依赖是由哪个依赖嵌套,大大提高时间成本。- roofs 参数:扫描jar包。
- images参数:扫描docker镜像。
下面我用红色框起来的,就是依赖树的传递关系。
三、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
trivy扫描命令:
./trivy rootfs --skip-db-update --offline-scan --dependency-tree --timeout 999m /root/code/xxxxxx-web.jar -o /root/code/trivy_扫描结果.txt
四、Docker images镜像依赖扫描
把文件导入到本地的docker环境:
docker load -i (tar文件或者镜像文件)
然后获得docker images的images id:
docker images
扫描命令:
./trivy image imageid -o docker扫描结果.txt --timeout 9999m
或者:
./trivy image REPOSITORY:TAG -o docker扫描结果.txt --timeout 9999m