freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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

FreeBuf+小程序

FreeBuf+小程序

如何使用Kubesec执行Kubernetes资源安全风险分析
2024-11-22 19:41:42
所属地 广西

关于Kubesec

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 中运行下列的命令:

$ 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

  },

...

]

Kubesec HTTP 服务器

在后台启动 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 %

Kubesec 即服务

命令行用法:

$ 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传送门

参考资料

https://kubesec.io/

# Kubernetes # Kubernetes安全 # 资源安全 # 风险分析 # Kubernetes审计
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录