Kubesploit
Kubesploit 是一个跨平台的后渗透 HTTP/2 命令与控制服务器和代理,专门用于容器化环境,使用 Golang 编写,构建在 Russel Van Tuyl (@Ne0nd0g) 的 Merlin 项目之上。
我们的动机
在研究 Docker 和 Kubernetes 时,我们注意到目前大多数可用工具都致力于对集群进行被动漏洞扫描,缺乏更复杂的攻击向量覆盖。 这些工具可能让你看到问题所在,但无法利用它。运行漏洞利用程序对于模拟真实世界的攻击非常重要,这将用于确定企业在整个网络中的恢复能力。 运行漏洞利用程序时,将练习组织的网络事件管理,而这在扫描集群问题时并不会发生。 它可以帮助组织了解如何在真实攻击发生时进行操作,查看其他检测系统是否按预期工作以及应该做出哪些改变。 我们想要创建一个能满足这些要求的攻击性工具。
但我们创建这样一个工具还有另一个原因。我们已经有了两个与 Kubernetes 相关的开源工具(KubiScan 和 kubeletctl),并且我们有更多的想法。 我们认为与其为每个工具创建一个项目,不如制作一个新工具来集中新的工具,这就是 Kubesploit 诞生的原因。
我们搜索了一个提供跨平台系统重要功能的开源项目,发现 Russel Van Tuyl (@Ne0nd0g) 编写的 Merlin 很适合我们。
我们的主要目标是提高对容器化环境安全性的认识,并改进在各种网络中实施的缓解措施。 所有这些都通过一个框架来实现,该框架为渗透测试团队和红队在这些环境中的活动提供了适当的工具。 使用这些工具将帮助你评估这些环境的优势,并做出必要的更改以保护它们。
新特性
由于 Merlin 已经完成了 C&C 和代理基础设施,我们整合了 Go 解释器("Yaegi"),以便能够从服务器向代理运行 Golang 代码。 这使我们能够用 Golang 编写模块,为模块提供更多灵活性,并动态加载新模块。 这是一个持续进行的项目,我们计划在未来添加更多与 Docker 和 Kubernetes 相关的模块。
目前可用的模块有:
-
使用挂载进行容器逃逸
-
使用 docker.sock 进行容器逃逸
-
使用 CVE-2019-5736 漏洞进行容器逃逸
-
扫描 Kubernetes 集群已知 CVE
-
端口扫描,专注于 Kubernetes 服务
-
从容器内部进行 Kubernetes 服务扫描
-
轻量级 kubeletctl,包含以下选项:
- 扫描可远程执行命令的容器
- 扫描 Pod 和容器
- 扫描所有可用容器中的令牌
- 使用多个选项运行命令
-
cGroup 逃逸
-
内核模块逃逸
-
Var log 逃逸
-
Deepce:Docker 枚举(集成为模块的开源项目)
-
漏洞测试:检查你的容器对哪些 kubesploit 漏洞利用程序存在漏洞
有关模块的详细信息,请查看 Wiki 页面
快速入门
我们在 KillerCoda 中创建了一个专用的 Kubernetes 环境,供你试验 Kubesploit。 这是一个完整的模拟环境,包含一套完整的自动指令,介绍如何使用 Kubesploit。我们鼓励你去探索它。
构建
要构建此项目,请从根文件夹运行 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
容器化
为了使用容器运行 服务器,你必须让 Kubesploit 服务器监听 0.0.0.0
接口(而不是 127.0.0.1
)。
你可以在 config.yaml 中更新接口字段。
注意:确保绑定主机和容器之间的端口(默认端口是
443
,也可以在 config.yaml 中配置)
缓解措施
YARA 规则
我们创建了 YARA 规则,有助于捕获 Kubesploit 二进制文件。规则写在 kubesploit.yara
文件中。
代理记录
每个加载到代理的 Go 模块都会在受害机器内部被记录。
MITRE 图谱
我们创建了 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) 或提出问题。 你可以在 https://github.com/cyberark/ 找到我们开发的更多项目。