AlanJoseph7/sky-gate

GitHub: AlanJoseph7/sky-gate

SkyGate 是一个基于三层机器学习集成的实时 ADS-B 飞行异常检测系统,旨在发现航空数据中的伪造与异常行为。

Stars: 0 | Forks: 0

# ✈️ SkyGate — ADS-B 异常检测系统 航空网络安全 · ADS-B · 异常检测 ## 🎯 这是什么? SkyGate 是一个 **实时航空网络安全系统**,它使用三层 AI/ML 检测管道来检测 ADS-B(自动相关监视—广播)数据中的伪造和异常行为。 ADS-B 是商业飞机用来广播其位置的系统。由于其 **没有认证或加密**,攻击者可以: - 在雷达显示中注入伪造的飞机 - 将真实飞机传送到错误的位置 - 伪造不可能的飞行行为以混淆空中交通管制 SkyGate 是一个 **检测系统** — 它通过规则、机器学习和深度学习协同工作来识别这些攻击。模型使用 **实时 ADS-B 馈源**(通过 OpenSky Network 和 adsb.lol)以及 **合成异常注入数据** 进行训练,并且系统支持在印度空域进行 **实时监控**。 ## 🏆 结果 | 检测器 | 精确率 | 召回率 | F1 分数 | |---|---|---|---| | 基于规则 | 0.9055 | 0.7625 | **0.8279** | | 孤立森林 | 0.4631 | 0.6693 | 0.5474 | | 自动编码器(深度学习) | 0.5601 | 0.4580 | 0.5039 | | 🏅 **最终集成** | **0.7097** | **0.8307** | **0.7654** | ## 🏗️ 系统架构 ``` ┌─────────────────────────────────────────────────────────┐ │ SKYGATE PIPELINE │ ├─────────────────────────────────────────────────────────┤ │ │ │ [1] generator.py → ADS-B Data Ingestion │ │ ↓ Live feed: OpenSky + adsb.lol │ │ Synthetic: anomaly injection │ │ 6 anomaly types · mixed dataset │ │ │ │ [2] features.py → Feature Engineering │ │ ↓ climb rate · acceleration │ │ heading change · distance │ │ │ │ [3] rules.py → Rule-Based Detection │ │ ↓ Physics threshold violations │ │ F1: 0.83 · Precision: 0.91 │ │ │ │ [4] isolation_ → Isolation Forest (ML) │ │ forest.py ↓ Unsupervised · trained on normals │ │ F1: 0.55 · Recall: 0.67 │ │ │ │ [5] lstm_model.py → Feedforward Autoencoder (DL) │ │ ↓ Reconstruction error detection │ │ F1: 0.50 · Bottleneck: 2 neurons │ │ │ │ [6] detect.py → Weighted Ensemble │ │ ↓ Dynamic F1-based weights │ │ F1: 0.77 · Recall: 0.83 │ │ │ │ [7] evaluation.py → Full Metrics Report │ │ [8] visualize.py → 4 Diagnostic Plots │ │ [9] live_monitor → Real-Time ADS-B Feed │ │ OpenSky + adsb.lol · 30s interval │ │ │ └─────────────────────────────────────────────────────────┘ ``` ## 🚨 检测到的异常类型 | 异常 | 类型 | 检测器 | |---|---|---| | **高度跳跃** | 突然 ±5000–10000 英尺尖峰 | 规则 + IF | | **传送** | 不可能的经纬度跳跃 | 规则 + IF | | **速度尖峰** | 速度超过物理限制 | 规则 + IF | | **速度渐变漂移** | 10 步内累积加速度 | 自动编码器 | | **高度振荡** | ±1500–2500 英尺快速振荡模式 | 自动编码器 | | **航向振荡** | ±20–45° 之字形航向模式 | 自动编码器 | ## 🧠 技术栈 ``` Language : Python 3.11 ML : scikit-learn (Isolation Forest, MinMaxScaler) Deep Learning: TensorFlow 2.16 + tf-keras (Feedforward Autoencoder) Data : pandas, numpy Live Feed : OpenSky Network API · adsb.lol API (Indian airspace) Visualisation: matplotlib Environment : CPU-only · 16GB RAM · No GPU required · Zero cost ``` ## 📁 项目结构 ``` SkyGate/ │ ├── src/ │ ├── generator.py # ADS-B data ingestion (live + synthetic) │ ├── features.py # Feature engineering pipeline │ ├── rules.py # Rule-based anomaly detection │ ├── isolation_forest.py # Isolation Forest detector │ ├── lstm_model.py # Feedforward Autoencoder detector │ ├── detect.py # Weighted ensemble combiner │ ├── evaluation.py # Metrics and evaluation │ ├── visualize.py # Plot generation │ ├── main.py # Single entry point │ └── utils.py # Shared constants and path helpers │ ├── data/ │ ├── adsb_raw.csv # Raw ADS-B data (live + synthetic) │ ├── adsb_features.csv # Engineered features │ ├── adsb_rules.csv # After rule detection │ ├── adsb_if.csv # After Isolation Forest │ ├── adsb_lstm.csv # After Autoencoder │ ├── adsb_final.csv # Final ensemble results │ └── plots/ # Generated visualisations │ ├── models/ # Saved model files ├── logs/ # Training and live monitoring logs ├── requirements.txt └── README.md ``` ## ⚡ 快速开始 ### 1. 克隆并设置环境 ``` <<<<<<< HEAD git clone https://github.com/AlanJoseph7/sky-gate.git ======= git clone https://github.com/AlanJoseph7/skygate.git >>>>>>> 570cd86794631274e805174c8b78800ecfde3062 cd skygate python -m venv venv venv\Scripts\activate # Windows # source venv/bin/activate # Mac/Linux pip install -r requirements.txt ``` ### 2. 配置 API 凭证 将你的凭证添加到 `utils.py` 或 `.env` 文件: ``` OPENSKY_USERNAME = "your_opensky_username" OPENSKY_PASSWORD = "your_opensky_password" # adsb.lol is open — no key required ``` ### 3. 运行完整管道(实时 + 合成) ``` cd src python main.py ``` 就这样。一条命令按顺序运行所有步骤 — 获取实时 ADS-B 数据,注入合成异常进行训练,运行检测管道,并打印最终汇总表。 ### 4. 运行实时监控模式 ``` cd src python main.py --live ``` 每 30 秒获取印度空域上的真实 ADS-B 数据并持续运行完整检测管道。 ### 5. 运行单个步骤 ``` cd src python generator.py # Fetch live data + generate synthetic data python features.py # Engineer features python rules.py # Rule-based detection python isolation_forest.py # Isolation Forest python lstm_model.py # Autoencoder python detect.py # Ensemble python evaluation.py # Evaluate python visualize.py # Plot ``` ## 📊 视觉输出 该管道生成 4 张图表并保存到 `data/plots/`: | 图表 | 描述 | |---|---| | `trajectory.png` | 带有红色标记异常的飞行路径 | | `lstm_error.png` | 随时间变化的重建误差及阈值线 | | `error_distribution.png` | 正常与异常误差直方图 — 显示模型分离效果 | | `detector_comparison.png` | 各检测器检测到的异常数量与真实标签对比 | ## 🔍 集成检测器如何工作 每个检测器以其 F1 分数为权重进行投票: ``` weight_rule = F1_rule / (F1_rule + F1_IF + F1_autoencoder) weight_IF = F1_IF / (F1_rule + F1_IF + F1_autoencoder) weight_AE = F1_AE / (F1_rule + F1_IF + F1_autoencoder) final_score = weight_rule * rule_anomaly + weight_IF * if_anomaly + weight_AE * lstm_anomaly # Best threshold found via F1 sweep over [0.1, 1.0] final_anomaly = final_score >= best_threshold ``` 这意味着 **如果自动编码器性能下降,它会自动失去投票权**。该集成具有自校正能力。 ## 💡 关键设计决策 **为什么同时使用实时和合成数据?** 从 OpenSky 和 adsb.lol 获取的实时 ADS-B 数据提供了印度空域的真实正常飞行行为,确保模型学习到真实的交通模式。然后将合成异常注入这些真实数据中用于监督训练和评估,因为真实的标记攻击数据无法公开获取。 **为什么使用前馈自动编码器而不是 LSTM?** 最初使用了 LSTM 自动编码器,但其异常/正常重建比率约为 ~0.97x — 实际上接近随机。前馈自动编码器独立评估每一行,使得异常特征组合直接表现为重建误差尖峰。最终比率:1.55x。 **为什么在集成中使用动态 F1 权重?** 硬编码权重(例如 0.4/0.3/0.3)无法适应检测器的实际性能。动态权重意味着集成会自动偏向当前数据集上表现最强的检测器。 **为什么在缩放前裁剪异常值?** 异常值(例如传送:每步 500 公里)主导了 MinMaxScaler 的范围,将所有正常变化压缩到接近零。将数据裁剪到正常数据的 4σ 可以在保持异常信号完整的同时保留正常特征的变化。 ## 📋 需求 ``` numpy==1.26.4 pandas==2.2.2 matplotlib==3.9.0 scikit-learn==1.5.0 tensorflow-cpu==2.16.1 tf-keras==2.16.0 keras==3.3.3 requests==2.31.0 ``` ## ⚠️ 约束与特性 - ✅ 零成本 — OpenSky 和 adsb.lol 是免费 API - ✅ 完全本地化 — 在 CPU 上运行,无需 GPU - ✅ 实时可行 — 印度空域实时监控 - ✅ 可重现 — 全程使用固定随机种子(`RANDOM_SEED = 42`) - ✅ 模块化 — 每个管道步骤均可独立运行
标签:ADS-B, adsb.lol, OpenSky, TCP/UDP协议, 三层集成学习, 位置欺骗, 印度空域, 合成数据注入, 在线学习, 孤立森林, 实时异常检测, 广播式自动相关监视, 异常注入, 数据融合, 无认证协议, 时序异常检测, 机器学习管道, 深度学习, 网络仪表板, 网络流量分析, 自编码器, 航空网络安全, 航迹异常, 规则检测, 逆向工具, 飞行器监控