kube-hunter 已不再处于积极开发阶段。如果你对扫描 Kubernetes 集群中的已知漏洞感兴趣,我们建议使用 Trivy。具体来说,Trivy 的 Kubernetes 配置错误扫描 和 KBOM 漏洞扫描 功能。了解更多信息,请参阅 Trivy 文档。
kube-hunter 用于在 Kubernetes 集群中搜寻安全弱点。该工具旨在提高对 Kubernetes 环境中安全问题的认识和可见性。你不应该在你不拥有的 Kubernetes 集群上运行 kube-hunter!
运行 kube-hunter:kube-hunter 以容器形式(aquasec/kube-hunter)提供,我们还提供了一个网站 kube-hunter.aquasec.com,你可以在线注册以获取一个令牌,从而在线查看和分享结果。你也可以按照以下描述自行运行 Python 代码。
探索漏洞:kube-hunter 知识库包含关于可发现漏洞和问题的文章。当 kube-hunter 报告问题时,它会显示其 VID(漏洞 ID),以便你可以在以下知识库中查找:https://aquasecurity.github.io/kube-hunter/ 如果你对 kube-hunter 与 Kubernetes ATT&CK 矩阵的集成感兴趣,继续阅读
kube-hunter 现在支持 Kubernetes ATT&CK 矩阵的新格式。 虽然 kube-hunter 的漏洞是一组旨在模拟集群内部(或外部)攻击者的创造性技术集合, 但 Mitre 的 ATT&CK 定义了更通用的标准化技术类别。
你可以将 kube-hunter 的漏洞视为攻击者的小步骤,这些步骤遵循着他所追求的更大技术轨迹。 kube-hunter 的大多数猎手和漏洞都可以紧密地归入这些技术之下,这就是为什么我们转而遵循矩阵标准。
一些我们无法映射到 Mitre 技术的 kube-hunter 漏洞,将以 General 关键字作为前缀

有三种不同的运行 kube-hunter 的方式,每种方式都提供了不同的方法来检测集群中的弱点:
在任何机器上(包括你的笔记本电脑)运行 kube-hunter,选择远程扫描并提供你的 Kubernetes 集群的 IP 地址或域名。这将让你从攻击者的视角观察你的 Kubernetes 设置。
你可以直接在集群中的一台机器上运行 kube-hunter,并选择探测所有本地网络接口的选项。
你也可以在集群内的一个 Pod 中运行 kube-hunter。这可以表明如果你的一个应用程序 Pod 被攻陷(例如通过软件漏洞),你的集群将会有多暴露。(使用 --pod 标志)
首先检查这些 先决条件。
默认情况下,kube-hunter 会打开一个交互式会话,你可以在其中选择以下扫描选项之一。你也可以从命令行手动指定扫描选项。以下是可用选项:
远程扫描
要指定远程机器进行狩猎,请选择选项 1 或使用 --remote 选项。示例:
kube-hunter --remote some.node.com
接口扫描
要指定接口扫描,你可以使用 --interface 选项(这将扫描机器上的所有网络接口)。示例:
kube-hunter --interface
网络扫描
要指定特定的 CIDR 进行扫描,请使用 --cidr 选项。示例:
kube-hunter --cidr 192.168.0.0/24
Kubernetes 节点自动发现
设置 --k8s-auto-discover-nodes 标志,查询 Kubernetes 以获取集群中的所有节点,然后尝试扫描它们。默认情况下,它将使用 集群内配置 连接到 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 使用 挂载到 Pod 内部 的服务账户令牌来认证它在狩猎过程中发现的服务。
--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
可用的日志级别有:
默认情况下,报告会发送到 stdout,但你可以使用 --dispatch 选项指定不同的方法。示例:
kube-hunter --report json --dispatch http
可用的分发方法有:
当在 Azure 或 AWS 环境中作为 Pod 运行时,kube-hunter 会从实例元数据服务获取子网。自然,这使得发现过程需要更长时间。
要硬限制子网扫描到 /24 CIDR,请使用 --quick 选项。
自定义狩猎使高级用户能够控制哪些猎手在狩猎开始时注册。 如果你知道自己在做什么,这可以帮助你根据需要调整 kube-hunter 的狩猎和发现过程。
示例:
kube-hunter --custom <HunterName1> <HunterName2>
启用自定义狩猎会将所有猎手从狩猎过程中移除,只保留给定的白名单猎手。
--custom 标志读取一个猎手类名列表。要查看所有 kube-hunter 的类名,你可以将 --raw-hunter-names 标志与 --list 标志结合使用。
示例:
kube-hunter --active --list --raw-hunter-names
注意:由于 kube-hunter 的架构设计,以下“核心猎手/类”将始终注册(即使在使用自定义狩猎时):
有三种部署 kube-hunter 的方法:
你可以直接在机器上运行 kube-hunter。
你需要安装以下内容:
安装:
pip install kube-hunter
运行:
kube-hunter
克隆仓库:
git clone https://github.com/aquasecurity/kube-hunter.git
安装模块依赖项。(你可能更喜欢在虚拟环境中执行此操作)
cd ./kube-hunter
pip install -r requirements.txt
运行:
python3 kube_hunter
如果你想使用 pyinstaller/py2exe,需要首先运行 install_imports.py 脚本。
Aqua Security 维护着 kube-hunter 的容器化版本 aquasec/kube-hunter:aqua。该容器包含此源代码,外加一个额外的(闭源)报告插件,用于将结果上传到可在 kube-hunter.aquasec.com 查看的报告。请注意,运行 aquasec/kube-hunter 容器并上传报告数据需遵守额外的条款和条件。
此仓库中的 Dockerfile 允许你构建一个不带报告插件的容器化版本。
如果你使用主机网络运行 kube-hunter 容器,它将能够探测主机上的所有接口:
docker run -it --rm --network host aquasec/kube-hunter
关于 Docker for Mac/Windows 的说明: 请注意,Docker for Mac 或 Windows 的“主机”是运行容器的 VM。因此指定 --network host 允许 kube-hunter 访问该 VM 的网络接口,而不是你机器的网络接口。
默认情况下,kube-hunter 以交互模式运行。你也可以使用上述描述的参数指定扫描选项,例如:
docker run --rm aquasec/kube-hunter --cidr 192.168.0.0/24
此选项让你能够发现运行恶意容器在你的集群上可以做什么/发现什么。这提供了攻击者如果通过软件漏洞能够攻陷一个 Pod 可能做什么的视角。这可能会揭示出显著更多的漏洞。
示例 job.yaml 文件定义了一个 Job,该 Job 将使用默认的 Kubernetes Pod 访问设置在 Pod 中运行 kube-hunter。(你可能希望修改此定义,例如以非 root 用户身份运行,或在不同的命名空间中运行。)
kubectl create -f ./job.yaml 运行 Jobkubectl describe job kube-hunter 查找 Pod 名称kubectl logs <pod name> 查看测试结果要阅读贡献指南, 请点击此处
此仓库基于 Apache License 2.0 提供。