checkmarx/kicsKICS(Keeping Infrastructure as Code Secure)是一款用于保障基础设施即代码(IaC)安全的工具,通过扫描IaC文件(如Terraform、Kubernetes、Dockerfile等),识别其中的安全漏洞、合规违规、配置错误等问题,帮助用户在部署前发现并修复基础设施配置风险。
remediate命令)。通过Docker Hub拉取最新版KICS镜像:
shdocker pull checkmarx/kics:latest
将主机目录挂载到容器内,使用scan命令扫描指定路径,结果输出到挂载目录:
shdocker run -t -v {主机待扫描目录路径}:/path checkmarx/kics:latest scan -p /path -o "/path/"
说明:
-v {主机目录}:/path:将主机目录挂载到容器内/path路径。-p /path:指定容器内待扫描的路径(即挂载的目录)。-o "/path/":指定结果输出目录(需在挂载目录内,否则主机无法访问)。results.json文件。类似目录扫描,指定容器内单个文件路径:
shdocker run -t -v {主机文件所在目录}:/path checkmarx/kics:latest scan -p /path/{文件名}.{扩展名} -o "/path/"
示例:扫描主机/home/user/iac目录下的main.tf文件:
shdocker run -t -v /home/user/iac:/path checkmarx/kics:latest scan -p /path/main.tf -o "/path/"
基于Red Hat UBI8的镜像(checkmarx/kics:ubi8)默认以kics用户(UID=1000,GID=1000)运行。挂载主机文件时,若主机文件权限与容器默认UID/GID不匹配,需通过以下方式调整:
使用-u参数指定当前主机用户的UID/GID,确保容器有权访问挂载文件:
shdocker run -it -u $UID:$GID -v $PWD:/path checkmarx/kics:ubi8 scan -p /path/assets/queries/dockerfile -o /path -v
说明:$UID和$GID为当前主机用户的ID,通过id命令可查看。
通过构建参数自定义用户/组ID,重新构建UBI8镜像:
shdocker build -f docker/Dockerfile.ubi8 \ --build-arg UID=999 \ --build-arg GID=999 \ --build-arg KUSER=myuser \ --build-arg KGROUP=mygroup \ -t my-kics:ubi8 .
txtkics [command] Available Commands: generate-id 为查询生成UUID help 查看命令帮助 list-platforms 列出支持的平台 remediate 自动修复项目配置 scan 执行扫描分析 version 显示当前版本
remediate子命令自动修复项目配置,基于扫描结果中的修复建议。
txtUsage: kics remediate [flags] Flags: -h, --help 显示帮助信息 --include-ids strings 指定需修复的相似度ID(默认修复所有),示例:"f6b7acac2d541d8c15c88d2be51b0e6abd576750b71c580f2e3a9346f7ed0e67,6af5fc5d7c0ad0077348a090f7c09949369d24d5608bbdbd***a15de62afd1" --results string 指向包含修复建议的JSON结果文件路径
scan子命令执行IaC扫描分析,核心功能命令。
txtUsage: kics scan [flags] Flags: -m, --bom 在结果中包含物料清单(BoM) --cloud-provider strings 指定云提供商(alicloud, aws, azure, gcp, nifcloud, tencentcloud),可指定多个 --config string 配置文件路径 --disable-full-descriptions 禁用完整描述请求,使用默认漏洞描述 --disable-secrets 禁用秘密扫描 --enable-openapi-refs 解析OpenAPI文件中的引用(默认false) --exclude-categories strings 排除指定类别(名称),不可与包含查询的标志同时使用,可多次指定或逗号分隔,示例:'Access control,Best practices' --exclude-gitignore 禁用排除.gitignore中指定的路径 -e, --exclude-paths strings 排除扫描路径,支持通配符,可多次指定或逗号分隔,示例:'./shouldNotScan/*,somefile.txt' --exclude-queries strings 排除指定查询ID,不可与包含查询的标志同时使用,可多次指定或逗号分隔,示例:'e69890e6-fce5-461d-98ad-cb98318dfc96' -x, --exclude-results strings 排除指定相似度ID的结果,可多次指定或逗号分隔 --exclude-severities strings 排除指定严重级别结果(info, low, medium, high),可多次指定或逗号分隔 --experimental-queries 包含实验性查询(未彻底审核的查询)(默认false) --fail-on strings 指定导致非0退出码的结果类型(high, medium, low, info),默认全部(default [high,medium,low,info]) -h, --help 显示帮助信息 --ignore-on-exit string 忽略非0退出码的类型(all, results, errors, none),示例:'results'仅忽略结果导致的非0码(default "none") -i, --include-queries strings 包含指定查询ID,不可与排除查询的标志同时使用,可多次指定或逗号分隔 --input-data string 查询输入数据文件路径 -b, --libraries-path string 库目录路径(default "./assets/libraries") --max-file-size int 最大扫描文件大小(MB)(default 5) --minimal-ui 简化CLI输出 --no-progress 隐藏进度条 --output-name string 报告名称(default "results") -o, --output-path string 报告输出目录路径 --parallel int 每个平台的并行工作线程数,0为自动检测(default 1) -p, --path strings 待扫描路径或目录,示例:"./somepath,somefile.txt" --payload-lines 在payload中添加行信息 -d, --payload-path string 内部表示JSON文件存储路径 --preview-lines int CLI结果中显示的行数(1-30)(default 3) -q, --queries-path strings 查询目录路径(default [./assets/queries]) --report-formats strings 报告格式(all, asff, codeclimate, csv, cyclonedx, glsast, html, json, junit, pdf, sarif, sonarqube)(default [json]) -r, --secrets-regexes-path string 秘密扫描规则配置文件路径 --terraform-vars-path string Terraform变量文件路径 --timeout int 查询执行超时时间(秒)(default 60) -t, --type strings 指定扫描平台类型(大小写不敏感),如:Terraform,Kubernetes --exclude-type strings 排除扫描平台类型(大小写不敏感),不可与-t同时使用
所有命令均支持的全局标志:
txtGlobal Flags: --ci 仅输出日志消息到CLI(与silent互斥) -f, --log-format string 日志格式(pretty,json)(default "pretty") --log-level string 日志级别(TRACE,DEBUG,INFO,WARN,ERROR,FATAL)(default "INFO") --log-path string 日志文件生成路径(info.log) --no-color 禁用CLI彩色输出 --profiling string 启用性能分析,在日志中打印资源消耗 metrics(CPU, MEM) -s, --silent 静默stdout输出(与verbose、ci互斥) -v, --verbose 同时输出日志到stdout(与silent互斥)
扫描并输出JSON、HTML、JUnit格式报告:
shdocker run -t -v $PWD:/path checkmarx/kics:latest scan \ -p /path \ -o /path/reports \ --report-formats json,html,junit \ --output-name iac-scan-results
结果:在$PWD/reports目录下生成iac-scan-results.json、iac-scan-results.html、iac-scan-results.junit.xml。
shdocker run -t -v $PWD:/path checkmarx/kics:latest scan \ -p /path \ -o /path \ --exclude-severities low \ --ignore-on-exit results
shdocker run -it -u 1001:1001 -v $PWD:/path checkmarx/kics:ubi8 scan \ -p /path/terraform \ -o /path/output \ --log-level DEBUG \ -v
官方文档:[]
代码仓库:[]

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务