jern2004/CloudTripWire
GitHub: jern2004/CloudTripWire
跨云蜜标与自动化事件响应框架,识别并收敛云环境中的暴露身份与存储风险。
Stars: 0 | Forks: 0
# CloudTripwire — Multi-Cloud Honeytokens & Auto-Incident Response
种植诱饵凭证、对象和链接,覆盖 **AWS 与 Azure**。
当任何实体触碰它们时,**自动吊销访问权限**,捕获**取证证据包**,并将完整的**事件时间线**发布到仪表板。
## 为什么
一个诱饵 IAM 密钥或 S3 对象绝不应被合法访问。
任何触碰都保证是真阳性 — 无需调优、无背景噪声。
CloudTripwire 将该信号转化为自动 containment,并生成可复现的应急响应工件,全流程在 90 秒内完成。
## 已构建内容
| 层 | 技术栈 | 状态 |
|---|---|---|
| 事件 API | FastAPI · SQLite · Pydantic | ✅ 运行中 |
| 仪表板 UI | React · Vite · TailwindCSS · Recharts | ✅ 运行中 |
| AWS 诱饵 | IAM 蜜罐密钥 · S3 诱饵桶 · CloudTrail | ✅ 运行中 |
| AWS 检测 | EventBridge 规则 · CloudTrail 事件模式 | ✅ 运行中 |
| AWS 自动应急响应 | Lambda · IAM 密钥禁用 · 严重度引擎 · MITRE 映射 | ✅ 运行中 |
| IaC | Terraform(完整 AWS 栈) | ✅ 运行中 |
| Azure 诱饵 + 检测 | 存储 · Sentinel 分析 | 进行中 |
| Azure 自动应急响应 | Logic Apps · Microsoft Graph | 进行中 |
| 证据打包器 | 每个事件的 CloudTrail ZIP | 进行中 |
## 架构
```
Decoy IAM key / S3 canary object (AWS)
│
▼
CloudTrail (logs every API call, even failed ones)
│
▼
EventBridge (pattern-matches on honeytoken username / bucket)
│
▼
Lambda — isolate_and_log.py
│ • extracts identity, IP, user agent
│ • determines severity (Critical / High / Medium)
│ • maps to MITRE ATT&CK technique
│ • disables IAM key via UpdateAccessKey
│ • POSTs structured incident to dashboard
▼
FastAPI → SQLite
│
▼
React Dashboard (auto-refreshes every 15 s)
```
**诱饵类型**
| 类型 | AWS | Azure |
|---|---|---|
| 对象诱饵 | 启用访问日志的 S3 对象 | 启用诊断日志的 Blob 存储 |
| 凭证 | 无权限的 IAM 访问密钥 | 应用注册密钥 |
| 信标链接 | 访问时记录日志的预签名 URL | 访问时记录日志的 SAS URL |
**自动应急响应动作**
| 提供方 | 触发条件 | 动作 |
|---|---|---|
| AWS | EventBridge 规则触发 CloudTrail `GetObject` / `AssumeRole` | 禁用 IAM 密钥 · 隔离安全组 · EBS 快照 · 捕获 CloudTrail 窗口 |
| Azure | 存储 / 登录日志的 Sentinel 分析规则 | 禁用服务主体 · 吊销刷新令牌 · 收集存储访问日志 |
## 仓库结构
```
cloudtripwire/
├── backend/ # FastAPI REST API
│ ├── app/
│ │ ├── core/ # Config, utilities, ID generation
│ │ ├── routers/ # incidents, metrics, evidence, health
│ │ ├── models.py # SQLAlchemy ORM
│ │ ├── schemas.py # Pydantic request/response models
│ │ ├── database.py # SQLite engine + session
│ │ └── main.py # App factory, CORS, router registration
│ ├── seed.data.py # Seed sample incidents for demo
│ └── requirements.txt
│
├── frontend/ # React dashboard
│ ├── src/
│ │ ├── api/ # Axios client + mock data
│ │ ├── components/ # MetricCard, Charts, IncidentTable, IncidentDetail, Layout
│ │ ├── pages/ # Dashboard, IncidentsPage, IncidentDetailPage
│ │ ├── styles/ # TailwindCSS + global.css
│ │ └── utils/ # formatters (timestamp, status colors, truncation)
│ ├── tailwind.config.js
│ └── vite.config.js
│
├── honeytokens/ # Honeytoken deployment + testing
│ ├── deploy_honeytokens.py # Creates IAM user, S3 canary, CloudTrail, EventBridge
│ ├── test_trigger.py # Simulates attacker using decoy credentials
│ └── config.json # AWS account config (no secrets)
│
├── response/
│ └── aws_lambda/
│ ├── isolate_and_log.py # Lambda handler — disable key, determine severity, POST incident
│ ├── deploy_lambda.py # Packages and deploys the Lambda function
│ └── update_dashboard_url.py # Updates Lambda env var when ngrok URL changes
│
├── terraform/ # IaC — full AWS stack
│ ├── aws.tf # IAM user, S3 canary, CloudTrail, EventBridge, Lambda, IAM roles
│ └── variables.tf
│
└── docs/
├── mitre-mapping.md # Full ATT&CK coverage + severity decision tree
└── demo-guide.md # Pre-demo checklist + 60-second script + interview Q&A
```
## 快速启动 — 仅仪表板
### 后端
```
cd backend
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
uvicorn app.main:app --reload
# API: http://127.0.0.1:8000
# Swagger docs: http://127.0.0.1:8000/docs
```
### 前端
```
cd frontend
npm install
npm run dev
# Dashboard: http://localhost:5173
```
UI 提供一个 **Mock Data** 开关 — 完全无需后端或任何云基础设施即可运行。
后端启动后切换到 **Live API** 模式。
## API 参考
| 方法 | 端点 | 描述 |
|---|---|---|
| `GET` | `/api/metrics` | 事件计数(总计、活动、AWS、Azure) |
| `GET` | `/api/incidents` | 列出事件(`?limit=&status=&cloud=`) |
| `GET` | `/api/incident/{id}` | 单个事件详情 |
| `PATCH` | `/api/incident/{id}` | 更新状态(例如标记为已解决) |
| `POST` | `/api/incidents` | 摄入新事件(由剧本调用) |
| `GET` | `/api/incidents/timeseries` | 按日统计用于图表(`?days=7`) |
| `GET` | `/api/evidence/{id}` | 事件的证据包链接 |
| `GET` | `/health` | 健康检查 |
## 事件数据模型
```
{
"id": "inc-001",
"cloud": "AWS",
"principal": "arn:aws:iam::123456789012:user/honeypot-user",
"trigger_type": "S3 Access",
"timestamp": "2025-10-27T14:23:45Z",
"status": "Active",
"severity": "High",
"region": "us-east-1",
"ip_address": "203.45.67.89",
"resource_arn": "arn:aws:s3:::honeypot-bucket/sensitive.zip",
"user_agent": "aws-cli/2.13.5 Python/3.11.4",
"response_actions": [
{ "action": "Credential Revoked", "timestamp": "...", "status": "Success" },
{ "action": "Security Team Notified", "timestamp": "...", "status": "Success" }
],
"timeline": [
{ "event": "Honeytoken Triggered", "timestamp": "..." },
{ "event": "Automated Response Initiated", "timestamp": "..." },
{ "event": "Evidence Saved", "timestamp": "..." }
],
"evidence": {
"cloudtrail_log": "s3://evidence/inc-001-cloudtrail.json",
"vpc_flow_logs": "s3://evidence/inc-001-vpc-flow.log",
"iam_snapshot": "s3://evidence/inc-001-iam-snapshot.json"
},
"threat_indicators": {
"is_vpn": false,
"is_tor": false,
"is_known_attacker": true,
"geo_location": "Singapore"
}
}
```
## MITRE ATT&CK 覆盖范围
| 技术 | ID | 诱饵触发条件 |
|---|---|---|
| 不安全凭证 | T1552.001 | 诱饵 IAM 密钥 / 应用密钥被使用 |
| 云存储数据外泄 | T1567.002 | 诱饵 S3 / Blob 对象被访问 |
| 云服务发现 | T1526 | ListBuckets · GetBlobServiceProperties |
| 有效账户:云账户 | T1078.004 | 蜜罐主体完成认证 |
| 从云存储获取数据 | T1530 | 对诱饵文件执行 GetObject |
## 安全说明
- 所有诱饵部署在**隔离的 AWS 测试账户与 Azure 试用租户**中,不接触生产环境。
- 诱饵 IAM 密钥**无任何 IAM 权限**(仅在认证时触发,而非授权)。
- 所有密钥**可立即吊销**并在每次演示运行后轮换。
- Terraform 状态本地存储;无凭证被提交。
## 路线图
- [x] FastAPI 事件 API(CRUD、指标、证据、健康)
- [x] React 仪表板(指标卡片、折线/柱状图、事件表、详情页、全量事件页)
- [x] AWS 诱饵 IAM 用户 + 带有诱人文件的 S3 诱饵桶
- [x] 多区域 CloudTrail 追踪(含 S3 数据事件)
- [x] EventBridge 检测规则(IAM 密钥使用 + S3 诱饵访问)
- [x] Lambda 自动应急响应:禁用密钥、严重度引擎、MITRE 映射、POST 到仪表板
- [x] Terraform IaC 用于完整 AWS 栈(可通过 `terraform apply` 复现)
- [x] 攻击模拟脚本(`honeytokens/test_trigger.py`)
- [x] 每个事件的 MITRE ATT&CK 标签
- [ ] Azure Blob 诱饵 + Sentinel 分析规则
- [ ] Logic App 应激剧本(禁用 SP → 吊销会话 → 收集日志)
- [ ] 证据打包器(每个事件的 ZIP 包,含 CloudTrail 窗口与流日志)
- [ ] Terraform Azure 模块
## 目标指标
| 指标 | 目标 |
|---|---|
| 检测延迟 | 蜜罐触碰后 < 60 秒 |
| 自动 containment | 全流程 < 90 秒 |
| 证据完整性 | 每个事件的 CloudTrail + 流日志 + IAM 快照 |
| 误报率 | 0 — 任何对诱饵的访问在定义上均为恶意 |
标签:Auto-IR, AV绕过, AWS, Azure, CloudTrail, DNS 解析, DPI, ECS, EventBridge, FastAPI, IAM密钥, Lambda, Logic Apps, Microsoft Graph, PE 加载器, React, S3桶, SEO: 多云蜜罐, SEO: 自动化事件响应, SQLite, StruQ, Syscalls, TailwindCSS, Terraform, Vite, 云取证, 仪表盘, 取证, 时间线, 真阳性, 网络信息收集, 自动化响应, 蜜令牌, 蜜罐, 证书利用, 证据捆绑, 诱饵, 跨云, 隔离