iknowjason/AutomatedEmulation
GitHub: iknowjason/AutomatedEmulation
这是一个基于 Terraform 构建的自动化对手模拟实验室,集成了 Caldera 和 MCP 服务器,支持利用 LLM 辅助生成攻击技术和行动规划,并实现了基础设施即代码的快速部署。
Stars: 206 | Forks: 55
# 使用 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 Linux:**
要自定义 Caldera,你可以在 ```bas.tf``` 中修改 red、blue 和 api 密钥的默认管理员凭证。对于其他自定义,你可以修改 ```local.yml.tpl``` Caldera 配置文件。
你可以在项目中创建自定义能力,这些能力将自动加载到 Caldera 中。此图像显示了一个横向移动 的自定义能力,它是从 ```files/bas/abilities/lateral-movement/``` 本地构建的。

**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 代理。它应该看起来像这样。

要对此进行故障排除,请查看 Windows 系统上的以下日志文件:
```
C:\Terraform\caldera_log.log
```
要在本地修改此文件,它位于 ```files\windows\caldera.ps1.tpl```
### VECTR
由 Security Risk Advisors 开发的 VECTR 会自动安装。来自他们的 Github 仓库:
_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)

标签: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, 协议分析, 大语言模型, 威胁情报, 安全工具集合, 安全测试, 对手模拟, 应用安全, 开发者工具, 攻击性安全, 攻防演练, 数据展示, 数据泄露检测, 权限提升, 横向移动, 漏洞利用检测, 特权提升, 红队, 编程规范, 网络安全实验室, 自动化部署