基础架构即代码
基础架构即代码(IaC)是通过机器可读的定义文件(而不是物理硬件配置或交互式配置工具)来创建,配置和配置软件定义的计算(SDC),网络和存储基础架构。
IaC自动执行通常与计算基础架构配置和实施相关的手动任务。通过这样做,您可以:
加快新计算基础架构的配置和实施
减少扩展和管理大型基础架构所需的成本和资源
消除了多个人手动配置新设备或应用程序时不可避免发生的不一致。
基础架构即代码的核心概念是:
在代码中定义
存储在存储库中
陈述式或命令式
幂等与一致性
推或拉
基础架构作为代码的主要好处:
全自动部署
一致的环境
可重复的过程
可重复使用的组件(“ DRY”)
记录架构
基础架构即代码测试
基础架构即代码测试检查用于实例化基础架构的配置定义和脚本,以确保生成的资源安全。
IaC安全测试工具必须能够使用相关格式的配置文件和脚本,进行测试以确保符合常见的配置强化标准(即,Internet安全基准中心以及许多其他标准),确定与特定操作环境相关的安全问题,确定嵌入式机密,并执行其他测试以支持组织特定的标准和合规性要求。可选地,工具可以自动纠正错误(例如,更改存储资源的读/写权限)。此功能专门在开发过程的上下文中检查IaC测试,但是工具也可能支持检查已部署的生产实例并响应那些系统中确定的问题
安装
有多种方法可以启动和运行KICS:
KICS可以作为Docker映像(https://hub.docker.com/r/checkmarx/kics)使用,并且可以按以下方式使用:
要在主机上扫描目录/文件,必须将其作为卷安装到容器上,并使用-p KICS参数在容器文件系统上指定路径(请参见下面的“扫描命令选项”部分)

docker pull checkmarx/kics:latest docker run -v {path_to_host_folder_to_scan}:/path checkmarx/kics:latest scan -p "/path" -o "/path/results.json"
您可以使用-qCLI选项提供自己的查询目录路径(请参见下面的“ CLI选项”部分),否则将使用默认目录。默认./assets/queries内置在映像中。
一线安装脚本
运行以下命令以下载并安装kics。它将检测您当前的操作系统并下载适当的二进制软件包,默认安装到./bin查询的位置将与二进制文件放在./bin/assets/queries:
curl -sfL https://raw.githubusercontent.com/Checkmarx/kics/master/install.sh | bash
如果您要将其放置在其他地方,例如/usr/local/bin:
sudo curl -sfL https://raw.githubusercontent.com/Checkmarx/kics/master/install.sh | bash -s -- -b /usr/local/bin
KICS的发布过程非常简单。发布新版本时,我们将打包适用于linux和Windows操作系统的KICS可执行文件。我们的安全性查询将包含在ZIP文件和tarball中,以便您可以使用开箱即用的查询来扫描IaC代码
因此,您需要做的是:
1.转到KICS版本(https://github.com/Checkmarx/kics/releases/latest)
2.根据您的操作系统下载KICS二进制文件
3.提取文件
4.如下所述,使用cli选项运行kics可执行文件(请注意,kics二进制文件应与查询目录位于同一目录中)
./kics scan -p <path-of-your-project-to-scan> -o <output-results.json>
从源构建
1.从https://golang.org/dl/下载并安装Go。
2.克隆存储库:
git clone https://github.com/Checkmarx/kics.gitcd kics3.扫一扫!
go run ./cmd/console/main.go scan -p <path-of-your-project-to-scan> -o <output-results.json>
将KICS与Azure Pipelines集成
您可以将KICS集成到Azure Pipelines CI / CD中。
这使您能够在GitLab存储库中运行KICS扫描,并以代码(IaC)的形式简化对基础结构的漏洞和错误配置检查。
教程
以下教程是在Azure Pipelines CI中使用KICS的一种可能方法。您可以发挥创造力,并提出适合您的管道的不同解决方案。
在这种情况下,我们指示作业下载并使用最新的linux版本的KICS。
1-在存储库的根目录中编辑或添加新的azure-pipelines.yml文件
2-宣告一个新阶段
stages: - stage: kics displayName: kics
3-声明步骤-在这种情况下,这是一个脚本,我们遵循以下步骤:
3.1-获取操作系统名称: OS=$(uname -s)
3.2-声明版本和KICS二进制文件下载
get_latest_kics_release() { curl --silent "https://api.github.com/repos/Checkmarx/kics/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*//1/' } LATEST_TAG=$(get_latest_kics_release) LATEST_VERSION=${LATEST_TAG#v} PACKAGE_NAME=kics_${LATEST_VERSION}_${OS}_x64.tar.gz TARGET_DIR=/home/vsts/kics
3.3-下载二进制文件
mkdir -p ${TARGET_DIR} wget -q -c https://github.com/Checkmarx/kics/releases/download/${LATEST_TAG}/${PACKAGE_NAME} -O - | tar -xz -C ${TARGET_DIR}
3.4-开始扫描
${TARGET_DIR}/kics --no-progress -q ${TARGET_DIR}/assets/queries -p ${PWD} -o ${PWD}/kics-results.json
3.5-消费结果
TOTAL_SEVERITY_COUNTER=`grep '"total_counter"':' ' kics-results.json | awk {'print $2'}` export SEVERITY_COUNTER_HIGH=`grep '"HIGH"':' ' kics-results.json | awk {'print $2'} | sed 's/.$//'` SEVERITY_COUNTER_MEDIUM=`grep '"INFO"':' ' kics-results.json | awk {'print $2'} | sed 's/.$//'` SEVERITY_COUNTER_LOW=`grep '"LOW"':' ' kics-results.json | awk {'print $2'} | sed 's/.$//'` SEVERITY_COUNTER_INFO=`grep '"MEDIUM"':' ' kics-results.json | awk {'print $2'} | sed 's/.$//'` echo "TOTAL SEVERITY COUNTER $TOTAL_SEVERITY_COUNTER"
3.6-(可选)为CI定义一个断点
if [ "$SEVERITY_COUNTER_HIGH" -ge "1" ]; then echo "Please fix all $SEVERITY_COUNTER_HIGH HIGH SEVERITY COUNTERS" && exit 1; fi
这是工作的全部内容
trigger: - master pool: vmImage: 'ubuntu-latest' stages: - stage: kics displayName: kics jobs: - job: runKics displayName: runKics steps: - script: | get_latest_kics_release() { curl --silent "https://api.github.com/repos/Checkmarx/kics/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*//1/' } OS=$(uname -s) LATEST_TAG=$(get_latest_kics_release) LATEST_VERSION=${LATEST_TAG#v} PACKAGE_NAME=kics_${LATEST_VERSION}_${OS}_x64.tar.gz TARGET_DIR=/home/vsts/kics mkdir -p ${TARGET_DIR} wget -q -c https://github.com/Checkmarx/kics/releases/download/${LATEST_TAG}/${PACKAGE_NAME} -O - | tar -xz -C ${TARGET_DIR} echo '--- START SCANNING ---' ${TARGET_DIR}/kics --no-progress -q ${TARGET_DIR}/assets/queries -p ${PWD} -o ${PWD}/kics-results.json TOTAL_SEVERITY_COUNTER=`grep '"total_counter"':' ' kics-results.json | awk {'print $2'}` export SEVERITY_COUNTER_HIGH=`grep '"HIGH"':' ' kics-results.json | awk {'print $2'} | sed 's/.$//'` SEVERITY_COUNTER_MEDIUM=`grep '"INFO"':' ' kics-results.json | awk {'print $2'} | sed 's/.$//'` SEVERITY_COUNTER_LOW=`grep '"LOW"':' ' kics-results.json | awk {'print $2'} | sed 's/.$//'` SEVERITY_COUNTER_INFO=`grep '"MEDIUM"':' ' kics-results.json | awk {'print $2'} | sed 's/.$//'` echo "TOTAL SEVERITY COUNTER $TOTAL_SEVERITY_COUNTER" if [ "$SEVERITY_COUNTER_HIGH" -ge "1" ]; then echo "Please fix all $SEVERITY_COUNTER_HIGH HIGH SEVERITY COUNTERS" && exit 1; fi
特别感谢 来自Kaplan开源咨询公司的Lior Kaplan在创建KICS方面的协助。
以下人员为KICS做出了巨大贡献。欢迎小伙伴们提出更多的建议!
鲁本·席尔瓦(Ruben Silva)https://github.com/Ruben-Silva
拉斐拉·苏亚雷斯(Rafaela Soares)https://github.com/rafaela-soares
若昂·马丁斯
乔尔·卡瓦略(Joel Carvalho)
佩德罗·米莫索(Pedro Mimoso)
努诺·阿劳霍(NunoAraújo)https://github.com/NunoAraujoCX
法比奥·贡萨尔维斯(FábioGonçalves)https://github.com/fabioGoncalvesCx
玛丽安娜·卡瓦略(Mariana Carvalho)https://github.com/mcarvalhox
豪尔赫·克鲁兹(Jorge Cruz)https://github.com/jorge-cruz
若昂·奥利维拉(JoãoOliveira)https://github.com/JoaoO1998
迪奥戈·莱莫斯(Diogo Lemos)https://github.com/diogo-lemos
亚历克斯·罗希曼 https://github.com/Alexaro1cx
阿达尔·魏德曼 https://github.com/AdarWeidman
埃利·特罗普(Eli Trop)https://github.com/elit-cx
乔尔·索萨(Joel Sousa)https://github.com/joelsou5a
圣安东尼奥 https://github.com/soniantao
卡塔琳娜·阿劳霍(CatarinaAraújo)https://github.com/cataraujo190
佩德罗·佩雷拉(Pedro Pereira)https://github.com/pedropereiraaa
塞缪尔·费雷拉(Samuel Ferreira)https://github.com/samuel-ferreira
核心团队
瑞·戈麦斯 https://github.com/ruigomescx
罗杰里奥·佩索托(RogérioPeixoto)https://github.com/rogeriopeixotocx
若昂·雷戈塔(JoãoReigota)https://github.com/joaoReigota1
费利佩·阿夫拉(Felipe Avelar)https://github.com/felipe-avelar
努诺·奥利维拉(Nuno Oliveira)https://github.com/nunoocx
马克·米沙耶夫(Mark Mishaev)https://github.com/markmishaevcx
伊戈尔·马可夫(Igor Markov)https://github.com/IgorMarkov
奥里·本迪(Ori Bendet)https://github.com/oribendetcx
埃雷兹·亚隆(Erez Yalon)https://github.com/erezyalon

北京市 1F
这个工具部署起来方便吗?
福建省厦门市 2F
之前在项目里用过类似的,配置起来确实省事不少
湖南省长沙市 3F
KICS支持哪些具体的IaC格式?能检测Terraform吗?
韩国 B1
@ 人形信号灯 支持Terraform、CloudFormation这些主流格式,实测过Terraform没问题。
浙江省温州市 4F
感觉这种自动化工具对提升代码安全帮助挺大的👍
山东省滨州市 5F
有没有人试过在Windows环境部署?求经验分享
韩国 6F
看介绍功能挺全的,实际扫描效果如何?
北京市海淀区 B1
@ 手工皮具 扫描效果还行,不过有些误报得手动筛,别指望全自动搞定。
广东省佛山市 7F
开源项目能做到这个程度确实不错
重庆市 8F
这玩意对团队协作开发应该很有帮助吧
山东省滨州市 9F
文档写得挺详细的,照着做应该没问题
北京市 10F
检测到高危漏洞会直接阻断流程吗?
黑龙江省哈尔滨市 B1
@ 湮灭之锋 高危漏洞默认不会阻断,但CI脚本里可以自己加判断条件让它fail。
福建省福州市福清市 11F
刚在Win10上跑通了,用Docker最省事,别折腾二进制。
日本 12F
这工具对DevOps流水线挺友好的,尤其适合云原生项目。
安徽省铜陵市 13F
配置文件里藏密钥的问题真能扫出来?试了下好像不太灵啊🤔
青海省海东市 14F
前几天刚用KICS扫了公司Terraform代码,揪出几个S3公开权限问题,蛮实用的。
湖北省武汉市 15F
文档看着详细,但install.sh脚本在CentOS上跑挂了,有点坑。
福建省福州市 16F
能不能加个VS Code插件?每次切终端太麻烦了。
日本 17F
IaC安全这块水挺深的,光靠工具不够,还得人审。
四川省绵阳市 18F
这个工具能集成到Jenkins里不?
香港 19F
之前用Checkmarx SAST,现在试试KICS看效果咋样。
日本 20F
Azure Pipelines那部分写得挺清楚,照着配就行。
日本 21F
开源安全工具里这个算做得比较全的了。
北京市 22F
有没有更多实际案例分享?光看功能介绍有点虚。
重庆市 23F
支持Arm架构的服务器吗?
湖北省武汉市 24F
文档看着还行,但实际用起来还是得踩坑。
云南省昆明市 25F
刚在mac上装完,扫描速度比想象中快。
日本 26F
这种工具对新手会不会门槛太高了?
陕西省 27F
之前用这个查出了几个配置问题,挺实用的
菲律宾 28F
整合到pipeline里试试看
湖南省怀化市 29F
这工具能扫出0day吗?还是只查配置?