
# CI/CD镜像安全扫描概述
#### 什么是CI/CD镜像安全扫描
CI/CD是持续集成和持续交付/持续部署的缩写。
- CI：持续集成（Continuous Integration），自动且持续地将代码集成到共享源代码中。
- CD：由持续交付（Continuous Delivery）和持续部署（Continuous Deployment）两部分组成，持续交付是在持续集成之后，通过自动化构建和自动化测试对集成代码进行验证，并保证容器镜像可以随时被交付；持续部署是将构建完成的镜像自动更新发布到生产环境。
企业主机安全的CI/CD镜像安全扫描功能支持将镜像安全扫描能力集成到[Jenkins](https://www.jenkins.io/)和华为云[CodeArts](https://support.huaweicloud.com/productdesc-devcloud/devcloud_pdtd_00001.html) Pipeline项目中，实现镜像构建阶段的安全扫描，识别镜像中存在的系统漏洞、应用漏洞、配置风险、弱口令、恶意文件、敏感文件、软件合规等风险，让安全左移到DevOps阶段，帮助用户及早消除安全风险，防止将有风险的镜像部署到生产环境。
#### CI/CD镜像安全扫描原理
使用企业主机安全的CI/CD镜像安全扫描功能，无需将镜像资产同步到企业主机安全，只需在Jenkins和CodeArts Pipeline项目中集成镜像安全扫描插件。当用户构建项目时，会自动触发镜像安全扫描任务，扫描项目中是否存在镜像安全风险，并在企业主机安全控制台展示扫描结果。用户可根据扫描结果，及时处理镜像中存在的安全风险。
镜像安全扫描配置在Jenkins或CodeArts Pipeline项目中所处的阶段如[图1]所示。
图1CI/CD镜像安全扫描   
![](https://support.huaweicloud.com/usermanual-hss2.0/zh-cn_image_0000002513715907.png "点击放大")
#### CI/CD镜像安全扫描项
企业主机安全对CI/CD镜像执行的安全扫描项如[表1]所示。
 表1镜像安全扫描项 
| 扫描项    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|
| 漏洞风险   | 检测镜像中存在系统漏洞、应用漏洞。 - 支持扫描的操作系统及版本：仅支持扫描Linux系统，支持扫描的Linux系统类型及版本详情请参见[漏洞扫描和修复支持的操作系统](https://support.huaweicloud.com/usermanual-hss2.0/hss_01_0302.html#hss_01_0302__section11859191113502)。 说明： 对于不支持的操作系统，系统漏洞无法进行有效扫描，可能存在扫描结果为空或存在偏差的情况。为确保扫描结果的准确性和可靠性，请对支持的操作系统进行扫描。   - 支持扫描的应用/中间件：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端口暴露                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   
#### 应用场景
- **本地镜像扫描**
  在镜像构建完成后进行镜像安全扫描，如果镜像存在安全风险可对流水线进行阻断，防止有风险的镜像推送到生产镜像仓。
  当前CI/CD扫描功能支持传统的Docker镜像格式，也支持OCI（Open Container Initiative，开放容器倡议）标准镜像结构的镜像扫描。
  表2Docker格式和OCI格式的区别 
  | 对比项                | Docker 格式                                           | OCI 格式                                        |
  |:---|:---|:---|
  | 是否存在"oci-layout"文件 | 否                                                   | 是                                             |
  | 镜像"manifest"文件所在列表 | "application/vnd.docker.container.image.v1+json"    | "application/vnd.oci.image.config.v1+json"    |
  | 镜像"layer"层所在位置     | "application/vnd.docker.image.rootfs.diff.tar.gzip" | "application/vnd.oci.image.layer.v1.tar+gzip" |
     
  
- **远程镜像仓扫描**
  远程镜像仓是指镜像构建完成后推送的远程测试仓，镜像扫描是对远程测试仓的镜像进行安全扫描，如果镜像扫描无风险可推送到生产镜像仓，如果扫描存在风险可对流水线进行阻断。
  
 
#### 约束与限制
- 仓库镜像如需使用镜像安全扫描功能，无需购买HSS任何版本，开通容器镜像扫描按次收费增值服务即可，具体操作请参见[开通容器镜像按次收费扫描](https://support.huaweicloud.com/usermanual-hss2.0/hss_01_0716.html)。
- 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使用流程   
![](https://support.huaweicloud.com/usermanual-hss2.0/zh-cn_image_0000002513608597.png "点击放大")
表3使用流程说明 
| 操作项                                                                                    | 说明                                                     |
|:---|:---|
| [在CI/CD中集成镜像安全扫描](https://support.huaweicloud.com/usermanual-hss2.0/hss_01_0702.html)  | 根据镜像信息生成镜像安全扫描命令，并在Jenkins或CodeArts Pipeline流水线中添加该命令。 |
| [开通容器镜像按次收费扫描](https://support.huaweicloud.com/usermanual-hss2.0/hss_01_0716.html)     | 使用CI/CD镜像安全扫描功能，需单独开通容器镜像按次收费增值服务。                     |
| [查看并处理CI/CD镜像扫描结果](https://support.huaweicloud.com/usermanual-hss2.0/hss_01_0718.html) | 查看CI/CD镜像安全扫描结果，针对安全风险项及时进行排查清理，避免不安全的镜像部署到生产环境。       |
   
