adrevnviewlab/IoT-Safeguard

GitHub: adrevnviewlab/IoT-Safeguard

基于 Flask 与 React 的本地 IoT 威胁情报控制台,提供遥测摄取、规则检测、风险评分和设备封禁联动功能。

Stars: 0 | Forks: 0

# IoT 威胁情报 本地 Flask + **React/TypeScript** **IoT 威胁情报**工具:经过身份验证的遥测数据摄取、基于规则的检测、指标 管理、设备风险评分、实时图表,以及与小型执行控制器同步的黑名单。 这**不是**生产级别的 SIEM,也**不是**实时的 SDN/Ryu/Mininet 架构。可选的 `topology.py` 脚本是遗留/演示文件,并非必需。 ## 架构 ``` device_sim.py --HMAC--> dashboard.py (/api/intel/ingest) | rule detector (ai_engine.py) | SQLite (data/threat_intel.db) v Alerts / IoCs / risk / block audit | X-Controller-Token v controller.py (:8080 block/unblock) frontend/ (Vite React TS) --session cookie--> dashboard.py APIs + SSE ``` 1. **API** (`dashboard.py`) — JSON 身份验证、数据摄取、威胁 API、SSE 指标,提供内置 SPA 服务 2. **UI** (`frontend/`) — React SPA:仪表板、监控、设备、告警、威胁情报、拓扑、黑名单 3. **检测器** (`ai_engine.py`) — 针对 packet_rate、byte_count、protocol、ports / IoC 的启发式检测 4. **设备模拟器** (`device_sim.py`) — HMAC 签名的遥测循环 5. **执行控制器** (`controller.py`) — 持久化的本地 MAC 黑名单 ## 前置条件 - Python 3.10+ - Node.js 20+(用于构建/开发 SPA) - Windows PowerShell 或任何 shell ``` pip install -r requirements.txt cd frontend npm install npm run build cd .. ``` ## 环境 将 `.env.example` 的值复制到您的 shell 中(或者在 `start_windows.ps1` 中设置它们)。 | 变量 | 用途 | |----------|---------| | `DEMO_MODE` | `1` 启用已记录的演示默认设置(仅限本地) | | `DASH_USER` / `DASH_PASS` | 仪表板登录(如果未设置 `DEMO_MODE` 则必填) | | `DASHBOARD_SECRET` | Flask session 密钥 | | `SECRET_KEY` | 用于遥测的共享 HMAC 密钥 | | `CONTROLLER_SECRET` | 用于控制器 API 的共享密钥(`X-Controller-Token`) | | `CONTROLLER_URL` | 默认为 `http://127.0.0.1:8080` | | `DASHBOARD_HOST` | 默认为 `127.0.0.1` | | `DASHBOARD_PORT` | 默认为 `5000` | | `IOT_DB_PATH` | 可选的 SQLite 路径(默认为 `data/threat_intel.db`) | | `AUTO_BLOCK_CONFIDENCE` | 自动封禁阈值(默认为 `90`) | ## 如何运行(Windows) ``` .\start_windows.ps1 ``` 构建 SPA(如果已安装 Node),然后启动: 1. 执行控制器,位于 `http://127.0.0.1:8080` 2. 仪表板 + SPA,位于 `http://127.0.0.1:5000` 3. `device_sim.py` 摄取循环 打开 **http://127.0.0.1:5000/** **演示凭据**(当 `DEMO_MODE=1` 时): - 用户名:`admin` - 密码:`changeme-demo` ### 前端开发 (HMR) ``` # Terminal A — API stack .\start_windows.ps1 # Terminal B — Vite cd frontend npm run dev ``` 打开 **http://127.0.0.1:5173/**(将 `/api` 代理到 Flask)。 ### 手动启动 ``` $env:DEMO_MODE="1" $env:SECRET_KEY="demo-secret-123" $env:CONTROLLER_SECRET="demo-controller-secret" $env:DASH_USER="admin" $env:DASH_PASS="changeme-demo" $env:DASHBOARD_SECRET="demo-dashboard-secret" cd frontend; npm run build; cd .. python controller.py python dashboard.py python device_sim.py ``` ### 健康检查 ``` GET http://127.0.0.1:5000/health GET http://127.0.0.1:8080/health ``` ## API 概览 | Endpoint | 认证 | 描述 | |----------|------|-------------| | `POST /api/auth/login` | — | JSON 登录(设置 session cookie) | | `GET /api/auth/me` | Session | 当前用户 | | `POST /api/auth/logout` | Session | 清除 session | | `POST /api/intel/ingest` | HMAC | 经过身份验证的遥测摄取 + 检测 | | `GET /api/intel/metrics` | Session | 实时图表数据包 | | `GET /api/stream` | Session | SSE:指标 / 告警 / 设备 | | `GET /api/alerts` | Session | 威胁告警信息流 | | `GET/POST /api/indicators` | Session | 列出 / 添加 IoC | | `GET /api/intel/risk` | Session | 设备风险评分 | | `GET /api/intel/blocks` | Session | 封禁/解封审计记录 | | `POST /api/devices//block\|unblock` | Session | 响应操作(同步控制器) | | `GET /health` | 无 | 存活检测 | 控制器 API(`/api/block_mac`、`/api/unblock_mac`、`/api/status`)需要请求头 `X-Controller-Token: `。 ## 测试 ``` $env:DEMO_MODE="1" $env:SECRET_KEY="demo-secret-123" pytest -q cd frontend; npm run build ``` ## 诚实的局限性 - 检测是基于**规则/启发式**的,而不是训练好的 ML 模型。 - 持久化存储是一个本地的 **SQLite** 文件(如果您删除了 `data/`,数据将会丢失)。 - 控制器是一个**本地黑名单服务**,而不是 OpenFlow/Ryu(持久化到 `data/controller_blocklist.json`)。 - 只有当控制器接受操作时,仪表板才会将设备标记为已封禁/已解封。 - 默认的演示密钥仅用于本地主机演示——对于任何需要共享的场合,请设置真实的密钥并保持 `DEMO_MODE` 为未设置状态。
标签:Flask, React, Syscalls, URL发现, 威胁情报, 安全响应, 安全检测, 开发者工具, 物联网, 自动化攻击, 设备风控, 逆向工具