AimanAzmi03/AI-ASSISTED-INTRUSION-DETECTION-RESPONSE-SYSTEM
GitHub: AimanAzmi03/AI-ASSISTED-INTRUSION-DETECTION-RESPONSE-SYSTEM
一个结合规则引擎与 Isolation Forest 机器学习的轻量级网络入侵检测与防御系统,支持实时流量监控、威胁检测、自动 IP 封锁及 Web 仪表板管理。
Stars: 0 | Forks: 0
## AI 辅助入侵检测与响应系统 (IDRS)
**检测、响应、防御 —— 始终领先一步**





## 目录
- [概述](#overview)
- [功能](#features)
- [系统架构](#system-architecture)
- [VM 拓扑与网络配置](#vm-topology--network-setup)
- [VirtualBox 主机网络管理器](#virtualbox-host-network-manager)
- [VM 网络适配器设置](#vm-network-adapter-settings)
- [Netplan 配置](#netplan-configuration)
- [在 IDS 上启用 IP 转发](#enable-ip-forwarding-on-ids)
- [项目索引](#project-index)
- [快速开始](#getting-started)
- [前置条件](#prerequisites)
- [安装说明](#installation)
- [用法](#usage)
- [测试](#testing)
- [数据集](#dataset)
- [参考文献](#references)
## 概述
IDRS 是一个**轻量级、混合式的网络入侵检测与防御系统 (NIDS/NIPS)**,它将用于已知攻击特征的**基于规则的检测**与用于零日异常检测的**无监督机器学习 (Isolation Forest)** 相结合。它基于 Ubuntu 和 Python 构建,能够捕获实时网络流量、实时检测恶意行为,并通过 `iptables` 自动封锁攻击者 IP —— 所有这些都通过基于 Web 的安全运营中心 (SOC) 仪表板进行监控。
该项目作为毕业设计开发于 **Universiti Kuala Lumpur (UniKL MIIT)**,在 **Ts. Wan Hazimah Wan Ismail** 的指导下完成。
## 功能
| 组件 | 详情 |
|-----------|---------|
| ⚙️ **架构** | 采用模块化设计,分离了数据包捕获、规则检测、ML 异常评分、防御和仪表板等层级 |
| 🤖 **AI / ML** | 在 CICIDS2017 正常流量上训练的无监督 Isolation Forest;无需标记的攻击数据即可检测未知异常 |
| 📡 **数据包捕获** | 通过 Scapy 在混杂模式下(`enp0s8` 和 `enp0s9`)进行实时嗅探 |
| 🛡️ **规则引擎** | 基于阈值的检测:DoS 泛洪 (>100 数据包/10秒) 和 端口扫描 (>10 端口/10秒) |
| 🔒 **自动防御** | 通过 `iptables` 实现内核级 IP 封锁,封锁时间逐渐升级(30 分钟 → 永久) |
| 🌐 **SOC 仪表板** | 基于 Flask 的 Web 界面,具有实时威胁源、封锁 IP 管理、手动解封和会话身份验证功能 |
| 🗄️ **审计日志** | SQLite 数据库记录每个警报、异常评分和防御动作及其时间戳 |
| 🧪 **测试** | 跨 3 个 VirtualBox 虚拟机拓扑(IDS、攻击者、受害者)的受控攻击模拟 |
| ⚡ **性能** | 轻量级纯 CPU 部署;无需 GPU |
| 🔧 **模块化** | 为特征提取、模型推理、检测逻辑和响应处理提供独立的模块 |
## 系统架构
```
┌─────────────────────────────────────────────────────────────────────────┐
│ VIRTUALBOX HOST │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ ATTACKER VM │ │ IDS VM │ │ VICTIM VM │ │
│ │ 192.168.56.101 │◄────►│ 192.168.56.103 │◄────►│ 192.168.57.102 │ │
│ │ │ │ 192.168.57.103 │ │ │ │
│ │ NAT + Host-Only│ │ NAT + Host-Only│ │ NAT + Host-Only│ │
│ │ #1 │ │ #1 + #2 │ │ #2 │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │ │ │ │
│ └────────── 192.168.56.x ─┴──────── 192.168.57.x ─┘ │
│ │
│ Traffic Flow: Attacker → IDS (enp0s8) → IDS (enp0s9) → Victim │
│ IDS acts as inline gateway — all inter-VM traffic passes through it │
└─────────────────────────────────────────────────────────────────────────┘
```
## VM 拓扑与网络配置
该项目需要在 VirtualBox 中配置 **3 台 Ubuntu VM**,并采用**内联 IDS 拓扑**。IDS VM 位于攻击者和受害者之间,迫使所有流量都经过它,以实现实时检测和封锁。
### IP 规划
| 网络 | 子网 | 用途 |
|---------|--------|---------|
| 仅主机网络 #1 | `192.168.56.0/24` | 攻击者 ↔ IDS(左侧) |
| 仅主机网络 #2 | `192.168.57.0/24` | IDS ↔ 受害者(右侧) |
| VM | 角色 | 适配器 1 (NAT) | 适配器 2 (仅主机网络 #1) | 适配器 3 (仅主机网络 #2) |
|----|------|-----------------|--------------------------|--------------------------|
| **IDS** | 网关 + 检测 | `enp0s3` (DHCP) | `enp0s8` — `192.168.56.103/24` | `enp0s9` — `192.168.57.103/24` |
| **攻击者** | 攻击源 | `enp0s3` (DHCP) | `enp0s8` — `192.168.56.101/24` | — |
| **受害者** | 目标 | `enp0s3` (DHCP) | — | `enp0s8` — `192.168.57.102/24` |
### VirtualBox 主机网络管理器
在配置虚拟机之前,请在您的 **Windows 主机**上创建并配置两个仅主机网络适配器:
1. 打开 **VirtualBox 管理器 → 文件 → 主机网络管理器**(或 **工具 → 网络**)
2. **适配器 #1** (vboxnet0 / 仅主机网络 #1):
- IPv4 地址:`192.168.56.1`
- IPv4 网络掩码:`255.255.255.0`
- **DHCP 服务器:未勾选 / 禁用**
3. **适配器 #2** (vboxnet1 / 仅主机网络 #2):
- IPv4 地址:`192.168.57.1`
- IPv4 网络掩码:`255.255.255.0`
- **DHCP 服务器:未勾选 / 禁用**
4. 点击 **应用**
### VM 网络适配器设置
在更改这些设置之前,请**关闭所有 3 台虚拟机的电源**。
#### IDS VM
| 适配器 | 连接到 | 名称 | 混杂模式 |
|---------|-------------|------|------------------|
| 适配器 1 | NAT | — | 拒绝 |
| 适配器 2 | 仅主机网络适配器 | VirtualBox Host-Only Ethernet Adapter #1 | **全部允许** |
| 适配器 3 | 仅主机网络适配器 | VirtualBox Host-Only Ethernet Adapter #2 | **全部允许** |
#### 攻击者 VM
| 适配器 | 连接到 | 名称 | 混杂模式 |
|---------|-------------|------|------------------|
| 适配器 1 | NAT | — | 拒绝 |
| 适配器 2 | 仅主机网络适配器 | VirtualBox Host-Only Ethernet Adapter #1 | **全部允许** |
#### 受害者 VM
| 适配器 | 连接到 | 名称 | 混杂模式 |
|---------|-------------|------|------------------|
| 适配器 1 | NAT | — | 拒绝 |
| 适配器 2 | 仅主机网络适配器 | VirtualBox Host-Only Ethernet Adapter #2 | **全部允许** |
### Netplan 配置
启动每台虚拟机并使用 `ip link show` 验证接口名称。然后应用下方的 netplan 配置。
#### IDS VM (`/etc/netplan/01-netcfg.yaml`)
```
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s3:
dhcp4: true
enp0s8:
dhcp4: no
addresses:
- 192.168.56.103/24
enp0s9:
dhcp4: no
addresses:
- 192.168.57.103/24
```
#### 攻击者 VM (`/etc/netplan/01-netcfg.yaml`)
```
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s3:
dhcp4: true
enp0s8:
dhcp4: no
addresses:
- 192.168.56.101/24
routes:
- to: 192.168.57.0/24
via: 192.168.56.103
nameservers:
addresses:
- 8.8.8.8
```
#### 受害者 VM (`/etc/netplan/01-netcfg.yaml`)
```
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s3:
dhcp4: true
enp0s8:
dhcp4: no
addresses:
- 192.168.57.102/24
routes:
- to: 192.168.56.0/24
via: 192.168.57.103
nameservers:
addresses:
- 8.8.8.8
```
**在所有 3 台虚拟机上应用:**
```
sudo chmod 600 /etc/netplan/01-netcfg.yaml
sudo netplan apply
sudo systemctl restart NetworkManager
```
### 在 IDS 上启用 IP 转发
IDS VM 必须在两个仅主机网络之间转发流量,以便攻击者可以通过 IDS 访问受害者(反之亦然)。
```
# 启用 IP 转发(临时)
sudo sysctl -w net.ipv4.ip_forward=1
# 使其永久生效
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
# 允许在 Host-Only 接口之间转发
sudo iptables -A FORWARD -i enp0s8 -o enp0s9 -j ACCEPT
sudo iptables -A FORWARD -i enp0s9 -o enp0s8 -j ACCEPT
# 保存 iptables 规则
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
```
**启用混杂模式以捕获数据包:**
```
sudo ip link set enp0s8 promisc on
sudo ip link set enp0s9 promisc on
```
**从攻击者验证路由:**
```
traceroute 192.168.57.102
```
您应该会看到 `192.168.56.103` 作为第一跳,这确认了流量通过了 IDS。
## 项目索引
```
AI-ASSISTED-INTRUSION-DETECTION-RESPONSE-SYSTEM/
│
├── Manual_Rules_Fast.py # Main IDS engine (capture + detection + blocking)
├── ml_detector.py # Real-time ML anomaly detector (Isolation Forest)
├── dashboard.py # Flask web dashboard (SOC interface)
├── retrain_model.py # Model training script (CICIDS2017 → Isolation Forest)
├── init_db.py # Database initialization (alerts, blocked_ips, admins)
├── py.py # Admin user seed script
├── idrs.db # SQLite database (auto-generated)
├── config.json # Detection thresholds configuration
│
├── scr/
│ └── train_isolation_forest.py # Full CICIDS2017 training pipeline
│
├── models/
│ ├── idrs_if_model.pkl # Trained Isolation Forest model
│ ├── idrs_scaler.pkl # RobustScaler artifact
│ ├── idrs_selector.pkl # SelectKBest feature selector
│ └── idrs_features.json # Feature metadata & threshold
│
├── templates/
│ ├── login.html # Admin authentication page
│ └── index.html # Live SOC dashboard (Tailwind CSS)
│
├── data/ # CICIDS2017 dataset folder (not in repo)
│ └── .csv # Download separately (see Dataset section)
│
├── requirements.txt # Python dependencies
└── .gitignore # Excludes venv, data/.csv, models/*.pkl
```
## 快速开始
### 前置条件
- **编程语言:** Python 3.10+
- **操作系统:** Ubuntu 22.04(或兼容的 Linux 发行版)
- **权限:** `sudo` 访问权限(用于 `iptables` 和混杂模式)
- **虚拟化:** 配置了 2 个仅主机网络适配器的 Oracle VM VirtualBox(参见 [VM 拓扑](#vm-topology--network-setup))
- **网络:** 3 台 VM(IDS、攻击者、受害者),采用如上所述的内联拓扑
### 安装说明
从源码构建 IDRS 并安装依赖项:
1. **克隆代码库:**
git clone https://github.com/AimanAzmi03/AI-ASSISTED-INTRUSION-DETECTION-RESPONSE-SYSTEM.git
cd AI-ASSISTED-INTRUSION-DETECTION-RESPONSE-SYSTEM
2. **创建并激活 Python 虚拟环境:**
python -m venv venv
source venv/bin/activate
3. **安装依赖项:**
pip install -r requirements.txt
4. **初始化数据库并创建管理员用户:**
python3 init_db.py
python3 py.py
5. **训练 ML 模型(如果 models/ 文件夹为空):**
python3 retrain_model.py
### 用法
在 **IDS VM** 上,在不同的终端中运行系统组件:
**终端 1 — 启动检测引擎:**
```
sudo python3 Manual_Rules_Fast.py
```
**终端 2 — 启动仪表板:**
```
source venv/bin/activate
python3 dashboard.py
```
**访问 SOC 仪表板:**
- 在浏览器中打开:`http://192.168.56.103:5000`(或 `http://192.168.57.103:5000`)
- 使用在 `py.py` 中创建的凭据登录(默认:`admin` / `admin123`)
### 测试
IDRS 使用受控攻击模拟进行验证。在 IDS 处于活动状态时,从 **攻击者 VM** (`192.168.56.101`) 运行以下命令:
| 测试 | 命令 | 预期结果 |
|------|---------|---------------|
| **DoS 泛洪** | `sudo hping3 --icmp --flood 192.168.57.102` | 10秒内触发规则警报 + iptables 封锁 |
| **端口扫描** | `sudo nmap -sS 192.168.57.102` | 5秒内触发规则警报 + 封锁 |
| **ML 异常** | `sudo hping3 -S -p 80 --flood --rand-source 192.168.57.102` | 流超时(约 15秒)后触发 ML 警报 |
在 IDS VM 上验证封锁情况:
```
sudo iptables -L INPUT -n -v --line-numbers
sqlite3 idrs.db "SELECT * FROM alerts ORDER BY id DESC LIMIT 5;"
```
**手动解封测试:**
1. 从攻击者 VM 触发攻击
2. 确认该 IP 已在仪表板中被封锁
3. 在仪表板上点击 **解封**
4. 等待约 10 秒,让 IDS 同步循环重置跟踪器
5. 再次攻击 —— IDS 应在不重启的情况下重新检测到威胁
## 数据集
训练需要 CICIDS2017 数据集,但由于 GitHub 的 100MB 文件大小限制,未包含在此代码库中。
- **下载:** [Canadian Institute for Cybersecurity — CICIDS2017](https://www.unb.ca/cic/datasets/ids-2017.html)
- **文件放置位置:** `data/` 文件夹
- **训练必需文件:** `Monday-WorkingHours.pcap_ISCX.csv`(良性训练数据)
- **可选验证文件:** `Wednesday-workingHours.pcap_ISCX.csv`(混合流量)
## 参考文献
- Abraham, J. A., & Bindu, V. R. (2021). Intrusion Detection and Prevention in Networks Using ML & DL: A Review. *IEEE ICAECA*.
- Fernando, G.-P., Florina, A. M., & Liliana, C.-B. (2024). Evaluation of Unsupervised Learning Algorithms for Intrusion Detection. *IEEE Access*, 12, 190134–190157.
- Guo, F., et al. (2024). Information Security NIDS Based on ML. *IEEE ICDSNS*.
- Rahman, M. S., et al. (2024). Enhancing Cybersecurity with NIDS Using ML. *IEEE RAAICON*.
- Usuzaki, S., & Saito, R. (2024). An Architecture of NIDPS for Seamless Deployments. *IEEE GCCE*.
- **开发者:** Muhammad Aiman Bin Noormi (52215224160)
- **指导教师:** Ts. Wan Hazimah Wan Ismail
- **所在机构:** Universiti Kuala Lumpur, Malaysian Institute of Information Technology (UniKL MIIT)
'''
标签:Apex, Google搜索, IP 地址批量处理, Python, 异常检测, 无后门, 机器学习, 网络安全, 逆向工具, 防御系统, 防御绕过, 隐私保护