rahul07890-dev/LURKHOUND

GitHub: rahul07890-dev/LURKHOUND

一款面向 Active Directory 的攻击路径发现与安全审计工具,通过 LDAPS 枚举构建权限图,自动检测错误配置并生成 MITRE ATT&CK 映射的修复建议。

Stars: 1 | Forks: 0

# LURKHOUND **Active Directory 攻击路径发现映射器** 一款基于 Windows 托管的 Web 安全分析仪表板,用于入侵后的 AD 侦察。LURKHOUND 执行基于 LDAP 的枚举,构建权限图,发现权限提升攻击路径,检测错误配置,并生成 PowerShell 修复指南,所有内容均标记有 MITRE ATT&CK 技术。 ## 主要特性 - **LDAP 枚举** - 通过 LDAPS(端口 636)枚举用户、组、计算机、OU 和 ACL - **攻击路径发现** - BFS/DFS 引擎寻找通往 Domain Admin 的权限提升链 - **错误配置检测** - ACL 滥用、DA 蔓延、Kerberoastable 账户、嵌套组滥用 - **交互式仪表板** - 带有风险仪表盘、图表和实时搜索的暗色玻璃拟态 UI - **图形可视化** - 由 Cytoscape.js 驱动的权限图,节点按严重性着色 - **修复引擎** - 为每个发现提供可直接复制使用的 PowerShell 命令 - **MITRE ATT&CK 映射** - 涵盖所有发现和攻击路径的 30 个唯一技术 ID - **扫描历史** - 随时间跟踪并比较枚举结果 - **BloodHound 导入/导出** - 导入 BloodHound/SharpHound 的 JSON 导出文件进行分析 - **最短路径计算器** - 查找任意两个 AD 对象之间的最短权限提升路径 - **发现状态跟踪** - 跟踪修复状态(open/acknowledged/in_progress/fixed/accepted_risk) ## 项目结构 ``` LURKHOUND/ ├── backend/ │ ├── main.py # FastAPI application & REST API │ ├── config.py # Environment config loader (.env) │ ├── auth.py # LDAPS authentication (port 636, NTLM) │ ├── ldap_enum.py # LDAP enumeration (users, groups, computers, ACLs) │ ├── normalizer.py # Data normalization & deduplication │ ├── graph_builder.py # NetworkX permission graph construction │ ├── attack_paths.py # BFS/DFS attack path discovery engine │ ├── misconfig_detector.py # Misconfiguration detection module │ ├── risk.py # Risk score calculation engine │ ├── remediation.py # PowerShell remediation generator │ ├── mitre_mapping.py # MITRE ATT&CK technique mapping │ ├── bloodhound_io.py # BloodHound JSON import/export │ ├── report_generator.py # PDF/HTML report generation │ ├── scan_history.py # Scan history tracking (SQLite) │ └── models.py # Pydantic request/response models │ ├── frontend-next/ # Primary UI (Next.js 16 + TypeScript) │ ├── src/ │ │ ├── app/ │ │ │ ├── page.tsx # Landing / login page │ │ │ ├── layout.tsx # Root layout │ │ │ ├── globals.css # Global styles │ │ │ └── dashboard/ │ │ │ ├── layout.tsx # Dashboard shell with sidebar │ │ │ ├── overview/ # Domain overview & risk score │ │ │ ├── objects/ # Object explorer (users/groups/computers) │ │ │ ├── paths/ # Attack path viewer │ │ │ ├── graph/ # Permission graph visualization │ │ │ ├── findings/ # Findings & remediation panel │ │ │ ├── ou-tree/ # OU tree view │ │ │ └── history/ # Scan history & comparisons │ │ ├── components/ │ │ │ ├── Sidebar.tsx # Navigation sidebar │ │ │ ├── SearchModal.tsx # Global search (Ctrl+K) │ │ │ ├── ObjectDrawer.tsx # Object detail slide-out drawer │ │ │ ├── NotificationBell.tsx # Real-time notifications │ │ │ ├── OnboardingTour.tsx # First-run guided tour │ │ │ ├── AboutModal.tsx # About / credits modal │ │ │ ├── PantherIcon.tsx # LURKHOUND branding icon │ │ │ ├── ErrorBoundary.tsx # Error handling wrapper │ │ │ ├── SkeletonLoader.tsx # Loading state skeletons │ │ │ └── Toast.tsx # Toast notifications │ │ ├── context/ │ │ │ └── SessionContext.tsx # Session state management │ │ ├── lib/ │ │ │ └── api.ts # API client layer │ │ └── types/ │ │ └── index.ts # TypeScript type definitions │ ├── tailwind.config.js │ ├── next.config.ts │ ├── tsconfig.json │ └── package.json │ ├── frontend/ # ⚠️ DEPRECATED — Legacy UI (HTML/CSS/JS) │ # Use frontend-next/ instead. │ ├── sample_data/ │ └── marvel_sample.json # Sample MARVEL.local test dataset │ ├── tests/ # Pytest test suite │ ├── conftest.py │ ├── test_attack_paths.py │ ├── test_remediation.py │ └── test_risk.py │ ├── data/ # Runtime data (gitignored) │ └── scan_history.db # SQLite scan history database │ ├── .env # Environment config (gitignored) ├── .gitignore ├── requirements.txt # Python dependencies ├── Dockerfile # Container deployment ├── docker-compose.yml # Multi-service deployment ├── start.bat # Windows launcher (CMD) ├── start.ps1 # Windows launcher (PowerShell) ├── start.sh # Linux/macOS launcher └── README.md ``` ## 前置条件 | 需求 | 版本 | |---|---| | Python | 3.10+ | | Node.js | 18+(用于 Next.js 前端) | | pip | 最新版 | | 网络访问 | 连接到您的 Domain Controller | | LDAPS(端口 636) | 必须在 DC 上启用 | | 有效的域账户 | 只需对 AD 的读取权限即可 | ## 设置与运行 ### 选项 A:Docker(推荐) ``` docker-compose up --build ``` 这将同时启动后端 API(端口 8000)和 Next.js 前端(端口 3000)。 ### 选项 B:快速启动 使用附带的启动脚本: ``` # PowerShell .\start.ps1 ``` ``` :: CMD start.bat ``` ### 选项 C:快速启动 ``` chmod +x start.sh ./start.sh ``` ### 选项 D:手动设置 #### 1. 安装 Python 依赖 ``` cd LURKHOUND pip install -r requirements.txt ``` #### 2. 安装前端依赖 ``` cd frontend-next npm install ``` #### 3. 配置环境 在项目根目录中创建一个 `.env` 文件(参见 `.env.example`): ``` API_PORT=8000 LOG_LEVEL=info SESSION_TTL_MINUTES=30 CORS_ORIGINS=http://localhost:3000,http://127.0.0.1:3000,http://localhost:8000,http://127.0.0.1:8000 LDAP_TLS_VERIFY=false ``` #### 4. 启动后端 ``` cd backend python main.py ``` 服务器在 `http://localhost:8000` 启动 #### 5. 启动前端 ``` cd frontend-next npm run dev ``` 仪表板在 `http://localhost:3000` 打开 ### 6. 连接到您的域 填写登录表单: - **DC IP:** 您的 Domain Controller IP - **Domain:** 您的 AD 域(例如,`MARVEL.local`) - **Username:** 具有读取权限的域账户 - **Password:** 域账户密码 - **LDAPS:** 已启用(端口 636) 点击 **Connect & Enumerate** —— 系统将进行身份验证,枚举所有 AD 对象,构建权限图,并显示结果。 ## 安全设计 | 原则 | 实现 | |---|---| | 零凭据存储 | 身份验证后立即清除密码 | | 仅限内存 | 不向数据库写入凭据 | | LDAPS 加密 | 所有 AD 通信均通过 TLS(端口 636)进行 | | 输入验证 | 所有 API 输入均经过清理;对 DC IP 进行 SSRF 防护 | | 基于会话 | 通过 Authorization 头传递 Session token,绝不出现在 URL 路径中 | | 速率限制 | 身份验证端点设有速率限制,以防止暴力破解 | ## 仪表板页面 ### 1. 域概览 - 总用户 / 组 / 计算机 / 特权账户数量 - 风险评分仪表盘(0–100) - Domain Admins 列表 - 随时间变化的风险趋势图 - 前 5 个关键发现预览 - 跨所有对象的快速搜索 ### 2. 对象浏览器 - 浏览用户、组、计算机 - 过滤和搜索对象 - 详细视图:成员身份、权限、SPN - 滑出式抽屉,带有与发现和攻击路径的交叉引用 ### 3. 攻击路径查看器 - 通过 Cytoscape.js 进行可视化图形渲染 - 逐步的链条:`User → [MemberOf] → Group → [AdminTo] → DC` - 严重性分类(Critical / High / Medium / Low) - 按严重性和路径类型过滤 - 每条路径的 MITRE ATT&CK 技术标签 ### 4. 权限图 - 完整的交互式权限图 - 按严重性着色的节点和边 - 缩放、平移和节点选择 - 孤立节点过滤 ### 5. 发现与修复 - 带有严重性徽章的可展开发现卡片 - 每个发现的影响和描述 - 逐步的修复指导 - 可直接复制的 PowerShell 修复命令 - MITRE ATT&CK 标签 - 发现状态跟踪(open/acknowledged/in_progress/fixed/accepted_risk) ### 6. OU 树视图 - 分层的 Organizational Unit 浏览器 - 折叠/展开 OU 分支 - 每个 OU 的对象计数 ### 7. 扫描历史 - 历史扫描结果比较 - 跟踪风险评分随时间的变化 - 扫描之间的并排对比差异 ## 检测覆盖范围 | 类别 | 检测项 | |---|---| | **ACL 滥用** | GenericAll, WriteDACL, WriteOwner, GenericWrite | | **权限提升** | User → Group → Domain Admin 路径 | | **横向移动** | AdminTo 关系,本地管理员权限 | | **Domain Admin 蔓延** | 过多的 DA 组成员身份 | | **嵌套组滥用** | 权限过高的嵌套组链 | | **凭据风险** | Kerberoastable 管理员账户,密码永不过期 | | **委派** | 无约束、有约束和 RBCD 委派滥用 | | **GPO 滥用** | 对链接到特权 OU 的 GPO 的写入权限 | | **信任风险** | 信任关系上禁用了 SID 过滤 | ## MITRE ATT&CK 覆盖范围 所有检测项共映射了 30 个唯一技术 ID: | 技术 | 名称 | |---|---| | T1003 | OS Credential Dumping | | T1003.006 | DCSync | | T1021.002 | Remote Services: SMB/Windows Admin Shares | | T1069.002 | Permission Groups Discovery: Domain Groups | | T1078.002 | Valid Accounts: Domain Accounts | | T1087.002 | Account Discovery: Domain Account | | T1098 | Account Manipulation | | T1110 | Brute Force | | T1187 | Forced Authentication | | T1207 | Rogue Domain Controller | | T1222 | File and Directory Permissions Modification | | T1484 | Domain Policy Modification | | T1484.001 | Group Policy Modification | | T1550.002 | Use Alternate Authentication Material: Pass the Hash | | T1550.003 | Use Alternate Authentication Material: Pass the Ticket | | T1558 | Steal or Forge Kerberos Tickets | | T1558.003 | Kerberoasting | ## 使用样本数据测试 `sample_data/marvel_sample.json` 中提供了一个模拟的 MARVEL.local 数据集,其中包含: - 7 个用户(包括 Tony Stark, Natasha Romanoff, Peter Parker) - 10 个组(Domain Admins, AVENGERS-IT, HelpDesk 等) - 3 台计算机(DC, WORKSTATION01, WORKSTATION02) - 4 条 ACL 条目(WriteDACL, GenericAll, GenericWrite, WriteOwner) - 用于演示目的的故意错误配置 您还可以通过 `/api/import/bloodhound` 端点导入 BloodHound 的 JSON 导出文件。 ## REST API 参考 | 端点 | 方法 | 描述 | |---|---|---| | `/api/authenticate` | POST | 身份验证 & 枚举 AD | | `/api/summary/{sid}` | GET | 域概览摘要 | | `/api/users/{sid}` | GET | 所有用户对象 | | `/api/groups/{sid}` | GET | 所有组对象 | | `/api/computers/{sid}` | GET | 所有计算机对象 | | `/api/acls/{sid}` | GET | 所有 ACL 关系 | | `/api/attack-paths/{sid}` | GET | 带有 MITRE 标签的攻击路径 | | `/api/findings/{sid}` | GET | 错误配置 + 修复建议 | | `/api/graph/{sid}` | GET | 权限图(节点/边) | | `/api/data/{sid}` | GET | 在一个响应中返回所有会话数据 | | `/api/path/{sid}?source=X&target=Y` | GET | 对象之间的最短路径 | | `/api/finding-status/{sid}` | GET/POST | 发现修复状态 | | `/api/object/{sid}/{name}` | GET | 单个对象详情 | | `/api/report/{sid}?format=html` | GET | 生成安全报告 | | `/api/scans` | GET | 列出所有扫描记录 | | `/api/scans/{id}` | GET | 获取特定扫描 | | `/api/scans/diff/{id1}/{id2}` | GET | 比较两次扫描 | | `/api/export/bloodhound/{sid}` | GET | 导出 BloodHound JSON | | `/api/import/bloodhound` | POST | 导入 BloodHound JSON | | `/api/mitre-techniques` | GET | MITRE 技术查找 | | `/api/logout/{sid}` | POST | 清除会话 | | `/ws/enumerate` | WebSocket | 实时枚举进度 | ## 架构 ``` ┌──────────────────────────────────────────────────────────┐ │ Browser (Client) │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Next.js 16 Frontend (TypeScript + Tailwind CSS) │ │ │ │ ── Landing Page ── Dashboard ── Graph Viewer ── │ │ │ └────────────────────────┬────────────────────────────┘ │ └───────────────────────────┼──────────────────────────────┘ │ REST API (JSON) + WebSocket ┌───────────────────────────┼──────────────────────────────┐ │ FastAPI Backend │ │ ┌────────────┐ ┌────────────────┐ ┌───────────────┐ │ │ │ auth.py │ │ ldap_enum.py │ │ normalizer.py │ │ │ └─────┬──────┘ └───────┬────────┘ └──────┬────────┘ │ │ │ │ │ │ │ ┌─────▼─────────────────▼───────────────────▼────────┐ │ │ │ graph_builder.py (NetworkX) │ │ │ └─────────────────────┬──────────────────────────────┘ │ │ │ │ │ ┌─────────────────────▼──────────────────────────────┐ │ │ │ attack_paths.py │ misconfig_detector.py │ risk.py │ │ │ └─────────────────────┬──────────────────────────────┘ │ │ │ │ │ ┌─────────────────────▼──────────────────────────────┐ │ │ │ remediation.py │ mitre_mapping.py │ report_gen.py │ │ │ └────────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────┘ │ LDAPS (636) ┌───────────▼───────────┐ │ Domain Controller │ │ Active Directory │ └───────────────────────┘ ``` ## 已知限制 - **单线程管道:** 枚举同步运行。每个服务器实例一次只能执行一个枚举。对于大型 AD(1,000+ 用户),枚举可能需要 30–60 秒。 - **内存会话:** 每个会话在内存中存储完整的枚举结果。具有大量 ACL 的大型 AD 可能会消耗大量 RAM。 - **实验室规模验证:** 性能指标是针对 7 个用户的 MARVEL.local 环境进行验证的。尚未执行企业级(10,000+ 对象)验证。 - **无多域/林支持:** 目前支持单域枚举。 - **平台依赖:** 在 Windows 上通过 weasyprint 导出 PDF 可能会遇到 GTK 依赖问题(提供了 xhtml2pdf 备用方案)。 ## 重要说明 - **此工具不会执行:** LLMNR 投毒、SMB 中继、NTLM 中继或哈希破解 - **起始假设:** 已拥有有效的域凭据 - **LDAPS 证书:** 该工具在实验室环境中接受自签名证书(在生产环境中请设置 `LDAP_TLS_VERIFY=true`) - **范围:** 专为中小型 AD 环境(最多约 500 个对象)设计 - **平台:** 可在 Windows 和 Linux 上运行;使用 Python 3.11 进行了测试 ## 技术栈 | 层级 | 技术 | |---|---| | **后端** | Python 3.11, FastAPI, Uvicorn | | **AD 通信** | ldap3 (LDAPS / NTLM) | | **图引擎** | NetworkX | | **前端** | Next.js 16, TypeScript, Tailwind CSS | | **可视化** | Cytoscape.js | | **数据模型** | Pydantic v2 | | **数据库** | SQLite(仅用于扫描历史) | | **测试** | pytest | | **容器化** | Docker | ## 许可证 本项目基于 [MIT 许可证](LICENSE) 授权。

LURKHOUND — 嗅探出您的 Active Directory 中的每一条攻击路径。

标签:Active Directory, AD域安全, ATT&CK映射, AV绕过, BloodHound, CSV导出, Cytoscape.js, D3.js, FastAPI, Kerberoasting攻击, LDAP枚举, Plaso, PowerShell自动化修复, Python, SMB, TypeScript, Web安全仪表板, 代码生成, 后渗透分析, 图可视化, 域渗透测试, 安全合规, 安全插件, 安全防御 remediation, 攻击路径发现, 无后门, 权限图分析, 权限提升分析, 模拟器, 渗透测试工具, 特权检测, 网络代理, 网络安全, 自动化攻击, 访问控制列表滥用, 请求拦截, 逆向工具, 速率限制处理, 错误配置检测, 隐私保护