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 仪表板

Aegis-IAM Dashboard Banner

Python Flask NetworkX Tailwind MITRE

ATT&CK Cloud Tests Status License

Stars Forks Issues

## 📋 目录 | # | 章节 | |---|---| | 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) | ## 🎯 项目概述

**Aegis-IAM 仪表板**是一款企业级 IAM 风险分析 HUD,专为需要快速、直观地获取真实世界身份导出文件二次分析结果的蓝队设计——无需搭建完整的数据管道。 只需导入任何 AWS `aws iam get-account-authorization-details` JSON 文件,引擎即可立即返回: - **权限提升链** — 通过图遍历用户 → 角色 → 管理员路径,并进行严重程度评分。 - **过度授权的主体** — 检测通配符、管理员等价和危险的 IAM/STS 动词操作。 - **职责分离冲突** — 六对冲突矩阵标记审计绕过和恶意信任条件。 - **MITRE ATT&CK 热力图** — 57 个动词映射到全部 10 个 ATT&CK 企业战术。 - **综合态势评分** — 0–100 分,带字母等级(A+ → F)及透明的因素分解。 - **动态修复手册** — 自动生成的 CLI 补丁和每个发现项的战略指导。 整个 HUD 是单二进制 Flask + Jinja 应用,前端使用 Tailwind CDN。无构建步骤、无数据库、无云依赖。
| 指标 | 数值 | |---|---| | 🗺️ **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 · 无数据库 · 可离线运行 |
## 💡 核心思路

大多数云安全工具都很笨重:代理、摄取管道、查询语言、付费 SaaS 仪表板。**事件响应分类的前 5 分钟**几乎不需要这些——响应者只想指向一个 IAM JSON 转储并询问:
| 问题 | Aegis 答案 | |---|---| | 谁可以从哪里成为管理员? | **权限提升链** 模块 | | 谁已经拥有过大的权限? | **过度授权的主体** 模块 | | 谁可以更改*并*隐藏策略状态? | **职责分离冲突** 模块 | | 这暴露了哪些 ATT&CK 技术? | **MITRE 热力图** 模块 | | 这个账户暴露程度如何,用一个数字表示? | **态势评分引擎** | | 我现在*该怎么做*来修复? | **动态手册** 模块 |
Aegis 将 IAM 导出作为单次分析的唯一真实来源。无状态、自包含、可离线运行。作为 SOC 分析师的便携扫描器、面试实战题、安全实验实验室或周五下午的快速审计都很有用。 ## 🔁 完整处理流程

``` ┌──────────────────┐ ┌─────────────────┐ ┌────────────────────┐ ┌──────────────────┐ │ IAM JSON Upload │ → │ Schema Detect │ → │ Normalized Model │ → │ Graph Builder │ │ (AWS / Simple) │ │ + Validation │ │ (users / roles / │ │ (NetworkX) │ │ ≤ 2 MB │ │ │ │ actions / trust) │ │ │ └──────────────────┘ └─────────────────┘ └────────────────────┘ └────────┬─────────┘ │ ┌─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌────────────────────────────────────────────────────────────────────────────────────────┐ │ ANALYSIS LAYER — runs in parallel for every loaded dataset │ ├────────────────────────────────────────────────────────────────────────────────────────┤ │ • Escalation paths (DiGraph traversal: user → role → admin, severity by edge depth) │ │ • Over-privileged detection (wildcards, admin-equivalent ARNs, dangerous verbs) │ │ • SoD conflict matrix (six write+read pairs out of the box) │ │ • MITRE ATT&CK tag resolution (case-insensitive, multi-tactic decomposition) │ │ • Posture scoring (weighted negative deltas, A+ to F grading, factor breakdown) │ │ • Heatmap aggregation (per-tactic technique rollup with principal counts) │ └────────────────────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────┐ ┌─────────────────┐ ┌────────────────────┐ ┌──────────────────┐ │ Cyberpunk HUD │ ⇄ │ Detail Drawer │ ⇄ │ Cmd+K Palette │ ⇄ │ PDF / JSON / CSV│ │ (Tailwind+SVG) │ │ (per-finding) │ │ (fuzzy launcher) │ │ Export │ └──────────────────┘ └─────────────────┘ └────────────────────┘ └──────────────────┘ ``` ## ✨ 主要功能

| 模块 | 功能 | |---|---| | 🎯 **态势评分引擎** | 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 覆盖范围

映射中的每个 IAM/STS 动词都标记有一个或多个 ATT&CK 战术。复合战术(例如 `Lateral Movement / Privilege Escalation / Persistence`)在热力图中分解到所有匹配的战术列。
| 战术 | 覆盖范围 | 示例权限 | |---|:---:|---| | **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 企业战术**
## 📊 态势评分引擎

态势评分是一个透明、确定的综合评分。评分从 **100** 开始,每个检测到的风险减去加权增量:
| 分数范围 | 等级 | 状态 | |:---:|:---:|:---:| | 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` | 关闭面板 / 抽屉 |
## 📁 项目结构

``` Cyber-Security-Aegis-IAM-Dashboard/ │ ├── 🐍 app.py ← Flask backend — ingestion · analysis · scoring · exports ├── 🗺️ mitre_map.json ← Permission → MITRE technique map (57 entries) ├── 📋 requirements.txt ← Python dependencies ├── 📖 README.md ← You are here │ ├── 📊 data/ │ ├── demo_aws_auth_details.json ← Demo dataset (Initialize Simulation) │ └── sample_aws_realworld.json ← Realistic AWS fixture (5 users · 4 roles) │ ├── 🎨 static/ │ ├── css/hud.css ← Cyberpunk component layer (920 lines) │ └── js/hud.js ← Particles · drawer · palette · toasts · charts (655 lines) │ ├── 🖼️ templates/ │ ├── base.html ← Tailwind CDN · fonts · particles · overlay containers │ ├── index.html ← Main HUD (posture · heatmap · stats · findings) │ ├── graph.html ← vis-network IAM relationship graph │ ├── playbook.html ← Per-finding remediation playbooks │ └── intel_lab.html ← AWS / Azure / GCP export instructions │ └── 📁 uploads/ ← Runtime: user-uploaded JSON (auto-cleaned) ``` ## ⚙️ 安装说明

### 前置条件 ``` Python 3.9+ pip A modern browser (Chrome 111+ · Firefox 113+ · Safari 16.2+ · Edge 111+) ``` ### 快速开始 ``` # 1. Clone git clone https://github.com/nishu2402/Cyber-Security-Aegis-IAM-Dashboard.git cd Cyber-Security-Aegis-IAM-Dashboard # 2. Virtual environment python -m venv venv # Windows venv\Scripts\activate # macOS / Linux source venv/bin/activate # 3. Install dependencies pip install -r requirements.txt # 4. Run python app.py ``` 在浏览器中打开 **http://127.0.0.1:5000**。
📋 完整 requirements.txt ``` flask>=3.0.0 werkzeug>=3.0.0 networkx>=3.2 gunicorn>=21.2.0 ```
## 🚀 使用指南

### 1 — 预建模拟场景(即时演示) 仪表板附带 **7 个预建模拟场景**。点击*模拟库*部分中的任意卡片即可立即加载。
| 云 | 导出命令 | |---|---| | **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 ``` ## ☁️ 说明

该应用是标准 WSGI Flask 应用 — 可以在任何运行 Python 的地方运行。 ### Render / Railway / Fly.io / Heroku ``` # Procfile web: gunicorn app:app ``` 在生产环境中将环境变量 `AEGIS_SECRET_KEY` 设置为长随机字符串。 ### Docker ``` FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt gunicorn COPY . . ENV PORT=5000 EXPOSE 5000 CMD ["gunicorn", "-b", "0.0.0.0:5000", "app:app"] ``` ``` docker build -t aegis-iam . docker run -p 5000:5000 -e AEGIS_SECRET_KEY=$(openssl rand -hex 32) aegis-iam ``` ## 🔒 安全说明

| 控制措施 | 实现方式 | |---|---| | 🛡️ **输入验证** | 严格 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 失败** | ## 🛣️ 未来路线图

| 优先级 | 改进 | 预期影响 | |---|---|---| | 🔴 高 | **原生 Azure RBAC 导入** — 直接解析 `az role assignment list` 无需规范化适配器 | 无需预转换即可进行完整 Azure IAM 分析 | | 🔴 高 | **原生 GCP IAM 导入** — 完整支持 `gcloud projects get-iam-policy` 架构 | GCP 环境的多云对等 | | 🟠 中 | **行为基线模式** — 将今天的导出与保存的快照进行差异比较 | 检测随时间的权限漂移 — 持续合规的必要功能 | | 🟠 中 | **CI/CD GitHub Action** — 自动使引入态势等级回归的 PR 失败 | 将 IAM 安全左移到开发者工作流 | | 🟠 中 | **CloudTrail 集成** — 将最近 30 天的事件附加到每个发现项 | 证据支持的权限提升链 — 而非仅策略分析 | | 🟡 低 | **OPA / Rego 策略导出** — 从检测到的过度授权发现项生成防护策略 | 作为代码的自动修复防护 | | 🟡 低 | **pytest 测试套件** — 将手动冒烟测试转换为可重现的 CI 测试 | 每次提交时的自动化回归测试 | | 🟡 低 | **Helm Chart** — 一级 Kubernetes 部署 | 企业级编排部署 | | 🟡 低 | **OIDC SSO 门控** — 在企业身份后保护仪表板 | 共享 SOC 环境的生产级认证 | | 🟡 低 | **i18n** — UI 字符串提取用于非英语部署 | 全球蓝队可访问性 | ## ⚠️ 免责声明

## 📜 许可证

根据 **MIT 许可证**分发。请参阅 `LICENSE` 获取完整文本。 ``` Owned and Developed by Nisarg Chasmawala (HEAVEN), Jatin Kumar, and Santhakumar Parivalla. © 2026 All Rights Reserved. ```

⭐ 如果这个项目帮助了你,给它一个星标 — 这真的很有帮助。

Stars Forks Watchers

标签:Cloudflare, Flask, IAM, MITRE ATT&CK, NetworkX, Python, Tailwind CSS, Web报告查看器, 修复剧本, 凭证安全, 协议分析, 后端开发, 图遍历, 威胁情报, 安全态势评分, 安全运营, 开发者工具, 扫描框架, 数据展示, 无后门, 权限提升, 横向移动, 热力图, 私有化部署, 突变策略, 红队, 结构化查询, 编程规范, 自动化安全, 账户发现, 身份与访问管理, 防御规避, 风险分析