dedshivam/pisafe

GitHub: dedshivam/pisafe

一个基于树莓派与机器学习的 IoT 网络安全网关,提供主动扫描、被动流量监控与自动阻断的综合平台。

Stars: 0 | Forks: 0

# PiSafe — IoT 网络安全网关 一个综合的 IoT 网络安全平台,结合主动漏洞扫描、被动流量监控(基于 ML 的入侵检测)、ARP 欺骗用于 MITM 流量捕获、自动化设备阻断以及详细报告。设计用于在 Raspberry Pi 或类似 Linux 设备上运行。 ## 功能 ### 主动扫描 - **基于 Nmap 的网络扫描**,包含四种强度等级 — 隐蔽模式、平衡模式、激进模式、疯狂模式 - **深度扫描**,支持 SSH 凭证测试(7 组常见凭据对)和 HTTP 服务探测 - **通过 NIST NVD API v2.0 进行 CVE 查询**,并带有本地缓存 - **基于 CVSS 分数、开放端口数量和扫描强度的风险评分** ### 被动监控 - **ARP 欺骗(MITM)**,使用 Scapy 实现透明流量拦截 - **基于队列架构的实时数据包捕获**(捕获线程 → 处理线程) - **双向流构建**,支持 TCP 状态跟踪和空闲超时 - **每流 74 维特征提取**(包统计、字节计数、到达间隔时间、TCP 标志、比率、活动/空闲周期) ### 基于 ML 的入侵检测 - **混合集成方法**: - 监督随机森林(200 棵树),在 UNSW-NB15 数据集(175K+ 标记流,10 类攻击)上进行训练 - 无监督孤立森林用于基线异常检测 - 针对 DDoS、端口扫描、僵尸网络和数据外泄的基于规则的回退 - **保守投票机制** — 要求多来源一致以最小化误报 - **良性快速路径** — 对低速率流量且目标为知名端口(53、80、443 等)时跳过 ML 检测 - 模型通过 joblib 持久化至 `ml_models/` ### 自动阻断 - 基于 `iptables` 的设备阻断,支持白名单 - 在高置信度 ML 检测时自动阻断 - 速率限制(每分钟 10 次阻断)和可配置置信度阈值 ### 随机化捕获调度 - 反逃避调度,采用随机时间窗口(8–30 秒)和微间隙(50–500 毫秒) - 三种分布策略:均匀分布、指数分布、三角分布 - 在 ≥95% 占用率的同时消除可预测的监控间隙 ### 报告与导出 - 所有扫描结果以 CSV 和 HTML 格式导出(带时间戳,保存至 `reports/`) - 采用 Bootstrap 风格的 HTML 报告,按风险等级着色 ### 网络拓扑 - 使用 vis.js 展示发现的设备与连接关系的交互式图 ### 实时仪表板 - 基于 WebSocket 的实时更新(Socket.IO),用于警报、流和状态 - 使用服务器发送事件(SSE)展示主动扫描进度 ## 技术栈 | 类别 | 技术 | |---|---| | 后端 | Flask、Flask-SocketIO、Flask-CORS | | 实时 | WebSockets(Socket.IO)、服务器发送事件 | | 数据库 | SQLite3 | | 扫描 | python-nmap | | 数据包捕获 / ARP | Scapy | | SSH 探测 | Paramiko | | 机器学习 | scikit-learn(RandomForest、IsolationForest)、joblib | | 数据处理 | Pandas、NumPy | | CVE 数据 | NIST NVD API v2.0 | | 网络检测 | netifaces | | 阻断 | iptables | | 前端 | Jinja2 模板、Bootstrap 5、Chart.js、vis.js | ## 项目结构 ``` pisafeV3/ ├── main.py # Entry point — starts Flask-SocketIO on port 5000 ├── app.py # Flask app with all routes, API endpoints, and WebSocket handlers ├── database.py # SQLite schema (7 tables) and helper functions ├── network_utils.py # Network/interface detection utilities ├── background_scanner.py # Threaded scan runner with progress tracking ├── active_scan/ │ ├── scanner.py # Nmap scanning engine (4 intensity levels) │ ├── deep_scan.py # SSH brute-force + HTTP service probing │ ├── cve_lookup.py # NIST NVD API client with file-based cache │ └── risk_analyzer.py # CVSS-based risk scoring ├── passive_monitoring/ │ ├── monitor_manager.py # Central orchestrator for the passive pipeline │ ├── arp_spoofer.py # ARP spoofing (MITM) with auto-discovery │ ├── packet_capture.py # Scapy live capture with packet queue │ ├── flow_builder.py # Bidirectional flow grouping │ ├── feature_extractor.py # 74-feature vector extraction per flow │ ├── ml_detector.py # Hybrid ML ensemble (RF + IF + rules) │ ├── attack_dataset.py # UNSW-NB15 dataset loader and mapper │ ├── blocker.py # iptables-based device blocking │ └── scheduler.py # Randomized capture window scheduler ├── reporting/ │ └── export_report.py # CSV and HTML report generation ├── templates/ # Jinja2 HTML templates │ ├── base.html # Layout with nav (Home, Topology, Reports, Monitor) │ ├── home.html # Dashboard with scan form │ ├── scan_status.html # Real-time scan progress (SSE) │ ├── scan_detail.html # Per-device vulnerability details │ ├── reports.html # Scan results listing │ ├── topology.html # Network topology graph (vis.js) │ └── passive_monitor.html # Passive monitoring dashboard ├── static/ │ └── style.css # Custom styles ├── reports/ # Generated CSV/HTML reports ├── ml_models/ # Saved ML model files (joblib) ├── datasets/ # Training datasets (UNSW-NB15) └── pyproject.toml # Python dependencies ``` ## 先决条件 - **Python 3.11+** - **Nmap** 已安装并在 PATH 中(`sudo apt install nmap`) - **Root/sudo 权限** — ARP 欺骗、数据包捕获和 iptables 阻断需要 - **Linux** — 使用 `/proc/sys/net/ipv4/ip_forward` 和 iptables ## 安装 ``` # 克隆仓库 git clone cd pisafeV3 # 创建并激活虚拟环境 python3 -m venv venv source venv/bin/activate # 安装依赖 pip install -e . # 或:pip install flask flask-socketio flask-cors python-nmap scapy paramiko scikit-learn pandas numpy netifaces joblib # 设置所需环境变量 export SESSION_SECRET="$(python3 -c 'import secrets; print(secrets.token_hex(32))')" # 可选:NIST NVD API 密钥用于更高的速率限制 export NIST_CVE_API_KEY="your-api-key-here" # 或使用 .env 文件 cat > .env << 'EOF' SESSION_SECRET= NIST_CVE_API_KEY= EOF export $(cat .env | xargs) ``` ## 运行 被动监控和 ARP 欺骗需要 root 权限。请使用 `sudo -E` 运行以保留环境变量: ``` sudo -E venv/bin/python main.py ``` 应用将在 **http://0.0.0.0:5000** 启动。 ## 环境变量 | 变量 | 是否必需 | 描述 | |---|---|---| | `SESSION_SECRET` | **是** | Flask 会话密钥。缺少该变量应用将无法启动。 | | `NIST_CVE_API_KEY` | 否 | NVD API 密钥,用于提高 CVE 查询速率限制。 | ## 数据库 启动时自动创建 SQLite 文件(`pisafe.db`)。包含以下数据表: | 表名 | 用途 | |---|---| | `devices` | 扫描设备(IP、MAC、主机名、操作系统、开放端口、风险评分) | | `vulnerabilities` | 与设备关联的 CVE | | `scan_progress` | 活跃扫描任务追踪 | | `flows` | 带有 ML 分类的网络流记录 | | `alerts` | 攻击与异常警报 | | `blocked_devices` | 已阻断设备记录 | | `baseline_profiles` | 每个设备的 ML 基线配置文件 | | `passive_monitor_status` | 被动监控器状态 | ## API 端点 所有 JSON API 端点均位于 `/api/` 下: | 端点 | 方法 | 描述 | |---|---|---| | `/api/home` | GET | 仪表板摘要 | | `/api/devices` | GET | 所有设备及其 CVE 数量 | | `/api/devices/` | GET | 单个设备及漏洞信息 | | `/api/scan` | POST | 启动扫描 | | `/api/scan//progress` | GET | 扫描进度 | | `/api/topology` | GET | 网络拓扑图数据 | | `/api/network/interfaces` | GET | 可用网络接口 | | `/api/passive/status` | GET | 监控状态 | | `/api/passive/alerts` | GET | 近期警报 | | `/api/passive/flows` | GET | 近期流 | | `/api/passive/blocked` | GET | 已阻断设备 | | `/api/passive/stats` | GET | 完整的被动监控统计 | ## 许可证 本项目作为大学主修项目开发。
标签:Apex, ARP欺骗, CTI, CVE, CVE映射, CVSS, DDoS检测, HTTP服务探测, IoT安全, IoT安全网关, iptables, Linux网关, MITM, ML异常检测, Nmap, NVD, Raspberry Pi, SEO关键词, SSH凭证测试, Talos规则, TCP状态跟踪, UNSW-NB15, 主动扫描, 作业持久化, 保守投票, 入侵防御, 内存执行, 反规避, 固件分析, 多线程捕获, 孤立森林, 安全网关, 异常检测, 快速路径, 数字签名, 数据统计, 本地缓存, 机器学习, 模型持久化, 流量捕获, 流量特征提取, 流量队列, 物联网安全, 特征工程, 空闲超时, 端口扫描, 网络安全, 网络拓扑, 置信度阈值, 自动化阻断, 虚拟驱动器, 被动监控, 规则回退, 设备白名单, 逆向工具, 随机森林, 随机调度, 隐私保护, 集成学习, 风险评分