freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

一种在构建阶段保护镜像安全的方法
2022-07-29 11:49:48
所属地 浙江省

首先,可以参考网上各类文章,在构建命令的时候多加注意,避免触及安全边界。

接下来,我们可以通过已有的镜像安全检测工具,对早已存在的镜像进行安全扫描,并对当前正在构建的镜像设置阻断规则,将安全防护前移至 CI/CD 阶段,当前市面上已知的镜像检测工具有:trivy、anchor、veinmind等,我只使用了veinmind,所以描述一下veinmind的详细功能:

首先 veinmind 支持检测镜像内的恶意文件、敏感信息、弱口令、后门、异常历史命令,支持镜像资产清点,支持集成到 CI/CD 进行检测,支持镜像阻断,支持使用 helm 安装部署。

一、docker 镜像阻断功能:

# first
./veinmind-runner authz -c config.toml 
# second
dockerd --authorization-plugin=veinmind-broker

其中config.toml,包含如下字段

字段名字段属性含义
policyactionstring需要监控的行为
enabled_plugins[]string使用哪些插件
plugin_params[]string各个插件的参数
risk_level_filter[]string风险等级
blockbool是否阻断
alertbool是否报警
logreport_log_pathstring插件扫描日志
authz_log_pathstring阻断服务日志

action 原则上支持 DockerAPI所提供的操作接口 如下的配置表示:当 创建容器或推送镜像 时,使用 veinmind-weakpass 插件扫描ssh服务,如果发现有弱密码存在,并且风险等级为 High 则阻止此操作,并发出警告。最终将扫描结果存放至plugin.log,将风险结果存放至auth.log。

[log]
plugin_log_path = "plugin.log"
auth_log_path = "auth.log"
[listener]
listener_addr = "/run/docker/plugins/veinmind-broker.sock"
[[policies]]
action = "container_create"
enabled_plugins = ["veinmind-weakpass"]
plugin_paramas = ["veinmind-weakpass:scan.serviceName=ssh"]
risk_level_filter = ["High"]
block = true
alert = true
[[policies]]
action = "image_push"
enabled_plugins = ["veinmind-weakpass"]
plugin_params = ["veinmind-weakpass:scan.serviceName=ssh"]
risk_level_filter = ["High"]
block = true
alert = true

二、集成到 Jenkins:

image

扫描在 Job 过程中构建的镜像

注意:所有的使用方式都是默认Jenkins安装了以下插件:<br/>
  • Docker plugin

    • Pipeline: Groovy Libraries

  1. 通过Pipeline Libraries引入配置

在 Manage Jenkins » Configure System » Global Pipeline Libraries 添加

https://github.com/chaitin/veinmind-jenkins

image

随后即可在Jenkinsfile内使用:

// import library
@Library('veinmind-runner') _

pipeline {
agent any

stages {
  stage('build') {
      steps {
          script {
              sh 'docker build -t YOUR_IMAGE:YOUR_TAG  .'
          }
      }
  }

  // add scan
  stage('scan') {
      steps {
          script {
              // easy mod
              veinmindRunner.scan("YOUR_IMAGE:YOUR_TAG")

              // set exit-code
              veinmindRunner.scan("YOUR_IMAGE:YOUR_TAG", 1)

              // set output
              veinmindRunner.scan("YOUR_IMAGE:YOUR_TAG", outPut="report.json", exitCode=0)

              // set all config params
              veinmindRunner.scan("YOUR_IMAGE:YOUR_TAG", "scan-host", "report.json", 0)
          }
      }
  }
}
}

参数设置

参数名称参数作用默认值
imageRef镜像Reference
scanAction扫描功能类型scan-host
outPut报告输出名称report.json
exitCode当发现安全问题时的程序退出码, 非零时阻断Pipeline0

三、集成到 Gitlab:

image

扫描在 Job 过程中构建的镜像

  1. 通过远程配置引入

stages:
- build

# import scan runner
include:
- remote: https://download.veinmind.tech/scripts/veinmind-runner-gitlab-ci.yml

YOUR_JOB:
stage: build
image: YOUR_BUILD_IMAGE:latest
# add default config
extends: .scan-config
# add your config
variables:
  IMAGE_REF: YOUR_APP:APP_TAG
script:
  - docker build -t YOUR_APP:APP_TAG .
  # add scan script
  - !reference [.scan-script, script]
  1. 通过构建 veinmind/veinmind-gitlab-CI 仓库方式引入

此方式需要首先clone该仓库到您的的gitlab内。

stages:
- build

# import scan runner
include:
- project: veinmind-gitlab-CI # absolute path
  file: runner.yml


YOUR_JOB:
stage: build
image: YOUR_BUILD_IMAGE:latest
# add default config
extends: .scan-config
# add your config
variables:
  IMAGE_REF: YOUR_APP:APP_TAG
script:
  - docker build -t YOUR_APP:APP_TAG .
  # add scan script
  - !reference [.scan-script, script]
  1. 直接修改.gitlab-ci.yml文件

stages:
- build

YOUR_JOB:
stage: build
image: YOUR_BUILD_IMAGE:latest
# add your config
variables:
  SCAN_ACTION: scan-host
  IMAGE_REF: YOUR_APP:APP_TAG
  OUT_PUT: report.json
  EXIT_CODE: 0
script:
  - docker build -t YOUR_APP:APP_TAG .
  # add scan script
  - docker run --rm --mount 'type=bind,source=/,target=/host,readonly' -v /var/run/docker.sock:/var/run/docker.sock -v `pwd`:/tool/resource veinmind/veinmind-runner $SCAN_ACTION $IMAGE_REF -o $OUT_PUT -e $EXIT_CODE
参数名称参数作用默认值
SCAN_ACTION扫描功能类型scan-host
IMAGE_REF镜像 Reference
EXIT_CODE当发现安全问题时的程序退出码, 非零时阻断Pipeline0
OUT_PUT报告输出名称report.json

项目地址:https://github.com/chaitin/veinmind-tools

使用文档:https://veinmind.chaitin.com/docs/

# 镜像安全 # CICD # 镜像阻断
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录