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, 攻击路径发现, 无后门, 权限图分析, 权限提升分析, 模拟器, 渗透测试工具, 特权检测, 网络代理, 网络安全, 自动化攻击, 访问控制列表滥用, 请求拦截, 逆向工具, 速率限制处理, 错误配置检测, 隐私保护