极狐GitLab 容器镜像安全扫描实践【下】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channel=content&utm_source=csdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。

更多关于极狐GitLab :https://gitlab.cn 或者 DevOps 的最佳实践,可以关注文末的极狐GitLab 公众号。

学习极狐GitLab 的相关资料:

  1. 极狐GitLab 官网:https://gitlab.cn
  2. 极狐GitLab 官网文档:https://docs.gitlab.cn
  3. 极狐GitLab 论坛:https://forum.gitlab.cn/
  4. 极狐GitLab 安装配置:https://gitlab.cn/install
  5. 极狐GitLab 资源中心:https://resources.gitlab.cn

搜索【极狐GitLab】公众号,后台输入加群,备注gitlab,即可加入官方微信技术交流群。

极狐GitLab 公众号后台回复新手指南,免费领取极狐GitLab 新手指南一份,从零到一快速上手极狐GitLab。

关联阅读

  • 极狐GitLab 容器镜像安全扫描实践【上】
  • 极狐GitLab 镜像仓库的使用技巧

极狐GitLab 镜像安全扫描实践

极狐GitLab 的镜像安全扫描是通过极狐GitLab 容器镜像分析器(container-scanning analyzer)来实现的,分析器使用的镜像有多个,这个取决于环境变量 CS_ANALYZER_IMAGE 的值,可用的选项有:

registry.gitlab.com/security-products/container-scanning:4
registry.gitlab.com/security-products/container-scanning/grype:4
registry.gitlab.com/security-products/container-scanning/trivy:4

可以用上面的任意一个镜像来构建分析器,从而完成镜像安全扫描。分析器可以单独使用,也可以和极狐GitLab CI/CD 做集成。先来看如何单独使用极狐GitLab 容器镜像分析器来做镜像安全扫描。

单独使用极狐GitLab 镜像扫描工具

使用如下命令即可单独使用极狐GitLab 容器镜像分析器来扫描容器镜像:

$ docker run -i --rm -e DOCKER_IMAGE=alpine registry.gitlab.com/security-products/container-scanning/trivy:4

参数含义:

  • DOCKER_IMAGE:指定需要扫描的镜像,比如 alpine
  • registry.gitlab.com/security-products/container-scanning/trivy:4 :极狐GitLab 镜像分析器所使用的镜像
    可以看到如下结果:
[INFO] [2021-10-22 03:05:10 +0000] []  ▶  Remediation is disabled; /home/gitlab/Dockerfile cannot be found. Have you set `GIT_STRATEGY` and
`DOCKERFILE_PATH`?
See https://docs.gitlab.com/ee/user/application_security/container_scanning/#solutions-for-vulnerabilities-auto-remediation

[INFO] [2021-10-22 03:05:10 +0000] []  ▶  Scanning container from registry alpine for vulnerabilities with severity level UNKNOWN or higher, with gcs 4.3.17 and Trivy Version: 0.19.2, advisories updated at 2021-10-21

[INFO] [2021-10-22 03:05:17 +0000] []  ▶  2021-10-22T03:05:17.677Z  INFO  Detected OS: alpine
2021-10-22T03:05:17.677Z  INFO  Detecting Alpine vulnerabilities...

可以看到极狐GitLab 容器扫描工具的版本:gcs 4.3.17,使用的 trivy 版本是:0.19.2。扫描的结果和前面的 trivy 、grype 是一样的。对于 alpine:latest 没有扫出来安全漏洞。再试一个有漏洞的镜像(alpine:3.10),再看看结果是如何展示的:

$ docker run -i --rm -e DOCKER_IMAGE=alpine:3.10 registry.gitlab.com/security-products/container-scanning/trivy:4
[INFO] [2021-10-22 03:12:20 +0000] []  ▶  Remediation is disabled; /home/gitlab/Dockerfile cannot be found. Have you set `GIT_STRATEGY` and
`DOCKERFILE_PATH`?
See https://docs.gitlab.com/ee/user/application_security/container_scanning/#solutions-for-vulnerabilities-auto-remediation

[INFO] [2021-10-22 03:12:20 +0000] []  ▶  Scanning container from registry alpine:3.10 for vulnerabilities with severity level UNKNOWN or higher, with gcs 4.3.17 and Trivy Version: 0.19.2, advisories updated at 2021-10-21

[INFO] [2021-10-22 03:12:35 +0000] []  ▶  2021-10-22T03:12:35.545Z  INFO  Detected OS: alpine
2021-10-22T03:12:35.545Z  INFO  Detecting Alpine vulnerabilities...
2021-10-22T03:12:35.545Z  WARN  This OS version is no longer supported by the distribution: alpine 3.10.9
2021-10-22T03:12:35.545Z  WARN  The vulnerability detection may be insufficient because security updates are not provided

+------------+-------------------------+--------------+-----------------+------------------------------------------------------------------------+
|   STATUS   |      CVE SEVERITY       | PACKAGE NAME | PACKAGE VERSION |                            CVE DESCRIPTION                             |
+------------+-------------------------+--------------+-----------------+------------------------------------------------------------------------+
| Unapproved | Critical CVE-2021-36159 |  apk-tools   |    2.10.6-r0    | libfetch before 2021-07-26, as used in apk-tools, xbps, and other prod |
|            |                         |              |                 | ucts, mishandles numeric strings for the FTP and HTTP protocols. The F |
|            |                         |              |                 | TP passive mode implementation allows an out-of-bounds read because st |
|            |                         |              |                 | rtol is used to parse the relevant numbers into address bytes. It does |
|            |                         |              |                 |  not check if the line ends prematurely. If it does, the for-loop cond |
|            |                         |              |                 |        ition checks for the '\0' terminator one byte too late.         |
+------------+-------------------------+--------------+-----------------+------------------------------------------------------------------------+

可以看到扫描结果会展示漏洞的严重等级(SEVERITY)、漏洞的详细内容(DESCRIPTION)。

和极狐GitLab CI 集成使用

可以很容易的在极狐GitLab CI 中集成镜像扫描:

variables:
  CS_ANALYZER_IMAGE: registry.gitlab.com/security-products/container-scanning/trivy:4

services:
  - docker:20.10.7-dind

stages:          
  - test

container_scanning:
  image: "$CS_ANALYZER_IMAGE"
  stage: test
  variables:
    GIT_STRATEGY: fetch
    DOCKER_IMAGE: alpine:3.10
  allow_failure: true
  artifacts:
    reports:
      container_scanning: gl-container-scanning-report.json
    paths: [gl-container-scanning-report.json]
  dependencies: []
  script:
    - gtcs scan

极狐GitLab CI 语法解释:

  • CS_ANALYZER_IMAGE:指定极狐GitLab 镜像分析器所使用的镜像
  • DOCKER_IMAGE:指定所要扫描的镜像,本例为 alpine:3.10
  • allow_failure:允许 job 失败,同时不阻塞后续的 CI 流程
  • artifacts:可以将构建结果,诸如此次的扫描结果存储在极狐GitLab 的 artifacts 中,方便用户下载查看
  • gtcs scan:极狐GitLab 容器镜像分析器的镜像扫描命令

可以在 Pipeline 的构建中看到如下构建日志:

在这里插入图片描述

扫描结果和单独使用极狐GitLab 镜像分析器时的结果是一样的。

当然也可以很方便的下载镜像扫描报告:

在这里插入图片描述

下载完毕之后,可以解析查看结果:

{
  "version": "14.0.3",
  "vulnerabilities": [
    {
      "id": "0aa27b90612e559bb5accde4025d57ecc1932885",
      "category": "container_scanning",
      "message": "CVE-2021-36159 in apk-tools-2.10.6-r0",
      "description": "libfetch before 2021-07-26, as used in apk-tools, xbps, and other products, mishandles numeric strings for the FTP and HTTP protocols. The FTP passive mode implementation allows an out-of-bounds read because strtol is used to parse the relevant numbers into address bytes. It does not check if the line ends prematurely. If it does, the for-loop condition checks for the '\\0' terminator one byte too late.",
      "cve": "CVE-2021-36159",
      "severity": "Critical",
      "confidence": "Unknown",
      "solution": "Upgrade apk-tools to 2.10.7-r0",
      "scanner": {
        "id": "trivy",
        "name": "trivy"
      },
      "location": {
        "dependency": {
          "package": {
            "name": "apk-tools"
          },
          "version": "2.10.6-r0"
        },
        "operating_system": "alpine 3.10.9",
        "image": "registry.gitlab.cn/majinghe/go-demo:3.0.0"
      },
      "identifiers": [
        {
          "type": "cve",
          "name": "CVE-2021-36159",
          "value": "CVE-2021-36159",
          "url": "https://github.com/freebsd/freebsd-src/commits/main/lib/libfetch"
        }
      ],
      "links": [
        {
          "url": "https://github.com/freebsd/freebsd-src/commits/main/lib/libfetch"
        },
        {
          "url": "https://gitlab.alpinelinux.org/alpine/apk-tools/-/issues/10749"
        },
        {
          "url": "https://lists.apache.org/thread.html/r61db8e7dcb56dc000a5387a88f7a473bacec5ee01b9ff3f55308aacc@%3Cdev.kafka.apache.org%3E"
        },
        {
          "url": "https://lists.apache.org/thread.html/r61db8e7dcb56dc000a5387a88f7a473bacec5ee01b9ff3f55308aacc@%3Cusers.kafka.apache.org%3E"
        },
        {
          "url": "https://lists.apache.org/thread.html/rbf4ce74b0d1fa9810dec50ba3ace0caeea677af7c27a97111c06ccb7@%3Cdev.kafka.apache.org%3E"
        },
        {
          "url": "https://lists.apache.org/thread.html/rbf4ce74b0d1fa9810dec50ba3ace0caeea677af7c27a97111c06ccb7@%3Cusers.kafka.apache.org%3E"
        }
      ]
    }
  ],
  "remediations": [
    {
      "fixes": [
        {
          "cve": "CVE-2021-36159",
          "id": "0aa27b90612e559bb5accde4025d57ecc1932885"
        }
      ],
      "summary": "Upgrade apk-tools to 2.10.7-r0",
      "diff": "ZGlmZiAtLWdpdCBhL0RvY2tlcmZpbGUgYi9Eb2NrZXJmaWxlCmluZGV4IGU3ZDI5ZWMuLjI4ODNiNzcgMTAwNjQ0Ci0tLSBhL0RvY2tlcmZpbGUKKysrIGIvRG9ja2VyZmlsZQpAQCAtOCw2ICs4LDcgQEAgUlVOIGdvIGJ1aWxkIGRldm9wcy5nbwogCiAjIEZST00gYWxwaW5lOmxhdGVzdAogRlJPTSBhbHBpbmU6My4xMAorUlVOIGFwayAtLW5vLWNhY2hlIHVwZGF0ZSAmJiBhcGsgLS1uby1jYWNoZSBhZGQgYXBrLXRvb2xzPTIuMTAuNy1yMAogCiBXT1JLRElSIC91c3Ivc3JjL2FwcC8="
    }
  ],
  "scan": {
    "scanner": {
      "id": "trivy",
      "name": "Trivy",
      "url": "https://github.com/aquasecurity/trivy/",
      "vendor": {
        "name": "GitLab"
      },
      "version": "0.19.2"
    },
    "analyzer": {
      "id": "gcs",
      "name": "GitLab Container Scanning",
      "vendor": {
        "name": "GitLab"
      },
      "version": "4.3.17"
    },
    "type": "container_scanning",
    "start_time": "2021-10-22T06:38:27",
    "end_time": "2021-10-22T06:38:29",
    "status": "success"
  }
}

和极狐GitLab 镜像仓库的集成

极狐GitLab 不仅提供开箱即用的 DevSecOps 功能。也提供开箱即用的镜像仓库功能,关于镜像仓库的使用可以查看公众号文章极狐GitLab 镜像仓库的使用技巧。可以直接在极狐 GitLab CI 中使用极狐GitLab 镜像仓库和镜像扫描功能,只需要简单的配置即可,.gitlab-ci.yml 的内容如下:

variables:
  CS_ANALYZER_IMAGE: registry.gitlab.com/security-products/container-scanning/trivy:4
  KUBECONFIG: /tmp/.kube/config

services:
  - docker:20.10.7-dind

stages:          
  - build
  - test
  - deploy

build:
  image: docker:latest
  stage: build
  services:
    - docker:20.10.7-dind
  script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:3.0.0 .
    - docker push $CI_REGISTRY_IMAGE:3.0.0

container_scanning:
  image: "$CS_ANALYZER_IMAGE"
  stage: test
  variables:
    GIT_STRATEGY: fetch
    DOCKER_USER: "$CI_REGISTRY_USER"
    DOCKER_PASSWORD: "$CI_REGISTRY_PASSWORD"
    DOCKER_IMAGE: $CI_REGISTRY_IMAGE:3.0.0
  allow_failure: false
  artifacts:
    reports:
      container_scanning: gl-container-scanning-report.json
    paths: [gl-container-scanning-report.json]
  dependencies: []
  script:
    - gtcs scan

deploy:
  stage: deploy
  image:
    name: bitnami/kubectl:latest
    entrypoint: [""]
  script:
     - mkdir -p /tmp/.kube
     - echo $kube_config | base64 -d > $KUBECONFIG
     - kubectl -n gitlab-k8s-demo apply -f deployment.yaml

可以在构建结果中看到 Pipeline 流水线如下

在这里插入图片描述以及在构建日志中看到镜像扫描日志:

在这里插入图片描述

可以看到,可以用极狐GitLab 一体化 DevOps 平台来完成源码管理、镜像构建、镜像扫描以及应用程序的部署。只需要简单配置即可。

结束语

安全是一个必须要重视的话题,现在讲的 DevOps 其实就等同于 DevSecOps,真正的 DevOps 是必须要融入安全的,人人为安全负责、处处有安全意识,才能构建起软件供应链安全的护城河。

而极狐GitLab 开箱即用的 DevSecOps 功能是能够为软件开发生命周期的不同阶段提供安全保障能力。从而来保证软件供应链的安全。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

element-plus的ElNotification 内容换行显示

效果图&#xff1a; 代码&#xff1a; const excelSuccess ({ data, status, message }) > {if (status 20005) {const msg message.replace(/\,/g, "<br />");//把,替换成换行符<br />ElNotification({dangerouslyUseHTMLString: true,//加此属性…

YOLOv9全网最新改进系列::YOLOv9完美融合双卷积核(DualConv)来构建轻量级深度神经网络,目标检测模型有效涨点神器!!!

YOLOv9全网最新改进系列&#xff1a;&#xff1a;YOLOv9完美融合双卷积核&#xff08;DualConv&#xff09;来构建轻量级深度神经网络,目标检测模型有效涨点神器&#xff01;&#xff01;&#xff01; YOLOv9原文链接戳这里&#xff0c;原文全文翻译请关注B站Ai学术叫叫首er …

品牌设计理念和logo设计方法

一 品牌设计的目的 设计是为了传播&#xff0c;让传播速度更快&#xff0c;传播效率更高&#xff0c;减少宣传成本 二 什么是好的品牌设计 好的设计是为了让消费者更容易看懂、记住的设计&#xff0c; 从而辅助传播&#xff0c; 即 看得懂、记得住。 1 看得懂 就是让别人看懂…

数字人实训室助推元宇宙人才培养

如今&#xff0c;全身动作捕捉设备已经大量应用在影视、动画、游戏领域&#xff0c;在热门的元宇宙内容领域中&#xff0c;全身动作捕捉设备逐步发挥着重要的作用&#xff0c;在包括体育训练、数字娱乐虚拟偶像、虚拟主持人、非物质文化遗产保护等等场景&#xff0c;数字人实训…

【stm32HAL库】ADC多通道DMA采集

一、介绍一下HAL库函数 1.ADC 2.DMA 二、实验思路 1.根据数据手册直到PC1&#xff0c;PA2&#xff0c;PA3分别为ADC123的通道11&#xff0c;2&#xff0c;3&#xff0c;我们就用这三个通道来采集&#xff0c;每一个通道采集 50 次&#xff0c;即一共需要DMA传输150个数据 2.由…

镊子蜡烛如何抓住反转进行交易?昂首资本2步抓住反转

很多投资者通过之前的文章知道镊子烛台图&#xff0c;甚至可以通过镊子烛台图有多倍收益&#xff0c;但是很多投资者又迷惑了&#xff0c;为什么我没有通过镊子烛台图获得收益&#xff0c;甚至有时还会亏损收手。其实事情很容易理解&#xff0c;Anzo Capital昂首资本认为那是因…

【光线重塑技术】小姐姐,美得不可方物——lllyasviel/ic-light

在英伟达自18年宣布光追技术之后&#xff0c;RTX显卡也成了目前Steam游戏的常客。就连 AMD、Intel 和 Apple Silicon 都宣布要在GPU上支持光追算法。这次我要介绍的是huggingface上比较火的relight技术—— ic-light 介绍 IC-Light 是一个操纵图像照明的项目。 IC-Light &qu…

C语言 | Leetcode C语言题解之第80题删除有序数组中的重复项II

题目&#xff1a; 题解&#xff1a; int removeDuplicates(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int slow 2, fast 2;while (fast < numsSize) {if (nums[slow - 2] ! nums[fast]) {nums[slow] nums[fast];slow;}fast;}return slow; }

双碳目标下基于“遥感+”集成技术的碳储量、碳排放、碳循环、温室气体等多领域监测与模拟

原文链接&#xff1a;双碳目标下基于“遥感”集成技术的碳储量、碳排放、碳循环、温室气体等多领域监测与模拟https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247604166&idx1&sn5f49d952a0c05ff50582ab2f60e2f371&chksmfa821621cdf59f377b8aeb3084289ac…

YOLO使用笔记

下载oss命令工具。 在OSS.exe文件下打开Power Shell, 输入指令&#xff1a; ./oss login之后输入用户名和密码。 选择将你想要上传的文件导入&#xff1a; ./oss cp {yourdir} oss://进入服务器实例中&#xff0c;打开终端下载数据 同样输入:oss login 进行登录。 登录成功…

嵌入式开发场景下怎么防止源代码泄密

在当今数字化时代&#xff0c;嵌入式系统在各行各业中扮演着至关重要的角色&#xff0c;从智能家居到工业自动化&#xff0c;都离不开这些嵌入式设备的支持。然而&#xff0c;随之而来的是对嵌入式代码安全的日益关注。在嵌入式开发场景下&#xff0c;代码的保护至关重要&#…

MATLAB | 最新版MATLAB绘图速查表来啦!!

之前看大佬Pjer做的MATLAB速查表 http://home.ustc.edu.cn/~pjer1316/matlabplot/ 感觉非常的实用&#xff0c;最近几次MATLAB更新围绕画图方面也有很多新东西&#xff0c;于是就有了自己做一张最新版的速查表的想法&#xff0c;这张表长这样&#xff1a; 这张表的配色基本上…

TCP协议建立连接的过程及其意义

目录 三次握手 四次挥手 三次握手的意义 在客户端与服务器传输数据之前&#xff0c;要在两台主机之间先建立连接&#xff0c;然后再传输业务数据。三次握手&#xff0c;就是建立连接的过程&#xff0c;是在传输业务之前&#xff0c;就要先进行。握手好了&#xff0c;才能进行…

(四十一)第 6 章 树和二叉树(包含双亲的树的孩子链表存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

使用rsync同步服务器目录及文件遇到的问题

背景&#xff1a;某天&#xff0c;客户找我倾诉了一个需求&#xff0c;问我是否有方法解决。诉求如下&#xff1a;有一个生产服务器&#xff08;我暂时把它称为主站服务器&#xff09;&#xff0c;还有一个专门用来备份主站服务器上目录和文件的服务器&#xff08;我姑且把它称…

SD-WAN异地组网的优点和应用场景

随着企业不断扩张&#xff0c;建立多个分支机构&#xff0c;异地组网已经成为提高通信效率和资源配置的关键手段。SD-WAN技术的出现为企业带来了更经济实惠、更有优势的异地组网解决方案。那么&#xff0c;如何搭建SD-WAN异地组网呢&#xff1f;我们一起来看看吧&#xff01; S…

免翻,这两款免费神器结合,游戏党的狂欢!

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 相信大家都听过Steam&#xff0c;这是一款全球知名的PC端游戏平台&#xff0c;像大家耳熟能详的绝地求生、永劫无间等大热PC端游戏都可以从中下载&#xff0c;当然&#xff0c;还有众多…

跨云厂商的不停机数据库迁移,使用NineData就可以了!

近日&#xff0c;Google私有云发生重大故障&#xff0c;在维护UniSuper客户配置&#xff0c;误删除所有数据&#xff08;包括异地备份数据&#xff09;。【重大故障】澳大利亚所有大学退休金数据被Google误删除&#xff0c;本地云服务总监被直接解雇 其实&#xff0c;所有企业…

工器具管理(基于若依)

文章目录 前言一、工器具管理项目总览 二、入库功能1. 前端1.1 界面展示1.2 具体操作实现1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具入库 三、领用功能1. 前端1.1 界面展示1.2 具体实现操作1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具领用 遇到的问题1. 同一页面展示…

下载wsl 网络出现问题,解决办法

查看能下载的wsl系统时&#xff0c;显示网络出现问题 解决办法&#xff1a;更换网络节点 最终效果&#xff1a;