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, 主动扫描, 作业持久化, 保守投票, 入侵防御, 内存执行, 反规避, 固件分析, 多线程捕获, 孤立森林, 安全网关, 异常检测, 快速路径, 数字签名, 数据统计, 本地缓存, 机器学习, 模型持久化, 流量捕获, 流量特征提取, 流量队列, 物联网安全, 特征工程, 空闲超时, 端口扫描, 网络安全, 网络拓扑, 置信度阈值, 自动化阻断, 虚拟驱动器, 被动监控, 规则回退, 设备白名单, 逆向工具, 随机森林, 随机调度, 隐私保护, 集成学习, 风险评分