iknowjason/AutomatedEmulation

GitHub: iknowjason/AutomatedEmulation

这是一个基于 Terraform 构建的自动化对手模拟实验室,集成了 Caldera 和 MCP 服务器,支持利用 LLM 辅助生成攻击技术和行动规划,并实现了基础设施即代码的快速部署。

Stars: 206 | Forks: 55

# 使用 Caldera MCP 服务器进行自动化模拟! ![Caldera MCP](images/mcp-overview.png "Caldera MCP 服务器") ## 11/16/25 更新:Caldera MCP 服务器插件! 新增了 Caldera MCP 服务器插件,Bountyhunter 插件。增加了 emu 插件载荷的自动下载。Caldera 现在能够使用 MCP 服务器作为 Caldera API 的封装,帮助 LLM 为构建新能力、行动规划器以及集成了 RAG 的 CTI 提供上下文。有关更多信息,请参阅此 [MITRE 博客](https://medium.com/@mitrecaldera/connecting-llms-to-caldera-with-the-mcp-plugin-da1450254827)。 ## 概述 自动化模拟是一个简单的 terraform 模板,用于创建可定制且自动化的入侵与攻击模拟实验室。它会自动构建托管在 AWS 上的以下资源: * 一台部署了 Caldera 和 VECTR (vectr.io) 的 Linux 服务器。 * Linux 服务器:安装了最新的 Caldera 5.3 和 Magma VueJS Web 应用程序。 * 一台自动配置为部署 Caldera 代理的 Windows 客户端 (Windows Server 2022),以及其他红蓝工具。 * Windows 客户端:Atomic Red Team (ART) 自动部署。 * Windows 客户端:Sysmon 自动部署。 * 已安装 Caldera MCP 服务器插件。 * 暴露 MLflow 服务器用于 Caldera LLM 推理调用的可观测性、追踪和调试。 * 已安装 Caldera Bountyhunter 插件。 * Caldera EMU 插件:自动下载载荷。该 Caldera 插件转换来自威胁知情防御中心 的对手模拟计划。 有关更多详细信息,请参阅 **功能与能力** 部分。 ## 要求和设置 **测试环境:** * Mac OS 13.4 * terraform 1.5.7 **克隆此仓库:** ``` git clone https://github.com/iknowjason/AutomatedEmulation ``` **凭证设置:** 生成一个具有在你的 AWS 账户中构建资源权限的 IAM 编程访问密钥。设置你的 .env 以加载这些环境变量。你也可以使用 direnv 工具挂载到你的 shell 并填充 .envrc。在 .env 或 .envrc 中应该看起来像这样: ``` export AWS_ACCESS_KEY_ID="VALUE" export AWS_SECRET_ACCESS_KEY="VALUE" ``` ## 构建和销毁资源 ### 运行 terraform init 进入 AutomatedEmulation 工作目录并输入: ``` terraform init ``` ### 运行 terraform plan 或 apply ``` terraform apply -auto-approve ``` 或者 ``` terraform plan -out=run.plan terraform apply run.plan ``` ### 销毁资源 ``` terraform destroy -auto-approve ``` ### 查看 terraform 创建的资源 实验室已创建,并包含显示服务、端点、IP 地址和凭证的重要 terraform 输出。要查看它们: ``` terraform output ``` ## 功能与能力 ### 重要的防火墙和白名单 默认情况下,当你运行 terraform apply 时,你的公共 IPv4 地址会通过查询 ifconfig.so 确定,并且 ```terraform.tfstate``` 会自动更新。如果你的位置发生变化,只需运行 ```terraform apply``` 即可使用你新的公共 IPv4 地址更新安全组。如果 ifconfig.me 返回一个公共 IPv6 地址,你的 terraform 将会报错。在这种情况下,你必须自定义白名单。要更改自定义规则的白名单,请更新 ```sg.tf``` 中的此变量: ``` locals { src_ip = "${chomp(data.http.firewall_allowed.response_body)}/32" #src_ip = "0.0.0.0/0" } ``` ### Caldera **Caldera Linux 服务器** Caldera 自动构建在 Ubuntu Linux 22.04 AMI 上,并支持管理控制台的 SSL。以下本地项目文件对于自定义很重要: * bas.tf:构建 Linux 服务器的 terraform 文件以及 Caldera 的所有 terraform 变量。 * files/bas/bootstrap.sh.tpl:Caldera 和其他服务的引导脚本。 * files/bas/local.yml.tpl:自动部署的 Caldera 配置文件。 * files/bas/caldera.service:自动安装的 caldera 服务文件。 * files/bas/abilities/:包含自定义能力的本地目录,将自动部署到 caldera 服务器的 ```/opt/caldera/data/abilities``` * files/bas/payloads/:包含自定义载荷的本地目录,将自动部署到 caldera 服务器的 ```/opt/caldera/data/payloads``` **Caldera 故障排除:** 通过在 ```terraform output``` 中查找以下行来 SSH 进入 Caldera 服务器: ``` ssh -i ssh_key.pem ubuntu@3.15.204.148 ``` 进入系统后,查看 user-data 日志文件的尾部。你将看到 ```bootstrap.sh.tpl``` 脚本运行的步骤: ``` tail -f /var/log/user-data.log ``` 系统显示引导完成后,监视 Caldera 服务: ``` sudo systemctl status caldera ``` 它运行后,验证 Caldera Web 管理 TLS + API 的监听端口: ``` sudo netstat -tulpn | grep 8443 ``` 验证 mlflow 服务器是否正在监听端口 5000 ``` sudo netstat -tulpn | grep 5000 ``` **MLflow 服务器公开暴露:** MCP 服务器插件自动暴露 MLflow 服务器。MLflow 提供日志记录、追踪和监视,用于 Caldera MCP 插件(它是 Caldera API 的封装)所使用的 LLM 推理调用。一个重要的注意事项。默认情况下,此服务器仅在 localhost 上监听,但我已对其进行调整以允许远程连接。请务必小心,确保你有适当的 EC2 安全组,仅允许授权源连接到 MLflow 服务器。 ![Caldera MLflow](images/mlflow-overview.png "Caldera MLflow 服务器") **自定义 Caldera Linux:** 要自定义 Caldera,你可以在 ```bas.tf``` 中修改 red、blue 和 api 密钥的默认管理员凭证。对于其他自定义,你可以修改 ```local.yml.tpl``` Caldera 配置文件。 你可以在项目中创建自定义能力,这些能力将自动加载到 Caldera 中。此图像显示了一个横向移动 的自定义能力,它是从 ```files/bas/abilities/lateral-movement/``` 本地构建的。 ![Caldera](images/caldera2.png "Abilities") **Terraform 输出:** 查看 terraform 输出以获取重要的 Caldera 访问信息: ``` ------- Caldera Console ------- https://ec2-18-224-151-55.us-east-2.compute.amazonaws.com:8443 Caldera MCP MLflow server ------- http://ec2-18-224-151-55.us-east-2.compute.amazonaws.com:5000 Caldera Console Credentials ------------------- blue:Caldera2024 red:Caldera2024 admin:Caldera2024 API Keys -------- api_key_blue: blueadmin2024 api_key_red: redadmin2024 Caldera API Cheat Sheet ----------------------- -------------- ``` **Windows 客户端上的 Caldera:** Caldera sandcat 代理会自动安装并在 Windows 客户端系统上启动。引导脚本会等到 Caldera 启动并可用,然后安装 Sandcat caldera 代理。它应该看起来像这样。 ![Caldera](images/caldera1.png "Agent View") 要对此进行故障排除,请查看 Windows 系统上的以下日志文件: ``` C:\Terraform\caldera_log.log ``` 要在本地修改此文件,它位于 ```files\windows\caldera.ps1.tpl``` ### VECTR 由 Security Risk Advisors 开发的 VECTR 会自动安装。来自他们的 Github 仓库: _VECTR 是一个工具,用于协助跟踪你的红蓝队测试活动,以衡量不同攻击场景下的检测和防御能力_ ![VECTR](images/vectr.png "VECTR") 查看 terraform 输出以查看用于访问 VECTR 的公共 URL 和凭证: ``` VECTR Console ------------- https://ec2-3-15-204-148.us-east-2.compute.amazonaws.com:8081 VECTR Credentials ----------------- admin:11_ThisIsTheFirstPassword_11 ``` ### 红队工具 在 Windows 客户端系统上,以下工具会自动部署到 ```C:\Tools\```: * Atomic Red Team (ART) * PurpleSharp 用于自定义的本地引导脚本是 ```files\windows\red.ps1.tpl``` 要跟踪 Windows 客户端上的部署监视,请参阅位于 ```C:\Terraform\red_log.log``` 的日志文件 ### 蓝队工具 Sysmon 服务和自定义配置 (SwiftOnSecurity) 被部署到 Windows 客户端系统。要更新 sysmon 版本和配置,请在 ```files\sysmon``` 目录中进行更改。 用于自定义的本地引导脚本是 ```files\windows\sysmon.ps1.tpl``` 要跟踪 Windows 客户端上的部署监视,请参阅位于 ```C:\Terraform\blue_log.log``` 的日志文件 ### Windows 客户端 Windows 客户端系统由 ```win1.tf``` 构建。目前使用的是 Windows Server 2022 数据中心版。你可以上传自己的 AMI 镜像并更改 win1.tf 中的数据引用。本地引导脚本位于 ```files/windows/bootstrap-win.ps1.tpl```。通过 RDP 进入 Windows 系统并遵循此日志文件以查看系统如何进行引导: ``` C:\Terraform\bootstrap_log.log ``` **自定义构建脚本** 要添加新脚本以进行自定义部署,请参考 ```scripts.tf``` 和 ```s3.tf``` 中的数组。对于更复杂的部署,Windows 系统的构建具有灵活性,可以添加用于部署后配置管理的自定义脚本。这解决了 user-data 大小不超过 16KB 的限制问题。S3 存储桶用于暂存,以上传和下载脚本、文件以及任何需要的工件。实现方式如下:始终通过 user-data 部署一个小型的主脚本。此脚本包含下载其他脚本的指令。这由你控制,并在 ```scripts.tf``` 和 ```s3.tf``` 中配置。在 ```scripts.tf``` 中,查看名为 ```templatefiles``` 的数组。在此处添加任何自定义 terraform 模板文件,然后将它们在本地添加到 ```files/windows```。请参阅 ```red.ps1.tpl``` 和 ```sysmon.ps1.tpl``` 文件作为示例。文件应以 ```tpl``` 结尾。此模板文件将作为输出生成到名为 ```output``` 的目录中。当 terraform 代码生成到 ```output``` 目录时,会去掉文件名中的 ```.tpl```。请确保文件名正确,因为主脚本是根据此名称下载的。在 ```s3.tf``` 中,会上传 ```templatefiles``` 中引用的每个小脚本。主引导脚本引用了此数组。它将自动下载 ```templatefiles``` 数组中生成的所有脚本并执行每个脚本。 **Terraform 输出** 查看 ```terraform output``` 的输出以获取 RDP 的 IP 地址和凭证: ``` ------------------------- Virtual Machine win1 ------------------------- Instance ID: i-0eecf5439b1d8080b Computer Name: win1 Private IP: 10.100.20.10 Public IP: 18.119.101.237 local Admin: RTCAdmin local password: wOFVYKYlk2 ``` ### Linux Linux 系统由 ```bas.tf``` 构建。引导脚本位于 ```files/bas/bootstrap.sh.tpl```。 要访问 Linux 系统并对任何引导问题进行故障排除,请查看 terraform 输出并 SSH 进入系统: ``` SSH --- ssh -i ssh_key.pem ubuntu@3.15.204.148 ``` 然后查看 user-data 日志文件的尾部以监视引导脚本可能存在的任何问题: ``` tail -f /var/log/user-data.log ``` ## 主要区别 该实验室在其设计理念上与其他流行的 ```Cyber Ranges```(网络靶场)有所不同。不需要像 Ansible 这样的辅助工具。如果你愿意,可以随意使用它们。但它们不是配置管理所必需的。该实验室不使用第三方配置管理工具,而是使用 terraform 提供程序 (AWS SDK) 和内置的 AWS 功能 (```user data```)。你不必依赖辅助代理,也不必处理无代理推送中的过时库或网络问题,或更新随时间推移会导致问题的辅助工具。这提高了构建和配置云资源的 ```stability, consistency, and speed```(稳定性、一致性和速度)。使用 terraform、bash 和 powershell 进行构建和配置。一个小型的 user-data 脚本被推送到系统中并运行。单独的配置管理脚本被上传到 S3 存储桶。主脚本指示系统运行哪些较小的脚本来构建系统。有了良好的文档,这些脚本的位置应该使添加和自定义变得容易。有关更多详细信息,请参阅 **功能与能力** 部分。 ### 未来 此 terraform 是由 Operator Lab 工具自动生成的。要获取该工具的未来版本,请关注 twitter.com/securitypuck。 要查看此工具的 Azure 版本,请查看 PurpleCloud (https://www.purplecloud.network) ![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/securitypuck)
标签:AI合规, Atomic Red Team, AWS, Breach and Attack Simulation, C2, Caldera, Cloudflare, DLL 劫持, DPI, ECS, LLM, MCP Server, MITRE ATT&CK, MLflow, PE 加载器, RAG, Sysmon, Terraform, TGT, Unmanaged PE, VECTR, 协议分析, 大语言模型, 威胁情报, 安全工具集合, 安全测试, 对手模拟, 应用安全, 开发者工具, 攻击性安全, 攻防演练, 数据展示, 数据泄露检测, 权限提升, 横向移动, 漏洞利用检测, 特权提升, 红队, 编程规范, 网络安全实验室, 自动化部署