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

@ConditionalOnProperty配置条件用法

1.application.yml配置 spring:rabbitmq:listener: simple:prefetch: 1acknowledge-mode: autoretry:enabled: true # consumer retry2.指定prefix name havingValue 指定了havingValue,要把配置项的值与havingValue对比,一致则加载Bean Configurati…

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

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

前端性能优化之渲染优化

页面渲染过程 为了使每一帧页面渲染的开销都能在期望的时间范围内完成。就需要开发者了解渲染过程的每个阶段,以及各阶段中有哪些优化空间是我们力所能及的。经过分析根据开发者对优化渲染过程的控制力度,可以大体将其划分为5各部分:js处理、…

Farad capacitor法拉电容优点及缺点

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

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

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

Leetcode160 两个链表是否相交

leetcode 160题,判断两个链表是否相交 此题可以说是算法界第一深情,如果我走过你走过的路,那么我们就可能会相遇。 具体解决思路如下 两个链表是否相交有两种可能,一种不相交,一种相交,首先来看下相交的…

golang学习-指针

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

element-plus 、element-ui —— Cascader 勾选内容后自动关闭内容选择面板

最近工作需求是 el-Cascader 级联多选框 任意选择一项,自动关闭面板? 来总结记录下。 element-ui的关闭面板方式👇 this.$refs.CascaderRef.dropDownVisible false element-plus的关闭面板方式👇 vue3.0写法 CascaderRef.val…

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

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

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

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

金三银四-JVM核心知识高频面试题

又要快到一年一度的金三银四,开始复习啦~! 每天一点点。。 目录 一、JVM中的垃圾收集器有哪些,它们的工作原理是什么? 二、JVM中的类加载器有哪些,它们各自的作用是什么? 三、JVM中垃圾回收的…

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 。 思路 看完本篇可以一起做了如下…

【C++11/C++17】左值与右值

左值和右值是C中的两个重要概念,它们涉及到变量的存储位置和生命周期。 左值(Lvalue) 左值表示一块具有确定地址的内存单元。它表示一个具体的、明确存在的存储单元。可以被取地址运算符(&)获取其地址。变量、数…

pytorch详细探索各种cnn卷积神经网络

目录 torch.nn.functional子模块详解 conv1d 用法和用途 使用技巧 适用领域 参数 注意事项 示例代码 conv2d 用法和用途 使用技巧 适用领域 参数 注意事项 示例代码 conv3d 用法和用途 使用技巧 适用领域 参数 注意事项 示例代码 conv_transpose1d 用法…

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 "…