Sayan-Ghosh-5/Home-Lab-Threat-Intelligence-Dashboard
GitHub: Sayan-Ghosh-5/Home-Lab-Threat-Intelligence-Dashboard
一套面向家庭实验室的实时网络安全监控系统,结合 Scapy 流量捕获、Go 高速摄取、PostgreSQL 存储与 Isolation Forest 无监督异常检测,实现对可疑通信和潜在 C2 活动的自动化发现与可视化告警。
Stars: 3 | Forks: 0
# 🛡️ 家庭实验室威胁情报与检测仪表板
一个实时的网络安全监控、数据摄取以及由机器学习驱动的异常检测系统,旨在检测家庭实验室中的恶意活动、可疑端点以及潜在的命令与控制 (C2) 通信。
## 📐 架构与数据流
本应用程序采用解耦的、面向服务的架构构建,将职责划分为原始主机级别捕获、高性能摄取、结构化存储以及流式机器学习分析。
```
flowchart TD
subgraph Host ["🏠 Host Machine (Local Network)"]
Sniffer["📡 sniffer/sniffer.py
(Python & Scapy Client)"] end subgraph Docker ["🐳 Dockerized Infrastructure"] direction TB API["⚡ api/main.go
(Go HTTP Ingestion Server)"] DB[("🐘 PostgreSQL
(homelab_db Database)")] subgraph Analytics ["🧠 Analytics Engine"] UI["📊 dashboard/app.py
(Streamlit SOC UI)"] ML["🤖 Isolation Forest Model
(scikit-learn Pipeline)"] end end %% Network data captures and forwards Sniffer -- "Sends JSON Packets
(POST /api/packets)" --> API %% Ingestion writes to DB API -- "Bulk Log Inserts" --> DB %% Analytics monitors and processes UI -- "Queries Last 60 Min" --> DB UI --> ML ML -- "Detects Outliers
(5% Contamination)" --> UI ``` ## 🛠️ 技术栈与语言 | 服务 / 层级 | 技术 | 语言 | 用途 | | :--- | :--- | :--- | :--- | | **Packet Sniffer** | [Scapy](https://scapy.net/) | `Python 3.10` | 从物理网卡捕获原始的三层数据包并异步转发。 | | **Ingestion API** | [Go Standard Library](https://go.dev/) | `Go (Golang)` | 以极低的内存占用并发接收网络流,并将记录写入 Postgres。 | | **Database** | [PostgreSQL 18](https://www.postgresql.org/) | `SQL` | 用于网络日志的结构化时间序列存储,使用自定义 `INET` 列类型以优化 IP 处理。 | | **SOC Dashboard** | [Streamlit](https://streamlit.io/) | `Python 3.10` | 实时监控与威胁订阅,每 5 秒刷新一次。 | | **Machine Learning** | [scikit-learn](https://scikit-learn.org/) | `Python 3.10` | 无监督的 **Isolation Forest** 异常值检测模型。 | | **Orchestration** | [Docker Compose](https://www.docker.com/) | `YAML` | 多容器微服务容器配置。 | ## 📂 文件系统布局 代码库采用了整洁且高度模块化的文件系统,以隔离微服务并支持未来的扩展: ``` HOME-LAB-threat-detection/ ├── .gitignore # Safe credentials & virtual environment filters ├── docker-compose.yml # Multi-container service definitions ├── README.md # Core documentation & developer guide │ ├── api/ # High-speed Ingestion Gateway │ ├── Dockerfile # Compiles binary into a minimal Linux container │ ├── go.mod / go.sum # Go dependency registries │ └── main.go # Web server & DB connection layers │ ├── dashboard/ # Machine Learning & Visualization Core │ ├── Dockerfile # Packages analytics runtime │ ├── requirements.txt # DS Stack (streamlit, pandas, scikit-learn) │ ├── app.py # Streamlit live monitoring loop │ └── analyzer.py # Standalone command-line ML reporter │ └── sniffer/ # Local Packet Capture Utility ├── requirements.txt # Sniffer stack (scapy, requests) └── sniffer.py # Raw socket packet sniffer callback ``` ## 🤖 机器学习流水线的工作原理 检测引擎使用**无监督机器学习**(特别是 **Isolation Forest**)来发现异常。这种方法不需要带标签的恶意软件数据集;相反,它会寻找与正常基线相比表现异常的行为。 1. **特征工程**:流水线在滚动的 **60 分钟窗口**内聚合网络日志,按 `destination_ip` 对流量进行分组,并计算: - **Packet Count**:通信频率。 - **Average Packet Size**:数据量特征(小数据包指示心跳/ping;大数据包指示数据渗出)。 - **Total Bytes Transferred**:总带宽占用。 2. **Isolation Forest 模型**: - 将工程化后的变量作为多维特征处理。 - 随机划分特征。由于异常值更容易被孤立(它们在决策树中需要更少的分割次数),因此它们在树中被分配了较短的路径长度。 3. **异常标记**: - 该模型配置了 `contamination=0.05` 超参数,它会自动将最极端的 **5%** 流量行为标记为异常 (`-1`)。 - 被标记的目标会立即被推送到 **🚨 Real-Time Threat Detection** 报告下的实时 SOC 仪表板中。 ## 🚀 入门指南 ### 1. 启动核心服务 (Dockerized) 在项目根目录下,使用单个命令运行 Postgres 数据库、Ingestion API 和 Streamlit Dashboard: ``` docker-compose up --build -d ``` - **Ingestion API** 将监听 `http://localhost:8080` - **Streamlit SOC Dashboard** 将在 `http://localhost:8501` 提供 - **PostgreSQL Database** 将在端口 `5432` 上运行 ### 2. 配置并运行 Sniffer (主机级别) 由于 Scapy 需要 root/管理员权限才能绑定到原始物理接口,因此它在主机上本地运行。 #### Linux / macOS ``` # 设置干净的环境 cd sniffer python3 -m venv venv source venv/bin/activate pip install -r requirements.txt # 使用管理员权限运行 sniffer sudo python3 sniffer.py ``` #### Windows (以管理员身份运行 PowerShell) ``` cd sniffer python -m venv venv .\venv\Scripts\Activate.ps1 pip install -r requirements.txt # 运行 sniffer python sniffer.py ``` 一旦运行,你的 sniffer 将打印出成功的 POST 输出: `Successfully sent: 192.168.1.45 -> 104.244.42.1 | Size: 64 bytes` ## ⚙️ 自定义模型参数 要自定义行为,你可以直接在 `dashboard/app.py` 中修改配置: * **Rolling Window**:更改 PostgreSQL 查询间隔(例如,将 `NOW() - INTERVAL '60 minutes'` 更改为 `24 hours` 以获取更长的基线)。 * **Contamination Rate**:在主分析循环中微调 `IsolationForest(contamination=0.05)`。将其设置为 `0.02` 将仅标记前 2% 的极端行为,从而减少误报。 * **Polling Rate**:更改脚本底部的 `time.sleep(5)`,以调整 Streamlit 仪表板查询 Postgres 的频率。
(Python & Scapy Client)"] end subgraph Docker ["🐳 Dockerized Infrastructure"] direction TB API["⚡ api/main.go
(Go HTTP Ingestion Server)"] DB[("🐘 PostgreSQL
(homelab_db Database)")] subgraph Analytics ["🧠 Analytics Engine"] UI["📊 dashboard/app.py
(Streamlit SOC UI)"] ML["🤖 Isolation Forest Model
(scikit-learn Pipeline)"] end end %% Network data captures and forwards Sniffer -- "Sends JSON Packets
(POST /api/packets)" --> API %% Ingestion writes to DB API -- "Bulk Log Inserts" --> DB %% Analytics monitors and processes UI -- "Queries Last 60 Min" --> DB UI --> ML ML -- "Detects Outliers
(5% Contamination)" --> UI ``` ## 🛠️ 技术栈与语言 | 服务 / 层级 | 技术 | 语言 | 用途 | | :--- | :--- | :--- | :--- | | **Packet Sniffer** | [Scapy](https://scapy.net/) | `Python 3.10` | 从物理网卡捕获原始的三层数据包并异步转发。 | | **Ingestion API** | [Go Standard Library](https://go.dev/) | `Go (Golang)` | 以极低的内存占用并发接收网络流,并将记录写入 Postgres。 | | **Database** | [PostgreSQL 18](https://www.postgresql.org/) | `SQL` | 用于网络日志的结构化时间序列存储,使用自定义 `INET` 列类型以优化 IP 处理。 | | **SOC Dashboard** | [Streamlit](https://streamlit.io/) | `Python 3.10` | 实时监控与威胁订阅,每 5 秒刷新一次。 | | **Machine Learning** | [scikit-learn](https://scikit-learn.org/) | `Python 3.10` | 无监督的 **Isolation Forest** 异常值检测模型。 | | **Orchestration** | [Docker Compose](https://www.docker.com/) | `YAML` | 多容器微服务容器配置。 | ## 📂 文件系统布局 代码库采用了整洁且高度模块化的文件系统,以隔离微服务并支持未来的扩展: ``` HOME-LAB-threat-detection/ ├── .gitignore # Safe credentials & virtual environment filters ├── docker-compose.yml # Multi-container service definitions ├── README.md # Core documentation & developer guide │ ├── api/ # High-speed Ingestion Gateway │ ├── Dockerfile # Compiles binary into a minimal Linux container │ ├── go.mod / go.sum # Go dependency registries │ └── main.go # Web server & DB connection layers │ ├── dashboard/ # Machine Learning & Visualization Core │ ├── Dockerfile # Packages analytics runtime │ ├── requirements.txt # DS Stack (streamlit, pandas, scikit-learn) │ ├── app.py # Streamlit live monitoring loop │ └── analyzer.py # Standalone command-line ML reporter │ └── sniffer/ # Local Packet Capture Utility ├── requirements.txt # Sniffer stack (scapy, requests) └── sniffer.py # Raw socket packet sniffer callback ``` ## 🤖 机器学习流水线的工作原理 检测引擎使用**无监督机器学习**(特别是 **Isolation Forest**)来发现异常。这种方法不需要带标签的恶意软件数据集;相反,它会寻找与正常基线相比表现异常的行为。 1. **特征工程**:流水线在滚动的 **60 分钟窗口**内聚合网络日志,按 `destination_ip` 对流量进行分组,并计算: - **Packet Count**:通信频率。 - **Average Packet Size**:数据量特征(小数据包指示心跳/ping;大数据包指示数据渗出)。 - **Total Bytes Transferred**:总带宽占用。 2. **Isolation Forest 模型**: - 将工程化后的变量作为多维特征处理。 - 随机划分特征。由于异常值更容易被孤立(它们在决策树中需要更少的分割次数),因此它们在树中被分配了较短的路径长度。 3. **异常标记**: - 该模型配置了 `contamination=0.05` 超参数,它会自动将最极端的 **5%** 流量行为标记为异常 (`-1`)。 - 被标记的目标会立即被推送到 **🚨 Real-Time Threat Detection** 报告下的实时 SOC 仪表板中。 ## 🚀 入门指南 ### 1. 启动核心服务 (Dockerized) 在项目根目录下,使用单个命令运行 Postgres 数据库、Ingestion API 和 Streamlit Dashboard: ``` docker-compose up --build -d ``` - **Ingestion API** 将监听 `http://localhost:8080` - **Streamlit SOC Dashboard** 将在 `http://localhost:8501` 提供 - **PostgreSQL Database** 将在端口 `5432` 上运行 ### 2. 配置并运行 Sniffer (主机级别) 由于 Scapy 需要 root/管理员权限才能绑定到原始物理接口,因此它在主机上本地运行。 #### Linux / macOS ``` # 设置干净的环境 cd sniffer python3 -m venv venv source venv/bin/activate pip install -r requirements.txt # 使用管理员权限运行 sniffer sudo python3 sniffer.py ``` #### Windows (以管理员身份运行 PowerShell) ``` cd sniffer python -m venv venv .\venv\Scripts\Activate.ps1 pip install -r requirements.txt # 运行 sniffer python sniffer.py ``` 一旦运行,你的 sniffer 将打印出成功的 POST 输出: `Successfully sent: 192.168.1.45 -> 104.244.42.1 | Size: 64 bytes` ## ⚙️ 自定义模型参数 要自定义行为,你可以直接在 `dashboard/app.py` 中修改配置: * **Rolling Window**:更改 PostgreSQL 查询间隔(例如,将 `NOW() - INTERVAL '60 minutes'` 更改为 `24 hours` 以获取更长的基线)。 * **Contamination Rate**:在主分析循环中微调 `IsolationForest(contamination=0.05)`。将其设置为 `0.02` 将仅标记前 2% 的极端行为,从而减少误报。 * **Polling Rate**:更改脚本底部的 `time.sleep(5)`,以调整 Streamlit 仪表板查询 Postgres 的频率。
标签:Apex, Go, IP 地址批量处理, Kubernetes, Python, Ruby工具, Scapy, 异常检测, 无后门, 日志审计, 机器学习, 流量监控, 测试用例, 版权保护, 网络安全, 逆向工具, 隐私保护