Развитие защиты ardupilot от GPS‑спуфинга

Все статьи

Эволюция методов защиты от джамминга и спуфинга GPS в ArduPilot (до версии 4.7)

Ниже представлена хронология развития функций защиты от помех (jamming) и спуфинга (spoofing) GPS в прошивке ArduPilot, основанная на официальной документации и репозитории проекта.


Хронологическая таблица

ВерсияГодФункция защитыОписание
3.1-rc3Октябрь 2013GPS Glitch Protection (базовая)Первая реализация: сравнение новой позиции с экстраполированной из предыдущей; параметры GPSGLITCH_RADIUS (5 м) и GPSGLITCH_ACCEL (10 м/с²)
3.2–3.32014–2015EKF1/EKF2 интеграцияВнедрение расширенного фильтра Калмана для оценки состояния; базовая проверка инноваций (innovation checks) для отклонения аномальных измерений GPS
3.4Октябрь 2016EKF2 по умолчаниюУлучшенная статистическая проверка согласованности измерений через EKF_POS_GATE, EKF_VEL_GATE; защита от резких скачков позиции
3.5Июль 2017Поддержка визуальной одометрииВозможность использования не-GPS источников (Visual Odometry, Pozyx) для резервирования при потере/спуфинге GPS
3.6Октябрь 2018ChibiOS + улучшенный драйвер GPSПоддержка более надёжной обработки сообщений от u-blox; подготовка к приему флагов спуфинга/джамминга от приёмников
4.0Декабрь 2019EKF3 по умолчанию + параметр EK3_OPTIONSДобавлен бит 0 JammingExpected: при потере сигнала >2 сек требуется повторная проверка качества перед возобновлением использования GPS
4.1Октябрь 2021Улучшенное переключение между двумя GPSПараметр GPS_AUTO_SWITCH с режимом «Use best» и «Blend»; EKF3 affinity для переключения целых «полос» фильтра при ухудшении здоровья датчика
4.2Май 2022Поддержка флагов u-blox M9N/F9PНачата обработка сообщений UBX-NAV-SAT/UBX-NAV-PVT с флагами spoofDet и jammingState; отображение в логах и MAVLink
4.3Октябрь 2022Улучшенная логика EKF_GLITCH_RADПри длительном несовпадении (> EKF_GLITCH_RAD) применяется плавный оффсет к позиции (1 м/с), а не резкий скачок; снижает риск ухода при спуфинге
4.4Август 2023Двойной резервный канал в EKF3Возможность назначения разных источников (GPS1/GPS2) разным EKF- lanes; автоматическое отключение «загрязнённого» канала
4.5Апрель 2024Расширенная диагностика спуфингаДобавлены сообщения лога GPS_SPOOF, GPS_JAM; интеграция с DroneCAN-совместимыми приёмниками (ARK, CUAV), передающими статус защиты
4.6Май 2025Улучшения в GPS_DRV_OPTIONSБит 3: маршрутизация данных RTK через CAN между двумя приёмниками без участия автопилота — снижает поверхность атаки; бит 4: выбор типа высоты (AMSL/ellipsoid) для согласованности при спуфинге высоты
4.7(в разработке, ~2025–2026)Предварительная детекция спуфинга на предполётной проверкеЭкспериментальная функция: анализ расхождений между барометром, компасом и «подозрительным» положением до взлёта; обсуждается в сообществе

Ключевые параметры защиты (актуальные на 4.6)

Базовая защита (Glitch Protection)

GPSGLITCH_RADIUS      = 5.0    # Макс. отклонение позиции (м)
GPSGLITCH_ACCEL       = 10.0   # Макс. ускорение для проверки (м/с²)

Продвинутая защита через EKF3

EKF_POS_GATE          = 5.0    # Порог инноваций позиции (σ)
EKF_VEL_GATE          = 5.0    # Порог инноваций скорости (σ)
EKF_GLITCH_ACCEL      = 1.5    # Ускорение для роста «круга неопределённости» (м/с²)
EKF_GLITCH_RAD        = 50.0   # Порог для активации плавного оффсета (м)
EK3_OPTIONS bit 0     = 1      # JammingExpected: строгая проверка после потери сигнала

Переключение и резервирование

GPS_AUTO_SWITCH       = 1      # 0=Primary, 1=Best, 2=Blend, 4=Primary-if-3D
GPS_PRIMARY           = 0      # Выбор основного приёмника
EKF3_SRC1_GPS / SRC2_GPS # Назначение источников для разных EKF-полос

Ограничения и рекомендации

  1. Аппаратная зависимость: ArduPilot полагается на флаги спуфинга/джамминга от приёмника (u-blox M9N/F9P, Septentrio, Unicore). Без поддержки на уровне железа программная защита ограничена детекцией аномалий [[60]][[65]].
  2. RTK и спуфинг: При использовании RTK важно, чтобы базовая станция была защищена. ArduPilot не проверяет подлинность корректирующих данных — уязвимость для атак на инфраструктуру.
  3. EKF3 не панацея: Фильтр отклоняет статистически несогласованные измерения, но изощрённый спуфинг с плавным «перетягиванием» позиции может пройти проверку. Рекомендуется комбинация:
  • Два независимых GPS с разными антеннами
  • Визуальная одометрия или оптический поток (для низколетящих аппаратов)
  • Мониторинг расхождений между барометром и высотой GPS
  1. Логирование для пост-анализа: Включите LOG_BITMASK с флагами EKF3, GPS и NAV для последующего выявления атак:
   LOG_BITMASK += EKF3 + GPS + NAV + MSG

Где искать актуальную информацию

💡 Совет: Если вы используете ArduPilot без RTK (как в вашем случае), настройте EK3_OPTIONS = 1 (JammingExpected) и GPS_AUTO_SWITCH = 1 для автоматического выбора более надёжного приёмника при наличии двух модулей. Это повысит устойчивость к кратковременным помехам без усложнения системы.

Для получения самых свежих данных по версии 4.7 рекомендую отслеживать официальный блог ArduPilot и репозиторий на GitHub, так как функционал продолжает активно развиваться.

Прокрутить вверх