aquasecurity/kube-hunter

GitHub: aquasecurity/kube-hunter

用于发现 Kubernetes 集群中安全弱点的渗透测试工具,通过多种扫描视角模拟攻击者行为以识别潜在风险。

Stars: 5005 | Forks: 605

## 注意事项 kube-hunter 已不再处于活跃开发状态。如果您有兴趣扫描 Kubernetes 集群的已知漏洞,我们建议使用 [Trivy](https://github.com/aquasecurity/trivy)。具体来说,可以使用 Trivy 的 Kubernetes [misconfiguration scanning](https://blog.aquasec.com/trivy-kubernetes-cis-benchmark-scanning) 和 [KBOM vulnerability scanning](https://blog.aquasec.com/scanning-kbom-for-vulnerabilities-with-trivy)。在 [Trivy Docs](https://aquasecurity.github.io/trivy/) 中了解更多信息。 kube-hunter 用于搜寻 Kubernetes 集群中的安全弱点。该工具旨在提高对 Kubernetes 环境中安全问题的认识和可见性。**您不应在不属于您的 Kubernetes 集群上运行 kube-hunter!** **运行 kube-hunter**:kube-hunter 以容器 形式提供,我们还在 [kube-hunter.aquasec.com](https://kube-hunter.aquasec.com) 提供了一个网站,您可以在该网站在线注册以获取令牌,从而在线查看和分享结果。您也可以按照下文描述自行运行 Python 代码。 **探索漏洞**:kube-hunter 知识库包含有关可发现漏洞和问题的文章。当 kube-hunter 报告问题时,它会显示其 VID(漏洞 ID),以便您在知识库 https://aquasecurity.github.io/kube-hunter/ 中查找。 _如果您对 kube-hunter 与 Kubernetes ATT&CK 矩阵的集成感兴趣 [Continue Reading](#kuberentes-attck-matrix)_ [kube-hunter demo video](https://youtu.be/s2-6rTkH8a8?t=57s) ## 目录 - [Table of Contents](#table-of-contents) - [Kubernetes ATT&CK Matrix](#kubernetes-attck-matrix) - [Hunting](#hunting) - [Where should I run kube-hunter?](#where-should-i-run-kube-hunter) - [Scanning options](#scanning-options) - [Authentication](#authentication) - [Active Hunting](#active-hunting) - [List of tests](#list-of-tests) - [Nodes Mapping](#nodes-mapping) - [Output](#output) - [Dispatching](#dispatching) - [Advanced Usage](#advanced-usage) - [Azure Quick Scanning](#azure-quick-scanning) - [Custom Hunting](#custom-hunting) - [Deployment](#deployment) - [On Machine](#on-machine) - [Prerequisites](#prerequisites) - [Install with pip](#install-with-pip) - [Run from source](#run-from-source) - [Container](#container) - [Pod](#pod) - [Contribution](#contribution) - [License](#license) ## Kubernetes ATT&CK 矩阵 kube-hunter 现已支持新格式的 Kubernetes ATT&CK 矩阵。 虽然 kube-hunter 的漏洞是旨在模拟集群内(或集群外)攻击者的创造性技术的集合, 但 Mitre 的 ATT&CK 定义了更通用的标准化技术类别来实现这一点。 您可以将 kube-hunter 的漏洞视为攻击者的一小步,这些步骤遵循了其旨在实现的更通用技术的轨迹。 kube-hunter 的大多数猎手 和漏洞都可以归入这些技术之下,这就是我们转而遵循矩阵标准的原因。 _一些无法映射到 Mitre 技术的 kube-hunter 漏洞,会以 `General` 关键字为前缀_ ![kube-hunter](https://static.pigsec.cn/wp-content/uploads/repos/2026/02/d0bfbaafab091318.png) ## 狩猎 ### 我应该在哪里运行 kube-hunter? 运行 kube-hunter 有三种不同的方式,每种方式都提供了检测集群弱点的方法: 在任何机器(包括您的笔记本电脑)上运行 kube-hunter,选择远程扫描 并输入 Kubernetes 集群的 IP 地址或域名。这将为您提供 Kubernetes 设置的攻击者视角。 您可以直接在集群中的机器上运行 kube-hunter,并选择探测所有本地网络接口的选项。 您也可以在集群内的 Pod 中运行 kube-hunter。这表明如果您的某个应用程序 Pod 被攻破(例如通过软件漏洞),您的集群将会暴露到何种程度。(_`--pod` 标志_) ### 扫描选项 首先检查这些 **[pre-requisites](#prerequisites)**。 默认情况下,kube-hunter 会打开一个交互式会话,您可以在其中选择以下扫描选项之一。您也可以从命令行手动指定扫描选项。以下是您的选项: 1. **远程扫描** 要指定用于狩猎的远程机器,请选择选项 1 或使用 `--remote` 选项。示例: `kube-hunter --remote some.node.com` 2. **接口扫描** 要指定接口扫描,您可以使用 `--interface` 选项(这将扫描机器的所有网络接口)。示例: `kube-hunter --interface` 3. **网络扫描** 要指定要扫描的特定 CIDR,请使用 `--cidr` 选项。示例: `kube-hunter --cidr 192.168.0.0/24` 4. **Kubernetes 节点自动发现** 设置 `--k8s-auto-discover-nodes` 标志以查询 Kubernetes 获取集群中的所有节点,然后尝试扫描所有这些节点。默认情况下,它将使用 [in-cluster config](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) 连接到 Kubernetes API。如果您想使用显式的 kubeconfig 文件,请设置 `--kubeconfig /location/of/kubeconfig/file`。 另外请注意,在使用 `--pod` 模式时,这总是会被执行。 ### 认证 为了模拟处于早期阶段的攻击者,kube-hunter 在狩猎过程中不需要认证。 * **模拟** - 您可以通过使用 `--service-account-token` 标志手动传递服务帐户密钥的 JWT Bearer 令牌,为 kube-hunter 提供特定的服务帐户令牌以在狩猎时使用。 示例: $ kube-hunter --active --service-account-token eyJhbGciOiJSUzI1Ni... * 当使用 `--pod` 标志运行时,kube-hunter 使用服务帐户令牌 [mounted inside the pod](https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/) 对其在狩猎过程中发现的服务进行身份验证。 * 如果指定了 `--service-account-token` 标志,则在作为 Pod 运行时该标志优先 ### 主动狩猎 主动狩猎是 kube-hunter 利用其发现的漏洞来探索更多漏洞的一个选项。 正常狩猎和主动狩猎的主要区别在于,正常狩猎永远不会改变集群的状态,而主动狩猎可能会在集群上执行状态更改操作,**这可能是有害的**。 默认情况下,kube-hunter 不会进行主动狩猎。要对集群进行主动狩猎,请使用 `--active` 标志。示例: `kube-hunter --remote some.domain.com --active` ### 测试列表 您可以使用 `--list` 选项查看测试列表。示例: `kube-hunter --list` 要同时查看主动狩猎测试和被动测试: `kube-hunter --list --active` ### 节点映射 要仅查看节点网络的映射,请使用 `--mapping` 选项运行。示例: `kube-hunter --cidr 192.168.0.0/24 --mapping` 这将输出 kube-hunter 发现的所有 Kubernetes 节点。 ### 输出 要控制日志记录,您可以使用 `--log` 选项指定日志级别。示例: `kube-hunter --active --log WARNING` 可用的日志级别有: * DEBUG * INFO(默认) * WARNING ### 分发 默认情况下,报告将被分发到 `stdout`,但您可以使用 `--dispatch` 选项指定不同的方法。示例: `kube-hunter --report json --dispatch http` 可用的分发方法有: * stdout(默认) * http(要配置,请设置以下环境变量:) * KUBEHUNTER_HTTP_DISPATCH_URL(默认为:https://localhost) * KUBEHUNTER_HTTP_DISPATCH_METHOD(默认为:POST) ## 高级用法 ### Azure 快速扫描 当**在 Azure 或 AWS 环境中作为 Pod 运行**时,kube-hunter 将从实例元数据服务 获取子网。这自然会使发现过程花费更长时间。 要将子网扫描硬性限制为 `/24` CIDR,请使用 `--quick` 选项。 ### 自定义狩猎 自定义狩猎使高级用户能够控制在狩猎开始时注册哪些猎手。 **如果您清楚自己在做什么**,如果您想根据需要调整 kube-hunter 的狩猎和发现过程,这会很有帮助。 示例: ``` kube-hunter --custom ``` 启用自定义狩猎会将所有猎手从过程中移除,给定的白名单猎手除外。 `--custom` 标志读取猎手类名列表,为了查看 kube-hunter 的所有类名,您可以将 `--raw-hunter-names` 标志与 `--list` 标志结合使用。 示例: ``` kube-hunter --active --list --raw-hunter-names ``` **注意**:由于 kube-hunter 的架构设计,以下“核心猎手/类”将始终注册(即使在使用自定义狩猎时): * HostDiscovery * _根据给定配置为狩猎生成 IP 地址_ * _使用云元数据 API 自动发现子网_ * FromPodHostDiscovery * _使用基于 Pod 的环境技术自动发现狩猎的攻击面 IP 地址_ * _使用云元数据 API 自动发现子网_ * PortDiscovery * _对给定的 IP 地址进行端口扫描,以查找已知的 Kubernetes 服务端口_ * Collector * _收集发现的漏洞和开放服务以供后续报告_ * StartedInfo * _打印开始消息_ * SendFullReport * _根据给定配置分发报告_ ## 部署 部署 kube-hunter 有三种方法: ### 在机器上 您可以直接在机器上运行 kube-hunter。 #### 前置条件 您需要安装以下软件: * python 3.x * pip ##### 使用 pip 安装 安装: ``` pip install kube-hunter ``` 运行: ``` kube-hunter ``` ##### 从源码运行 克隆仓库: ``` git clone https://github.com/aquasecurity/kube-hunter.git ``` 安装模块依赖项。(您可能更愿意在 [Virtual Environment](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/) 中执行此操作) ``` cd ./kube-hunter pip install -r requirements.txt ``` 运行: ``` python3 kube_hunter ``` _如果您想使用 pyinstaller/py2exe,您需要先运行 install_imports.py 脚本。_ ### 容器 Aqua Security 在 `aquasec/kube-hunter:aqua` 维护一个容器化版本的 kube-hunter。该容器包含此源代码,以及一个额外的(闭源)报告插件,用于将结果上传到可在 [kube-hunter.aquasec.com](https://kube-hunter.aquasec.com) 查看的报告中。请注意,运行 `aquasec/kube-hunter` 容器和上传报告数据受额外的 [terms and conditions](https://kube-hunter.aquasec.com/eula.html) 约束。 此仓库中的 Dockerfile 允许您构建不带报告插件的容器化版本。 如果您使用主机网络运行 kube-hunter 容器,它将能够探测主机上的所有接口: `docker run -it --rm --network host aquasec/kube-hunter` _Docker for Mac/Windows 注意事项:_ 请注意,Docker for Mac 或 Windows 的“主机”是 Docker 在其中运行容器的 VM。因此,指定 `--network host` 允许 kube-hunter 访问该 VM 的网络接口,而不是您机器的网络接口。 默认情况下,kube-hunter 以交互模式运行。您也可以使用上述参数指定扫描选项,例如: `docker run --rm aquasec/kube-hunter --cidr 192.168.0.0/24` ### Pod 此选项让您发现运行恶意容器可以在您的集群上做什么/发现什么。这提供了一个视角,展示了攻击者如果能够攻破 Pod(可能是通过软件漏洞)可以做什么。这可能会揭示更多的漏洞。 示例 `job.yaml` 文件定义了一个 Job,该 Job 将使用默认的 Kubernetes Pod 访问设置在 Pod 中运行 kube-hunter。(您可能希望修改此定义,例如以非 root 用户身份运行,或在不同命名空间中运行。) * 使用 `kubectl create -f ./job.yaml` 运行该 job * 使用 `kubectl describe job kube-hunter` 查找 Pod 名称 * 使用 `kubectl logs ` 查看测试结果 ## 贡献 要阅读贡献指南, 点击这里 ## 许可证 此仓库基于 [Apache License 2.0](https://github.com/aquasecurity/kube-hunter/blob/main/LICENSE) 提供。
标签:DevSecOps, Docker, GUI应用, K8s, Kubernetes, PyPI包, Python, Rust语言, SHACL验证, Turtle格式, Web截图, 上游代理, 云原生安全, 云存储安全, 合规性检查, 图测量, 图计算, 子域名突变, 安全审计, 安全扫描, 安全防御评估, 容器安全, 开源安全工具, 弱点发现, 数据处理, 数据展示, 无后门, 时序注入, 本体建模, 渗透测试, 漏洞检测, 用户界面自定义, 知识工程, 红队, 网络扫描, 请求拦截, 逆向工具, 逆向工程平台, 配置错误检测, 链接数据, 集群安全