如何使用Kubesec执行Kubernetes资源安全风险分析

admin 2024年11月28日22:48:25评论10 views字数 3507阅读11分41秒阅读模式

如何使用Kubesec执行Kubernetes资源安全风险分析

关于Kubesec

Kubesec是一款针对Kubernetes的安全工具,在该工具的帮助下,广大研究人员可以轻松执行Kubernetes资源安全风险分析任务。

如何使用Kubesec执行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传送门】

原文始发于微信公众号(FreeBuf):如何使用Kubesec执行Kubernetes资源安全风险分析

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月28日22:48:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   如何使用Kubesec执行Kubernetes资源安全风险分析https://cn-sec.com/archives/3446709.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息