freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

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

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审计
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录