ZeinZreik/lightweight-siem-raspberrypi-iot

GitHub: ZeinZreik/lightweight-siem-raspberrypi-iot

这是一个基于树莓派和ESP32的轻量级SIEM系统,解决了物联网环境中安全事件监控和检测的挑战。

Stars: 0 | Forks: 0

# 树莓派与ESP32物联网节点的轻量级SIEM 一套面向树莓派与基于ESP32物联网实验室的紧凑型安全信息与事件管理系统监控技术栈。它通过MQTT/TLS、Syslog和CoAP/DTLS协议接收安全事件,将其归一化为通用事件模型,存储防篡改的JSONL日志,应用检测规则,并通过本地网络仪表盘实时展示活动状态。 本项目展示了一种在资源受限硬件上切实可行的嵌入式安全架构:涵盖安全的设备接入、协议解析、事件归一化、检测逻辑、哈希链日志完整性保证、固件配置以及仪表盘展示。 出于安全考虑,有意未包含Telegram通知代码和凭据。Wi-Fi凭据、MQTT证书和设备密钥均为占位符,必须在本地进行配置。 ## 问题 小型物联网实验室通常需要洞察设备行为,但完整的SIEM平台对于树莓派级部署而言过于臃肿。本项目探索了一种更精简的架构,能够从微控制器收集事件、检测可疑行为,并在无需完整服务器技术栈的情况下保存具有完整性检查的日志。 ## 系统架构 ``` flowchart LR ESP32A["ESP32 DevKit
DHT / PIR / Vibration"] -->|MQTT over TLS :8883| MQTT["Mosquitto Broker"] ESP32A -->|Syslog UDP/TCP :514| SYSLOG["Syslog Ingest"] ESP32B["ESP32-CAM"] -->|CoAP over DTLS| COAPC["Native C CoAP/DTLS Bridge"] COAPC -->|Local normalized events| COAP["Python CoAP Bridge"] MQTT --> CORE["Python SIEM Core"] SYSLOG --> CORE COAP --> CORE CORE --> PARSER["Parser + NormalizedEvent model"] PARSER --> DETECTOR["Detection Engine"] DETECTOR --> STORAGE["Tamper-evident JSONL + SHA-256 chain"] STORAGE --> DASH["Local Web Dashboard :8080"] DETECTOR --> DASH ``` ## 实现亮点 - `src/models.py` 定义了跨MQTT、Syslog和CoAP数据源使用的归一化事件模型。 - `src/parser.py` 处理JSON/文本载荷及RFC风格的Syslog解析。 - `src/detection.py` 检测温度异常、未经授权的CoAP设备、MQTT消息洪泛攻击以及重复失败的Syslog事件。 - `src/storage.py` 将事件存储为JSONL格式,并通过SHA-256哈希链连接每条记录以实现篡改检测。 - `src/dashboard_server.py` 提供本地仪表盘服务,展示实时事件、告警状态和系统资源使用情况。 - `scripts/apply_project_config.py` 通过一个YAML文件生成树莓派和固件配置头文件。 - `scripts/coap_bridge_server.c` 提供原生的CoAP/DTLS桥接层。 - `firmware/esp32-devkit-sensors/` 和 `firmware/esp32-cam-coap-dtls/` 包含设备端固件。 ## 检测覆盖 | 检测项 | 来源 | 触发条件 | 告警标识 | | --- | --- | --- | --- | | 温度超出范围 | MQTT / 解析后的传感器载荷 | 传感器值超出配置的最小/最大范围 | `TEMPERATURE_OUT_OF_RANGE` | | 未授权设备 | CoAP | 设备ID不在白名单中 | `UNAUTHORIZED_DEVICE` | | 格式错误事件 | CoAP | 缺少设备字段 | `MALFORMED_EVENT` | | MQTT洪泛攻击 | MQTT | 每单位时间窗口内消息数超过配置值 | `HIGH_TRAFFIC_RATE` | | Syslog暴力破解 | Syslog | 在时间窗口内出现重复的失败关键词 | `BRUTE_FORCE_ATTEMPT` | | 日志篡改 | 存储的JSONL/哈希文件 | 哈希链不匹配或缺失哈希项 | 完整性失败 | ## 归一化事件示例 MQTT传感器事件: ``` { "source_protocol": "mqtt", "device": "esp32-devkit-01", "event_type": "sensor_reading", "payload": { "temp_c": 24.7, "humidity": 48.2, "pir": false, "vibration": false } } ``` Syslog失败事件: ``` <11>1 2026-05-19T12:00:00Z esp32-devkit-01 auth - login - failed login from 192.168.1.50 ``` CoAP设备事件: ``` { "device": "esp32-cam-01", "event_type": "camera_motion", "motion": true } ``` ## 仓库结构 ``` src/ Python SIEM, parsers, storage, dashboard config/ Sanitized config templates scripts/coap_bridge_server.c Native CoAP/DTLS bridge source scripts/apply_project_config.py Generates Pi and firmware configs from one YAML file scripts/generate_mqtt_certs.sh Local MQTT TLS certificate generator services/start_siem_stack.sh Raspberry Pi startup script firmware/esp32-devkit-sensors/ Arduino ESP32 sensor firmware firmware/esp32-cam-coap-dtls/ ESP-IDF ESP32-CAM CoAP/DTLS firmware docs/wiring.md Wiring notes and network flow ``` ## 树莓派设置 安装系统包: ``` sudo apt update sudo apt install -y mosquitto mosquitto-clients libcoap3 libcoap3-bin libcoap3-dev build-essential pkg-config python3-pip dos2unix openssl ``` 安装Python依赖: ``` sudo pip3 install -r requirements.txt --break-system-packages ``` 创建本地项目配置: ``` cp config/project_config.example.yaml config/project_config.yaml nano config/project_config.yaml ``` 在该文件中设置树莓派IP、Wi-Fi SSID/密码、CoAP PSK、设备名称和传感器引脚。`config/project_config.yaml` 已被Git忽略,因此真实凭据可保留在本地。 检测阈值在同一文件中配置: ``` detection: temp_low_c: 10 temp_high_c: 45 mqtt_rate_window_sec: 5 mqtt_rate_threshold: 20 syslog_bruteforce_window_sec: 10 syslog_bruteforce_threshold: 5 ``` 生成所有派生配置文件: ``` python3 scripts/apply_project_config.py ``` 生成本地MQTT TLS证书: ``` chmod +x scripts/generate_mqtt_certs.sh ./scripts/generate_mqtt_certs.sh ``` 应用项目配置后,构建CoAP/DTLS桥接器: ``` gcc scripts/coap_bridge_server.c -o scripts/coap_bridge_server $(pkg-config --cflags --libs libcoap-3-openssl) chmod +x scripts/coap_bridge_server ``` 使脚本可执行: ``` dos2unix services/start_siem_stack.sh scripts/generate_mqtt_certs.sh chmod +x services/start_siem_stack.sh scripts/generate_mqtt_certs.sh ``` ## 运行SIEM ``` sudo ./services/start_siem_stack.sh ``` 访问地址: - 树莓派:`http://127.0.0.1:8080` - 网络设备:`http://:8080` 运行时日志将写入 `data/logs/` 目录。`data/` 目录已被Git忽略。 ## 固件 ### ESP32 DevKit 在Arduino IDE或PlatformIO中打开 `firmware/esp32-devkit-sensors/esp32_sensors.ino`。 所需的Arduino库: - ArduinoJson - PubSubClient - DHT sensor library 该示例通过MQTT/TLS发布周期性传感器消息,并通过Syslog发送PIR/振动事件。 ### ESP32-CAM ESP32-CAM固件使用ESP-IDF框架。启用DTLS/PSK支持: ``` cd firmware/esp32-cam-coap-dtls idf.py menuconfig ``` 启用: - Component config -> mbedTLS -> DTLS support - Component config -> mbedTLS -> TLS 1.2 support - Component config -> mbedTLS -> PSK cipher suites - Component config -> CoAP Configuration -> Pre-Shared Keys - Component config -> CoAP Configuration -> Client functionality 构建并烧录: ``` idf.py build idf.py flash monitor ``` ## 公开仓库安全注意事项 此清理后的仓库已排除: - 真实的Wi-Fi凭据 - 本地 `config/project_config.yaml` 文件 - 生成的固件和桥接器配置头文件 - Telegram机器人令牌和聊天ID - MQTT私钥和生成的证书 - 运行时事件日志和哈希文件 - Python缓存、ESP-IDF构建输出及托管的依赖文件夹 在分享或部署修改副本前,建议进行维护性扫描: ``` rg -n -i "telegram|bot_token|chat_id|ssid|password|secret|token|api_key|079|methak|AAH" . ``` ## 当前验证依据 - 从单一YAML源进行端到端的配置生成。 - 为MQTT/TLS、Syslog和CoAP/DTLS桥接流量提供独立的接收路径。 - 在 `EventStorage.verify_file_chain` 和 `verify_integrity_for_log` 中实现哈希链验证。 - 检测规则在 `Detector` 中作为独立方法实现,使得解析器和检测测试易于添加。 - 公开仓库已清理,移除了凭据、证书、生成的头文件和运行时日志。
标签:CoAP协议, DTLS加密, ESP32, IoT监控栈, JSONL格式, MQTT协议, Python, SHA-256哈希, Syslog协议, TLS加密, Web仪表盘, 事件摄取, 事件规范化, 哈希链, 固件配置, 安全事件处理, 安全信息与事件管理, 嵌入式安全, 嵌入式系统, 微控制器安全, 搜索引擎爬取, 无后门, 日志存储, 日志完整性, 时序数据库, 本地部署, 检测规则, 物联网安全, 监控, 网络协议解析, 网络安全, 网络资产发现, 设备行为分析, 轻量级架构, 逆向工具, 防篡改日志, 隐私保护