MayaTrail/step1
GitHub: MayaTrail/step1
MayaTrail 是一个 AWS 安全模拟演练平台,在用户自己的云账户中安全地部署漏洞环境并运行真实对手模拟,帮助团队验证云安全态势和检测能力。
Stars: 1 | Forks: 0
MayaTrail
在攻击者动手之前,在您自己的 AWS 账户中安全地演练真实的云攻击。
MayaTrail 会连接到您的 AWS 账户,配置一个真实且故意留有漏洞的环境,对其运行真实的对手 emulation,并向您准确展示攻击者可以访问哪些内容——然后自动销毁这一切。每个 emulation 都附带 MITRE ATT&CK 映射和随时可部署的检测规则。
## 问题背景
云配置错误是导致云泄露的首要原因——一个权限过高的 IAM 角色或一个启用了 IMDSv1 的 EC2 实例就足以导致整个账户沦陷。然而,安全团队几乎没有安全的方法在类似于自己的基础设施上*演练*这些攻击:
- **攻击生产环境的风险太高。** 您无法针对实时基础设施运行从凭证窃取到权限维持的利用链,以查看其是否有效。
- **渗透测试昂贵且频率低。** 每年一到两次的定时测试无法跟上每天都在变化的基础设施。
- **了解配置错误并不等于了解您的爆炸半径。** 大多数工具只会标记 IMDSv1 是否开启;它们不会向您展示其解锁的完整 kill chain——或者您的检测机制是否能捕获它。
结果就是:只有当真正的攻击者向他们展示时,团队才会发现他们的云是否可被利用。
## 解决方案
MayaTrail 闭环了这一流程——**连接 → 部署 → 攻击 → 观察 → 自动销毁**——在*您自己的* AWS 账户内的隔离、可销毁环境中运行真实的对手 emulation。
1. **连接** 您的 AWS 账户,通过 STS AssumeRole 实现——无需移交长期密钥。
2. **部署** 通过代码(Pulumi)配置一个真实且故意留有漏洞的环境。
3. **攻击** 使用基于已记录攻击活动建模的真实对手 emulation 对其进行攻击。
4. **观察** 在仪表板中查看结果:kill chain、MITRE ATT&CK 覆盖率、爆炸半径以及不可变的审计日志——此外还有可直接用于您的 SIEM 的检测规则。
5. **自动销毁** ——每个环境都有一个 TTL,因此不会有任何残留,且成本保持在受控范围内。
启动它,运行泄露攻击,从中吸取教训,然后让它自动清理。可根据基础设施变化的频率随时重复此操作。
## 目标受众
MayaTrail 专为负责云安全态势的人员打造:
| 角色 | 他们能从 MayaTrail 中获得什么 |
|---|---|
| **Detection Engineer** | 真实的攻击者遥测数据,以及随附的 Sigma + KQL 规则,用于验证和调优检测。 |
| **Security Engineer** | 一个安全的试验场,用于验证配置错误是否真正可实现端到端的利用。 |
| **Cloud Security Engineer** | 在自己的 AWS 账户中安全运行的、真实且有文档记录的攻击场景。 |
| **DevSecOps Engineer** | 可销毁的、由 IaC 定义的环境,可无缝融入现有 pipeline。 |
| **SOC Analyst** | 一个受控的环境,用于研究真实的攻击模式和响应策略。 |
| **Security Architect** | 用于制定防护措施和策略决策的爆炸半径证据。 |
## 核心能力
- **在您自己的 AWS 账户中运行** ——通过具有范围的 STS AssumeRole 进行连接;不存储任何长期凭证。
- **真实的对手 emulation** ——基于已记录的攻击活动建模,而非玩具般的虚拟场景。
- **映射至 MITRE ATT&CK** ——每个阶段都与一项技术关联,并在仪表板上直观展示覆盖率。
- **提供检测规则** ——每个 emulation 都包含 Sigma 和 KQL 规则以及事件响应 playbook,随时可用于您的 SIEM。
- **临时且关注成本** ——环境具有 TTL 并按计划自动销毁;预先展示预估成本。
- **基于插件的 emulation 包** ——接入新的 emulation 包即可被自动发现,包含基础设施和检测机制。
- **可审计** ——不可变的日志会记录每一次连接、部署、攻击和销毁操作。
## 顺势而为
云资源的扩张速度超过了负责防御它们的团队,且该领域的规范正从定时的渗透测试转向**持续威胁暴露管理**——始终了解您的环境今天(而非上个季度)是否可被利用。MayaTrail 使这种演练循环变得低成本、安全,并且具有足以持续运行的可重复性。
## 路线图
`step1` 是该阶段性推进平台的第一个阶段。未来的发展方向:
- 不断扩展的对手 emulation 库,涵盖更多已记录的攻击活动
- 多云支持(Azure、GCP、Kubernetes)——平台模型已为此预留了扩展空间
- 基于 emulation 遥测数据的更深入的检测工程工作流
- 集成 CI/CD,以便在每次基础设施变更时演练攻击
## 工作原理
MayaTrail 作为全栈 Web 应用程序运行。单个 emulation 的流程如下:
1. **连接** ——用户连接其 AWS 账户;`connectors` 应用程序通过 STS AssumeRole 建立访问权限(不存储长期密钥)。
2. **部署** ——企业级 Celery worker 使用 **Pulumi Automation API(进程内)**(无需 Docker socket,无需临时 Pulumi 容器)将 emulation 的基础设施部署到用户的账户中。Pulumi 状态位于专用的 S3 状态存储桶中。
3. **攻击** ——emulation 包中的 `attack.py` 针对新配置的基础设施执行 kill chain。
4. **观察** ——结果、MITRE ATT&CK 映射和检测规则会展示在仪表板上;`logs` 应用程序会记录不可变的审计追踪。
5. **自动销毁** ——每个 stack 都具有一个 TTL(SCARLETEEL 默认为 4 小时);Celery Beat 每 15 分钟运行一次自动销毁任务,从而清理过期的环境并确保成本保持在受控范围内。
## 快速开始(Docker Compose)
```
# 配置环境
cp backend/.env.example backend/.env
# 在 backend/.env 中填写 SECRET_KEY、AWS 凭证和 STATE_BUCKET
# 启动 full stack
docker-compose up --build
```
应用程序可通过 `http://localhost` 访问。数据库迁移在后端启动时会自动运行。
**前置条件:** Docker 和 Docker Compose,以及平台账户的 AWS 凭证(用于对目标账户执行 AssumeRole 并存储 Pulumi 状态)。
### 核心环境变量 (`backend/.env`)
| 变量 | 描述 |
|---|---|
| `SECRET_KEY` | Django 密钥 |
| `DATABASE_URL` | PostgreSQL 连接字符串 |
| `REDIS_URL` | Celery broker + 结果后端 |
| `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` | 平台 AWS 凭证(STS AssumeRole + 状态存储桶) |
| `AWS_DEFAULT_REGION` | 默认 AWS 区域(例如 `ap-south-1`) |
| `STATE_BUCKET` | 用于 Pulumi 状态的 S3 存储桶(例如 `mayatrail-state-bucket`) |
| `PULUMI_CONFIG_PASSPHRASE` | Pulumi stack 密钥的密码短语 |
| `EMULATIONS_BASE_DIR` | emulation 包挂载的位置(`/opt/emulations`) |
| `REGISTRATION_INVITE_CODE` | 限制自助注册的邀请码 |
| `GOOGLE_CLIENT_ID` | Google SSO 客户端 ID |
### 前端开发
```
cd frontend/UI
npm install
npm run dev # Vite dev server on http://localhost:3000
```
## 模拟
MayaTrail 将对手 emulation 作为独立的、可自动发现的包进行发布。每个包都捆绑了运行攻击并从中学习所需的一切内容:
- `MANIFEST.py` ——身份、kill chain 阶段、MITRE ATT&CK 映射、成本和 TTL 元数据
- `attack.py` ——一个执行 kill chain 的 `run(outputs)` 函数
- `infra/` ——用于配置漏洞环境的 Pulumi 程序
- `detections/` ——Sigma 和 KQL 检测规则,每项技术对应一组
- `PLAYBOOK.md` ——针对该攻击活动的事件响应 playbook
### SCARLETEEL 2.0
这是一个包含 6 个阶段的 APT emulation,基于 Sysdig 威胁研究团队(2023 年)记录的真实 SCARLETEEL 攻击活动。它将容器利用与 AWS 凭证窃取结合在一起,以实现横向移动、数据泄露和持久化。
| 阶段 | 战术 | MITRE 技术 |
|---|---|---|
| 1. Initial Access | Initial Access | `T1190` Exploit Public-Facing Application(容器 RCE) |
| 2. Credential Access | Credential Access | `T1552.005` Cloud Instance Metadata API(IMDSv1) |
| 3. Discovery | Discovery | `T1087.004` Cloud Account Discovery · `T1580` Cloud Infrastructure Discovery |
| 4. Defense Evasion | Defense Evasion | `T1562.008` Disable Cloud Logs(CloudTrail) |
| 5. Lateral Movement | Privilege Escalation / Lateral Movement | `T1548.005` Abuse Elevation Control(AssumeRole) · `T1550.001` Application Access Token |
| 6. Persistence | Persistence | `T1098` Account Manipulation(Lambda 后门) |
**严重程度:** CRITICAL · **持续时间:** 约 20 分钟 · **资源:** 19 · **默认 TTL:** 4 小时 ·
**预估成本:** 约 $0.05/小时
**涉及的服务:** IAM, STS, EC2, Lambda, S3, Secrets Manager, ECS, CloudTrail
**提供的检测:** 针对 T1190、T1552.005、T1087.004、T1562.008、
T1548.005 和 T1098 的 Sigma + KQL 规则,以及完整的事件响应 playbook。
## Docker Compose stack
完整的平台作为一个包含 7 个服务的 Docker Compose stack 运行:
| 服务 | 用途 |
|---|---|
| `db` | PostgreSQL 16 数据库 |
| `redis` | Celery 消息 broker + 结果后端 |
| `backend` | Django REST API(Gunicorn) |
| `worker_enterprise` | Celery worker ——通过 STS AssumeRole(Pulumi Automation API,进程内)在用户的 AWS 账户中部署、攻击和销毁 emulation |
| `beat` | Celery Beat 调度器——每 15 分钟自动销毁过期的 stack |
| `ui` | React SPA(Nginx,非 root) |
| `nginx` | 边缘反向代理(将 `/` 路由至 UI,`/api/` + `/admin/` 路由至 backend) |
## 项目结构
```
step1/
├── backend/ # Django REST API
│ ├── apps/
│ │ ├── users/ # Auth: registration (invite code), JWT login, Google SSO, profile
│ │ ├── connectors/ # AWS account connection via STS AssumeRole
│ │ ├── emulations/ # Emulation catalogue + run lifecycle (deploy/attack/destroy)
│ │ ├── infrastructure/ # Stack model, Celery tasks, TTL auto-destroy
│ │ ├── metrics/ # Platform Overview dashboard metrics (MITRE + attack-surface coverage)
│ │ └── logs/ # Read-only audit log
│ ├── config/ # Django settings (base/dev/prod), Celery, URLs
│ ├── Dockerfile # Backend / beat image
│ ├── Dockerfile.worker # Enterprise worker image
│ └── requirements.txt
├── emulations/ # Adversary emulation packages (mounted at /opt/emulations)
│ ├── registry.py # Auto-discovers packages via MANIFEST.py
│ └── scarleteel/ # SCARLETEEL 2.0 emulation
│ ├── MANIFEST.py # Identity, MITRE mappings, cost + TTL metadata
│ ├── attack.py # run(outputs) — executes the kill chain
│ ├── infra/ # Pulumi program (vulnerable infrastructure)
│ ├── detections/ # Sigma + KQL detection rules per technique
│ └── PLAYBOOK.md # Incident-response playbook
├── frontend/UI/ # React + TypeScript SPA
│ ├── src/
│ │ ├── components/ # dashboard, emulations, playbooks, detections, platforms, ...
│ │ ├── context/ # Auth, Theme, Platform contexts
│ │ ├── services/ # API service layer (Axios)
│ │ ├── data/ # Static taxonomies (e.g. attack-surface mapping)
│ │ └── types/ # TypeScript type definitions
│ ├── DESIGN.md # Frontend design system (source of truth)
│ └── Dockerfile # Multi-stage: Node build -> Nginx
├── docker-compose.yml # Full stack orchestration (7 services)
└── nginx.conf # Edge reverse proxy config
```
标签:AWS, Django, DPI, OPA, Pulumi, React, StruQ, Syscalls, 搜索引擎查询, 攻击模拟, 数据可视化, 数据展示, 测试用例, 版权保护, 红队, 自动化攻击, 逆向工具, 靶场, 驱动签名利用