K8S攻击面与检测规则实现

2024-10-19 1 0

背景

由于微服务基本都是基于k8s的、故针对k8s的检测产生了如下文章、本文章只是给出了基础攻击的检测、部分工具检测原理一致。本文攻击方面直接参考先知原文未修改,特此感谢。

一、8080端口未授权访问

条件

1、k8s版本小于1.16.0

2、8080对公网开放

1、如何打开和关闭8080端口

测试了几个版本的k8s,发现在新版本后,–insecure-port=8080配置默认就关闭了

cd /etc/kubernetes/manifests
vim kube-apiserver.yaml

K8S攻击面与检测规则实现插图

这里设置为0表示关闭,甚至在高版本的k8s中,直接将--insecure-port这个配置删除了,需要手动添加

这里将修改为8080,并添加配置

- --insecure-port=8080
- --insecure-bind-address=0.0.0.0
systemctl restart kubelet

上述就是打开8080端口的方法

K8S攻击面与检测规则实现插图1

K8S攻击面与检测规则实现插图2

1.1 8080/6443端口匿名用户访问pod操作日志DSL语法

以任意工具以匿名用户访问或者pods、secrets、namespace并且来源IP不是堡垒机的都进行告警

{
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "parsed_data.verb": [
              "list",
              "get"
            ]
          }
        },
        {
          "term": {
            "parsed_data.user.username": "system:anonymous"
          }
        },
        {
          "term": {
            "parsed_data.objectRef.name": "pods"
          }
        }
      ],
      "must_not": [
        {
          "term": {
            "parsed_data.sourceIPs": "10.211.55.3"
          }
        }
      ]
    }
  }
}

K8S攻击面与检测规则实现插图3

2、执行命令-通过kubectl -s命令

kubectl -s ip:8080 get node

获取Pods

kubectl -s 127.0.0.1:8080 get pods

K8S攻击面与检测规则实现插图4

K8S攻击面与检测规则实现插图5

执行命令

kubectl -s 127.0.0.1:8080 --namespace=default exec -it nginxfromuzju-59595f6ffc-p8xvk bash

K8S攻击面与检测规则实现插图6

Tips: 在高版本的k8s中,这种方法是不行的,连不上去

2.1 通过8080/6443 exec进入pod

选择不是来自堡垒机IP10.211.55.3的执行了exec进入了pod、这里并没有以匿名用户或者指定的凭据来访问,也可对匿名用户单独做告警

{
    "query": {
        "bool": {
            "must": [
                {
                    "wildcard": {
                        "parsed_data.requestURI.keyword": "/api/v1/namespaces/default/pods/*/exec*"
                    }
                },
                {
                    "term": {
                        "parsed_data.objectRef.subresource": "exec"
                    }
                },
                {
                    "term": {
                        "parsed_data.verb": "create"
                    }
                }
            ],
            "must_not": [
                {
                    "term": {
                        "parsed_data.sourceIPs": "10.211.55.3"
                    }
                }
            ]
        }
    }
}

K8S攻击面与检测规则实现插图7

3、获取service-account-token

可以通过访问api来获取token

/api/v1/namespaces/kube-system/secrets/

K8S攻击面与检测规则实现插图8

3.1 获取secrets检测

当用户访问所有的secrets

{
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "parsed_data.verb": [
              "list",
              "get"
            ]
          }
        },
        {
          "match_phrase": {
            "parsed_data.requestURI": "/api/v1/secrets"
          }
        },
        {
          "term": {
            "parsed_data.objectRef.resource": "secrets"
          }
        }
      ],
      "must_not": [
        {
          "term": {
            "parsed_data.sourceIPs": "10.211.55.3"
          }
        }
      ]
    }
  }
}

当用户访问具体的namespace的secrets规则

GET /k8s-audit-log-2024.09.13/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase_prefix": {
            "parsed_data.requestURI": "/api/v1/"
          }
        },
        {
          "match_phrase": {
            "parsed_data.requestURI": "/secrets"
          }
        },
        {
          "term": {
            "parsed_data.verb": "get"
          }
        },
        {
          "term": {
            "parsed_data.objectRef.name": "secrets"
          }
        }
      ],
      "must_not": [
        {"term": {
          "parsed_data.sourceIPs": "10.211.55.3"
        }}
      ]
    }
  }
}

3、获取宿主机权限-通过k8s dashboard,创建特权Pods

为什么会出现这个问题:因为在启动dashborad的时候,管理员为了方便,修改了配置,跳过了登录

安装dashborad

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml
vim recommended.yam

K8S攻击面与检测规则实现插图9

需要添加两个参数,一个是不需要登录,一个是绑定0.0.0.0地址

- --enable-skip-login
- -- insecure-bind-address=0.0.0.0
kubectl apply -f recommended.yaml

K8S攻击面与检测规则实现插图10

这里使用国际友人的配置快速启动

wget https://gist.githubusercontent.com/tejaswigk/da57d7911284cbf56e7f99af0afd6884/raw/de38da2a7619890a72d643d2bbd94278221e5977/insecure-kubernetes-dashboard.yml
kubectl apply -f insecure-kubernetes-dashboard.yml
 kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard  9090:80

4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

杀软EDR逃避——VBA清除技术深解析
[Meachines] [Easy] Sightless SQLPad-RCE+shadow哈希破译…
一文了解软件分析代码审计
暴露内核内存并通过滥用COW机制实现一个注射器
403bypass问题简析
0day的产生 | 不懂代码的”代码审计”

发布评论