更新时间:2025-01-07 GMT+08:00
分享

CI/CD镜像安全扫描概述

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

什么是CI/CD

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

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

什么是Jenkins Pipeline

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。

Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。Jenkins可以很好的支持各种语言的项目构建,也完全兼容Maven、Ant、Gradle等多种第三方构建工具,同时跟SVN、GIT等常用的版本控制工具无缝集成,也支持直接对接GitHub等源代码托管网站。

Pipeline是一种在Jenkins中实现CI/CD的工作模式。

CI/CD镜像安全扫描原理

使用企业主机安全的CI/CD镜像安全扫描功能,无需将镜像资产同步到企业主机安全,只需在Jenkins Pipeline流水线中添加两条命令(拉取企业主机安全镜像安全扫描工具镜像的命令和启动该工具的命令),当用户的Jenkins Pipeline工具构建项目时,会同步触发镜像安全扫描任务,扫描项目中是否存在镜像安全风险,并在企业主机安全控制台展示扫描结果。用户可根据扫描结果,及时处理镜像中存在的安全风险。

镜像安全扫描配置在Jenkins Pipeline流水线中所处的阶段如图1所示。

图1 CI/CD镜像安全扫描

CI/CD镜像安全扫描项

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

表1 镜像安全扫描项

检查项

说明

漏洞风险

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

  • 系统漏洞扫描支持扫描的操作系统:
    • EulerOS 2.2、2.3、2.5、2.8、2.9、2.10、2.11、2.12(64位)
    • CentOS 7.4、7.5、7.6、7.7、7.8、7.9(64位)
    • Ubuntu 16.04、18.04、20.04、22.04(64位)
    • Debian 9、10、11(64位)
    • kylin V10 SP1、SP2(64位)
    • HCE 1.1、2.0(64位)
    • Suse 12 SP5、15 SP1、15 SP2(64位)
    • 统信UOS V20服务器E版、V20服务器D版(64位)
  • 应用漏洞扫描支持扫描的应用:fastjson、log4j-core、log4j-api、spring-core、shiro-core、struts-core、tomcat-embed-el、tomcat-jdbc、tomcat-embed-websocket、tomcat-juli、tomcat-annotations-ap、tomcat-embed-core、spring-jdbc、druid、commons-lang、commons-logging、commons-configuration、commons-collections、spring-cloud-netflix-archaius、mysql-connector-java、tensorflow、bootstrap、json、spring-beans、spring-context、spring-aop、spring-webmvc。

恶意文件

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

软件信息

统计镜像中的软件信息。

文件信息

统计镜像中的文件信息。

基线检查

  • 配置检查:
    • 检测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。
    • 文件类型为二进制、常用进程和自动生成类型。

软件合规

检测不允许使用的软件和工具。

基础镜像信息

检测未使用基础镜像构建的业务镜像。

应用场景

  • 本地镜像扫描

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

  • 远程镜像仓扫描

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

约束与限制

  • 仅企业主机安全容器版支持CI/CD镜像安全扫描功能。
  • CI/CD镜像扫描功能仅适用Jenkins 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

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

管理CI/CD镜像

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

相关文档