adeelcybersec/forensight-dfir
GitHub: adeelcybersec/forensight-dfir
ForenSight DFIR 是一个集成了机器学习和威胁情报的自动化数字取证与事件响应平台,旨在简化安全运营和事件处理流程。
Stars: 0 | Forks: 0
# ForenSight DFIR数字取证事件响应平台
自动化数字取证事件响应平台
**FastAPI · Streamlit · SQLite · IsolationForest ML**
## 快速开始
```
pip install -r requirements.txt
python start.py
```
| 服务 | URL |
|-----------|-----------------------------|
| 仪表板 | http://localhost:8501 |
| API | http://127.0.0.1:8000 |
| API 文档 | http://127.0.0.1:8000/docs |
## 手动启动(两个终端)
```
# 终端 1 — FastAPI 后端
uvicorn app.main:app --host 127.0.0.1 --port 8000
# 终端 2 — Streamlit 仪表盘
streamlit run app/dashboard/streamlit_app.py --server.port 8501
```
## 配置(.env)
| 变量 | 默认值 | 描述 |
|---|---|---|
| `PACKET_CAPTURE_INTERFACE` | `Wi-Fi` | 接口名称 — Windows上为 `Wi-Fi` / `Ethernet`,Linux上为 `eth0` / `wlan0` |
| `PACKET_CAPTURE_LIMIT` | `200` | 每个检测周期捕获的数据包数量 |
| `ML_THRESHOLD` | `0.60` | 异常分数 (0–1),高于此分数的 ML 事件将成为警报 |
| `MONITOR_INTERVAL_SECONDS` | `15` | 实时监控的运行频率 |
| `ACTIVE_RESPONSE` | `false` | `true` = 实际在防火墙阻止IP(需要管理员/root权限) |
| `SLACK_WEBHOOK_URL` | _(空)_ | 用于高/危急警报通知的 Slack Webhook |
| `THREAT_INTEL_REFRESH_HOURS` | `6` | 实时情报源刷新间隔 (0 = 禁用) |
| `ABUSEIPDB_API_KEY` | _(空)_ | 来自 https://www.abuseipdb.com/register 的免费 API 密钥 |
| `SECRET_KEY` | _(请更改)_ | JWT 签名密钥 — 生产环境中请设置为强随机值 |
## 首次使用工作流
1. `python start.py`
2. 仪表板 → **操作** → **启动检测管道**(捕获流量,检测威胁)
3. 仪表板 → **警报**(审阅发现项)
4. 仪表板 → **证据**(检查证据 + SHA-256 完整性)
5. 仪表板 → **操作** → **启动监控器**(持续后台检测)
6. 仪表板 → **威胁情报**(检查实时情报源状态)
7. 仪表板 → **PDF 报告** → **生成并下载 PDF**
## 替换 ML 模型
捆绑的 `app/ml/models/anomaly_model.pkl` 是一个预训练的 IsolationForest 模型。
要替换为任何开源模型(例如来自 Hugging Face 或自定义训练):
1. 训练或下载一个接受相同特征列的 scikit-learn 兼容模型:
`src_len`, `dst_len`, `protocol_id`, `has_ip`, `src_port`, `dst_port`
2. 使用 `joblib.dump(model, "app/ml/models/anomaly_model.pkl")` 保存模型
3. 重启服务器 — 它将在启动时加载一次模型。
特征提取代码位于 `app/ml/feature_extractor.py`,如需调整列。
## 实时威胁情报
启动时,一个后台线程从以下来源拉取新的 IP 黑名单:
| 情报源 | 认证 | 包含内容 |
|---|---|---|
| Emerging Threats compromised-ips.txt | 无 | 受感染主机 & 攻击者 IP |
| Feodo Tracker ipblocklist.txt | 无 | 活跃的 C2 僵尸网络 IP |
| AbuseIPDB 黑名单 (前 10,000 名) | 免费 API 密钥 | 被举报最多的恶意 IP |
所有 IP 合并到 `data/rules/sigma/threat_intel.yml`,检测引擎在每个周期读取该文件。当情报源不可访问时,离线缓存 `data/threat_intel_cache.txt` 会保留上一次已知的列表。
## 项目结构
```
forensight/
├── start.py ← Single-command launcher
├── .env ← All configuration
├── requirements.txt
├── app/
│ ├── main.py ← FastAPI app + startup/shutdown lifecycle
│ ├── api/endpoints/
│ │ ├── auth.py ← POST /auth/login, /auth/register, GET /auth/me
│ │ ├── alerts.py ← GET /alerts
│ │ ├── detect.py ← GET /detect, monitor start/stop/status
│ │ ├── evidence.py ← Evidence listing, integrity, custody, PDF report
│ │ ├── ml.py ← GET /ml/predict
│ │ ├── response.py ← POST /response/block/{ip}, GET /response/blocklist
│ │ ├── sniffer.py ← GET /sniff
│ │ └── threat_intel.py ← GET /threat-intel/status, POST /threat-intel/refresh
│ ├── core/
│ │ ├── config.py ← All settings (reads from .env)
│ │ └── security.py ← JWT creation/verification, password hashing
│ ├── db/
│ │ ├── base.py ← SQLAlchemy declarative base
│ │ └── session.py ← Engine + get_db() context manager
│ ├── models/
│ │ ├── alert.py ← Alert table
│ │ ├── chain_of_custody.py ← Append-only audit table
│ │ ├── evidence.py ← Evidence table
│ │ └── user.py ← User table
│ ├── ml/
│ │ ├── feature_extractor.py ← Packet → feature vector
│ │ ├── predict.py ← Model loaded once at startup; reload_model() for hot-swap
│ │ └── models/
│ │ └── anomaly_model.pkl ← Pre-trained IsolationForest (swap to replace)
│ ├── services/
│ │ ├── alert_service.py ← Save + query alerts
│ │ ├── blocklist.py ← JSON-backed IP blocklist
│ │ ├── detection_engine.py ← Brute-force, port-scan, flood, DDoS + ML passes
│ │ ├── firewall.py ← OS firewall commands (netsh / iptables)
│ │ ├── forensics.py ← Evidence collection, SHA-256 hashing, custody log
│ │ ├── notifier.py ← Slack webhook notifications
│ │ ├── packet_sniffer.py ← Scapy live capture + JSON packet log
│ │ ├── response_engine.py ← Blocklist + firewall + Slack per alert
│ │ ├── rule_loader.py ← Loads .yml rules from data/rules/sigma/
│ │ └── threat_intel.py ← Live feed scheduler
│ ├── utils/
│ │ └── report.py ← ReportLab PDF generator
│ └── dashboard/
│ └── streamlit_app.py ← 9-page Streamlit dashboard
└── data/
├── logs/ ← packets.json (rolling packet capture log)
├── evidence/ ← Per-alert evidence folders + blocked_ips.json
├── reports/ ← Generated PDF reports
├── rules/sigma/ ← YAML detection rules + threat_intel.yml
└── threat_intel_cache.txt ← Offline feed cache
```
## API 端点摘要
| 方法 | 路径 | 描述 |
|---|---|---|
| POST | `/auth/register` | 创建用户账户 |
| POST | `/auth/login` | 获取 JWT 令牌 |
| GET | `/auth/me` | 当前用户信息 |
| GET | `/sniff` | 捕获实时数据包 |
| GET | `/detect` | 排队一次检测运行 |
| GET | `/detect/status/{id}` | 轮询检测任务状态 |
| POST | `/detect/monitor/start` | 启动后台监控器 |
| POST | `/detect/monitor/stop` | 停止后台监控器 |
| GET | `/detect/monitor/status` | 监控器状态 |
| GET | `/alerts` | 列出警报(可按严重程度/run_id 过滤) |
| GET | `/ml/predict` | 对实时数据包运行异常预测 |
| POST | `/response/block/{ip}` | 手动阻止一个 IP |
| GET | `/response/blocklist` | 查看已阻止的 IP |
| GET | `/evidence` | 列出所有证据 |
| GET | `/evidence/report/generate` | 下载 PDF 报告 |
| GET | `/evidence/{id}/integrity` | SHA-256 完整性检查 |
| GET | `/evidence/{id}/custody` | 监管链日志 |
| GET | `/evidence/{id}/download` | 下载证据文件 |
| GET | `/threat-intel/status` | 情报源调度器状态 |
| POST | `/threat-intel/refresh` | 强制立即刷新情报源 |
标签:AMSI绕过, Apex, API文档, AV绕过, ESC漏洞, FastAPI, IsolationForest, Kubernetes, Python, Slack通知, SQLite, Streamlit, 威胁情报, 威胁检测, 安全运营, 开发者工具, 异常检测, 扫描框架, 数字取证, 无后门, 机器学习, 监控工具, 网络安全, 自动化平台, 自动化脚本, 警报管理, 访问控制, 证据收集, 逆向工具, 速率限制, 防火墙集成, 隐私保护