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, 云取证, 仪表盘, 取证, 时间线, 真阳性, 网络信息收集, 自动化响应, 蜜令牌, 蜜罐, 证书利用, 证据捆绑, 诱饵, 跨云, 隔离