MAMDOUHjr/threat-hunting-dashboard
GitHub: MAMDOUHjr/threat-hunting-dashboard
一款基于 Python 的桌面应用,通过 SSH 连接 Linux 虚拟机集群并运行 8 项自动化威胁狩猎检查,实现集中化安全日志分析与报告导出。
Stars: 0 | Forks: 0
# 🛡️ 威胁狩猎仪表板
一款生产级的 Python 桌面应用程序,用于通过 SSH 监控 Linux 虚拟机,收集安全日志,运行自动化威胁狩猎检查,并导出详细的调查结果报告。
## 📸 概览
该仪表板通过 SSH(基于密钥的身份验证)连接到 Linux 虚拟机,提取关键日志文件,并运行与实际 SOC 工作流程对齐的 8 项自动化威胁狩猎检查。结果将显示在深色主题的 GUI 中,并可导出为 TXT 或 JSON 格式。
## ✨ 功能
| 功能 | 详情 |
|---|---|
| 🖥️ GUI | 深色主题的 CustomTkinter 桌面应用程序 |
| 🔐 SSH | 通过 Fabric 3 + Paramiko 进行基于密钥的身份验证 |
| 🔍 检查 | 8 项内置威胁狩猎规则(与 MITRE 对齐) |
| 📄 报告 | 可读的 TXT + 机器可读的 JSON 导出 |
| ⚡ 并发 | 多线程的“Hunt All” — GUI 保持完全响应 |
| 📋 日志 | 应用程序日志位于 `logs/application.log` |
| 🐧 发行版支持 | 适用于 Debian/Kali/Ubuntu 以及 RHEL/CentOS |
## 📁 项目结构
```
threat_hunting_dashboard/
├── main.py # Entry point
├── requirements.txt # Python dependencies
├── config/
│ └── vms.json # VM fleet definitions (IPs, credentials)
├── gui/
│ ├── app.py # Main application window
│ ├── vm_card.py # Per-VM card widget
│ └── report_panel.py # Report viewer + export panel
├── transport/
│ └── ssh.py # SSH / Fabric wrapper (key-based auth)
├── hunting/
│ ├── models.py # Dataclasses: VMConfig, Finding, HuntReport
│ ├── checks.py # 8 threat-hunting check functions
│ └── engine.py # Hunt orchestrator + VM config loader
├── reports/
│ └── exports.py # TXT and JSON report export
└── logs/ # Application logs (auto-created at runtime)
```
## 🔧 要求
- **Python** 3.12+
- 对目标 Linux 虚拟机的 **基于 SSH 密钥的访问权限**
- 每台虚拟机上的 SSH 用户必须能够读取 `/var/log/` 文件(root 用户,或属于 `adm` 组的用户)
### Python 依赖项
```
customtkinter>=5.2.2
fabric>=3.2.2
paramiko>=3.4.0
Pillow>=10.2.0
```
## 🚀 安装说明
### 步骤 1 — 克隆代码库
```
git clone https://github.com/YOUR_USERNAME/threat-hunting-dashboard.git
cd threat-hunting-dashboard
```
### 步骤 2 — 创建虚拟环境
```
python3 -m venv .venv
source .venv/bin/activate # Linux / macOS
# .venv\Scripts\activate # Windows
```
### 步骤 3 — 安装依赖项
```
pip install -r requirements.txt
```
## ⚙️ 配置
编辑 `config/vms.json` 来定义你的虚拟机集群:
```
[
{
"name": "kali-lab",
"host": "192.168.56.101",
"port": 22,
"username": "analyst",
"key_path": "~/.ssh/id_rsa",
"key_passphrase": null
}
]
```
| 字段 | 必填 | 描述 |
|---|---|---|
| `name` | ✓ | 仪表板中的显示标签 |
| `host` | ✓ | IP 地址或主机名 |
| `port` | 可选 | SSH 端口(默认:`22`) |
| `username` | 可选 | SSH 登录用户(默认:`root`) |
| `key_path` | 可选 | SSH 私钥路径(默认:`~/.ssh/id_rsa`) |
| `key_passphrase` | 可选 | 私钥的密码短语(`null` = 无) |
## 🔑 SSH 密钥设置
该仪表板使用**基于密钥的 SSH 身份验证**(无密码)。以下是设置方法:
### 在运行仪表板的机器上:
```
# 生成一个 SSH key pair(如果已有可跳过)
ssh-keygen -t rsa -b 4096 -C "threat-hunting-dashboard"
# 将 public key 复制到目标 VM
ssh-copy-id -i ~/.ssh/id_rsa.pub username@VM_IP
```
### 首先手动测试连接:
```
ssh -i ~/.ssh/id_rsa username@VM_IP
```
有关完整的 SSH 密钥设置指南,请参阅 [`SSH_KEY_SETUP_GUIDE.md`](SSH_KEY_SETUP_GUIDE.md)。
## ▶️ 运行应用程序
```
python main.py
```
## 🖱️ 使用说明
### 1. 测试连通性
- 在虚拟机卡片上点击 **[Test]** 以验证对该虚拟机的 SSH 访问。
- 点击 **[Test All]** 同时测试所有虚拟机。
### 2. 运行威胁狩猎
- 在虚拟机卡片上点击 **[Hunt]** 以收集日志并运行所有 8 项检查。
- 点击 **[Hunt All]** 在整个集群中运行并发狩猎。
- 结果将显示在右侧的 **Report Viewer** 面板中。
### 3. 导出报告
狩猎完成后:
- **[Export TXT]** → 保存为 `reports/report__.txt`
- **[Export JSON]** → 保存为 `reports/report__.json`
## 🔍 威胁狩猎检查
| # | 检查项目 | 严重程度 | 日志来源 |
|---|---|---|---|
| 1 | SSH 暴力破解检测 | 🔴 高 | `/var/log/auth.log` · `/var/log/secure` |
| 2 | 失败后的成功登录 | 🚨 严重 | `/var/log/auth.log` · `/var/log/secure` |
| 3 | Sudo 滥用 / 提权失败 | 🟠 中 | `/var/log/auth.log` · `/var/log/secure` |
| 4 | 新建用户 / 组 | 🔴 高 | `/var/log/auth.log` · `/var/log/secure` |
| 5 | 可疑的非工作时间 Cron 任务 | 🟠 中 | `/var/log/cron` |
| 6 | 软件包安装活动 | 🟡 低 | `/var/log/dpkg.log` · `/var/log/yum.log` |
| 7 | Audit 日志中的提权行为 | 🔴 高 | `/var/log/audit/audit.log` |
| 8 | 可疑的 Bash History 命令 | 🔴 高 | `~/.bash_history` |
## 📋 收集的日志文件
引擎从每台虚拟机上的以下路径收集(会妥善跳过缺失的文件):
**Debian / Kali / Ubuntu:**
- `/var/log/auth.log`
- `/var/log/syslog`
- `/var/log/dpkg.log`
- `/var/log/kern.log`
**RHEL / CentOS / Fedora:**
- `/var/log/secure`
- `/var/log/messages`
- `/var/log/yum.log` · `/var/log/dnf.log`
**通用:**
- `/var/log/cron`
- `/var/log/audit/audit.log`
- `~/.bash_history`
## 📄 示例报告输出
```
============================================================
VM: kali-lab
Host: 192.168.56.101:22
Generated: 2026-06-03 14:00:00
============================================================
[CRITICAL]
Successful Login After Multiple Failures
----------------------------------------
Description:
IP 185.220.101.42 had 17 failed login attempts followed by a
successful authentication — possible account compromise.
Evidence:
IP address: 185.220.101.42 | Failure count: 17
Source: /var/log/auth.log
[HIGH]
SSH Brute Force Detected
----------------------------------------
Description:
Repeated SSH authentication failures detected from 185.220.101.42.
Evidence:
Failed password from 185.220.101.42 (17 times)
============================================================
SUMMARY
============================================================
Total Findings : 2
CRITICAL : 1
HIGH : 1
MEDIUM : 0
LOW : 0
Duration : 4.2s
============================================================
```
## 🏗️ 架构
```
main.py
└── gui/app.py ← Main window, spawns threads
├── gui/vm_card.py ← Per-VM widget (Test / Hunt buttons)
└── gui/report_panel.py ← Results display + export
└── hunting/engine.py ← Orchestrates one full hunt
├── transport/ssh.py ← SSH connection + log collection
└── hunting/checks.py ← 8 pure check functions
└── hunting/models.py ← Dataclasses
```
**设计原则:**
- **传输层**(`transport/ssh.py`)与 GUI 完全解耦 — 可独立用于脚本化/自动化狩猎。
- **检查函数**(`hunting/checks.py`)是纯函数:`dict[str, str] → list[Finding]` — 易于进行单元测试和扩展。
- **基于队列的结果传递**确保 GUI 线程永远不会被网络 I/O 阻塞。
- 全面采用的 **Dataclasses** 在所有层之间提供了清晰、类型化的数据契约。
## 🛠️ 故障排除
| 问题 | 解决方案 |
|---|---|
| `SSHError: SSH key not found` | 检查 `vms.json` 中的 `key_path`;确认该文件存在 |
| `Authentication failed` | 确认用户名无误,并且你的公钥已添加到虚拟机的 `~/.ssh/authorized_keys` 中 |
| `Network error connecting` | 确认虚拟机正在运行且可访问;检查防火墙/iptables 规则 |
| `No findings returned` | 用户可能没有日志文件的读取权限;尝试使用 root 或属于 `adm` 组的用户 |
| `customtkinter not found` | 在你的虚拟环境中运行 `pip install -r requirements.txt` |
| `Permission denied on log file` | 在目标虚拟机上运行 `sudo chmod o+r /var/log/auth.log` |
## 📜 许可证
本项目仅用于教育和实验室用途。欢迎自由 fork、扩展和在此基础上进行开发。
## 👥 团队
本项目是我们 NTI 网络安全培训期间合作完成的。
## | 姓名 | GitHub |
|---|---|
| Amr | [@MAMDOUHjr](https://github.com/MAMDOUHjr) |
| Gouda | [@7amada8088](https://github.com/7amada8088) |
| Youssef | [@YoussefMansour74](https://github.com/YoussefMansour74) |
| Saad | [@Sa3dHazem]( https://github.com/Sa3dHazem) |
| Badr | [@MohamedBadr9]( https://github.com/MohamedBadr9) |
标签:Linux监控, MIT 许可证, PB级数据处理, Python桌面应用, SSH自动化, Web报告查看器, 安全运维, 逆向工具