Содержание статьи
В прошлой статье я уже говорил, что ADS-B — это часть большого протокола Mode S, который активно используется для идентификации и отслеживания воздушных судов. ADS-B позволяет отслеживать летательные аппараты, на которых установлен специальный транспондер. Он регулярно передает данные о самолете: высоту, координаты, скорость и многое другое. Принять их может любой желающий, так как никакой защиты или шифрования в протоколе не предусмотрено.
На этот раз мы полностью сосредоточимся на передаче своего сигнала ADS-B. Чтобы никому не помешать, принимать мы его тоже будем на свой приемник. Учти: это вовсе не пособие по оснащению самолетов транспондерами. Скорее мы будем использовать этот любопытный пример для демонстрации того, как кто‑то может разобрать и подделать любой незащищенный сигнал.
warning
Ни при каких обстоятельствах не повторяй все это за пределами своей лаборатории! Работа в эфире без разрешения может повлечь за собой ответственность по закону. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации.
Тестовый полигон
Тестовое окружение необходимо, чтобы видеть, что мы делаем, но при этом не влиять на оборудование аэропортов. Вряд ли они оценят наши эксперименты! Зато ущерб вполне могут оценить, а сумму выставить к оплате. Чтобы этого избежать, я взял два SDR и использовал на минимальной мощности в экранирующем помещении. К тому же сигналы на частотах около 1 ГГц, которые я использовал, практически не распространяются за горизонт.
В моем распоряжении оказались два неплохих и довольно популярных SDR: HackRF и BladeRF. Первый я буду использовать как передатчик, а второй — как приемник. Программную часть приема сделаем с помощью уже знакомой из прошлой статьи программы dump1090, которая умеет парсить сигналы Mode S (частью которого и является ADS-B) в реальном времени и выводить их в читаемом формате.
Схема установки будет выглядеть примерно так.
Для стабильной работы на оба SDR нужно накрутить любую штыревую антенну, так как без нее ничего работать не будет или будет, но очень‑очень плохо.
Настройка BladeRF
Пошаговую настройку BladeRF для приема мы уже разбирали в прошлой статье. Если ты повторял за мной, то у тебя уже есть утилита dump1090 и нужная прошивка в SDR. В таком случае этот раздел можно пропустить.
С заводской прошивкой BladeRF не умеет работать с dump1090 — придется их подружить вручную. Первым шагом будет скачивание прошивки, совместимой с ADS-B, с официального сайта разработчика:
wget https://www.nuand.com/fpga/adsbxA4.rbf
После этого сразу же загружаем скачанный файл в BladeRF:
bladerf-cli -i adsbxA4.rbf
Дальше нам надо установить еще две программы: bladeRF-adsb и саму dump1090. Первая нужна просто для того, чтобы транслировать данные с SDR напрямую в dump1090.
Скачиваем и собираем dump1090:
git clone https://github.com/mutability/dump1090.git
cd dump1090
make
./dump1090 --net-only --raw --interactive
После запуска dump1090 переходим к мосту:
git clone https://github.com/Nuand/bladeRF-adsb
cd bladeRF-adsb/bladeRF_adsb
wget http://nuand.com/fpga/adsbx40.rbf
wget http://nuand.com/fpga/adsbx115.rbf
make
./bladeRF_adsb
Теперь, когда все готово для приема и декодирования сигналов ADS-B, уже можно принять какие‑то сигналы от самолетов (да, даже в комнате), особенно если самолет близко или если у тебя хорошая антенна.
ViralAir
Чтобы генерировать свои сообщения ADS-B, я создал утилиту ViralAir и выложил ее на GitHub. Чтобы повторять за мной, скачай и скомпилируй ее:
git clone https://github.com/st3rv04ka/ViralAir
cd ViralAir
go build cmd/viralair/main.go
После сборки появится файл main
, который и будет генерировать готовый для передачи файл. Формат этого файла полностью подходит для HackRF, но может быть совместим и с другими SDR (я не проверял). Чтобы проверить, что все хорошо, можно создать тестовый самолет с позывным 0xDEADBE
на высоте 9999 футов следующей командой:
./main -altitude 9999.0 --icao 0xDEADBE
В текущей директории должен появиться файл Samples.
. Если он действительно есть, значит, все работает и можно продолжать.
Структура ADS-B
Подготовка
Давай немного освежим знания про структуру сообщения ADS-B из прошлой статьи. Сообщение может быть разной длины — 56 либо 112 бит. От длины зависит тип передаваемой информации, а сам тип записывается в поле TC (Type Code) сообщения. Обычное 112-битное сообщение выглядит следующим образом.
Как ты мог заметить, никакого поля TC тут нет — и все верно, оно спрятано внутри поля ME. Дело в том, что ADS-B — это всего лишь часть большого протокола Mode S, и выше представлена структура именно сообщения Mode S, в то время как все специфичные для ADS-B поля находятся внутри поля данных (ME) Mode S.
Давай освежим в памяти назначение остальных полей пакета:
- DF (downlink format) отвечает за тип сигнала в Mode S. Для ADS-B всегда равен 17;
- CA (transponder capability) отвечает за тип транспондера, который мы теоретически можем поставить какой угодно, но на практике будем использовать 6 (что означает транспондер уровня 2+);
- после CA идет ICAO — уникальный номер самолета. В эти 24 бита мы можем запихнуть что угодно, а в рамках этой статьи будем запускать самолет
0xDEADBE
; - ME — само сообщение ABS-B. Это может быть высота, скорость или координаты. Мы будем передавать только координаты (TC равен 11), без скорости и высоты. Скорость и высота ничем не хуже, просто мне хочется разобрать подробнее кодирование CPR.
CPR
Возможно, ты читал прошлую статью и еще помнишь, как я мучился с CPR и упрощенными картами для передачи в маленьких сообщениях. Из‑за этих карт в ADS-B есть два вида сообщений с координатами: четное и нечетное, и, только имея оба сообщения, можно определить точную локацию самолета. Создавать такие пакеты еще сложнее, чем принимать.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»