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) **检测、响应、防御 —— 始终领先一步** ![Python](https://img.shields.io/badge/Python-3.10%2B-blue) ![Flask](https://img.shields.io/badge/Flask-2.0%2B-black) ![Scapy](https://img.shields.io/badge/Scapy-Live%20Capture-green) ![scikit-learn](https://img.shields.io/badge/scikit--learn-Isolation%20Forest-orange) ![License](https://img.shields.io/badge/License-Academic%20Project-lightgrey) ## 目录 - [概述](#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, 异常检测, 无后门, 机器学习, 网络安全, 逆向工具, 防御系统, 防御绕过, 隐私保护