Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Каждый из нас пользуется спутниковой навигацией, чтобы добраться куда угодно за пределами своего двора. А что, если в один момент GPS перестанет быть таким надежным средством определения локации? В этой статье я покажу работающий способ обмануть эту систему.
warning
Не повторяй действия, описанные в статье, вблизи аэропортов и других объектов, которые сильно зависят от геопозиционирования! Работа в эфире требует специального разрешения и должна проводиться с соблюдением мер предосторожности. Статья публикуется исключительно в образовательных целях, и ни автор, ни редакция «Хакера» не несут ответственности за действия, совершенные с использованием этого материала.
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 МГц).
Частоты для гражданского и военного применения различаются, и в сегодняшней статье мы будем рассматривать только гражданские варианты. Кроме того, сигнал для военного использования куда более точный, но он зашифрован во избежание использования недружественными армиями.
Назначения полос могут меняться в зависимости от навигационной системы.
Частоты и полосы, используемые GNSS
Частоты, отмеченные как ARNS, обычно используют в авиации, тогда как наземные приемники используют частоты RNSS.
Спутник не может отправить тебе твое местоположение, потому что местоположение у каждого свое, а твое устройство ничего наружу не передает. То есть координаты нужно вычислять непосредственно на приемнике, а для этого сигнала одного спутника недостаточно, так что приходится ловить сразу несколько (обычно хотя бы три‑четыре). Все они отправляют тебе свои собственные координаты и время. Уже из этих данных по простым формулам можно определить местоположение. Для поиска координат используются два основных способа: триангуляция и трилатерация.
Триангуляция — это определение местоположения точки по трем ориентирам. Ориентирами в этом случае выступают спутники, но, так как космические аппараты летают на высоте около 20 тысяч километров, использовать такой метод весьма сложно из‑за необходимости очень точно знать расстояние до каждого из спутников. Чтобы облегчить процесс, используется трилатерация.
Трилатерация — это метод определения координат точки, который использует систему сфер.
Трилатерация
Расстояние до спутников можно определить по времени прохождения сигнала от спутника до приемника, умноженному на скорость света, но для этого нужно знать точное время, в которое сигнал был отправлен.
Простой способ определить координаты
На практике, если у тебя есть, например, микроконтроллер, не нужно самостоятельно решать эту горку линейной алгебры, чтобы просто получить свои координаты. Все это с успехом делают дешевые GNSS-приемники, которые выплюнут тебе координаты и источник их получения (из какой именно спутниковой системы) в формате NMEA.
GPS-приемник
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. Ты можешь встретить и другие спутниковые системы — вот список возможных ответов:
Следующие три буквы означают тип данных, например RMC (Recommended Minimum Specific GNSS Data) — минимальные рекомендуемые данные о местоположении и времени. Координаты содержатся в сообщениях RMC, GLL и GGA.
Опустим все поля, кроме координат (описание пропущенных полей можно почитать в документации NMEA). 2565.63860,N
— это широта в формате DDMM.MMMMM
, где N
означает северное полушарие, а 05723.41802,E
— это долгота в формате DDDMM.MMMMM
, где E
означает восточное полушарие. То есть координаты нашей тестовой точки — 25 градусов 65,63860 минуты северной широты и 57 градусов 23,41802 минуты восточной долготы.
Чтобы посмотреть эту точку на картах в интернете, нужно преобразовать GPS-координаты в десятичные градусы. Для этого можно воспользоваться онлайновым калькулятором.
TTFF — time to first fix, или время для определения местоположения. Это время, которое нужно устройству, чтобы собрать данные и определить местоположение. Для спуфинга этот параметр очень важен.
Если устройство не имеет никаких данных о спутниках, процесс может занимать до двенадцати минут, но обычно требует всего две‑три минуты.
Гайдов по спуфингу GPS в сети хватает, но у них есть одна общая черта: в 2023 году они не работают (у меня так точно). Многие телефоны сейчас умеют определять местоположение не только по спутникам — для этого используются Wi-Fi и Bluetooth. Сотовые вышки тоже могут участвовать в процессе. Для начала мы попробуем подменить GPS на смартфоне с Android и посмотрим, какие трудности могут возникнуть при подмене.
В своем эксперименте я использую:
BladeRF
HackRF one
RFSPACE
Mi A2
Источник: xakep.ru