Сов­ремен­ные самоле­ты неп­рерыв­но переда­ют друг дру­гу телемет­рию по про­токо­лу ADS-B. В этой статье мы с тобой сде­лаем собс­твен­ный вооб­ража­емый самолет, что­бы пос­мотреть, как работа­ет переда­ча дан­ных. Конеч­но, будем при этом соб­людать все законы и пра­вила безопас­ности.

В прош­лой статье я уже говорил, что 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.iq8s. Если он дей­стви­тель­но есть, зна­чит, все работа­ет и мож­но про­дол­жать.

 

Структура 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 есть два вида сооб­щений с коор­дината­ми: чет­ное и нечет­ное, и, толь­ко имея оба сооб­щения, мож­но опре­делить точ­ную локацию самоле­та. Соз­давать такие пакеты еще слож­нее, чем при­нимать.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии