Kubesec是一款针对Kubernetes的安全工具,在该工具的帮助下,广大研究人员可以轻松执行Kubernetes资源安全风险分析任务。
Golang
源码获取
直接使用下列命令即可获取工具源码:
$ git clone https://github.com/controlplaneio/kubesec.git
发布版本
广大研究人员还可以直接访问该项目的【Releases页面】下载Linux、macOS和Windows的二进制文件版本。
Go 1.16+
$ go install github.com/controlplaneio/kubesec/v2@latest
Go 版本 < 1.16
$ GO111MODULE="on" go get github.com/controlplaneio/kubesec/v2
命令行用法:
$ kubesec scan k8s-deployment.yaml
使用示例:
$ cat <<EOF > kubesec-test.yaml apiVersion: v1 kind: Pod metadata: name: kubesec-demo spec: containers: - name: kubesec-demo image: gcr.io/google-samples/node-hello:1.0 securityContext: readOnlyRootFilesystem: true EOF $ kubesec scan kubesec-test.yaml
在 Docker 中运行下列的命令:
$ docker run -i kubesec/kubesec:v2 scan /dev/stdin < kubesec-test.yaml
kubesec [scan|http]
使用上游的特定架构版本:
kubesec [scan|http] --kubernetes-version <version>
通过 HTTP 在隔离环境中使用特定的架构版本:
kubesec [scan|http] --kubernetes-version <version> --schema-location https://host.server
在具有本地文件的隔离环境中使用特定的架构版本:
kubesec [scan|http] --kubernetes-version <version> --schema-location /opt/schemas
所有扫描规则都可以以不同的格式打印(json(默认)、yaml 和表格):
kubesec print-rules
输出结果如下:
[ { "id": "AllowPrivilegeEscalation", "selector": "containers[] .securityContext .allowPrivilegeEscalation == true", "reason": "Ensure a non-root process can not gain more privileges", "kinds": [ "Pod", "Deployment", "StatefulSet", "DaemonSet" ], "points": -7, "advise": 0 }, ... ]
在后台启动 HTTP 服务器:
$ kubesec http 8080 & [1] 12345 {"severity":"info","timestamp":"2019-05-12T11:58:34.662+0100","caller":"server/server.go:69","message":"Starting HTTP server on port 8080"}
使用 curl 将文件发布到服务器:
$ curl -sSX POST --data-binary @test/asset/score-0-cap-sys-admin.yml http://localhost:8080/scan [ { "object": "Pod/security-context-demo.default", "valid": true, "message": "Failed with a score of -30 points", "score": -30, "scoring": { "critical": [ { "selector": "containers[] .securityContext .capabilities .add == SYS_ADMIN", "reason": "CAP_SYS_ADMIN is the most privileged capability and should always be avoided", "points": -30 }, { "selector": "containers[] .securityContext .runAsNonRoot == true", "reason": "Force the running image to run as a non-root user to ensure least privilege", "points": 1 }, // ...
最后,通过终止后台进程来停止 Kubesec 服务器:
$ kill %
命令行用法:
$ curl -sSX POST --data-binary @"k8s-deployment.yaml" https://v2.kubesec.io/scan
定义 BASH 函数:
$ kubesec () { local FILE="${1:-}"; [[ ! -e "${FILE}" ]] && { echo "kubesec: ${FILE}: No such file" >&2; return 1 }; curl --silent --compressed --connect-timeout 5 -sSX POST --data-binary=@"${FILE}" https://v2.kubesec.io/scan }
将 Kubernetes 资源发布到 v2.kubesec.io/scan:
$ kubesec ./deployment.yml
命令行用法:
Kubesec 返回一个 JSON 数组,并可以在单个输入文件中扫描多个 YAML 文档。
[ { "object": "Pod/security-context-demo.default", "valid": true, "message": "Failed with a score of -30 points", "score": -30, "scoring": { "critical": [ { "selector": "containers[] .securityContext .capabilities .add == SYS_ADMIN", "reason": "CAP_SYS_ADMIN is the most privileged capability and should always be avoided", "points": -30 } ], "advise": [ { "selector": "containers[] .securityContext .runAsNonRoot == true", "reason": "Force the running image to run as a non-root user to ensure least privilege", "points": 1 }, { // ... } ] } } ]
本项目的开发与发布遵循Apache-2.0开源许可协议。
Kubesec:【GitHub传送门】
原文始发于微信公众号(FreeBuf):如何使用Kubesec执行Kubernetes资源安全风险分析
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论