chaoticgamin4life-cell/SP2026-Capstone-IoT-IDS

GitHub: chaoticgamin4life-cell/SP2026-Capstone-IoT-IDS

一个部署在树莓派上的混合机器学习入侵检测/防御系统,用于实时保护物联网网络免受HTTP和LoRa层攻击。

Stars: 0 | Forks: 0

# 物联网实时网络入侵防御系统 *一种混合机器学习方法* **Andrew Banda · James Ivy · Emmanuel Mehn** | 指导教师:Joseph Meier 本系统是一个部署在**Raspberry Pi 4**上的功能完备的混合型入侵检测/防御系统,能够为实时物联网传感器网络提供实时自主保护,无需云端依赖、无需手动干预、无需企业级硬件。该系统结合了跨越两个物理层(HTTP和LoRa无线电)的三个互补的机器学习模型。 ## 网络架构 ``` ┌─────────────────────────────────────────────────────┐ │ Raspberry Pi 4 (10.42.0.1) │ │ ┌──────────────────────────────────────────┐ │ │ │ IDS/IPS Engine │ │ │ │ ├── Isolation Forest (HTTP layer) │ │ │ │ ├── BiLSTM (HTTP layer) │ │ │ │ └── CNN-LSTM (LoRa layer) │ │ │ └──────────────────────────────────────────┘ │ │ Wireless AP · HTTP Server · LoRa Receiver │ └──────────┬───────────────────┬─────────────────────┘ │ Wi-Fi │ Wi-Fi ┌──────┴──────┐ ┌──────┴──────────┐ │ Pico W ×3 │ │ Kali Purple │ │ Sensor │ │ (10.42.0.99) │ │ Nodes │ │ Attack Machine │ └─────────────┘ └─────────────────┘ LoRa 923 MHz ┌──────────────────────┐ │ Pico W ×2 │ │ + SX1262 hats │ │ Transmitter / RX │ └──────────────────────┘ ``` | 设备 | IP | 角色 | |---|---|---| | Raspberry Pi 4 | 10.42.0.1 | IPS引擎、HTTP服务器、LoRa数据汇聚点 | | Pico-1 (温度) | 10.42.0.215 | 传感器节点 | | Pico-2 (运动) | 10.42.0.71 | 传感器节点 | | Pico-3 (湿度) | 10.42.0.210 | 传感器节点 | | Kali Purple | 10.42.0.99 | 攻击模拟 | | LoRa 发射器 Pico | — | 模拟正常与恶意无线电数据包 | | LoRa 接收器 Pico | 10.42.0.225 | 通过HTTP POST将无线电数据包转发至Pi | ## 三个模型 ### 2. BiLSTM — HTTP层 (监督学习,时序处理) 一个双向LSTM网络,同时从正向和反向处理HTTP请求序列,能够捕捉单请求评分方法可能遗漏的时序攻击模式,特别是那些仅在请求序列中才显现的慢速攻击(如Slow Loris)。它使用与隔离森林相同的五个HTTP特征进行处理。在测试集上实现了**零漏报**,通过捕获隔离森林的单请求评分可能低估的渐进式时序攻击,展示了与隔离森林的强互补性。 ### 3. CNN-LSTM — LoRa无线层 一个在SX1262模块的Pico W节点(工作频率923 MHz)收集的无线电遥测数据上训练的CNN-LSTM混合模型。将IPS覆盖范围扩展到物理无线层,能够检测到纯HTTP入侵检测系统无法发现的攻击。Conv1D层检测数据包流中的突发模式;堆叠的LSTM层检测数据包间延迟和信号特征中较慢的时序漂移。 **特征:** | 特征 | 描述 | |---|---| | `delta_t` | 发送与接收之间的时间戳差 | | `abs_delta_t` | 将正向突发和负向陈旧攻击信号合并为单一大值 | | `hw_rssi` | 来自SX1262的硬件RSSI | | `hw_snr` | 来自SX1262的硬件SNR | | `ipd` | 数据包间延迟 | | `ipd_ratio` | 当前IPD与滚动中位数之比——突发攻击会使该值趋近于零 | **结果:** 60%攻击召回率 · 4.5%误报率 · AUC ~0.80 ![CNN-LSTM 训练过程](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/d9f4c8ce42064738.png) ![CNN-LSTM 混淆矩阵](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/32e46b11e7064738.png) ![阈值扫描](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/78d8b9e4d2064739.png) ## 测试的攻击场景 | 攻击 | 工具 | 描述 | |---|---|---| | HTTP DoS洪泛 | curl flood脚本 | 针对所有端点的高频率HTTP GET洪泛 | | Slow Loris | slowhttptest | 最多1000个同时不完整的HTTP连接 | | SYN洪泛 | hping3, Metasploit `auxiliary/dos/tcp/synflood` | 伪造的TCP SYN包耗尽连接表 | | LoRa重放 | 自定义Pico发射器 | 快速重放合法负载——通过异常IPD检测 | | LoRa Join洪泛 | 自定义Pico发射器 | 向`/join`端点泛滥发送伪造的OTAA Join请求 | 所有攻击均在隔离的实验室内网中,针对项目团队拥有的设备进行。 ## 数据集 | 指标 | 数值 | |---|---| | 训练记录总数 | 166,750 | | 正常HTTP记录 | 140,000+ | | 攻击HTTP记录 | 35,500 | | 传感器节点 | 3个 Pico W | | LoRa节点 | 2个 Pico W + SX1262模块 | | 攻击机器 | Kali Purple | ## 文件概览 ### IDS/IPS 引擎 | 文件 | 描述 | |---|---| | `IDS_IsolationForest_PI6.py` | 隔离森林IPS引擎——运行在Raspberry Pi上 | | `IDS_model_training.py` | 离线隔离森林训练流程 | | `train_model_windows.py` | 适用于Windows的备用训练脚本 | | `ids_model.pkl` | 序列化的已训练隔离森林模型 | ### LoRa 流程 | 文件 | 描述 | |---|---| | `lora_server.py` | Pi上的Flask服务器——从接收器Pico接收LoRa数据包,拆分为正常/攻击JSONL | | `Transmitter_Main.py` | MicroPython LoRa发射器——模拟正常(10秒间隔)和攻击(0.5秒突发) | | `Reciever_Main.py` | MicroPython LoRa接收器——解码数据包,提取RSSI/SNR,转发至Pi | | `train_lora_lstm.py` | 离线CNN-LSTM训练——特征工程、序列窗口化、阈值扫描 | | `lora_attack_detector.h5` | 序列化的已训练CNN-LSTM模型 | | `lora_scaler.pkl` | 在LoRa训练数据上拟合的RobustScaler——需与模型一同部署 | | `sx1262.py` / `sx126x.py` / `_sx126x.py` | SX1262 LoRa无线电MicroPython驱动程序 | ### 传感器节点 | 文件 | 描述 | |---|---| | `Pico_1.py` | 温度/湿度传感器节点固件 | | `Pico_2.py` | 运动/光敏传感器节点固件 | | `Pico_3.py` | 湿度/土壤湿度传感器节点固件 | | `serversniff.py` | 被动HTTP收集服务器(用于初始数据收集阶段) | ### 数据 | 文件 | 描述 | |---|---| | `sensor_data.json` | 正常HTTP传感器流量——隔离森林训练数据 | | `attack_data.json` | 通用HTTP攻击记录 | | `DOS_attack_data.json` | DoS洪泛记录 | | `attack_slow_loris.json` | Slow Loris记录 | | `attack_port_scan.json` | 端口扫描记录 | | `timesync_attack_data.json` | NTP/时间同步攻击记录 | | `lora_attack_data.jsonl` | LoRa攻击数据包——CNN-LSTM训练 | | `lora_normal_data.json` | LoRa正常数据包——CNN-LSTM训练 | | `ids_alerts.log` | 部署期间的实时IPS警报日志 | ## 设置与部署 ### 前提条件 **Raspberry Pi:** ``` pip install scikit-learn numpy flask tensorflow joblib ``` **Windows / 桌面(仅用于训练):** ``` pip install scikit-learn numpy pandas matplotlib tensorflow joblib ``` ### 步骤 1 — 训练隔离森林 ``` python IDS_model_training.py --normal sensor_data.json # 输出:ids_model.pkl、ids_results.png ``` ### 步骤 2 — 训练CNN-LSTM LoRa模型 首先从Pi复制 `lora_normal_data.jsonl` 和 `lora_attack_data.jsonl`,然后: ``` python train_lora_lstm.py --normal lora_normal_data.jsonl --attack lora_attack_data.jsonl # 输出:lora_attack_detector.h5、lora_scaler.pkl、lora_training.png、lora_confusion.png、lora_threshold.png ``` 检查阈值扫描输出,在部署配置中使用最佳F1值对应的阈值。 ### 步骤 3 — 部署到Raspberry Pi 将以下文件复制到Pi:`IDS_IsolationForest_PI6.py`, `ids_model.pkl`, `lora_attack_detector.h5`, `lora_scaler.pkl` ``` sudo python3 IDS_IsolationForest_PI6.py --model ids_model.pkl --port 80 ``` ### 步骤 4 — 刷写Pico W传感器节点 在Thonny中打开每个文件或使用 `mpremote`。刷写前: - 将WiFi凭据占位符替换为您网络的SSID和密码 - 确认 `PI_IP` 与您的Pi地址匹配(默认为 `10.42.0.1`) | 文件 | 节点 | |---|---| | `Pico_1.py` | 温度/湿度 | | `Pico_2.py` | 运动/光敏 | | `Pico_3.py` | 湿度/土壤湿度 | ### 步骤 5 — 刷写LoRa Pico节点 将 `sx1262.py`, `sx126x.py`, 和 `_sx126x.py` 复制到两个LoRa Pico。将 `Transmitter_Main.py` 刷写到发射器,`Reciever_Main.py` 刷写到接收器。接收器还需要有效的WiFi凭据才能将数据POST回Pi。 ### 步骤 6 — (可选)收集新的LoRa训练数据 停止IDS引擎,然后运行独立的LoRa收集服务器: ``` sudo python3 lora_server.py --host 10.42.0.1 --port 80 # 写入:lora_normal_data.jsonl、lora_attack_data.jsonl ``` ## IPS 配置参考 ### 隔离森林 (`IDS_IsolationForest_PI6.py`) ``` ANOMALY_SCORE_THRESHOLD = -0.5 # Scores below this are flagged (more negative = more anomalous) ANOMALY_THRESHOLD = 5 # Strikes before ban BAN_DURATION_SECS = 120 # Ban duration in seconds SLOWLORIS_CONN_LIMIT = 10 # Concurrent open connections before Slowloris flag HEADER_SIZE_BYTES = 200 # HTTP overhead added to content-length for packet_size feature ``` ### CNN-LSTM(`train_lora_lstm.py`) ``` TIME_STEPS = 20 # Sliding window size in packets THRESHOLD = 0.35 # Classification threshold — set from best F1 in threshold sweep EPOCHS = 100 BATCH_SIZE = 64 ``` ## HTTP 端点 | 端点 | 方法 | 描述 | |---|---|---| | `/sensor` | POST | 周期性传感器遥测 | | `/alert` | POST | 阈值触发的传感器警报 | | `/diagnostics` | POST | 节点健康状况(空闲内存、循环计数) | | `/join` | POST | 连接时的节点注册 | | `/lora` | POST | LoRa无线电遥测(RSSI, SNR, IPD) | | `/status` | GET | 服务器健康状况——在终端打印实时统计 | | `/ntp` | GET | 用于Pico节点的时间同步 | ## 实时终端输出 IDS引擎打印一个带颜色编码的实时仪表板,显示每个请求的状态、异常分数、攻击计数以及累计的允许/拦截/禁止总数。 ![正常流量](https://raw.githubusercontent.com/chaoticgamin4life-cell/SP2026-Capstone-IoT-IDS/main/pics/normal_traffic.png) *正常运行——所有传感器请求通过,异常评分为正值* ![Slowloris 检测](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/ff02639a65064740.png) *Slow Loris 攻击——连接洪泛触发攻击累积和IP禁止* ![BiLSTM 和 LoRa](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/8a054c4179064741.png) *BiLSTM + CNN-LSTM 活跃——LoRa攻击数据包与HTTP异常一同被标记* ## 分层防御总结 | 层 | 模型 | 处理对象 | |---|---|---| | HTTP — 流量型 | 隔离森林 | DoS、SYN洪泛、端口扫描——速率和负载异常 | | HTTP — 时序型 | BiLSTM | Slow Loris、跨请求序列演变的渐进式攻击 | | LoRa无线层 | CNN-LSTM | 重放攻击、Join洪泛、数据包间时序异常 | ## 技术栈 **语言:** Python 3, MicroPython **机器学习/数据:** scikit-learn · TensorFlow/Keras · numpy · pandas · matplotlib · joblib **硬件:** Raspberry Pi 4 · Raspberry Pi Pico W ×5 · Semtech SX1262 LoRa HAT ×2 **网络:** HTTP stdlib · Flask · LoRa 923 MHz · Wi-Fi热点 (hostapd) **攻击工具:** Kali Purple · hping3 · slowhttptest · Metasploit · curl ## 安全说明 - **WiFi凭据在Pico固件文件和`Reciever_Main.py`中是硬编码的。** 在推送到公共仓库前,请替换为占位符或使用配置文件。 - `ids_alerts.log`文件包含来自测试网络的真实IP地址——发布前请审查。 - 所有攻击测试均在隔离的实验室内网进行。未对生产环境或第三方系统发起任何攻击。 ## 作者 **Andrew Banda** — 隔离森林模型与训练流程,IPS引擎架构(实时评分、攻击计数/禁止逻辑、Slowloris检测、特征提取),系统整体集成 **James Ivy** — BiLSTM模型,HTTP时序序列检测 **Emmanuel Mehn** — CNN-LSTM LoRa模型,SX1262硬件集成,发射器/接收器Pico固件 指导教师:**Joseph Meier** ## 参考文献 - Panneerslevi, R., and Visumathi J. "Temporal Intrusion Detection for MQTT-Based IoT Networks Using LSTM Sequence Modeling." *IEEE Xplore*, 2026. - Hamza, Kaddour, and Das Shaibai. "Evaluating the Performance of Machine Learning-Based Classification Models for IoT Intrusion Detection." *IEEE Xplore*, 2024. - S, Snehaa, et al. "Network Intrusion Detector Based on Isolation Forest Algorithm." *IEEE Xplore*, 2023. - Schuster, M., & Paliwal, K. K. "Bidirectional Recurrent Neural Networks." *IEEE Transactions on Signal Processing*, 1997.
标签:HTTP协议安全, LoRa网络安全, Raspberry Pi, 传感器网络, 入侵检测系统, 入侵防御系统, 内存执行, 威胁猎捕, 安全数据湖, 实时保护, 密钥泄露防护, 嵌入式系统, 异常检测, 无云部署, 机器学习安全, 深度学习, 混合系统, 物联网安全, 网络安全, 自主防御, 轻量级安全, 边缘计算, 隐私保护