KICS 保证Terraform基础设施安全

举报
kaliarch 发表于 2023/07/16 10:41:54 2023/07/16
【摘要】 一 相关概念KICS 是 Keeping Infrastructure as Code Secure 的缩写,是一个开源项目,主要用来在开发早期发现基础设施即代码中的一些安全漏洞、合规问题以及错误配置等。目前支持多种平台,诸如 Terraform、Kubernetes、Docker、Helm、Ansible 等。使用Checkmarx的KICS在基础设施即代码开发周期的早期发现安全漏洞、遵...

一 相关概念

KICS 是 Keeping Infrastructure as Code Secure 的缩写,是一个开源项目,主要用来在开发早期发现基础设施即代码中的一些安全漏洞、合规问题以及错误配置等。目前支持多种平台,诸如 Terraform、Kubernetes、Docker、Helm、Ansible 等。

使用Checkmarx的KICS在基础设施即代码开发周期的早期发现安全漏洞、遵从性问题和基础设施错误配置。
KICS代表保持基础设施代码安全,它是开源的,是任何云原生项目的必备软件。

使用Checkmarx的KICS在基础设施即代码开发周期的早期发现安全漏洞、遵从性问题和基础设施错误配置

二 工作原理

使KICS真正强大和流行的是其内置的可扩展性。这种可扩展性是通过以下方式实现的:

  • 完全可定制和可调整的启发式规则,称为查询。这些可以很容易地编辑、扩展和添加。
  • 健壮但简单的架构,允许快速添加对新的基础设施即代码解决方案的支持。

KICS是100%开源的,使用开放策略代理(OPA)在Golang中编写。
Golang的速度、简单性和可靠性使其成为编写KICS的最佳选择,而Rego作为查询语言是实现安全查询的原生选择。
到目前为止,已经编写了1000多个现成的查询,涵盖了AWS、GCP、Azure和其他云提供商的广泛漏洞检查。

高级架构¶

KICS具有可插拔的体系结构,具有可扩展的解析IaC语言的管道,这允许轻松集成新的IaC语言和查询。
在非常高的级别上,KICS由以下主要组件组成:命令行接口、解析器、查询执行引擎、IaC提供程序、安全查询和结果编写器。

  • CLI:为 KICS 提供命令行输入;
  • 解析器:负责解析输入的 IaC 文件(比如 terraform 及其他形式);
  • IaC 提供者:将 IaC 语言转换成规范化的 JSON;
  • 查询执行引擎:对规范化的 JSON 使用 REGO 查询;
  • 安全查询:针对每个安全漏洞和错误配置进行前置 REGO 查询;
  • 写入器:将结果写入到 JSON 文件中;

image.png

执行流¶

下面的序列图描述了主要KICS组件之间的交互:

image.png
image.png

三 执行

image.png

扫描一个目录

docker run -t -v {path_to_host_folder_to_scan}:/path checkmarx/kics:latest scan -p /path -o "/path/"


image.png

  • 查看result.json

image.png

image.png

扫描单个文件

docker run -t -v {path_to_host_folder}:/path checkmarx/kics:latest scan -p /path/{filename}.{extension} -o "/path/"

四 CI/CD集成

Github Action集成

您可以使用特定的KICS Github Action将KICS集成到您的Github Actions CI/CD管道中。
这为您提供了在Github存储库中运行KICS扫描的能力,并将漏洞和错误配置检查简化为基础设施的代码(IaC)。

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
    # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
    - uses: actions/checkout@v2
    - name: Mkdir results-dir
      # make sure results dir is created
      run: mkdir -p results-dir
    # Scan Iac with kics
    - name: run kics Scan
      uses: checkmarx/kics-github-action@latest
      with:
        path: 'terraform'
        output_path: results-dir
    # Display the results in json format
    - name: display kics results
      run: |
        cat results-dir/results.json
      # optionally parse the results with jq
      # jq '.total_counter' results-dir/results.json
      # jq '.queries_total' results-dir/results.json

Gitlab CI

这使您能够在GitLab存储库中运行KICS扫描,并将漏洞和错误配置检查简化为基础设施的代码(IaC)。

image:
    name: checkmarx/kics:latest
    entrypoint: [""]

stages:
    - kics

kics-scan:
    stage: kics
    script:
        - kics scan --no-progress -p ${PWD} -o ${PWD} --report-formats json --output-name kics-results
    artifacts:
        name: kics-results.json
        paths:
            - kics-results.json
        when: always

五 使用配置文件

KICS允许您以命令行参数或代码的形式提供所有配置。在CLI中可以看到所有可能的配置。您可以使用内联注释禁用文件某些部分的扫描。更多信息可以在运行KICS部分中找到。
KICS支持JSON、TOML、YAML和HCL格式的配置文件,它能够推断这些格式,而不需要文件扩展名。

  • 创建一个名为kics的文件。配置并将其放置在项目存储库的根目录中。
  • 以任何支持的格式添加模板部分中所示的必要配置。
  • 调用不带参数的KICS (KICS将在根目录中搜索特定文件)

https://docs.kics.io/latest/configuration-file/

  • yaml
path: .
verbose: true
log-file: true
type:
  - Dockerfile
  - Kubernetes
  - Terraform
queries-path: "assets/queries"
exclude-paths:
  - "foo/"
  - "bar/"
output-path: "results"

使用

docker run -t -v {path_to_kics_config}:/path -v {path_to_host_folder_to_scan}:/path checkmarx/kics scan -p /path --config /path/kics.yaml

六 其他

KICS还接受环境变量来填充标志值。要使用它,您只需要使用带有KICS_前缀的标志。例如:

  • 要使用路径标志作为环境变量,您的环境上应该有KICS_PATH;

  • 要使用多个名称变量,如——output-path,您应该将其与KICS_一起使用,每个单词用_分隔,例如:KICS_OUTPUT_PATH

  • KICS还可以扫描S3/Git等。

参考链接

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。