rojanstha621/Revulnera
GitHub: rojanstha621/Revulnera
混合架构的 Web 漏洞扫描平台,整合多款开源工具实现从资产侦察到安全检测的自动化流水线。
Stars: 0 | Forks: 0
# Revulnera - 安全侦察与网络分析平台
**Django REST + PostgreSQL + Django Channels WebSocket + Go Worker**
## 项目状态
✅ **子系统 1:用户管理** - 已完成
✅ **子系统 2:侦察** - 已完成
✅ **子系统 3:网络与服务器分析** - 已完成 *(刚刚实现!)*
## 架构概览
```
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ │ │ │ │ │
│ React Frontend │◄────►│ Django Backend │◄────►│ Go Worker │
│ │ WSS │ + Channels WS │ HTTP │ Scanner │
│ │ │ │ │ │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│ │
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ PostgreSQL │ │ External Tools │
│ Database │ │ - Subfinder │
│ │ │ - Nmap │
└─────────────────┘ │ - httpx │
└─────────────────┘
```
## 功能集
### 1. 用户管理 ✅
- JWT 认证
- 基于角色的访问控制 (Admin/User)
- 用户注册 & 登录
- 安全的密码处理
### 2. 侦察 ✅
- **子域名枚举**:Subfinder 集成
- **存活主机检测**:httpx 探测
- **端点发现**:Web 端点爬取
- **技术指纹识别**:Header & 内容分析
- **实时更新**:通过 WebSocket 流式传输结果
### 3. 网络与服务器分析 ✅ *最新!*
- **端口扫描**:带服务检测的 Nmap TCP connect 扫描
- **SSL/TLS 分析**:版本检测,弱加密套件识别
- **证书验证**:过期检查,颁发者验证
- **目录错误配置**:敏感路径检测 (.git, .env, 备份, 管理面板)
- **实时结果**:通过 WebSocket 分块流式传输
### 4. 性能改进 ✅ *已重构!*
- **并发主机探测**:使用 worker 池速度提升 10-50 倍
- **多 IP 支持**:IPv4 + IPv6 解析
- **HTTP 回退**:在没有 httpx 的情况下使用原生 Go 工作
- **增强的错误追踪**:详细的错误信息用于调试
- **生产就绪**:健壮的超时处理和错误恢复
📖 **参见**:[重构指南](./REFACTORING_GUIDE.md) | [快速开始](./QUICK_START_REFACTORED.md) | [摘要](./REFACTORING_SUMMARY.md)
## 快速开始
### 前置条件
- Python 3.11+
- Go 1.21+
- PostgreSQL 14+
- Node.js 18+ (用于前端)
- **Nmap** (用于网络分析)
### 安装
#### 1. 后端设置
```
cd backend
python -m venv env
source env/bin/activate # or .\env\Scripts\activate on Windows
pip install -r requirements.txt
# 在 settings.py 中配置数据库
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
```
#### 2. Go Worker 设置
```
cd scanner
go mod download
go run .
```
#### 3. 前端设置
```
cd frontend
npm install
npm run dev
```
### 首次扫描
1. **登录**到前端
2. 使用目标域名(例如 `example.com`)**创建扫描**
3. 通过 WebSocket **查看实时进度**
4. **查看结果**:
- 发现的子域名
- 找到的存活端点
- 检测到的开放端口
- TLS/SSL 配置
- 目录错误配置
## 网络分析详情
### 扫描什么?
对于侦察期间发现的每个**存活主机**:
#### 端口扫描
- 前 200 个最常见端口
- TCP connect 扫描(安全,非侵入式)
- 服务版本检测
- Banner 抓取
- **示例输出**:
- `80/tcp open http nginx 1.18.0`
- `443/tcp open https nginx 1.18.0`
- `22/tcp open ssh OpenSSH 8.2p1`
#### TLS/SSL 分析
- 测试 TLS 1.0, 1.1, 1.2, 1.3 支持
- 识别弱版本 (TLS 1.0, 1.1)
- 证书验证:
- 过期日期
- 颁发者
- 有效期状态
- **示例问题**:
- `weak_tls_version_10`
- `certificate_expiring_soon`
- `certificate_expired`
#### 目录检查
检查常见的错误配置:
- `.git/` 目录暴露
- `.env` 文件可访问性
- 备份目录 (`/backup/`, `/backups/`)
- 管理面板 (`/admin/`)
- API 文档 (`/swagger`, `/api-docs`)
- 服务器状态页 (`/server-status`, `/actuator`)
**示例发现**:
- `/.git/ → 200 OK → sensitive_file_exposed`
- `/.env → 200 OK → sensitive_file_exposed`
- `/admin/ → 200 OK → admin_panel_accessible`
### 安全与约束
✅ **仅检测** - 不进行利用
✅ **非侵入式扫描**:
- TCP connect(非 SYN 扫描)
- 有限的端口范围(200 个端口)
- 合理的超时设置
- 对目录仅使用 GET 请求
✅ **可配置的并发**:
- 10 个 worker goroutines(可调整)
- 强制执行单主机超时
- 优雅的错误处理
## API 端点
### 用户认证
- `POST /api/accounts/register/` - 用户注册
- `POST /api/accounts/login/` - JWT 登录
- `GET /api/accounts/me/` - 当前用户配置
### 扫描管理
- `POST /api/recon/scans/start/` - 创建新扫描
- `GET /api/recon/user/scans/` - 列出用户的扫描
- `GET /api/recon/user/scans/{id}/` - 带结果的扫描详情
### 网络分析 (Worker 端点)
- `POST /api/recon/scans/{id}/network/ports/ingest/` - 端口发现
- `POST /api/recon/scans/{id}/network/tls/ingest/` - TLS 结果
- `POST /api/recon/scans/{id}/network/dirs/ingest/` - 目录发现
### WebSocket
- `ws://localhost:8000/ws/scans/` - 实时扫描更新
- 消息类型:
- `scan_status` - 扫描生命周期事件
- `subdomains_chunk` - 子域名发现
- `endpoints_chunk` - 端点发现
- `network_ports_chunk` - 端口扫描结果 *最新*
- `network_tls_result` - TLS 分析 *最新*
- `network_dirs_chunk` - 目录发现 *最新*
## 数据库 Schema
### 核心模型
- **Scan**:带有状态跟踪的扫描任务
- **Subdomain**:发现的子域名及其 IP 和存活状态
- **Endpoint**:发现的 Web 端点及其指纹
### 网络分析模型 *最新*
- **PortScanFinding**:带有服务详情的开放端口
- **TLSScanResult**:每个主机的 TLS/SSL 配置
- **DirectoryFinding**:目录错误配置
## 开发
### 运行测试
```
# Django 测试
cd backend
python manage.py test
# Go 测试
cd scanner
go test ./... -v
```
### 代码结构
```
revulnera/
├── backend/ # Django REST API
│ ├── accounts/ # User management
│ ├── reconscan/ # Scan orchestration & results
│ └── revulnera_project/ # Settings
├── scanner/ # Go worker
│ ├── recon/ # Subdomain enumeration
│ ├── endpoints/ # Endpoint discovery
│ ├── network/ # Network analysis (ports, TLS, dirs)
│ └── main.go # HTTP server
├── frontend/ # React UI
└── docs/ # Documentation
```
## 近期实现:网络分析
**日期**:2026 年 1 月
**文件修改**:8 个文件
**文件创建**:3 个文件
### 所做的更改
#### Django Backend
- ✅ 添加了 3 个新模型(`PortScanFinding`, `TLSScanResult`, `DirectoryFinding`)
- ✅ 创建了 3 个序列化器
- ✅ 实现了 3 个摄入 API 端点
- ✅ 添加了网络结果的 WebSocket 广播
- ✅ 在 Django admin 中注册了模型
- ✅ 创建了迁移 `0002_network_analysis_models.py`
#### Go Worker
- ✅ 将网络分析集成到扫描流水线中
- ✅ 添加了并发主机处理(10 个 worker)
- ✅ 实现了分块结果 POST 提交
- ✅ 添加了错误处理和弹性机制
#### 文档
- 📄 `NETWORK_ANALYSIS_IMPLEMENTATION.md` - 完整的技术文档
- 📄 `QUICK_START_NETWORK_ANALYSIS.md` - 设置和测试指南
- 📄 `setup_network_analysis.sh` - 自动化设置脚本
### 迁移命令
```
cd backend
python manage.py migrate reconscan
```
预期输出:
```
Applying reconscan.0002_network_analysis_models... OK
```
## 性能
### 典型扫描时间(100 个子域名)
- **子域名枚举**:1-2 分钟
- **端点发现**:3-5 分钟
- **网络分析**:10-15 分钟
- 端口扫描:~5 分钟(200 个端口 × 100 个主机)
- TLS 检查:~3 分钟
- 目录检查:~7 分钟
### 优化
- 并发 worker(10 个 goroutines)
- 批量数据库插入
- 分块 WebSocket 流式传输
- 强制执行超时
## 安全注意事项
### 认证
- 带有过期时间的 JWT token
- 密码哈希 (Django PBKDF2)
- CORS 配置
- CSRF 保护
### 扫描道德
- ⚠️ **仅扫描授权目标**
- ⚠️ **遵守 robots.txt 和速率限制**
- ⚠️ **不进行利用或攻击**
- ⚠️ **仅限检测的方法**
### 数据保护
- 用户隔离(扫描所有权)
- 数据库约束
- 输入验证
- 参数化查询
## 故障排除
### 常见问题
#### "未找到 Nmap"
```
sudo apt-get install nmap # Ubuntu/Debian
brew install nmap # macOS
```
#### "未发现存活主机"
- 检查目标域名是否有效
- 验证 DNS 解析
- 确保网络连接正常
#### "Migration 已应用"
- 如果重新运行迁移,这是正常的
- 检查:`python manage.py showmigrations reconscan`
#### WebSocket 未连接
- 确保 Django Channels 正在运行
- 检查 settings 中的 ALLOWED_HOSTS
- 验证 Redis/Channels 层配置
## 未来路线图
- [ ] 与 CVE 数据库的漏洞关联
- [ ] 自动化调度与定期重新扫描
- [ ] PDF/CSV 报告生成
- [ ] 用于目录扫描的自定义字典
- [ ] 高级 TLS 加密套件分析
- [ ] HTTP 安全头分析
- [ ] 多租户支持
- [ ] 邮件通知
## 贡献
这是一个安全研究工具。贡献应:
1. 保持非侵入式的扫描方式
2. 为新功能添加测试
3. 更新文档
4. 遵循现有的代码模式
## 许可证
[在此添加您的许可证]
## 鸣谢
- **Subfinder**:OWASP Amass 的子域名枚举替代方案
- **Nmap**:网络探索和安全审计
- **httpx**:快速的 HTTP 工具包
- **Django**:高级 Python Web 框架
- **Go**:高效的并发 worker 实现
## 支持
如有问题、疑问或功能请求:
- 查看 `docs/NETWORK_ANALYSIS_IMPLEMENTATION.md` 获取详细文档
- 查看 `docs/QUICK_START_NETWORK_ANALYSIS.md` 获取设置帮助
- 查看 Django 日志:`python manage.py runserver` 输出
- 查看 Go 日志:Worker 控制台输出
**最后更新**:2026 年 1 月 27 日
**版本**:1.0.0 (网络分析完成)
标签:CTI, DevSecOps, Django, Django Channels, Django REST Framework, Go, Golang, httpx, JWT认证, LFI本地文件包含, Nmap, OWASP Top 10, PostgreSQL, Python, React, Ruby工具, Syscalls, WebSocket, 上游代理, 依赖分析, 加密, 安全报告, 安全测试, 安全编程, 密码管理, 开发安全, 异步任务, 微服务架构, 插件系统, 攻击性安全, 无后门, 无线安全, 日志审计, 测试用例, 混合扫描, 漏洞扫描器, 结构化查询, 网络安全, 自动化安全, 自定义脚本, 自定义脚本, 虚拟驱动器, 运行时操纵, 逆向工具, 隐私保护