ПОСИЛЕННЯ
ПРОШИВКИ
Загроза — ін'єкція команд
Протокол MAVLink — відкритий. Формат пакетів опублікований. Будь-який компетентний супротивник може побудувати передавач MAVLink з SDR і ноутбука. Без підпису автопілот не може відрізнити команду від легітимного оператора від команди від ворога. Найшкідливіша атака — не розбити дрон, а надіслати тиху команду RTL (Return To Launch). Дрон слухняно летить до координат ворога, які він встановив як «домашню» позицію. Оператор бачить, як дрон відлітає, і не може його зупинити, бо RTL-команда ворога переважає над діями оператора.
Підпис MAVLink запобігає цьому: кожна команда містить хеш SHA-256, обчислений з 32-байтним секретним ключем. Автопілот перевіряє хеш перед виконанням будь-якої команди. Без правильного ключа команда тихо відкидається. Ворог бачить дрон, але не може ним керувати. Генерація ключа: openssl rand -hex 32 дає 256-бітний випадковий ключ. Завантажується через USB при першому підключенні. Ключ існує лише на USB-диску оператора і в оперативній пам'яті дрона — ніколи не зберігається у постійній флеш-пам'яті.
Набір параметрів посилення
BRD_SERIAL_SIGNING=1: вмикає підпис MAVLink на всіх послідовних портах. Кожна вхідна команда MAVLink повинна містити дійсний HMAC-підпис. Непідписані команди відкидаються без відповіді — атакуючий не отримує жодного сигналу, що його команди відхиляються. Це єдиний найважливіший параметр посилення.
FS_THR_ENABLE=1: активує аварійне повернення за тягою. Якщо радіозв'язок втрачено довше ніж на FS_THR_VALUE секунд, дрон виконує FS_LONG_ACTN (за замовчуванням: RTL на висоті 150 м). Це запобігає «втечі дрона» — дрон, що втратив зв'язок без аварійного повернення, продовжує останню команду необмежений час, доки не сяде акумулятор, і потенційно приземляється на ворожій території з цілою електронікою та ключами шифрування.
Геозабор
GEO_FENCE_ENABLE=1 з GEO_FENCE_TYPE=7 (висота плюс коло плюс полігон): створює віртуальний кордон. Якщо дрон перетинає забор — чи то через помилку пілота, вітер або ін'єкцію команди — він автоматично повертається до точки запуску. GEO_FENCE_ALT_MAX=300 запобігає підйому дрона вище 300 м над землею, де він стає видимим для радарів і систем SAM.
Розширене аварійне повернення
AFS_ENABLE=1: Забезпечує додаткову логіку припинення польоту для катастрофічних відмов — якщо всі джерела навігації відмовляють, якщо автопілот виявляє апаратну несправність, якщо одночасно спрацьовують кілька аварійних умов. AFS_TERM_ACTION=42 запускає контрольоване припинення польоту: двигуни вимикаються, дрон передбачувано падає. Це запобігає тому, щоб неконтрольований дрон влетів у позиції своїх військ.
Вимкнення невикористаних портів
SERIAL3_PROTOCOL=-1, SERIAL4_PROTOCOL=-1, SERIAL5_PROTOCOL=-1: вимикає всі невикористані послідовні порти. Кожен відкритий послідовний порт — це поверхня атаки. Супротивник, який отримує фізичний доступ до дрона, може підключитися до невикористаного UART і впровадити команди в обхід шифрування радіорівня. Закриття невикористаних портів усуває цей вектор.
Від чого посилення НЕ захищає
Фізичне захоплення: якщо дрон сідає на ворожій території, ворог отримує обладнання. Посилення не захищає від фізичного розбирання — захоплений дрон-протокол (ключі в RAM, LUKS-зашифрований SD, без постійних секретів) розв'язує це окремо. Заградительне глушіння: посилення захищає канал команд, але не може подолати глушник, що блокує всі радіочастоти — цим займаються FHSS і CRPA. Кінетичне знищення: жоден параметр прошивки не захищає від кулі чи ракети SAM.
Посилення — лише один шар у багатошаровій архітектурі оборони; воно необхідне, але недостатнє саме по собі.
Чек-ліст перевірки посилення
Після застосування параметрів посилення перевірте, що кожен з них набув чинності. Тест 1 — підпис: з другої наземної станції без ключа підпису надішліть команду MAVLink ARM. Очікуваний результат: дрон її ігнорує. Якщо дрон озброюється — підпис не активний. Тест 2 — геозабор: летіть до межі геозабору в SITL. Очікувано: дрон автоматично повертається. Тест 3 — аварійне повернення: відключіть радіолінію.
Очікувано: дрон входить у RTL протягом налаштованого тайм-ауту. Тест 4 — скан портів: підключіть USB-serial адаптер до UART3. Очікувано: немає відповіді MAVLink (порт вимкнено). Задокументуйте всі чотири результати тестів у технічному журналі дрона. Повторюйте після кожного оновлення прошивки — параметри можуть скинутися на значення за замовчуванням під час прошивання.
Посилення прошивки — це фундамент кібербезпеки дронів. Без нього кожен інший захід безпеки обходиться на рівні прошивки. Дрон із зашифрованим MANET, але непосиленою прошивкою, приймає непідписані команди MAVLink через будь-який послідовний порт. Посилення прошивки назавжди закриває ці чорні ходи. Конфігурацію прошивки слід перевіряти після кожної зміни параметрів і перед кожним розгортанням.
← Частина Інтеграція взводу
Реалізація
# ArduPilot Security Hardening Checklist
HARDENING_PARAMS = {
# MAVLink signing — reject unsigned commands
"BRD_SERIAL_SIGNING": 1,
# Disable unused serial ports
"SERIAL3_PROTOCOL": -1, # Disabled
"SERIAL4_PROTOCOL": -1, # Disabled
"SERIAL5_PROTOCOL": -1, # Disabled
# Geofence — prevent flyaway
"GEO_FENCE_ENABLE": 1,
"GEO_FENCE_TYPE": 7, # Altitude + circle + polygon
"GEO_FENCE_ACTION": 1, # RTL on breach
"GEO_FENCE_ALT_MAX": 300, # Max 300m AGL
# Advanced failsafe
"AFS_ENABLE": 1,
"AFS_TERM_ACTION": 42, # Terminate flight on critical failure
# RC override protection
"RC_OVERRIDE_TIME": 0, # Disable RC override via MAVLink
}
# Apply all parameters
for param, value in HARDENING_PARAMS.items():
print(f"param set {param} {value}")
Пов'язані розділи
Джерела
Документація підпису MAVLink ArduPilot. Специфікація протоколу MAVLink 2.0. Посібник з налаштування аварійного повернення ArduPilot. Стандарт посилення FSG-A v3.0.