Kubesploit 是一个跨平台的后渗透 HTTP/2 命令与控制服务器及代理,专为容器化环境设计,使用 Golang 编写,并基于 Russel Van Tuyl (@Ne0nd0g) 的 Merlin 项目构建。
在研究 Docker 和 Kubernetes 时,我们注意到目前大多数可用工具都侧重于对集群进行被动漏洞扫描,缺少对更复杂攻击向量的覆盖。这些工具可能让你看到问题,但无法利用它。通过运行漏洞利用来模拟真实攻击,以评估组织在网络上的防护能力,这一点至关重要。运行漏洞利用可以锻炼组织的网络事件管理能力,而集群问题扫描则无法做到。这有助于组织了解当真实攻击发生时如何应对,检查其他检测系统是否按预期工作,以及需要做出哪些改变。我们想要创建一个满足这些需求的攻击性工具。
但创建这样的工具还有另一个原因。我们已经有两个与 Kubernetes 相关的开源工具(KubiScan 和 kubeletctl),并且还有更多想法。我们不想为每个想法单独创建项目,而是认为创建一个集中整合新工具的工具会更好,这就是 Kubesploit 诞生的原因。
我们寻找了一个能够为跨平台系统提供基础支撑的开源项目,并发现由 Russel Van Tuyl (@Ne0nd0g) 编写的 Merlin 非常适合我们。
我们的主要目标是帮助提高对容器化环境安全性的认识,并改进各网络中实施的缓解措施。所有这些都通过一个框架来实现,该框架为渗透测试团队和红队成员在其活动过程中提供适当的工具。使用这些工具将帮助你评估这些环境的优势,并做出必要的调整以保护它们。
由于 C&C 和代理基础设施已经由 Merlin 完成,我们集成了 Go 解释器("Yaegi"),以便能够从服务器向代理运行 Golang 代码。这使我们能够用 Golang 编写模块,为模块提供更高的灵活性,并动态加载新模块。这是一个持续进行的项目,我们计划在未来添加更多与 Docker 和 Kubernetes 相关的模块。
目前可用的模块包括:
利用挂载突破容器
利用 docker.sock 突破容器
利用 CVE-2019-5736 漏洞突破容器
扫描 Kubernetes 集群已知 CVE
端口扫描,重点关注 Kubernetes 服务
从容器内部扫描 Kubernetes 服务
轻量版 kubeletctl,包含以下选项:
cGroup 突破
内核模块突破
Var log 逃逸
Deepce:Docker 枚举(作为模块集成的开源项目)
漏洞测试:检查你的容器易受哪些 kubesploit 漏洞利用的影响
有关模块的详细信息,请查看 WiKi 页面
我们在 KillerCoda 上创建了一个专用的 Kubernetes 环境,供你尝试使用 Kubesploit。这是一个完整的模拟环境,附带一套关于如何使用 Kubesploit 的自动化说明。我们鼓励你去探索它。
运行服务器:
./kubesploitServer
运行代理:
./agent -url https://<server_ip>:443 &

要构建此项目,请在根目录下运行 make 命令。
注意: 目前你需要使用 Golang 1.18 或 Go 1.19(最近的两个主要版本),这是基于 traefik/yaegi v0.14.3 对 golang 的要求。
要为 Linux 进行快速构建,可以运行以下命令:
export PATH=$PATH:/usr/local/go/bin
go build -o agent cmd/merlinagent/main.go
go build -o server cmd/merlinserver/main.go
为了使用容器运行 server,你需要让 Kubesploit 服务器监听 0.0.0.0 接口(而不是 127.0.0.1)。你可以在 config.yaml 中更新接口字段。
附带说明:确保在主机和容器之间绑定端口(默认端口是
443,也可以在 config.yaml 中进行配置)
我们编写了 YARA 规则,有助于捕获 Kubesploit 二进制文件。规则写在了 kubesploit.yara 文件中。
加载到代理中的每个 Go 模块都会被记录在受害机器上。
我们创建了一个 Kubesploit 所用攻击向量的 MITRE 映射。
针对我们创建的每个模块,我们都撰写了其描述以及如何防御。我们在 MITIGATION.md 文件中进行了总结。
我们欢迎对本仓库的各种贡献。关于如何上手以及开发工作流程的描述,请参阅我们的贡献指南。
我们要感谢 Russel Van Tuyl (@Ne0nd0g) 创建了 Merlin 作为开源项目,使我们能够在其基础上构建 Kubesploit。我们还要感谢 Traefik Labs (@traefik) 创建了 Go 解释器("Yaegi"),使我们能够轻松地在远程代理上运行 Golang 模块。
版权所有 (c) 2021 CyberArk Software Ltd. 保留所有权利。
本仓库采用 GPL-3.0 许可证。
完整的许可证文本请参见 LICENSE。
如需更多评论、建议或问题,请联系 CyberArk Labs 的 Eviatar Gerzi(@g3rzi)或提交 issue。 你可以在 https://github.com/cyberark/ 找到我们开发的更多项目。