abdullahladjal/hybrid-detection-system
GitHub: abdullahladjal/hybrid-detection-system
该项目通过智能融合 Suricata 特征检测与 LightGBM 异常检测,并提供 MITRE 映射与 AI 辅助分析,构建了实时的网络入侵检测系统。
Stars: 1 | Forks: 0
#Hybrid Detection System
一个实时的网络入侵检测系统,通过智能的 **Fusion Layer** 将 **Suricata NIDS**(基于特征)与 **LightGBM 机器学习**(基于异常)相结合,并辅以 **MITRE ATT&CK** 映射、**Wazuh SIEM** 集成,以及由 Llama 3.2 驱动的 **AI 分析代理**。
## 主要结果
| 指标 | 数值 |
|---|---|
| 总告警数(完整攻击会话) | 38,516 |
| 仅 ML 检测(Suricata 遗漏) | 9,814 — 占攻击的 **72.3%** |
| 自定义模型准确率 | **95.30%** (FPR = 0.44%) |
| 基准模型准确率 | **99.55%** (120,504 样本) |
| AI 代理响应时间 | **~5.6 秒** (GPU) |
| 隐蔽扫描(T0 计时) | Suricata = **0 告警**, ML = **18 个 L4 告警** |
## 系统架构
```
Network Traffic (enp0s3 promiscuous mode)
│
┌────┴────┐
│ │
Suricata NFStream
NIDS (65 features)
│ │
└────┬────┘
│
Fusion Layer
(R1–R12 rules)
L0 → L4 decision
│
MITRE ATT&CK
Mapping
(3-tier system)
│
AI Agent (async)
Llama 3.2 on GPU
│
Wazuh SIEM
Dashboard + Alerts
│
SOC Analyst
```
## 功能
- **混合检测** — Suricata 特征 + ML 异常检测并行运行
- **Fusion Layer** — 12 条决策规则(R1–R12)将两种检测流结合为 L0–L4 置信度级别
- **三级 MITRE ATT&CK 映射** — ET 规则嵌入元数据 → MITRE DB 查找 → 端口/行为回退
- **AI 分析代理** — Llama 3.2 (3B) 异步为 L3/L4 告警提供结构化的事件报告
- **告警去重** — 每个(源 IP,攻击类别)有 60 秒冷却时间,防止告警风暴
- **行为启发式** — 端口扫描增强(>15 个独立端口)和暴力破解增强(>50 个到认证端口的流)
- **Wazuh SIEM 集成** — 包含自定义解码器和检测规则的丰富 JSON 告警
## 实验室环境
| 虚拟机 | 操作系统 | IP | 角色 |
|---|---|---|---|
| Kali Linux | Kali 2024 | 10.0.0.5 | 攻击者 |
| Ubuntu Desktop | Ubuntu 22.04 | 10.0.0.6 | 受害者 |
| IDS/SIEM VM | Ubuntu Server | 10.0.0.4 | 检测端 (12GB RAM) |
| Windows Host | Windows 11 | 192.168.1.74 | Ollama GPU 推理 |
**网络:**VirtualBox NAT Network (10.0.0.0/24),通过 VBoxManage 启用混杂模式
## 安装说明
### 前置条件
- Ubuntu Server (IDS VM),至少具备 8GB RAM
- Python 3.10+
- Suricata 7.x
- Wazuh 4.7.x(裸机,非 Docker)
- 宿主机上安装 Ollama 并已拉取 `llama3.2:3b`
### 1. 克隆仓库
```
git clone https://github.com/YOUR_USERNAME/hybrid-detection-system.git
cd hybrid-detection-system
```
### 2. 设置 Python 环境
```
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```
### 3. 下载所需文件(未包含在仓库中)
```
# MITRE ATT&CK 数据库
wget https://raw.githubusercontent.com/mitre/cti/master/enterprise-attack/enterprise-attack.json
# 数据集 (用于训练)
# CICIDS2017: https://www.unb.ca/cic/datasets/ids-2017.html
# UNSW-NB15: https://research.unsw.edu.au/projects/unsw-nb15-dataset
```
### 4. 训练模型(或使用预训练模型)
```
# 首先捕获自定义实验室流量,然后:
python3 train_custom.py
# 或基于组合的 benchmark 数据集进行训练:
python3 build_combined_dataset.py
python3 train_combined.py
```
### 5. 安装 Suricata 规则
```
sudo cp suricata/local.rules /var/lib/suricata/rules/local.rules
# 将以下内容添加到 /etc/suricata/suricata.yaml 的 rule-files 下:
# - local.rules
sudo systemctl restart suricata
```
### 6. 安装 Wazuh 集成
```
sudo cp wazuh/hybrid_ids_decoder.xml /var/ossec/etc/decoders/
sudo cp wazuh/hybrid_ids_rules.xml /var/ossec/etc/rules/
# 在 之前添加到 /var/ossec/etc/ossec.conf:
#
# json
# /var/ossec/logs/active-responses.log
#
sudo systemctl restart wazuh-manager
```
### 7. 在宿主机(Windows/Linux/Mac)上配置 Ollama
```
# 设置为监听所有接口
# Windows PowerShell (管理员):
[System.Environment]::SetEnvironmentVariable("OLLAMA_HOST", "0.0.0.0", "Machine")
# Linux/Mac:
export OLLAMA_HOST=0.0.0.0
# 拉取模型
ollama pull llama3.2:3b
# 允许防火墙 (Windows):
New-NetFirewallRule -DisplayName "Ollama" -Direction Inbound -Protocol TCP -LocalPort 11434 -Action Allow
```
### 8. 更新 pipeline 配置
编辑 `pipeline.py` 并设置您的值:
```
VICTIM_IP = '10.0.0.6' # Your victim VM IP
IDS_IP = '10.0.0.4' # Your IDS VM IP
OLLAMA_URL = 'http://192.168.1.74:11434/api/generate' # Your host IP
```
## 用法
### 运行 pipeline
```
cd ~/ml-ids
sudo venv/bin/python3 pipeline.py
```
预期输出:
```
[*] Hybrid Detection Pipeline started
ML Model : LGBMClassifier
AI Model : llama3.2:3b (async)
Victim IP : 10.0.0.6
Cooldown : 60s per attack category
MITRE : Suricata metadata > DB lookup > port fallback
```
### 按需 AI 分析师
```
python3 explain.py
```
让您从日志中选择任何告警并获取详细的事件报告。
### 检查告警
```
# 实时 pipeline 输出
tail -f /home/IDS/ml-ids/alerts.json
# Wazuh 富化警报
tail -f /var/ossec/logs/active-responses.log
# 警报摘要
cat alerts.json | python3 -c "
import json, sys
from collections import Counter
alerts = [json.loads(l) for l in sys.stdin if l.strip()]
print(f'Total: {len(alerts)}')
print(f'L4: {sum(1 for a in alerts if a[\"level\"]==\"L4\")}')
print(f'L3: {sum(1 for a in alerts if a[\"level\"]==\"L3\")}')
cats = Counter(a[\"category\"] for a in alerts)
for c, n in cats.most_common(): print(f' {c}: {n}')
"
```
## Fusion Layer 决策规则
| 规则 | 条件 | 级别 | 描述 |
|---|---|---|---|
| R1 | Suricata 高危/严重 + ML ≥ 0.4 | **L4** | 已确认的已知高危攻击 |
| R2 | Suricata 高危/严重 + ML < 0.4 | L3 | 已知高危,ML 未触发 |
| R3 | Suricata 中危 + ML ≥ 0.5 | L3 | 中危特征 + 异常行为 |
| R4 | Suricata 中危 + ML < 0.4 | L2 | 仅中危特征 |
| R5 | Suricata 低危 + ML ≥ 0.75 | L3 | 低危特征 + 强异常 |
| R6 | Suricata 低危 + ML < 0.3 | L1 | 可能是误报 |
| R7 | Suricata 低危 + 0.3 ≤ ML < 0.75 | L2 | 弱特征 + 部分异常 |
| R8 | 无 Suricata + ML ≥ 0.9 | **L4** | 强异常 — 可能是 0-day 攻击 |
| R9 | 无 Suricata + 0.75 ≤ ML < 0.9 | L3 | 高优先级未知攻击 |
| R10 | 无 Suricata + 0.6 ≤ ML < 0.75 | L2 | 可疑,非极端 |
| R11 | 无 Suricata + 0.4 ≤ ML < 0.6 | L1 | 轻度异常 — 仅记录日志 |
| R12 | 无 Suricata + ML < 0.4 | L0 | 正常 / 良性 |
## ML 模型对比
### 自定义实验室数据集 (n=10,000)
| 模型 | Accuracy | Precision | Recall | F1 | FPR |
|---|---|---|---|---|---|
| **LightGBM** ★ | **0.9530** | 0.9956 | 0.9100 | 0.9509 | **0.0044** |
| XGBoost | 0.9520 | 0.9902 | 0.9130 | 0.9501 | 0.0098 |
| MLP | 0.9515 | 0.9934 | 0.9090 | 0.9493 | 0.0066 |
| AdaBoost | 0.9490 | 0.9967 | 0.9010 | 0.9464 | 0.0033 |
| RandomForest | 0.9425 | 0.9743 | 0.9090 | 0.9405 | 0.0257 |
| DecisionTree | 0.9250 | 0.9233 | 0.9270 | 0.9251 | 0.0767 |
★ LightGBM 因具有最低的 FPR (0.44%) 被选用于实时 pipeline
### 组合基准数据集 (n=120,504)
| 模型 | Accuracy | F1 | FPR |
|---|---|---|---|
| **XGBoost** ★ | **0.9955** | 0.9955 | 0.0065 |
| LightGBM | 0.9950 | 0.9950 | 0.0075 |
| RandomForest | 0.9950 | 0.9950 | 0.0062 |
## MITRE ATT&CK 映射
| 攻击 | 技术 | 来源 |
|---|---|---|
| Cisco ASA CVE-2020-3452 | T1083 File & Dir Discovery | `suricata_metadata` ✓ |
| GPL ATTACK_RESPONSE | T1190 Exploit Public-Facing | `mitre_db_lookup` |
| SSH Brute Force | T1110 Brute Force | `mitre_db_lookup` |
| nmap SYN scan | T1595 Active Scanning | `mitre_db_lookup` |
| Stealth scan (ML only) | T1595 Active Scanning | `port_fallback` |
## 项目结构
```
.
├── pipeline.py # Main detection pipeline
├── explain.py # On-demand AI analyst tool
├── fusion.py # Fusion Layer (R1-R12 rules)
├── mitre.py # MITRE ATT&CK mapping (3-tier)
├── train_custom.py # Train on custom NFStream dataset
├── train_combined.py # Train on combined benchmark datasets
├── build_combined_dataset.py
├── test_combined.py
├── requirements.txt
├── .gitignore
├── suricata/
│ └── local.rules # 12 custom Suricata rules
├── wazuh/
│ ├── hybrid_ids_rules.xml
│ └── hybrid_ids_decoder.xml
└── docs/
├── PROJECT_STATUS.md
└── diagram.png
```
## 团队
| 姓名 | 角色 |
|---|---|
| Abdullah Asaad Ladjal | AI 代理 + 主 Pipeline |
| Tal Mohammed Faden | Fusion Layer + Wazuh SIEM |
| Ahmed Khalid Humadi | Suricata 规则 + MITRE 映射 |
| Khalid Ali AL-Mufarrih | 系统架构 + 实验室设置 |
| Abdulmajeed Meshal Almalki | ML 训练 + 数据集工程 |
## 参考文献
1. Comparative Analysis of Snort, Suricata and Bro IDS. E.P. College, Ghana, 2019.
2. Anita S. & Gupta S. An effective model for anomaly IDS. ICGCIoT, 2015.
3. Alnasser O. et al. Signature and anomaly based IDS for IoTs, 2021.
4. Aslam U. et al. Hybrid NIDS using ML and Rule Based Learning, 2020.
5. Moustafa N. & Slay J. UNSW-NB15 dataset. MilCIS, 2015.
6. Sharafaldin I. et al. CICIDS2017 dataset. ICISSP, 2018.
7. The MITRE Corporation. MITRE ATT&CK Enterprise v14. https://attack.mitre.org
8. Proofpoint Emerging Threats. ET/Open Ruleset. https://rules.emergingthreats.net
## 许可证
本项目作为吉达大学 (University of Jeddah) CCCY 421 毕业设计的一部分开发。
标签:AI风险缓解, Apex, DLL 劫持, IP 地址批量处理, Metaprompt, 入侵检测系统, 大语言模型, 安全数据湖, 安全运营中心, 插件系统, 机器学习, 网络安全, 网络映射, 逆向工具, 隐私保护