首页 > 其他分享 >SBOM扫描

SBOM扫描

时间:2023-07-11 17:12:36浏览次数:48  
标签:trivy syft ali 扫描 SBOM jenkins packages

软件物料清单 (SBOM) 是一个完整的、正式结构化的组件、库和模块列表,这些组件、库和模块是构建(即编译和链接)给定软件以及它们之间的供应链关系所需的。这些组件可以是开源的或专有的,免费的或付费的,可以广泛使用或限制访问。

完成SBOM扫描分为两步

  1. 生成SBOM清单
  2. 基于清单进行安全扫描

预准备

因为trivy也将在后续容器镜像扫描中使用,我们尽量保证技术栈统一,因此第二步会使用trivy扫描SBOM清单
https://github.com/aquasecurity/trivy/releases
https://github.com/aquasecurity/trivy-db

trivy命令的安装是很简单的,下载后解压就能用

# 建议压缩一下,trivy二进制文件还是有点大的,后面使用时会卡
[root@jenkins-bj-ali-ql1 bin]# upx -9q trivy

trivy-db因为一些不可抗力的原因比较复杂,我直接说结果,老实安装oras命令后构建dbv2

# 会非常卡,大概需要下载20分钟后解压tar包
[root@jenkins-bj-ali-ql1 ~]# oras pull ghcr.io/aquasecurity/trivy-db:2
[root@jenkins-bj-ali-ql1 ~]# mkdir -p ~/.cache/trivy/db
[root@jenkins-bj-ali-ql1 ~]# mv trivy.db metadata.json ~/.cache/trivy/db/
切记后续使用跳过db更新!!!这东西更新巨坑,会先删~/.cache/trivy/db/下东西再去拉取,如果拉取不到,那么你库也没了,等于直接用不了了...
建议配置一个定时任务执行oras pull ghcr.io/aquasecurity/trivy-db:2,然后覆盖~/.cache/trivy/db/下内容

生成SBOM清单

  • CycloneDX格式清单
  • SPDX格式清单
  • SWID格式清单
由于trivy sbom仅支持CycloneDX格式,因此我们需要基于CycloneDX生成清单

syft 是一个 CLI 工具和 Go 库,用于从容器镜像和文件系统生成软件物料清单(SBOM)
https://github.com/anchore/syft

与gitleaks一样我们还是clone tidy build upx。后续golang类型命令及压缩安装不再赘述细节

[root@jenkins-bj-ali-ql1]# git clone https://github.com/anchore/syft.git
[root@jenkins-bj-ali-ql1]# go mod tidy
[root@jenkins-bj-ali-ql1]# go build -ldflags '-s -w' cmd/syft/main.go
[root@jenkins-bj-ali-ql1]# mv main syft
[root@jenkins-bj-ali-ql1]# upx -9q syft
[root@jenkins-bj-ali-ql1]# chmod +x syft
[root@jenkins-bj-ali-ql1]# mv syft /usr/local/bin
[root@jenkins-bj-ali-ql1]# syft -h
Generate a packaged-based Software Bill Of Materials (SBOM) from container images and filesystems

Usage:
  syft [SOURCE] [flags]
  syft [command]

Examples:
  syft packages alpine:latest                                a summary of discovered packages
  syft packages alpine:latest -o json                        show all possible cataloging details
  syft packages alpine:latest -o cyclonedx                   show a CycloneDX formatted SBOM
  syft packages alpine:latest -o cyclonedx-json              show a CycloneDX JSON formatted SBOM
  syft packages alpine:latest -o spdx                        show a SPDX 2.3 Tag-Value formatted SBOM
  syft packages alpine:latest -o [email protected]                    show a SPDX 2.2 Tag-Value formatted SBOM
  syft packages alpine:latest -o spdx-json                   show a SPDX 2.3 JSON formatted SBOM
  syft packages alpine:latest -o [email protected]               show a SPDX 2.2 JSON formatted SBOM
  syft packages alpine:latest -vv                            show verbose debug information
  syft packages alpine:latest -o template -t my_format.tmpl  show a SBOM formatted according to given template file

  Supports the following image sources:
    syft packages yourrepo/yourimage:tag     defaults to using images from a Docker daemon. If Docker is not present, the image is pulled directly from the registry.
    syft packages path/to/a/file/or/dir      a Docker tar, OCI tar, OCI directory, SIF container, or generic filesystem directory

  You can also explicitly specify the scheme to use:
    syft packages docker:yourrepo/yourimage:tag            explicitly use the Docker daemon
    syft packages podman:yourrepo/yourimage:tag            explicitly use the Podman daemon
    syft packages registry:yourrepo/yourimage:tag          pull image directly from a registry (no container runtime required)
    syft packages docker-archive:path/to/yourimage.tar     use a tarball from disk for archives created from "docker save"
    syft packages oci-archive:path/to/yourimage.tar        use a tarball from disk for OCI archives (from Skopeo or otherwise)
    syft packages oci-dir:path/to/yourimage                read directly from a path on disk for OCI layout directories (from Skopeo or otherwise)
    syft packages singularity:path/to/yourimage.sif        read directly from a Singularity Image Format (SIF) container on disk
    syft packages dir:path/to/yourproject                  read directly from a path on disk (any directory)
    syft packages file:path/to/yourproject/file            read directly from a path on disk (any single file)

可以看出syft可以帮我们基于镜像、路径生成CycloneDX、SPDX不同格式清单
这时就有一个问题了
如果基于镜像扫描生成清单,在jenkins流水线中应当是放在Package之后,而基于路径咋可以跟gitleaks在一起做并发,对比一下
  • 基于镜像扫描可以将镜像层中的依赖也扫描出来,扫描更加全面
  • 基于路径扫描可以在一开始就检测出问题,不浪费后续资源
还记得我们一开始说的trivy嘛,trivy会在后续过程对镜像层进行专门的扫描工作,因此我们采用路径扫描方式;再者,制品不一定会封装成容器镜像,但是代码一定存在,这样我们的逻辑会更加统一

生成CycloneDX

[root@jenkins-bj-ali-ql1 devops-cicd-dev-bfmq-cloud]# syft packages . -o cyclonedx-json=sbom.json
[root@jenkins-bj-ali-ql1 devops-cicd-dev-bfmq-cloud]# head sbom.json 
{
  "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json",
  "bomFormat": "CycloneDX",
  "specVersion": "1.4",
  "serialNumber": "urn:uuid:6061b743-f112-48b1-99d0-9c8c70e86ddf",
  "version": 1,
  "metadata": {
    "timestamp": "2023-07-11T16:28:13+08:00",
    "tools": [
      {

基于清单进行安全扫描

直接使用trivy即可,切记要增加--skip-db-update=true!!!

[root@jenkins-bj-ali-ql1 devops-cicd-dev-bfmq-cloud]# trivy sbom sbom.json --skip-db-update=true -s MEDIUM,HIGH,CRITICAL --no-progress
2023-07-11T16:32:19.005+0800	INFO	Vulnerability scanning is enabled
2023-07-11T16:32:19.012+0800	INFO	Detected SBOM format: cyclonedx-json
2023-07-11T16:32:19.029+0800	WARN	Third-party SBOM may lead to inaccurate vulnerability detection
2023-07-11T16:32:19.030+0800	WARN	Recommend using Trivy to generate SBOMs
2023-07-11T16:32:19.032+0800	WARN	Ignore the OS package as no OS information is found.
2023-07-11T16:32:19.044+0800	INFO	Number of language-specific files: 1
2023-07-11T16:32:19.044+0800	INFO	Detecting gobinary vulnerabilities...

 (gobinary)

Total: 1 (MEDIUM: 1, HIGH: 0, CRITICAL: 0)

┌──────────────────────────┬────────────────┬──────────┬───────────────────┬───────────────┬──────────────────────────────────────────────────────┐
│         Library          │ Vulnerability  │ Severity │ Installed Version │ Fixed Version │                        Title                         │
├──────────────────────────┼────────────────┼──────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────┤
│ github.com/gin-gonic/gin │ CVE-2023-29401 │ MEDIUM   │ v1.9.0            │ 1.9.1         │ The filename parameter of the Context.FileAttachment │
│                          │                │          │                   │               │ function is not p ...                                │
│                          │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2023-29401           │
└──────────────────────────┴────────────────┴──────────┴───────────────────┴───────────────┴──────────────────────────────────────────────────────┘

集成jenkins pipeline

这次的sbom扫描明显又是基于命令实现的,主逻辑还是使用sh即可完成,但是本次扫描需要分为2步,有依赖关系,现阶段我们以比较基础的方式编写

  1. 我们设计sbom扫描与秘密扫描同样位置
  2. 需要现基于syft生成cyclonedx
  3. 再使用trivy解析清单生成报告
        stage('SBOM') {
            steps {
                script {
                    sh 'syft packages . -o cyclonedx-json=sbom.json -q'
                    def sbomstatus = sh(script: "trivy sbom sbom.json -o sbom.table --exit-code 1 -s MEDIUM,HIGH,CRITICAL --skip-db-update=true -q", returnStatus: true)
                    if (sbomstatus != 0) {
                        sh "cat sbom.table"
                        error "SBOM security scan failed"
                    }
                }
            }
        }

其他sbom扫描工具
Syft
Grype
Trivy
Dependency-check
Dependency-track

标签:trivy,syft,ali,扫描,SBOM,jenkins,packages
From: https://www.cnblogs.com/bfmq/p/17541914.html

相关文章

  • 单片机扫描矩阵键盘
    采用分时复用的方法,定时置位行,检测列,确定按下的按键,输出不同的按键值。voidKbScanProcess(void){//uint8_tRow=0;//按键所在行//uint8_tCol=0;//按键所在列//uint8_tRowCount=0;//按键触发行的个数,用于判断多个按键按下uint8_tColCount=0;//按键触发列的个数,用......
  • Burp Suite Professional / Community 2023.7 (macOS, Linux, Windows) - Web 应用安
    BurpSuiteProfessional/Community2023.7(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:https://sysin.org/blog/burp-suite-pro-2023/,查看最新版。原创作品,转载请保留出处。作者......
  • Nexpose v6.6.203 for Linux & Windows - 漏洞扫描
    Nexposev6.6.203forLinux&Windows-漏洞扫描Rapid7VulnerabilityManagement,ReleaseJul05,2023请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org您的本地漏洞扫描程序搜集通过实时覆盖整个网络,随......
  • C++进制转换+扫描线算法(二维区间合并面积和)
    ......
  • 秘密扫描Gitleaks
    gitleaks是一个密码扫描工具,属于SAST扫描,可以协助我们扫描文件、代码仓中的密码、秘钥串类内容,实现安全左移https://github.com/gitleaks/gitleaks安装二进制命令基础安装后会发现产物大概10M大小gitclonehttps://github.com/gitleaks/gitleaks.gitgomodtidygobuild......
  • 4.7 x64dbg 应用层的钩子扫描
    所谓的应用层钩子(Application-levelhooks)是一种编程技术,它允许应用程序通过在特定事件发生时执行特定代码来自定义或扩展其行为。这些事件可以是用户交互,系统事件,或者其他应用程序内部的事件。应用层钩子是在应用程序中添加自定义代码的一种灵活的方式。它们可以用于许多不同的用......
  • 扫描linux系统磁盘占用,释放空间的免费工具
    如何查找linux系统的磁盘占用,扫描大文件,释放空间,可以使用免费工具ncdu。虽然有du和df命令可以查询磁盘和文件夹的大小,但毕竟不方便,不能扫描整个磁盘的情况。用ncdu命令更直观,可以按目录以树形显示每个文件夹的大小,找到占空间的文件或者文件夹,删除释放磁盘空间。并且扫描速度飞快......
  • Web漏洞扫描(AWVS)
    AWVS原理是基于漏洞匹配方法,通过网络爬虫测试你的网站安全,检测流行安全漏洞。AWVS可以通过SQL注入、XSS、目录遍历、代码执行等漏洞来审核web应用程序的安全性并输出扫描报告。相对于手动测试的复杂和耗时,它能快速的发现漏洞来提高效率和漏洞覆盖面。 安装与启动:这个AWVS并......
  • 《Kali渗透基础》07. 弱点扫描(一)
    目录1:漏洞发现1.1:Exploit-DB1.2:searchsploit1.3:nmap2:漏洞管理3:弱点扫描类型4:漏洞基本概念4.1:CVSS4.2:CVE4.3:OVAL4.4:CCE4.5:CPE4.6:CWE4.7:SCAP4.8:NVD5:漏洞管理6:扫描结果分析本系列侧重方法论,各工具只是实现目标的载体。命令与工具只做简单介绍,其使用另见《安全工具录》。本文以......
  • mybatis: 正确使用mybatis中的mapperLocations配置多个xml扫描路径
    <!--myBatis文件--><beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><!--自动扫描entity目录,省掉Configu......