更新时间:2025-12-12 GMT+08:00

CI/CD镜像安全扫描概述

什么是CI/CD镜像安全扫描

CI/CD是持续集成和持续交付/持续部署的缩写。

  • CI:持续集成(Continuous Integration),自动且持续地将代码集成到共享源代码中。
  • CD:由持续交付(Continuous Delivery)和持续部署(Continuous Deployment)两部分组成,持续交付是在持续集成之后,通过自动化构建和自动化测试对集成代码进行验证,并保证容器镜像可以随时被交付;持续部署是将构建完成的镜像自动更新发布到生产环境。

企业主机安全的CI/CD镜像安全扫描功能支持将镜像安全扫描能力集成到Jenkins和华为云CodeArts Pipeline项目中,实现镜像构建阶段的安全扫描,识别镜像中存在的系统漏洞、应用漏洞、配置风险、弱口令、恶意文件、敏感文件、软件合规等风险,让安全左移到DevOps阶段,帮助用户及早消除安全风险,防止将有风险的镜像部署到生产环境。

CI/CD镜像安全扫描原理

使用企业主机安全的CI/CD镜像安全扫描功能,无需将镜像资产同步到企业主机安全,只需在Jenkins和CodeArts Pipeline项目中集成镜像安全扫描插件。当用户构建项目时,会自动触发镜像安全扫描任务,扫描项目中是否存在镜像安全风险,并在企业主机安全控制台展示扫描结果。用户可根据扫描结果,及时处理镜像中存在的安全风险。

镜像安全扫描配置在Jenkins或CodeArts Pipeline项目中所处的阶段如图1所示。

图1 CI/CD镜像安全扫描

CI/CD镜像安全扫描项

企业主机安全对CI/CD镜像执行的安全扫描项如表1所示。

表1 镜像安全扫描项

扫描项

说明

漏洞风险

检测镜像中存在系统漏洞、应用漏洞。

  • 支持扫描的操作系统及版本:仅支持扫描Linux系统,支持扫描的Linux系统类型及版本详情请参见漏洞扫描和修复支持的操作系统
  • 支持扫描的应用/中间件:log4j、slf4j、tomcat、apache、jetty、mysql、druid、commons、spring、shiro、struts、struts2、websocket、json、fastjson、xstream、maven、junit、activemq、libintl、ca-certificates-java、httpclient、httpcore、java、javac2、javaee、Apache2、adaptive_server_enterprise、DB2、http_server、Memcached、nginx、PostgreSQL、bootstrap、zookeeper、plexus-utils、core。

恶意文件

检测镜像中存在的恶意文件。

软件信息

统计镜像中的软件信息。

文件信息

统计镜像中的文件信息。

基线检查

  • 基线配置检查:
    • 检测CentOS 7、Debian 10、EulerOS和Ubuntu16镜像的系统配置项。
    • 检测SSH应用配置项。
  • 弱口令检查:检测Linux操作系统(SSH)账号的弱口令。
  • 口令复杂度检查:检测Linux操作系统中不安全的口令复杂度策略配置。

敏感信息

检测镜像中含有敏感信息的文件。

  • 默认不检测的路径如下:
    • /usr/*
    • /lib/*
    • /lib32/*
    • /bin/*
    • /sbin/*
    • /var/lib/*
    • /var/log/*
    • 任意路径/node_modules/任意路径/任意名称.md
    • 任意路径/node_modules/任意路径/test/任意路径
    • */service/iam/examples_test.go
    • 任意路径/grafana/public/build/任意名称.js
    说明:
    • 任意路径:指当前路径为自定义值,可以是系统中任意名称的路径。
    • 任意名称:指当前路径的文件名称为自定义值,可以是系统中以.md或.js后缀结束的任意名称。
    • 可在安全报告 > 敏感信息页面,单击“敏感文件过滤路径管理”,设置不需要检测的Linux路径,最多可添加20个路径。
  • 不检测的场景如下:
    • 文件大于20MB。
    • 文件类型为二进制、常用进程和自动生成类型。

软件合规

检测软件包或补丁包中是否存在可能会引起安全、合规性或隐私方面问题的组件。

问题组件示例:

  • 第三方的网络嗅探、调试工具:tcpdump、gdb、strace、readelf、Nmap
  • 开发或编译工具:Dev-cpp、gcc、mirror

基础镜像信息

检测业务镜像所使用的基础镜像信息,包括基础镜像名称、版本、镜像层路径。

基础镜像是构建其他镜像的起点,是一个包含了操作系统核心文件、运行时环境或基础工具的最小化镜像;所有业务镜像都是在基础镜像之上添加新的层(Layer)来构建的。常见的基础镜像包括Ubuntu、Alpine Linux、CentOS、Debian、Fedora。

镜像构建指令

检测镜像构建指令存在的风险。包括但不限于在Dockerfile中使用了如下指令:

  • COPY命令中指定了两个以上参数,但未以正斜杠结尾
  • 以root用户运行应用
  • 使用ADD而非COPY
  • 22端口暴露

应用场景

  • 本地镜像扫描

    在镜像构建完成后进行镜像安全扫描,如果镜像存在安全风险可对流水线进行阻断,防止有风险的镜像推送到生产镜像仓。

  • 远程镜像仓扫描

    远程镜像仓是指镜像构建完成后推送的远程测试仓,镜像扫描是对远程测试仓的镜像进行安全扫描,如果镜像扫描无风险可推送到生产镜像仓,如果扫描存在风险可对流水线进行阻断。

约束与限制

  • 仓库镜像如需使用镜像安全扫描功能,无需购买HSS任何版本,开通容器镜像扫描按次收费增值服务即可,具体操作请参见开通容器镜像按次收费扫描
  • CI/CD镜像扫描功能仅适用Jenkins和CodeArts的Pipeline模式。
    Jenkins配置限制如下:
    • 硬件限制:
      • Jenkins编译构建主机:Linux主机,x86或Arm 64bit
      • CPU:1核及以上
      • 内存:2GB及以上
      • 磁盘空间:60GB及以上
    • 技术限制:
      • Jenkins版本:Jenkins 2.x
      • JDK版本:JDK 17及以上
      • Docker版本:Docker 18.09及以上
  • 如需实现远程镜像扫描,镜像仓库需支持Docker Registry HTTP API v2交互方式。

CI/CD镜像安全扫描使用流程

图2 使用流程
表2 使用流程说明

操作项

说明

在CI/CD中集成镜像安全扫描

根据镜像信息生成镜像安全扫描命令,并在Jenkins或CodeArts Pipeline流水线中添加该命令。

开通容器镜像按次收费扫描

使用CI/CD镜像安全扫描功能,需单独开通容器镜像按次收费增值服务。

查看并处理CI/CD镜像扫描结果

查看CI/CD镜像安全扫描结果,针对安全风险项及时进行排查清理,避免不安全的镜像部署到生产环境。