容器扫描Trivy及Trivy-db数据库研究

trivy介绍

Trivy是一个镜像容器扫描工具,用于扫描漏洞和配置错误。 它是一款相当全面且多功能的安全扫描器,支持多种扫描目标,能够弥补市面上常见Web 漏洞扫描工具的不足。 Trivy 可以轻松地通过安装并将二进制文件添加到项目中,进而集成到CI/CD 管道( DevSecOps )。

Trivy检测操作系统包(Alpine、RHEL、CentOS等)和应用程序依赖(Bundler、Composer、npm、yarn等)的漏洞。

在这里插入图片描述

功能:

  • 扫描镜像
  • 扫描打包好的镜像
  • 扫描配置文件
  • 集成与扩展

GitHub地址: https://github.com/aquasecurity/trivy

安装和使用方法可以参考网上其余文章

本文章主要研究trivy的数据库trivy-db : https://github.com/aquasecurity/trivy-db

trivy工具在运行前会先检查一遍数据是否最新,会拉去一份数据库到本地/home/quser/.cache/trivy/trivy.db

Trivy-db

trivy数据库内容结构
参考 https://blog.csdn.net/huzai9527/article/details/125975440

在这里插入图片描述
系统名称列表:

CBL-Mariner 1.0
CBL-Mariner 2.0
Oracle Linux 5
Oracle Linux 6
Oracle Linux 7
Oracle Linux 8
Oracle Linux 9
Photon OS 1.0
Photon OS 2.0
Photon OS 3.0
Photon OS 4.0
Photon OS 5.0
Red Hat
Red Hat CPE
SUSE Linux Enterprise 11
SUSE Linux Enterprise 11.1
SUSE Linux Enterprise 11.2
SUSE Linux Enterprise 11.3
SUSE Linux Enterprise 11.4
SUSE Linux Enterprise 12
SUSE Linux Enterprise 12.1
SUSE Linux Enterprise 12.2
SUSE Linux Enterprise 12.3
SUSE Linux Enterprise 12.4
SUSE Linux Enterprise 12.5
SUSE Linux Enterprise 15
SUSE Linux Enterprise 15.1
SUSE Linux Enterprise 15.2
SUSE Linux Enterprise 15.3
SUSE Linux Enterprise 15.4
SUSE Linux Enterprise 15.5
alma 8
alma 9
alpine 3.10
alpine 3.11
alpine 3.12
alpine 3.13
alpine 3.14
alpine 3.15
alpine 3.16
alpine 3.17
alpine 3.18
alpine 3.19
alpine 3.2
alpine 3.3
alpine 3.4
alpine 3.5
alpine 3.6
alpine 3.7
alpine 3.8
alpine 3.9
alpine edge
amazon linux 1
amazon linux 2
amazon linux 2022
amazon linux 2023
bitnami::Bitnami Vulnerability Database
cargo::GitHub Security Advisory Rust
chainguard
cocoapods::GitHub Security Advisory Swift
composer::GitHub Security Advisory Composer
composer::PHP Security Advisories Database
conan::GitLab Advisory Database Community
data-source
debian 10
debian 11
debian 12
debian 13
debian 7
debian 8
debian 9
erlang::GitHub Security Advisory Erlang
go::GitHub Security Advisory Go
k8s::Official Kubernetes CVE Feed
maven::GitHub Security Advisory Maven
npm::GitHub Security Advisory npm
npm::Node.js Ecosystem Security Working Group
nuget::GitHub Security Advisory NuGet
openSUSE Leap 15.0
openSUSE Leap 15.1
openSUSE Leap 15.2
openSUSE Leap 15.3
openSUSE Leap 15.4
openSUSE Leap 15.5
openSUSE Leap 42.1
openSUSE Leap 42.2
openSUSE Leap 42.3
pip::GitHub Security Advisory pip
pub::GitHub Security Advisory Pub
rocky 8
rocky 9
rubygems::GitHub Security Advisory RubyGems
rubygems::Ruby Advisory Database
swift::GitHub Security Advisory Swift
ubuntu 12.04
ubuntu 12.04-ESM
ubuntu 12.10
ubuntu 13.04
ubuntu 13.10
ubuntu 14.04
ubuntu 14.04-ESM
ubuntu 14.10
ubuntu 15.04
ubuntu 15.10
ubuntu 16.04
ubuntu 16.04-ESM
ubuntu 16.10
ubuntu 17.04
ubuntu 17.10
ubuntu 18.04
ubuntu 18.10
ubuntu 19.04
ubuntu 19.10
ubuntu 20.04
ubuntu 20.10
ubuntu 21.04
ubuntu 21.10
ubuntu 22.04
ubuntu 22.10
ubuntu 23.04
ubuntu 23.10
vulnerability
wolfi

读取指定系统的value,go代码

package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql"bolt "go.etcd.io/bbolt""os""time"
)func main() {//连接trivy数据库db, err := bolt.Open("trivy.db", 0600, &bolt.Options{Timeout: 1 * time.Second})if err != nil {panic("init trivydb failed")}file, err := os.Create("file.txt")if err != nil {fmt.Println(err)}defer file.Close()// 连接mysql数据库dbmysql, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/trivy-db")if err != nil {fmt.Println("Failed to connect to database:", err.Error())return}defer db.Close()whitelist := []string{"ubuntu 12.04", "ubuntu 12.10", "ubuntu 13.04","ubuntu 13.10", "ubuntu 14.04", "ubuntu 14.10", "ubuntu 15.04","ubuntu 15.10", "ubuntu 16.04", "ubuntu 16.10", "ubuntu 17.04","ubuntu 17.10", "ubuntu 18.04", "ubuntu 18.10", "ubuntu 19.04","ubuntu 19.10", "ubuntu 20.04", "ubuntu 20.10", "ubuntu 21.04","ubuntu 21.10", "ubuntu 22.04", "ubuntu 22.10", "ubuntu 23.04","ubuntu 23.10"}//查询数据库中的数据db.View(func(tx *bolt.Tx) error {//遍历所有桶tx.ForEach(func(osname []byte, b *bolt.Bucket) error {if containsWhitelist(whitelist, string(osname)) {b.ForEach(func(k, v []byte) error {// 遍历嵌套桶b.ForEachBucket(func(k []byte) error {//k 桶名 (包名)packageName := string(k)nestedbucket := b.Bucket([]byte(string(k)))nestedbucket.ForEach(func(k, v []byte) error {fmt.Fprintln(file, string(osname))fmt.Fprintln(file, packageName)fmt.Fprintln(file, string(k))fmt.Fprintln(file, string(v))//chuli(dbmysql, string(osname), packageName, string(k), string(v))fmt.Println(dbmysql, string(osname), packageName, string(k), string(v))return nil})return nil})return nil})return nil} else {fmt.Println("不在白名单中")}return nil})return nil})
}func chuli(dbmysql *sql.DB, osname string, name string, s string, s2 string) {// 插入数据stmt, err := dbmysql.Prepare("INSERT INTO " + "`" + osname + "`" + "(Pname, CVE,value) VALUES(?,?,?)")if err != nil {fmt.Println("Failed to prepare statement:", err.Error())return}defer stmt.Close()_, err = stmt.Exec(name, s, s2)if err != nil {fmt.Println("Failed to execute statement:", err.Error())return}}// containsWhitelist 检查给定的OS是否在白名单中
func containsWhitelist(whitelist []string, name string) bool {for _, whiteName := range whitelist {if whiteName == name {return true}}return false
}

如果想转存到数据库中,需要新建系统表,表结构:

CREATE TABLE `ubuntu 12.04` (`id` INT(11) NOT NULL AUTO_INCREMENT,`Pname` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',`CVE` VARCHAR(5000) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',`value` VARCHAR(5000) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',INDEX `id` (`id`) USING BTREE
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=427755
;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Edge浏览器设置自动刷新详细步骤分享

Edge浏览器自动刷新设置方法详细教学分享。在电脑上访问一些动态网页的时候,用户发现网页的内容滚动之后,内容无法进行刷新。这个情况是我们的浏览器没有开启自动刷新功能。那么这个功能设置怎么开启呢?一起来看看以下的操作方法教学吧。 操…

AI 在医学中的三个关键作用;联想 AI PC 全阵容亮相 CES 2024

近日,在接受 Northwestern 采访时,著名心脏病学教授 Sanjiv Shah 谈及了 AI 和医学结合所带来的三个关键作用。 Sanjiv Shah 说道:「首先是诊断。有许多疾病,无论是常见的还是罕见的,都容易被误诊或漏诊。AI 可以提醒临…

Farad capacitor法拉电容优点及缺点

Farad capacitor 法拉电容又称Electrical Double-Layer Capacitor双电层电容器、Gold capacitor黄金电容、Super capacitor 超级电容器,是一种化学元件。Super capacitor 超级电容器通过极化电解质来储能,但不发生化学反应,而且储能过程是可逆…

如何在 Windows10 下运行 Tensorflow 的目标检测?

看过很多博主通过 Object Detection 实现了一些皮卡丘捕捉,二维码检测等诸多特定项的目标检测。而我跟着他们的案例来运行的时候,不是 Tensorflow 版本冲突,就是缺少什么包,还有是运行官方 object_detection_tutorial 不展示图片等…

golang学习-指针

1、定义 指针也是一个变量,但它是一个特殊的变量,它存储的是另一个变量的内存地址。是引用数据类型。 取一个变量的地址:&a 定义: var p *int &a 可以理解为 指针变量p中存储的是a的内存地址,但是变量p也…

leaflet学习笔记-贝塞尔曲线绘制(八)

前言 两点之间的连线是很常见的,但是都是直直的一条线段,为了使连线更加平滑,我们可以使用曲线进行连线,本功能考虑使用贝塞尔曲线进行连线绘制,最后将线段的两端节点连接,返回一个polygon。 贝塞尔简介 …

大模型学习之书生·浦语大模型4——基于Xtuner大模型微调实战

基于Xtuner大模型微调实战 Fintune简介 海量数据训练的base model指令微调Instructed LLM 增量预训练微调 增量数据不需要问题,只需要答案,只需要陈述类的数据 指令跟随微调 指定角色指定问题给对应的user指定答案给assistant LIaMa2InternLM 不同的模…

Linux第24步_安装windows下的VisualStudioCode软件

Windows下的VSCode安装后,还需要安装gcc编译器和g编译器。 gcc:编译C语言程序的编译器; g:编译C代码的编译器; 1、在Windows下安装VSCode; 双击“VSCodeUserSetup-x64-1.50.1.exe”,直到安装完成。 2、…

c++学习笔记-STL案例-演讲比赛管理系统1

目录 1演讲比赛需求 1.1 比赛规则 1.2 程序功能 2.项目创建 2.1 创建新项目 2.2 添加文件 3.3 文件添加成功 3.创建管理类 3.1 功能描述 3.2 创建文件 4 菜单功能 4.1 功能描述 4.2 添加成员函数 4.3 菜单功能实现 4.4 main()函数中调用 4.5 实现结果 5 退出系…

C++力扣题目104--二叉树的最大深度

给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最大深度 3 。 思路 看完本篇可以一起做了如下…

electron+vue编辑Office Word?

Electron 桌面应用是基于 Chromium 内核的,而谷歌Chrome取消了对PPAPI插件支持后,在线Office方案纷纷失效,只能更换国产浏览器在低版本浏览器苟延残喘,不能用于electronvue项目。 经过小编不断的寻找,终于找到一款至今…

redis主从复制、哨兵与集群

目录 一、概述 二、redis主从复制 1、概念 2、主从复制的作用 3、主从复制流程 4、搭建Redis 主从复制实验 ①在三台服务器上安装redis (1)关闭防火墙和安全机制 (2)修改内核参数 (3)安装redis …

自旋框的使用

1. 自旋框 实例化 //实例化单精度自旋框QSpinBox* spinBox new QSpinBox(this);//实例化双精度自旋框QDoubleSpinBox* doubleSpinBox new QDoubleSpinBox(this);1.1 单精度自旋框 QSpinBox 1.1.1 单精度自旋框的基本函数 QSpinBox_QDoubleSpinBox Dialog.cpp #include "…

网络安全保险发展起始阶段的挑战及应对措施

文章目录 前言一、网络安全保险的有序发展二、当前我国网络安全保险发展的初期态势(一)网络安全风险类型(二)网络安全保险的作用(三)与外国网络安全保费的规模对比 三、我国网络安全保险发展初期面临的挑战…

vue/vue3/js来动态修改我们的界面浏览器上面的文字和图标

前言&#xff1a; 整理vue/vue3项目中修改界面浏览器上面的文字和图标的方法。 效果&#xff1a; vue2/vue3: 默认修改 public/index.html index.html <!DOCTYPE html> <html lang"en"><head><link rel"icon" type"image/sv…

C++_vector类

目录 一、vector的模拟实现 1、vector的组成结构 2、vector尾插数据 2.1 析构函数 3、迭代器实现 4、resize 5、删除数据 5.1 迭代器失效 6、指定位置插入数据 6.1 迭代器失效 7、迭代器构造和resize构造 8、深浅拷贝 结语&#xff1a; 前言&#xff1a; vect…

vue前端开发自学demo-input标签数据双向绑定

vue前端开发自学demo-input标签数据双向绑定&#xff01;今天为大家 展示的内容是&#xff0c;前端开发常见的&#xff0c;form表单里面的&#xff0c;一些输入数据的元素&#xff0c;动态绑定数据的案例。比如input,以及checkbox的状态绑定案例。 首先&#xff0c;老规矩&…

【人工智能Ⅰ】实验11:支持向量机

实验11 支持向量机 一、实验目的 1&#xff1a;了解支持向量机的结构和原理。 2&#xff1a;应用支持向量机建立训练模型&#xff0c;对模型进行评估。 二、实验内容和要求 【实验内容】 选择支持向量机&#xff0c;对花卉图像或玉米果穗图像进行分类。花卉图像包括玫瑰&a…

关于LINUX操作系统异常宕机重启的分析思路

一、先搞清楚现状 当收到系统宕机告警或者故障反馈时&#xff0c;需要先对情况进行核实。比如检查系统启动时间&#xff0c;是不是真实发生了重启&#xff1f;如果重启了&#xff0c;什么时间点发生的重启&#xff1f;重启了几次&#xff1f;重启之前有无变更操作&#xff1f;…

PyTorch|构建自己的卷积神经网络——nn.Sequential()

之前在构建神经网络时&#xff0c;我们一般是采用这种方式&#xff0c;就像这样&#xff1a; class Network1(nn.Module): def __init__(self): super(Network1,self).__init__() self.conv1 nn.Conv2d(in_channels3, out_channels6, kernel_size5) …