Содержание статьи
warning
Не повторяй действия, описанные в статье, вблизи аэропортов и других объектов, которые сильно зависят от геопозиционирования! Работа в эфире требует специального разрешения и должна проводиться с соблюдением мер предосторожности. Статья публикуется исключительно в образовательных целях, и ни автор, ни редакция «Хакера» не несут ответственности за действия, совершенные с использованием этого материала.
Теория
GNSS
Global Navigation Satellite System (GNSS) позволяет пользователям системы определить их местоположение. GNSS представляет собой сеть из разных спутниковых и наземных систем. Самые известные из них — американский GPS и российский ГЛОНАСС. Еще можно вспомнить Galileo (страны ЕС) и BeiDou (Китай), но они распространены куда меньше.
Для определения местоположения используются три основные группы устройств: космические, пользовательские и другие наземные (сегмент контроля).
Космические устройства — это, как ты догадываешься, спутники. У каждой системы — свои спутники, летающие на разных орбитах. Спутники транслируют данные на разных частотах и в разные промежутки времени, чтобы не мешать друг другу.
Наземные системы отвечают за синхронизацию времени, правильность информации на спутниках, корректируют орбиты и проверяют ключевые функции спутника — вдруг он сломается?
Пользовательский сегмент — это клиентские устройства, которые определяют свое местоположение с использованием GNSS. Самый простой пример — обычный приемник GNSS в твоем телефоне.
Чтобы определить местоположение, любое конечное устройство должно получить данные со спутника и как‑то их обработать. Процесс обработки сигналов и определения местоположения называется триангуляцией (хотя есть и другие методы).
Частоты
В зависимости от конкретной спутниковой системы GNSS использует разные частоты для передачи данных. Пробежимся по трем гигантам, их частотам и назначению этих частот.
GNSS работает на трех основных полосах: L1, L2 и L5. Все они появлялись последовательно, как улучшенные версии навигационной системы. Называется это все «L-диапазон», или диапазон дециметровых волн. Диапазон описывает частоты от 1 до 2 ГГц или от 1000 до 2000 МГц. На одной полосе может работать сразу несколько навигационных систем: к примеру, в полосе L1 работают одновременно GPS, ГЛОНАСС и Galileo.
L1 — самая старая полоса, которую используют почти все спутниковые навигационные системы. Поскольку она древняя, ее могут принять практически все приемники. Единственный минус — сигнал в этом диапазоне частот имеет низкую способность огибать препятствия и проходить сквозь них (стены зданий, листва деревьев или слишком густая облачность).
L2 появилась как замена L1. Сигнал в этой полосе лучше огибает препятствия, ловить его можно даже в труднодоступных местах. Эта полоса считается новой, так что обычно ее используют заодно с L1.
L5 — новейшая технология, используется в основном для нужд авиации, хотя гражданские приемники тоже иногда могут с ней работать.
Подробнее о полосах и частотах
GPS работает во всех трех диапазонах, в то время как альтернативные навигационные системы пока не заняли все доступные частоты. В L1 проживают GPS (1575,42 МГц), ГЛОНАСС (1602 МГц) и Galileo (1575,42 МГц). В L2 GPS работает на частоте 1227,6 МГц, а ГЛОНАСС — на 1246 МГц. В L5 есть Galileo (1207,14 МГц и 1176,45 МГц) и GPS (всего одна частота — 1176,45 МГц).
Частоты для гражданского и военного применения различаются, и в сегодняшней статье мы будем рассматривать только гражданские варианты. Кроме того, сигнал для военного использования куда более точный, но он зашифрован во избежание использования недружественными армиями.
Назначения полос могут меняться в зависимости от навигационной системы.
Частоты, отмеченные как ARNS, обычно используют в авиации, тогда как наземные приемники используют частоты RNSS.
Триангуляция и трилатерация
Спутник не может отправить тебе твое местоположение, потому что местоположение у каждого свое, а твое устройство ничего наружу не передает. То есть координаты нужно вычислять непосредственно на приемнике, а для этого сигнала одного спутника недостаточно, так что приходится ловить сразу несколько (обычно хотя бы три‑четыре). Все они отправляют тебе свои собственные координаты и время. Уже из этих данных по простым формулам можно определить местоположение. Для поиска координат используются два основных способа: триангуляция и трилатерация.
Триангуляция — это определение местоположения точки по трем ориентирам. Ориентирами в этом случае выступают спутники, но, так как космические аппараты летают на высоте около 20 тысяч километров, использовать такой метод весьма сложно из‑за необходимости очень точно знать расстояние до каждого из спутников. Чтобы облегчить процесс, используется трилатерация.
Трилатерация — это метод определения координат точки, который использует систему сфер.
Расстояние до спутников можно определить по времени прохождения сигнала от спутника до приемника, умноженному на скорость света, но для этого нужно знать точное время, в которое сигнал был отправлен.
Простой способ определить координаты
На практике, если у тебя есть, например, микроконтроллер, не нужно самостоятельно решать эту горку линейной алгебры, чтобы просто получить свои координаты. Все это с успехом делают дешевые GNSS-приемники, которые выплюнут тебе координаты и источник их получения (из какой именно спутниковой системы) в формате NMEA.
NMEA — это стандартизированный формат для передачи данных GNSS. То есть если ты захочешь сделать устройство, которое будет работать с GNSS, то нужно будет работать с форматом NMEA, а не искать документацию к формату каждой спутниковой системы.
Чтобы получить эти данные, можно подключиться к приемнику по USB или UART. У меня распаян только UART, так что я соорудил мост из Auduino и вышел на улицу, чтобы собрать данные.
Если использовать готовый приемник GNSS, то на его выходе можно увидеть примерно следующую картину:
$GPRMC,102668.00,A,2565.63860,N,05723.41802,E,44.621,122.82,301122,,,A*54
$GPVTG,122.82,T,,M,44.621,N,82.638,K,A*34
$GPGGA,102669.00,2995.64530,N,05723.40668,E,1,04,2.16,19.7,M,-26.4,M,,*48
$GPGSA,A,3,07,09,04,14,,,,,,,,,6.09,2.16,5.70*05
$GPGSV,2,1,05,04,43,108,34,07,53,338,35,09,73,051,37,14,33,217,28*7B
$GPGSV,2,2,05,16,04,038,*44
$GPGLL,2585.64930,N,05123.40668,E,102608.00,A,A*6E
$GPRMC,107129.00,A,2565.63860,N,05723.41802,E,47.084,123.07,301122,,,A*5C
Это сообщения в формате NMEA, то есть уже обработанные GNSS-приемником данные со спутника. Выглядит не совсем понятно, но на самом деле получить из этого наши координаты довольно просто.
Разберем для примера первое сообщение:
$GPRMC,102668.00,A,2565.63860,N,05723.41802,E,44.621,122.82,301122,,,A*54
Как ты уже заметил, каждое сообщение начинается со знака доллара, за которым следуют пять букв и запятая. Этот заголовок указывает тип данных в сообщении. Первые две буквы (в нашем случае GP
) указывают на систему GNSS, из которой получена информация. Наше GP
означает GPS. Ты можешь встретить и другие спутниковые системы — вот список возможных ответов:
- GP — только GPS;
- GL — только ГЛОНАСС;
- BD — только BeiDou;
- GA — только Galileo;
- GN — использовано одновременно несколько систем.
Следующие три буквы означают тип данных, например RMC (Recommended Minimum Specific GNSS Data) — минимальные рекомендуемые данные о местоположении и времени. Координаты содержатся в сообщениях RMC, GLL и GGA.
Опустим все поля, кроме координат (описание пропущенных полей можно почитать в документации NMEA). 2565.
— это широта в формате DDMM.
, где N
означает северное полушарие, а 05723.
— это долгота в формате DDDMM.
, где E
означает восточное полушарие. То есть координаты нашей тестовой точки — 25 градусов 65,63860 минуты северной широты и 57 градусов 23,41802 минуты восточной долготы.
Чтобы посмотреть эту точку на картах в интернете, нужно преобразовать GPS-координаты в десятичные градусы. Для этого можно воспользоваться онлайновым калькулятором.
TTFF
TTFF — time to first fix, или время для определения местоположения. Это время, которое нужно устройству, чтобы собрать данные и определить местоположение. Для спуфинга этот параметр очень важен.
Если устройство не имеет никаких данных о спутниках, процесс может занимать до двенадцати минут, но обычно требует всего две‑три минуты.
Практика
Гайдов по спуфингу GPS в сети хватает, но у них есть одна общая черта: в 2023 году они не работают (у меня так точно). Многие телефоны сейчас умеют определять местоположение не только по спутникам — для этого используются Wi-Fi и Bluetooth. Сотовые вышки тоже могут участвовать в процессе. Для начала мы попробуем подменить GPS на смартфоне с Android и посмотрим, какие трудности могут возникнуть при подмене.
Оборудование
В своем эксперименте я использую:
- bladeRF 2.0 Micro Xa4 в качестве передатчика;
- HackRF One в качестве приемника и передатчика;
- антенну RFSPACE;
- Mi A2.
GPS-SDR-SIM
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»