SagarBiswas-MultiHAT/BF-IDS_Project_Proposal
GitHub: SagarBiswas-MultiHAT/BF-IDS_Project_Proposal
基于树莓派与ESP32的嵌入式入侵检测系统,通过行为指纹和Isolation Forest实现零日攻击检测。
Stars: 5 | Forks: 0
# 项目提案
**项目标题:** BF-IDS:基于行为指纹增强的嵌入式入侵检测系统及实时仪表板
**课程:** MICROPROCESSOR AND EMBEDDED SYSTEM
**专业:** 计算机科学工程学士 (BSc in CSE)
**团队:** Sagar Biswas(团队尚未最终确定。如果保持现状,未来我将作为个人项目继续进行)。
**指导教师:** Md Sajid Hossain
**学期:** 2025-2026,春季
[](https://github.com/SagarBiswas-MultiHAT/BF-IDS_Project_Proposal/actions/workflows/ci.yml)
[](LICENSE)
[](https://github.com/SagarBiswas-MultiHAT/BF-IDS_Project_Proposal/issues)
[](https://github.com/SagarBiswas-MultiHAT/BF-IDS_Project_Proposal/issues?q=is%3Aissue%20state%3Aclosed)
[](https://sagarbiswas-multihat.github.io/BF-IDS_Project_Proposal/)
## 1. 执行摘要
本项目提出了一种低成本、实用且新颖的**基于行为指纹增强的嵌入式入侵检测系统 (BF-IDS)**,该系统构建在 Raspberry Pi 4 之上,并配有可选的 ESP32 卫星节点。其核心理念很简单:不仅依赖固定的规则或已知的攻击签名,系统还会学习网络中每个设备的正常行为,并在某些设备的表现与平时不同时发出警报。
大多数现有的 IDS 工具(如 Snort 或 Suricata)通过将流量与已知攻击模式的数据库进行匹配来工作。这对已知攻击很有效,但完全无法检测新的或零日 (zero-day) 攻击。我们的系统在此基础上增加了一个行为指纹层——每个设备随时间建立自己的流量习惯档案,任何偏离该档案的意外情况都会触发警报,即使没有匹配的签名存在。
此外,该系统支持通过 ESP32 节点进行分布式监控,这些节点通过 MQTT 连接回 Raspberry Pi 主节点。这使得可以使用廉价硬件同时监控多个网段。
该系统还实时捕获网络流量,通过 Email 和 Telegram 发送警报,使用防火墙规则自动阻止恶意 IP,并通过基于 Web 的仪表板显示所有信息。重点在于构建一个可运行、可复现且文档齐全的系统,以便进行适当的测试和评估。
## 2. 目标
- 使用 C 和 libpcap 在嵌入式平台上构建可靠的数据包捕获管道。
- 使用基于规则的检测方法检测常见攻击,例如端口扫描、ICMP 洪水、暴力登录尝试和流量突然激增。
- 从实时网络流量构建**每设备行为指纹档案**,跟踪数据包大小分布、协议比率、活动/休眠周期和主要目的地等特征。
- 纯粹通过发现设备自身正常档案的行为偏差来检测**零日和隐蔽攻击**——无需预先编写的签名。
- 支持使用 ESP32 卫星节点进行**分布式监控**,这些节点通过 MQTT 将流量数据发送到 Raspberry Pi 主节点。
- 当检测到任何异常或规则违规时,通过 Email 和 Telegram 发送实时警报。
- 使用带有适当故障保护机制的 iptables 自动阻止恶意 IP,以避免错误阻止。
- 提供基于 Flask 的实时仪表板,包含每设备指纹可视化、事件日志和管理控制面板。
- 诚实地评估性能——检测率、误报率、延迟和资源使用情况——并以可复现的方式记录所有内容。
## 3. 系统概述
整个系统在 Raspberry Pi 4 上作为中央节点运行。ESP32 开发板作为可选的卫星节点,监控远程网段并通过 MQTT 转发数据。
主要模块包括:
- 使用 C 和 libpcap 编写的数据包捕获模块——以低延迟处理原始数据包捕获。
- 无锁环形缓冲区——安全地将数据包从捕获线程传递给 Python 工作进程,而不会减慢速度。
- 预处理工作器——从原始数据包中提取流特征和每设备流量统计信息。
- **行为指纹引擎**——为网络中看到的每个设备构建和维护流量行为档案。使用 Isolation Forest 实时检测偏差。
- 检测引擎——结合基于规则的检测、统计异常检测(EWMA, z-score)和行为指纹偏差评分。
- 响应管理器——通过 iptables 阻止 IP,触发警报,通过 GPIO 控制 LED 和蜂鸣器。
- SQLite 数据库——存储事件日志、设备指纹档案和配置。
- 带有 WebSocket 更新的 Flask 仪表板——显示实时流量、每设备行为和管理控制。
- **MQTT 节点管理器**——从 ESP32 卫星节点收集数据并将其输入主管道。
更新的数据流:
```
[ESP32 Nodes] --MQTT--> [Node Manager]
|
[NIC] -> [libpcap capture] -> [Ring Buffer] -> [Preprocessor + Feature Extractor]
|
+-----------+-----------+
| | |
[Rule Engine] [Anomaly Engine] [Fingerprint Engine]
| | |
+-----------+-----------+
|
[Response Manager + Logger]
|
[Dashboard]
```
## 4. 检测设计
### 基于规则的检测
- **端口扫描:** 当单个源 IP 在滑动时间窗口内探测过多的唯一目标端口时触发。
- **ICMP 洪水:** 当来自某个源的每秒 ICMP 数据包数超过可配置阈值时触发。
- **暴力登录:** 通过在短时间窗口内来自同一 IP 的重复失败 HTTP POST 登录尝试来检测。
- **可疑流量激增:** 当数据包速率偏离 EWMA 基线超过 K 个标准差时触发。
### 统计异常检测
- 对常见协议的数据包负载分布进行熵检查。
- 对数据包大小和数据包速率进行每 IP z-score 计算,以捕捉异常行为。
- 如果时间允许,可选的轻量级流模型。
### 行为指纹引擎(新增——核心创新点)
这是 BF-IDS 与普通 IDS 的主要区别所在。
网络上的每个设备都有其“流量个性”——它自己的正常习惯。智能灯泡通常只发送微小的状态数据包。笔记本电脑的流量多样,但遵循一定的节奏。安防摄像头持续将数据流式传输到特定目的地。这些模式对于每个设备都是独一无二的。
行为指纹引擎在训练窗口期间学习这些模式,然后实时监控偏差。每个设备跟踪的特征包括:
```
- avg_packet_size (normal size range for this device)
- packet_size_std (how much size varies normally)
- protocol_ratio (TCP : UDP : ICMP split)
- dominant_destinations (which IPs/ports it usually talks to)
- inter_arrival_time (how often it sends packets)
- bytes_per_hour (hourly traffic baseline)
- sleep_wake_pattern (when it is usually active or quiet)
- new_dest_rate (how often it contacts new destinations)
```
在每个设备的这些特征上训练 **Isolation Forest** 模型。当设备的实时统计数据相对于其自身档案被评为异常时,引擎会发出行为警报。这可以捕捉到如下情况:
- 智能插座突然开始端口扫描(设备受损)
- 摄像头流式传输到新的未知目的地(数据渗透)
- 设备突然从主要是 TCP 流量变为主要是 UDP 流量(隧道传输)
- 设备在通常空闲的不寻常时间保持活动
这里的关键优势是**所有这些都不需要预先了解攻击**。它甚至适用于加密流量,因为我们查看的是流量元数据,而不是负载内容。
### 误报缓解
- 将已知受信任且永远不应被阻止的主机列入白名单。
- 在自动阻止之前,需要至少两个独立检测器(例如,规则引擎和指纹引擎)达成一致。
- 低于可配置置信度分数的行为警报仅记录日志,但不触发自动阻止。
- 管理员可以从仪表板手动覆盖并解除对 IP 的阻止。
- 在已知维护窗口期间表现出异常行为的设备可以暂时进入仅观察模式。
## 5. 实施计划与技术
**数据包捕获:**
- C + libpcap 用于热路径——这是在 Linux 上抓取数据包的最快方法
**核心处理:**
- Python 3.11 与多处理
- scikit-learn——用于行为指纹异常评分的 Isolation Forest
- numpy 和 pandas——特征向量管理和统计计算
- joblib——在 Raspberry Pi 上保存和加载训练好的指纹模型
**分布式节点:**
- 使用 Arduino C++ 和 FreeRTOS 编写的 ESP32 固件
- 用于 ESP32 → Raspberry Pi 通信的 MQTT 协议
- 在 Raspberry Pi 上运行的 Mosquitto broker
**仪表板:**
- Flask + Flask-SocketIO
- Chart.js——实时流量图表和每设备指纹可视化
**存储:**
- SQLite——事件日志、设备指纹档案、配置
- Redis(可选)——用于高速规则检查的临时计数器
**测试工具:**
- nmap, hping3, tcpreplay——用于模拟攻击
- 用于回放 pcap 文件的自定义 Python 脚本
**部署:**
- 用于启动时自动运行的 systemd 服务
- 可选的 Dockerfile,以便在其他机器上轻松复现
## 6. 测试与评估
**计划测试:**
- 针对每个规则检测器和指纹偏差评分器的单元测试
- 从捕获到响应的完整管道集成测试
- 行为指纹测试——在良性流量上训练,然后引入攻击流量并测量检测情况
- 压力测试,以测量高负载下的丢包、CPU 和内存情况
- 使用无攻击的重度良性流量进行的误报测试
**关键指标:**
- 检测率和误报率——针对基于规则和行为检测两者
- 从数据包到达 to 生成警报的平均时间
- 从警报到 IP 阻止的平均时间
- 正常和压力条件下的 CPU 和 RAM 使用情况
- 捕获管道中的丢包率
**目标目标:**
- 检测延迟低于 2 秒
- 在良性基准流量上的误报率低于 5%
- 在目标每秒数据包基线下的丢包率低于 1%
- 设备受损场景的行为指纹检测率高于 80%
## 7. 安全与道德
所有测试都将在私有的受控实验室网络中进行。未经明确许可,不会在任何网络或设备上运行测试。公开发布的日志数据将在共享前进行匿名化处理。威胁模型文档将解释该系统设计用于防御什么以及不防御什么。负责任的测试程序将记录在最终报告中。
## 8. 交付成果
- 具有模块化布局、单元测试和集成测试的完整源代码
- 用于实验室环境复现的训练好的指纹模型和训练脚本
- Dockerfile 和 systemd 服务脚本
- 架构图和序列图
- 测试脚本、录制的 pcap 文件和流量模拟脚本
- 带有图表的性能和评估报告
- 5–7 分钟的演示视频和演示幻灯片
- 包含可能的问题和答案的答辩附录
## 9. 时间表(8 周)
- **第 1 周:** 环境搭建,C 语言捕获模块原型,环形缓冲区实现与测试
- **第 2 周:** 预处理工作器和特征提取器;编写测试流量模拟脚本
- **第 3 周:** 实现核心基于规则的检测和单元测试;开始从实验室设备被动收集指纹数据
- **第 4 周:** 实现统计异常检测器(EWMA, z-score);构建行为档案构建器并训练初始 Isolation Forest 模型
- **第 5 周:** 响应管理器,iptables 自动化,GPIO 警报集成;设置 MQTT broker 和 ESP32 节点固件
- **第 6 周:** 仪表板开发,包含管理控制和每设备指纹可视化面板
- **第 7 周:** 全面压力测试,指纹模型调优,误报率基准测试,阈值校准
- **第 8 周:** 文档编写,演示录制,最终报告撰写,演示准备
## 10. 风险分析与缓解
- **高负载下的丢包:** 通过基于 C 的捕获线程和无锁环形缓冲区设计来缓解;Python 工作器独立运行,不会阻塞捕获路径
- **设备更新或重启期间的行为误报:** 通过在已知更改期间将设备置于仅观察模式来缓解;自动阻止前配置有冷静期
- **指纹模型随时间漂移:** 通过计划的重新训练窗口和仪表板上的手动重新训练选项来缓解
- **基于规则的检测器的误报:** 通过在触发自动阻止之前需要两个检测器的关联来缓解
- **SD 卡损坏或 Pi 崩溃:** 通过只读 rootfs 选项、定期配置备份和 ESP32 上的硬件看门狗来缓解,该看门狗可以在需要时重启 Pi
- **ESP32 节点离线:** 主系统继续运行;离线节点会被记录并显示在仪表板上
## 11. 预算估算
- Raspberry Pi 4(推荐 4 GB):10,000 – 15,000 BDT
- ESP32 开发板(用于卫星节点和/或 GPIO 控制器):800 – 1,500 BDT
- MicroSD 卡和配件:~1,000 BDT
不需要付费服务。GeoLite2、Mosquitto MQTT broker 和所有使用的通知 API 在基本级别上都是免费的。
### 为什么选择 ESP32?
- 内置 WiFi 和 Bluetooth 使其易于无线连接到主 Pi
- 双核处理器和 FreeRTOS 支持允许并行运行 MQTT 客户端和传感器任务
- 多个 GPIO 引脚可用于 LED、蜂鸣器和其他硬件警报
- 在孟加拉国非常便宜且广泛可用
- 可以充当硬件看门狗,在主系统挂起时重启 Pi
- 借助 MQTT,多个 ESP32 节点可以监控不同的网段并向一个中央 Pi 报告
### ESP32 在本项目中的角色
- 卫星 IDS节点——监控单独的网段并通过 MQTT 向 Pi 发送流量摘要
- 专用 GPIO 警报控制器——独立于 Pi 处理 LED 和蜂鸣器警报
- 硬件看门狗——如果错过心跳信号则重启 Pi
- 可选的未来扩展:添加更多 ESP32 节点以构建完全分布式的 IDS 网格
## 12. 仓库布局
```
bf-ids/
|
|-- README.md # Project overview and setup guide
|-- LICENSE # MIT License
|-- .gitignore
|-- requirements.txt # Python dependencies
|-- Makefile # Build automation for C capture module
|-- config.yaml # Default runtime configuration
|
|-- capture/ # High-performance packet capture (C + libpcap)
| |-- src/
| | |-- capture.c
| | |-- ring_buffer.c
| | |-- ring_buffer.h
| |-- include/
| |-- build/
| |-- README.md
|
|-- core/ # Core processing logic
| |-- preprocessor/
| | |-- flow_builder.py
| | |-- packet_parser.py
| |
| |-- fingerprint/ # Behavioral Fingerprinting Engine (NEW)
| | |-- profile_builder.py # learns normal behavior per device
| | |-- deviation_scorer.py # real-time anomaly scoring (Isolation Forest)
| | |-- feature_vectors.py # feature extraction from flow data
| | |-- model_store/ # saved trained models per device MAC
| | |-- README.md
| |
| |-- detector/
| | |-- rules/
| | | |-- port_scan.py
| | | |-- icmp_flood.py
| | | |-- brute_force.py
| | |
| | |-- anomaly/
| | | |-- ewma.py
| | | |-- zscore.py
| | |
| | |-- engine.py # combines rule + anomaly + fingerprint scores
| |
| |-- database/
| |-- models.py
| |-- storage.py
|
|-- nodes/ # Distributed ESP32 Satellite Nodes (NEW)
| |-- esp32_satellite/ # ESP32 firmware
| | |-- main.cpp
| | |-- mqtt_client.cpp
| | |-- watchdog.cpp
| | |-- README.md
| |-- mqtt_broker_config/ # Mosquitto broker config for RPi
| |-- node_manager.py # RPi side: collects and parses ESP32 data
|
|-- response/ # Enforcement and alert handling
| |-- firewall.py
| |-- alert_service.py
| |-- gpio_controller.py
| |-- watchdog_interface.py
|
|-- dashboard/ # Web UI
| |-- app.py
| |-- templates/
| |-- static/
| |-- websocket.py
|
|-- configs/
| |-- development.yaml
| |-- production.yaml
|
|-- tests/
| |-- unit/
| |-- integration/
| |-- fingerprint/ # Fingerprint training and eval scripts (NEW)
| | |-- train_profiles.py
| | |-- eval_detection.py
| |-- traffic_simulation/
| | |-- nmap_scripts/
| | |-- hping_tests/
| | |-- replay_pcaps/
| |-- sample_pcaps/
|
|-- scripts/
| |-- setup.sh
| |-- run.sh
| |-- reset_firewall.sh
| |-- train_fingerprints.sh # shortcut to retrain all device profiles (NEW)
|
|-- docs/
| |-- architecture.md
| |-- sequence_flow.md
| |-- fingerprint_design.md # explains the behavioral fingerprinting approach (NEW)
| |-- performance_report.md
| |-- threat_model.md
| |-- viva_notes.md
|
|-- docker/
| |-- Dockerfile
| |-- docker-compose.yml
|
|-- ci/
|-- github-actions.yml
```
## 13. 架构图
以下是 BF-IDS 的架构图。它显示了作为中央节点的 Raspberry Pi、ESP32 卫星节点、所有处理模块以及它们如何连接在一起。

### 图表摘要
将系统想象成一个监控整栋大楼的安保办公室,在不同的门处设置了多个检查站。
- **检查站(ESP32 卫星节点):** 每个 ESP32 放置在网络的不同部分,就像把守不同门的保安。节点 A 以混杂模式嗅探 WiFi 流量,总结其看到的内容,并通过 MQTT 将报告发回主办公室。节点 B 充当专用的硬件警报控制器——它监听通过 MQTT 发出的警报信号,并在检测到某些情况时触发 LED 或蜂鸣器。两个节点都有一个内置的硬件看门狗,可以自动重启自身或 Ping Pi 以确认系统仍然存活。
- **主办公室(Raspberry Pi 4):** 这是中央处理中心。所有流量——既来自其自身的 NIC,也来自通过 MQTT 的 ESP32 节点——都到达这里,并经过完整的检测管道。
- **前台(NIC + libpcap 捕获线程):** NIC 在混杂模式下运行,这意味着它会拾取网络上的所有数据包,而不仅仅是它自己的。基于 C 的捕获线程在数据包到达时立即抓取每个数据包。之所以专门用 C 语言编写,是因为 Python 对于这部分来说太慢了。
- **传送带(无锁环形缓冲区):** 捕获的数据包立即被推送到环形缓冲区——这是一种快速的共享内存结构,允许 C 捕获线程和 Python 工作器交换数据而不会相互干扰。它是 O(1) 的,这意味着无论进入多少数据包,它都不会变慢。
- **记录员(预处理器 + 特征提取器):** Python 工作器从缓冲区中提取数据包并提取有用信息——谁发送的、去向哪里、什么协议、多大、此类数据包到达的频率。这成为所有三个检测引擎的输入。
- **三个并行运行的检测引擎:**
- **规则引擎** 检查已知的恶意模式,如端口扫描、ICMP 洪水和暴力登录尝试。
- **异常引擎** 使用 EWMA 和 z-score 跟踪统计基线,并标记突然的偏差。
- **行为指纹引擎** 是该系统新的核心部分。它已经了解了网络上每个设备的正常流量外观。如果任何设备开始表现不同——与新目的地通信、改变其协议组合、在奇怪的时间唤醒——引擎会使用 Isolation Forest 模型注意到并对偏差进行评分。
- **存储:** 事件存储 使用 SQLite 记录所有检测结果和配置。指纹模型存储保存每个设备训练好的 Isolation Forest 模型,按 MAC 地址保存和加载。
- **事件响应团队(响应管理器):** 当检测引擎以足够的置信度发出警报时,响应管理器介入。它告诉防火墙使用 iptables 阻止攻击者 IP,通过 Email 或 Telegram 发送警报消息,并通过 WebSocket 向仪表板推送实时通知。
- **控制室(仪表板 + 配置管理器):** 管理员可以实时看到所有内容——每设备指纹健康状况、活动事件、被阻止的 IP 和系统资源使用情况。阈值、白名单和指纹灵敏度都可以从仪表板更改,而无需重启任何内容。
- **外部服务**,如 GeoIP (GeoLite2) 和通知 API(SMTP, Telegram Bot)被有意保持在 Raspberry Pi 边界之外。它们仅在需要时调用,并且永远不会处于关键检测路径中。
## 14. 序列图
### 第 1 部分——实时数据包处理与检测
此图显示了从数据包到达网络到做出检测决策之间发生的事情。

### 图表摘要
- **数据包捕获:** 数据包到达 NIC。libpcap 捕获线程使用中断驱动的方法立即抓取它。数据包在 O(1) 时间内被推入环形缓冲区,然后被 Python 预处理器提取。如果 ESP32 卫星节点也检测到了某些东西,节点管理器会将该数据注入相同的预处理管道。
- **特征提取:** 预处理器将数据包数据发送给特征提取器,后者为该设备构建特征快照——大小、协议、目的地、时间、熵。特征提取器还要求指纹引擎从模型存储中加载该设备训练好的 Isolation Forest 模型。
- **三个引擎并行运行:**
- 规则引擎检查已知的攻击模式。
- 异常引擎计算 EWMA 和 z-score 与基线的偏差。
- 指纹引擎对当前流量偏离设备正常行为档案的程度进行评分。
- 所有三个引擎将其结果记录到 SQLite。指纹引擎还更新模型存储中的运行设备档案。
- **三种可能的结果:**
- 如果两个或更多引擎一致认为存在攻击,响应管理器将以高置信度被触发。它在 iptables 中阻止该 IP,通过 Email 和 Telegram 发送警报,并向仪表板推送实时警报。
- 如果只有指纹引擎标记了某些东西,它将被视为中等置信度的行为异常。警告被记录并显示在仪表板上,但不会发生自动阻止——管理员需要先审查它。
- 如果所有引擎报告流量正常,仪表板计数器会静默更新,设备档案会刷新。
### 第 2 部分——管理控制、指纹训练和节点健康
此图涵盖了系统的管理方面——管理员可以做什么、指纹模型如何训练以及如何监控 ESP32 节点。

### 图表摘要
- **管理员对中等警报的响应:** 当仪表板显示行为警告时,管理员可以将其确认为可疑(这会在 iptables 中触发手动 IP 阻止并记录该操作)或将其作为误报驳回(这将把设备添加到白名单并放宽该设备的指纹阈值)。
- **指纹档案训练:** 训练可以由管理员手动触发,或按计划自动运行。触发时,指纹引擎从 SQLite 提取目标设备的历史良性流量记录,在这些特征向量上拟合新的 Isolation Forest 模型,并将更新后的模型保存到按设备 MAC 地址索引的指纹模型存储中。带有模型准确性的训练摘要显示在仪表板上。
- **ESP32 卫星节点健康检查:** 每 30 秒,每个 ESP32 节点向节点管理器发送心跳 ping。节点管理器更新 SQLite 中节点的最后可见时间戳,并刷新仪表板上的状态指示器。如果节点连续错过三次心跳,节点管理器会向仪表板推送节点离线事件,然后通知管理员。主检测系统继续正常运行——丢失卫星节点不会停止任何工作。
- **管理员配置更改:** 从仪表板,管理员可以更新检测阈值、将受信任的主机添加到白名单或解除对先前被阻止 IP 的阻止。所有更改都会实时推送到规则引擎、异常引擎和指纹引擎,而无需重启系统。所有内容都持久化到 SQLite,因此设置在重启后依然有效。
## 15. 指纹引擎——内部设计
此图显示了行为指纹引擎如何在内部处理每个设备的流量,包括新设备的学习阶段和已知设备的偏差评分阶段。

### 图表摘要
指纹引擎根据之前是否见过某设备,以两种完全不同的模式工作。
- **特征提取器通道:** 通过预处理器的每个数据包都会为其源设备生成一个特征向量。该向量包括八个特征:平均数据包大小、数据包大小标准差、协议比率(TCP vs UDP vs ICMP)、主要目的地、到达间隔时间、每小时字节数、休眠/唤醒模式和新目的地比率。此向量被移交给指纹引擎。
- **对于已知设备(档案已存在):**
- 引擎使用设备的 MAC 地址作为键从模型存储加载训练好的 Isolation Forest 模型。
- 它根据训练好的档案对实时特征向量进行评分。
- 偏差分数范围从 0.0(完全正常)到 1.0(高度异常)。
- 如果分数高于 HIGH 阈值,警报级别设置为 HIGH——这可能意味着设备已受损或正在受到主动攻击。
- 如果分数高于 MEDIUM 阈值但低于 HIGH,警报级别设置为 MEDIUM——行为异常,需要人工审查。
- 如果分数正常,警报级别保持 NONE,运行档案统计信息使用滑动窗口更新,以便模型保持最新。
- **对于新的或未知的设备(尚无档案):**
- 引擎进入学习模式并开始为该设备收集干净的流量。
- 默认训练窗口为 30 分钟,但可以从管理仪表板更改。
- 在训练窗口期间,所有特征向量都累积在临时的内存缓冲区中。在此阶段不进行评分,因此不会对新设备发出错误警报。
- 一旦训练窗口完成,将在收集的特征向量上拟合新的 Isolation Forest 模型,保存到模型存储,并且设备被标记为 PROFILED。
- 从那时起,该设备被视为已知设备,偏差评分开始。
- **响应管理器通道:**
- 如果 alert_level 为 HIGH,结果将带有高置信度标志转发给响应管理器。有资格进行自动阻止,但在实际发生之前仍需要至少两个引擎达成一致。
- 如果 alert_level 为 MEDIUM,软警报将直接发送到仪表板。管理员收到通知并可以审查它,但不会自动阻止任何内容。
- 如果 alert_level 为 NONE,引擎只需将控制权返回给特征提取器,以便它可以处理下一个传入的数据包。
## 16. 局限性与未来工作
### 当前的局限性
- 仅在受控实验室环境中测试——现实世界的互联网流量噪音更大,需要更仔细的阈值调整。
- 行为指纹模型需要仅有正常流量的干净训练期。如果攻击流量混合到训练窗口中,档案将是错误的。
- Isolation Forest 效果很好,但不是最强大的异常检测算法。选择它是因为它可以在 Raspberry Pi 上运行而不会扼杀性能。
- Raspberry Pi 4 的资源仍然有限。非常高的流量速率(几百 Mbps 以上)可能会导致丢包。
- ESP32 节点目前是被动的报告者——它们自己不做出阻止决定。所有执行都集中在 Pi 上。
### 未来工作
- 用更强大的流模型(如 RRCF(稳健随机切割森林))替换 Isolation Forest,该模型专为时间序列异常检测而设计。
- 添加 DNS 隧道和 TLS 指纹检测作为新的规则模块。
- 构建适当的分布式执行模式,其中 ESP32 节点可以使用自己的 GPIO 连接继电器模块在本地阻止流量。
- 向仪表板添加攻击热图和更长的趋势历史记录。
- 针对现实世界的基准数据集(如 UNSW-NB15 或 CIC-IoT-2023)测试系统,以获得适当的学术评估数据。
- 探索直接在 ESP32 上运行微小的量化 ML 模型,以进行设备上的行为评分,而无需向 Pi 报告。
## 17. 快速问答(重要术语)
#### ICMP 洪水
- **是什么:** 一种发送大量 ICMP ping 数据包以压倒目标的攻击。
- **为何相关:** 最常见且最容易发起的 DoS 攻击之一。在实验室中易于模拟,并且易于使用简单的每秒数据包规则进行检测。
#### 流量激增
- **是什么:** 短时间内流量急剧突然增加。
- **为何相关:** 可能是正常的(软件更新开始)或恶意的(DDoS 攻击开始)。背景很重要——这正是 EWMA 有助于区分的情况。
#### libpcap
- **是什么:** 一个 C 库,允许程序直接从内核级的网络接口捕获原始网络数据包。
- **为何相关:** 它是 Linux 上数据包捕获的标准工具。我们在捕获模块中使用它,因为它比基于 Python 的替代方案快得多。
#### 无锁环形缓冲区
- **是什么:** 一种循环内存缓冲区,生产者和消费者可以在不使用锁或互斥锁的情况下操作。
- **为何相关:** 当进行高速数据包捕获时,锁会减慢一切。无锁设计允许捕获线程和 Python 工作器全速运行,而不会相互阻塞。
#### 行为指纹
- **是什么:** 根据设备在网络上的正常行为——它使用什么协议、与谁通信、发送多少数据、何时活动——为其构建唯一流量档案的过程。
- **为何相关:** 这是 BF-IDS 的核心创新。它允许检测受损或行为异常的设备,而无需预先了解攻击的样子。
#### Isolation Forest
- **是什么:** 一种专门为异常检测设计的机器学习算法。它通过随机划分数据并检查隔离特定数据点的难易程度来工作——异常点会被快速隔离。
- **为何相关:** 它轻量级,适用于小型训练集,并且在 Raspberry Pi 上运行速度足够快。非常适合实时评分行为偏差。
#### MQTT
- **是什么:** 一种轻量级的发布-订阅消息协议,专为受限设备和低带宽网络而设计。
- **为何相关:**32 卫星节点将其流量摘要发布到 MQTT 主题。Raspberry Pi 订阅并处理它们。它是分布式节点和中央系统之间的粘合剂。
#### EWMA
- **是什么:** 指数加权移动平均——一种给近期值更多权重、给旧值更少权重的移动平均。
- **为何相关:** 帮助跟踪每个设备数据包速率的“正常”基线。如果当前速率急剧上升并远高于 EWMA 基线,则会被标记为可疑。
#### z-score
- **是什么:** 一个表示数值距离均值多少个标准差的数字。
- **为何相关:** 用于检测统计上异常的行为,例如设备突然发送比平时大得多或小得多的数据包。
#### GPIO 引脚
- **是什么:** Raspberry Pi 或 ESP32 上的通用输入/输出引脚,可以编程为读取信号或输出信号。
- **为何相关:** 用于控制物理硬件,如 LED 或蜂鸣器,在检测到攻击时提供可见和可听的警报。
#### UART
- **是什么:** 一种使用两根线——TX(发送)和 RX(接收)——在两个设备之间发送数据的串行通信方法。
- **为何相关:** 可用于连接 Raspberry Pi 和 ESP32,作为发送警报信号的简单可靠的通信链路。
#### I2C
- **是什么:** 一种两线通信协议(SDA 用于数据,SCL 用于时钟),支持同一总线上有多个设备。
- **为何相关:** 当多个传感器或模块需要同时连接到 Pi 时,减少接线复杂性。
#### 分布式 IDS 节点
- **是什么:** 一个独立监控自己网段并向中央系统报告发现的独立设备。
- **为何相关:** 使系统更具可扩展性和弹性。如果一个节点发生故障,其他节点继续工作。在本项目中,ESP32 开发板充当分布式节点。
#### NIC(网络接口卡)
- **是什么:** 物理连接设备到网络的硬件组件。
- **为何相关:** NIC 是所有数据包首先到达的地方。libpcap 直接从这里捕获数据包。
## 18. 项目开发说明
该项目最初是作为学术课程提交的基本嵌入式 IDS 提案开始的。在回顾了现有工具和 IoT 安全的当前趋势后,很明显仅靠基于规则的检测是不够的——大多数现实世界的 IoT 入侵涉及现有签名无法捕捉到的行为变化。这种认识导致了行为指纹层的添加,这现在是该项目的核心差异化因素。
该提案经历了多次修订。当前的 README 代表第二个主要版本——与最初的草案相比,升级了行为指纹、分布式 ESP32 节点支持和更诚实的评估计划。
*编写者:Sagar Biswas*
*日期:27-02-2026(修订于:06-03-2026)*
标签:Apex, ESP32, Flask, GPIO控制, iptables, MIT许可, Raspberry Pi, Snort替代方案, Web仪表盘, 入侵检测系统, 内存执行, 分布式架构, 孤立森林, 安全数据湖, 嵌入式安全, 异常检测, 搜索引擎查询, 无监督学习, 机器学习, 毕业设计, 物联网安全, 物联网通信, 硬件告警, 红队行动, 网络安全, 自动封禁, 行为指纹, 请求拦截, 边缘计算, 逆向工具, 隐私保护, 零日攻击检测