nishu2402/Cyber-Security-Aegis-IAM-Dashboard
GitHub: nishu2402/Cyber-Security-Aegis-IAM-Dashboard
企业级IAM风险分析HUD,通过图遍历和MITRE ATT&CK映射快速识别AWS IAM权限提升路径、过度授权和职责冲突,并生成态势评分与修复手册。
Stars: 0 | Forks: 0
# 🛡️ AEGIS-IAM 仪表板
## 📋 目录
| # | 章节 |
|---|---|
| 1 | [👾 作者](#authors) |
| 2 | [🎯 项目概述](#project-summary) |
| 3 | [💡 核心思路](#core-idea) |
| 4 | [🔁 完整处理流程](#complete-pipeline) |
| 5 | [✨ 主要功能](#key-features) |
| 6 | [🗺️ MITRE ATT&CK 覆盖范围](#mitre-coverage) |
| 7 | [📊 安全态势评分引擎](#posture-engine) |
| 8 | [🖥️ 仪表板模块](#dashboard-modules) |
| 9 | [⚡ 技术栈](#tech-stack) |
| 10 | [🌐 API 端点](#api-endpoints) |
| 11 | [⌨️ 键盘快捷键](#keyboard-shortcuts) |
| 12 | [📁 项目结构](#project-structure) |
| 13 | [⚙️ 安装说明](#installation) |
| 14 | [🚀 使用指南](#usage-guide) |
| 15 | [☁️ 部署说明](#deployment) |
| 16 | [🔒 安全说明](#security-notes) |
| 17 | [🧪 验证测试覆盖](#test-coverage) |
| 18 | [🛣️ 未来路线图](#future-roadmap) |
| 19 | [⚠️ 免责声明](#disclaimer) |
| 20 | [📜 许可证](#license) |
## 🎯 项目概述
| 指标 | 数值 |
|---|---|
| 🗺️ **MITRE 动词映射** | 57 个不同的 IAM/STS 动词 |
| 🎯 **覆盖战术** | 10 / 10 ATT&CK 企业战术 |
| 🧪 **测试覆盖** | 38/38 端到端 · 11/11 对抗性安全测试 |
| ☁️ **云支持** | AWS · Azure · GCP |
| 🏗️ **后端** | Flask 3.0 · NetworkX 3.2 · Python 3.9+ |
| 🎨 **前端** | Tailwind CDN · Chart.js · vis-network · html2pdf |
| 🔒 **安全控制** | CSRF · CSP · 速率限制 · XSS 测试通过 · JSON 炸弹防护 |
| 📦 **部署** | Gunicorn · Docker · Render / Railway / Heroku 兼容 |
| 📄 **无构建步骤** | 无 webpack · 无 npm · 无数据库 · 可离线运行 |
## 💡 核心思路
| 问题 | Aegis 答案 |
|---|---|
| 谁可以从哪里成为管理员? | **权限提升链** 模块 |
| 谁已经拥有过大的权限? | **过度授权的主体** 模块 |
| 谁可以更改*并*隐藏策略状态? | **职责分离冲突** 模块 |
| 这暴露了哪些 ATT&CK 技术? | **MITRE 热力图** 模块 |
| 这个账户暴露程度如何,用一个数字表示? | **态势评分引擎** |
| 我现在*该怎么做*来修复? | **动态手册** 模块 |
Aegis 将 IAM 导出作为单次分析的唯一真实来源。无状态、自包含、可离线运行。作为 SOC 分析师的便携扫描器、面试实战题、安全实验实验室或周五下午的快速审计都很有用。
## 🔁 完整处理流程
| 模块 | 功能 |
|---|---|
| 🎯 **态势评分引擎** | 0–100 综合评分,带字母等级(A+ → F)和透明的因素分解。动画 SVG 环根据评分比例填充。 |
| 🗺️ **MITRE ATT&CK 热力图** | 10 个企业战术的实时网格 — 初始访问、执行、持久化、权限提升、防御规避、凭证访问、发现、横向移动、收集、影响。点击任意技术单元格获取完整情报。 |
| 🪟 **详情抽屉** | 点击任意发现项展开链、根因、补丁 CLI 步骤、策略和每个权限的 MITRE 引用。 |
| ⚡ **命令面板** | `Ctrl/Cmd + K` 打开模糊启动器 — 跳转到模块、运行导出或按主体搜索所有发现项。 |
| 🎚️ **筛选标签** | 多轴筛选:严重程度(Critical / High / Medium / Low)× 类型(Escalation / Over-Priv / SoD)。 |
| 📈 **统计迷你图 + 差异增量** | 每个统计卡片显示实时计数、严重程度微条和与上次分析的 `+/−` 差异。 |
| 🔔 **Toast 通知** | 滑入式警报反映 Flask flash 消息,带有严重程度颜色。 |
| 📥 **JSON / CSV API 导出** | `/api/export/json` 和 `/api/export/csv` 流式传输完整情报载荷。 |
| ✨ **动画粒子场** | 带有连接线的轻量级画布。遵循 `prefers-reduced-motion`。 |
| 📄 **主题 PDF 报告** | 一键 `html2pdf` 导出 — 深色模式安全、品牌化、可直接发送给领导。 |
| 🌐 **信任图** | `vis-network` 渲染用户 / 角色 / assume-role 边。 |
| 📚 **动态手册** | 每个发现项自动生成的 CLI 补丁步骤 + 战略指导。 |
| 🛡️ **加固输入** | XSS 测试通过。`tojson | safe` 载荷编码。2 MB 上传限制。CSP / X-Frame-Options / Referrer-Policy 头。 |
## 🗺️ MITRE ATT&CK 覆盖范围
| 战术 | 覆盖范围 | 示例权限 |
|---|:---:|---|
| **TA0001 — 初始访问** | ✅ 3 | `sts:AssumeRoleWithSAML`, `iam:CreateLoginProfile` |
| **TA0002 — 执行** | ✅ 1 | `ssm:SendCommand` |
| **TA0003 — 持久化** | ✅ 19 | `iam:CreateUser`, `iam:CreateAccessKey`, `iam:UpdateAssumeRolePolicy` |
|TA0004 — 权限提升** | ✅ 17 | `iam:PassRole`, `iam:AttachUserPolicy`, `iam:PutRolePolicy` |
| **TA0005 — 防御规避** | ✅ 16 | `iam:DeleteUser`, `cloudtrail:StopLogging`, `iam:DeleteAccessKey` |
| **TA0006 — 凭证访问** | ✅ 9 | `secretsmanager:GetSecretValue`, `sts:GetFederationToken` |
| **TA0007 — 发现** | ✅ 13 | `iam:ListUsers`, `iam:GetAccountAuthorizationDetails` |
| **TA0008 — 横向移动** | ✅ 7 | `sts:AssumeRole`, `iam:PassRole`, `lambda:UpdateFunctionCode` |
| **TA0009 — 收集** | ✅ 1 | `kms:Decrypt` |
| **TA0040 — 影响** | ✅ 4 | `iam:DeleteRole`, `iam:DeletePolicy`, `cloudtrail:DeleteTrail` |
**总计:57 个不同动词 · 覆盖 10/10 企业战术**
## 📊 态势评分引擎
| 分数范围 | 等级 | 状态 |
|:---:|:---:|:---:|
| 95 – 100 | **A+** | 🟢 加固 |
| 85 – 94 | **A** | 🟢 强 |
| 70 – 84 | **B** | 🔵 可接受 |
| 50 – 69 | **C** | 🟡 有风险 |
| 30 – 49 | **D** | 🟠 受损态势 |
| 0 – 29 | **F** | 🔴 严重态势 |
## 🖥️ 仪表板模块
## ⚡ 技术栈
## 🚀 使用指南
| 层级 | 技术 |
|---|---|
| **后端** | Python 3.9+ · Flask 3.0 · Werkzeug 3.0 · NetworkX 3.2 |
| **前端** | Tailwind CSS (CDN) · 自定义 CSS 组件层 · Vanilla ES5 JS |
| **可视化** | Chart.js · vis-network · 自定义 SVG 小组件 |
| **导出** | html2pdf.js · CSV (stdlib) · JSON (stdlib) |
| **字体** | Orbitron · JetBrains Mono · Inter (Google Fonts) |
| **部署** | Gunicorn · Docker · Render / Railway / Heroku 兼容 |
## 🌐 API 端点
| 路由 | 方法 | 用途 |
|---|:---:|---|
| `/` | GET | 主 HUD |
| `/upload` | POST | 上传 IAM JSON |
| `/init_demo` | POST | 加载演示数据集 |
| `/reset` | POST | 清除会话 + 差异基线 |
| `/graph` | GET | 信任关系图 |
| `/playbook` | GET | 动态修复手册 |
| `/intel` | GET | 云导出说明 |
| `/api/export/json` | GET | 完整情报 JSON 下载 |
| `/api/export/csv` | GET | 所有发现项的扁平 CSV |
## ⌨️ 键盘快捷键
| 按键 | 操作 |
|:---:|---|
| `Ctrl/Cmd + K` | 打开命令面板 |
| `↑ ↓` | 导航面板项 |
| `Enter` | 打开选中项 |
| `Esc` | 关闭面板 / 抽屉 |
## 📁 项目结构
📋 完整 requirements.txt
``` flask>=3.0.0 werkzeug>=3.0.0 networkx>=3.2 gunicorn>=21.2.0 ```
| 云 | 导出命令 |
|---|---|
| **Azure** | `az role assignment list --all --output json > azure_iam.json` |
| **GCP** | `gcloud projects get-iam-policy PROJECT_ID --format=json > gcp_iam.json` |
(请参阅仪表板中的*情报检索实验室*获取完整参考。)
### 4 — 生成情报报告
点击**导出 PDF**获取品牌化的深色模式报告。或通过以下方式获取原始发现项:
```
curl http://127.0.0.1:5000/api/export/json > findings.json
curl http://127.0.0.1:5000/api/export/csv > findings.csv
```
## ☁️ 说明
| 控制措施 | 实现方式 |
|---|---|
| 🛡️ **输入验证** | 严格 JSON 架构检测、解析时验证、格式错误的输入会被 flash 错误拒绝 |
| 📏 **上传大小限制** | 通过 `MAX_CONTENT_LENGTH` + 磁盘重新检查强制执行 2 MB 上限 |
| 👃 **内容类型嗅探** | 第一个非空白字节必须是 `{` 或 `[` — 非 JSON 在解析前被拒绝 |
| 💣 **JSON 炸弹防护** | 最大嵌套深度 64、最大节点 200,000 — 递归深度遍历后再摄取 |
| 🚫 **无代码执行** | 上传的 JSON 仅被解析 — 从不 `eval`、从不导入 |
| 🔐 **XSS 防护** | Jinja 自动转义 + `tojson | safe` 载荷编码 · 使用 `` 主体名称在渲染中完全转义 |
| ✅ 格式错误的 JSON 上传 | 被拒绝并显示 flash 错误 |
| ✅ 超大文件(3 MB) | HTTP 413 → 优雅处理 |
| ✅ 空 / 部分 JSON | 架构验证、优雅拒绝 |
| ✅ 仅拒绝策略 | 正确标记为非过度授权 |
| ✅ JSON 深度炸弹(200 层) | 被深度防护拒绝 |
| ✅ 非 JSON 内容嗅探 | 在首字节检查时被拒绝 |
| ✅ 路径遍历 `sim` ID | 被白名单拒绝 |
| ✅ CSRF 令牌验证 | 所有 POST 在没有有效令牌时被阻止 |
| ✅ 热力图聚合所有主体 | 攻击面完整(Bug #1 修复) |
| ✅ 文件选择时自动上传 | 单操作 UX(Bug #2 修复) |
| ✅ 所有路由返回 200/302 | `/` · `/upload` · `/init_demo` · `/reset` · `/graph` · `/playbook` · `/intel` · `/api/export/json` · `/api/export/csv` |
| ✅ 所有安全头存在 | X-Frame-Options · CSP · HSTS · COOP · Permissions-Policy · Referrer-Policy · X-XSS-Protection |
| ✅ Cookie 加固 | HttpOnly + SameSite=Lax + Secure(当 `AEGIS_FORCE_HTTPS=1` 时) |
| ✅ 静态检查 | Python 编译清洁 · JS `node --check` 清洁 · 所有 JSON 可解析 |
| ✅ 最终端到端 | **38/38 通过 · 0 失败** |
| ✅ 对抗性安全测试 | **11/11 通过 · 0 失败** |
## 🛣️ 未来路线图
⭐ 如果这个项目帮助了你,给它一个星标 — 这真的很有帮助。
标签:Cloudflare, Flask, IAM, MITRE ATT&CK, NetworkX, Python, Tailwind CSS, Web报告查看器, 修复剧本, 凭证安全, 协议分析, 后端开发, 图遍历, 威胁情报, 安全态势评分, 安全运营, 开发者工具, 扫描框架, 数据展示, 无后门, 权限提升, 横向移动, 热力图, 私有化部署, 突变策略, 红队, 结构化查询, 编程规范, 自动化安全, 账户发现, 身份与访问管理, 防御规避, 风险分析