[Из песочницы] На сказочном Бали выпал снег или как же легко обмануть GPS
Добрый день, судя по фотографии, на Бали выпал снег! Как же так получилось?
Плач
В последнее время мне приходится заниматься проектированием и изготовлением спутниковых навигационных антенн, антенных решеток и радиоприемных устройств (РПУ). Здесь нужно заметить, что эти РПУ — это пребразователи навигационного сигнала в виду удобному для дальнейшей обработки, а не те навигационные приемники, которые выдают решение навигационной задачи и которые встроены в ваши гаджеты.
При тестировании антенн, особенно новых их конструкций, в обычной городской комнате возникают проблемы с хорошей радио-видимостью спутников. Грубо говоря, сложно понять новая антенна лучше или хуже старой, измененная схема согласования РПУ с антенной дала или нет улучшение чувствительности системы. Про антенные решетки вообще говорить не приходится. К тому же, лично в моем случае, присутствует какая-то помеха, которая мешает приему. Стоит отойти от окна и приемник теряет спутники, хотя прямая видимость четверти неба сохраняется.
Летом дача становится спасением. Там почти свободное небо и нет никаких помех. Но туда нужно либо ехать со всем имуществом, либо держать там его дополнительный комплект. Есть еще товарищи с прошлой работы, которые дают поработать в безэховой камере. Не знаю за что, но бывает такое счастье.
В общем, нелегка доля разработчика.
Удача
Недавно мне посчастливилось подобраться к решению этой проблемы. Я всегда знал о симуляторах навигационных сигналов, но они были дороги для меня. Тут сложилось несколько счастливых событий.
Один товарищ из Москвы при встрече рассказал о симуляторе GPS, опубликованном профессором Эбинумой в исходных текстах.
Я уже был знаком с профессором по переписке и у меня сложилось доверие к нему и его разработкам. Можно было начинать работу, надеясь на консультацию профессора.
- У меня уже давно завалялась плата USRP B210, а она была указана в списке поддерживаемых плат.
Думалось, что было бы классно получить возможность тестировать антенны и РПУ стабильно и предсказуемо.
А потом, думалось, это ведь наша почти традиционная русская забава — обманывать GPS. Я вспомнил, как сам недавно был отброшен информационно из района метро Третьяковская в аэропорт Внуково. А можно даже сделать что-то типа матрешки — запустить на Третьяковской ложный сигнал, как будто я на Третьяковской.
Иллюзия, но она может помочь успокоить многих неспокойных людей, особенно весной. И как же это по-русски, черт возьми!
Ведь если им можно, то нам почему нельзя? Но надо особо оговориться, что запуск симулятора проводился на минимальной мощности 10 кВт и даже без подключения антенны выпали все волосы на голове. Просим всех при экспериментах быть аккуратными и надевать шапочку из фольги, чтобы не разрушить навигационное пространство окружающих людей и спецслужб. Также стоит напомнить, что незнание законов не освобождает от ответственности. И о том, что у нас в России принято не зарекаться не только от сумы.
Все, долой философию! К делу! Меньше букв, больше картинок!
Как запустить
Для запуска своей системы глобального позиционирования раньше нам потребовалась бы орбитальная группировка спутников, наземные станции и т.д. Теперь всё проще.
Нам необходимо:
Компьютер с операционной системой типа Виндуз или Линукс и, желательно, с портом USB 3.0. На порту 2.0 я не тестировал, но должно заработать.
Плата USRP b210 (возможны и другие варианты).
Сгенерированный файл с сигналом, либо программа для его генерации GPS-SDR-SIM от проф. Эбинумы.
- Блог профессора (немного не по-русски)
- Исходники симулятора
Порядок установки
Для запуска всего этого добра на компьютер надо неторопясь и аккуратно установить от производителя платы набор софта. Хотя, может, это и не обязательно. Но пусть будет. При установке под виндуз оно иногда жалуется, что не может добавить себя в PATH, но это не мешает, так как из всего этого добра мне понадобилась только утилитка uhd_find_devices.exe, которая позволила понять, увидела ли вообще система эту плату. Найти утилиту можно по адресу:
C:/UHD/bin/uhd_find_devices.exe
Затем втыкаем плату и открываем диспетчер задач. Где можно обнаружить, что драйверов под устройство автоматом не установилось. Что же — бывает. Вручную с помощью программки zadig указываем системе, что под плату надо использовать драйвера libusb, т.е. winusb.
После того, как система подцепила стандартный драйвер, можно запустить uhd_find_devices из набора софта от производителя платы. Эта утилита должна найти плату и прошить её контроллер (там стоит FX3 от Cypress). Кажется, после этого устройство изменит свой PID и надо будет рассказывать системе (с помощью zadig), что и под это устройство можно использовать стандартные драйвера winusb.
Конечно же оно с первого раза не заработает. И конечно же это можно вылечить путем отсоединения платы и подсоединения обратно. Вот подробная инструкция.
Необходимо установить гнурадио, которое внутри себя содержит пайтон-питон. Я взял отсюда последнюю версию под AVX2 процессоры.
Мне было лень настраивать правильным образом окружение, поэтому я воспользовался скриптом, входящим в комплект: C:/GNURadio-3.7/bin/run_gr.bat
Через него я буду запускать скрипт для посылки сгенерированного файла в плату b210.
Для удобства путь до этого скрипта надо добавить в переменную окружения PATH.
Генерация сигнала
Исходники берем тут. Что приятно удивило, так это легкость и простота сборки. Никаких зависимостей, никаких дополнительных действий. Все бы так.
Сборка под линукс
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim
Сборка под виндуз
Start Visual Studio. Запустить студию (я использовал 2015)
Create an empty project for a console application. Создать пустой консольный проект. Именно пустой!
On the Solution Explorer at right, add «gpssim.c» and «getopt.c» to the Souce Files folder. Добавить два сишных файла в проект.
Select «Release» in Solution Configurations drop-down list. Изменить тип сборки на релизный, выбрать архитектуру x86 / amd64.
- Build the solution. Собственно, собрать.
Я под линукс не собирал, т.к. была необходимость запустить всё на конкретной машине, а на ней стояла десятка.
Подробное описание параметров генератора есть в ридми. Для начала можно не разбираться, а сделать очень просто, сгенерировать сигнал таким образом:
gps-sdr-sim.exe -e brdc3540.14n -s 2500000 -l 30.286502,120.032669,100 -b 8 -d 300 -v -o sim.bin
gps-sdr-sim.exe — это файл, который вы собрали студией.
brdc3540.14n — это файл с эфемеридами спутников.
2500000 — это частота дискретизации
30.286502,120.032669 — координаты
100 — высота
8 — это разрядность чисел в выходном файле (один отсчет — это IQ, два числа).
300 — это длительность в секундах.
-v — это чтобы побольше писало в лог
- sim.bin — имя выходного файла.
Вы можете взять строчку из ридми, но она сгенерирует сигнал с ЧД=2,6 МГц, тогда и b210 надо будет настраивать на ту же ЧД (частота дискретизации). Если сгенерировать с одной частотой, а на плату выдавать с другой, то, конечно же, ничего не заработает.
Сигнал на плату я подавал с помощью такой команды:
run_gr.bat gps-sdr-sim-uhd.py -t sim.bin -s 2500000 -x 40
40 — это уровень. 2500000 — это ЧД. Подробное описание настроек можно увидеть в файле gps-sdr-sim-uhd.py, он очень прост для понимания.
Для b210 значение ЧД должно нацело делить частоту внутреннего генератора, а он там, кажется 40 МГц.
Запуск
А теперь самое интересное.
Отключаем плату.
Подключаем плату.
Запускаем uhd_find_devices
Если не определилось, то goto 1.
Запускаем transmit.bat, следим за логом.
- В определенный момент на плате загорится второй диод, что будет означать, что всё уже начало излучаться.
Если в логах постоянно выводится буква U, значит, ваша система не успевает подсовывать данные в плату. Вам стоит проверить, не работает ли что-то на фоне и не указали ли вы очень высокую ЧД.
Через некоторое время (до 3 минут) все устройства начнут определять местоположение как заданное вами. Но перед этим они внезапно потеряют текущее положение.
Внимательно прочитав инструкцию к программе проф. Эбинумы можно понять, как сгенерировать файл с изменяющимся местоположением, как использовать другие даты и прочее.
Выводы
Есть проверенный способ собрать самому из недорогих средств симулятор GPS-сигнала. Это большая радость для разработчиков. Спасибо профессору Эбинуме!
Не все приемники подвержены влиянию имитационной помехи. Некоторые имеют защиту.
Есть опасность, что такой симулятор будет использоваться или уже используется преступными элементами для своих целей. Сейчас уже есть приемники с функцией защиты от подмены сигнала. Нужно тестировать эту функцию и использовать такие приемники в ответственных приложениях.
- Есть вероятность, что в будущем у людей появятся малогабаритные и недорогие устройства для подмены навигационного сигнала, которые они будут использовать для своих почти бытовых нужд, начиная от обмана супругов и заканчивая обманом геоигр типа PokemonGO. Приемники, которые окажутся по соседству, должны будут как-то справляться с наличием большого количества таких имитационных помех.
И за последние два пункта — спасибо профессору Эбинуме! Разработчикам будет чем заняться по обе стороны баррикад.
Скоро я расскажу о попытках избавиться от помехи и из этого получилось.
Комментарии (10)
23 января 2017 в 13:03
0↑
↓
Есть опасность, что такой симулятор будет использоваться или уже используется преступными элементами для своих целей
уже используется. на красной площади.
Яндекс-такси даже патч делали к своему приложению, чтобы проезжающие по площади заказчики не платили, будто у них маршрут через аэропорт. тут же и была статья. искать лень.23 января 2017 в 13:10
0↑
↓
впрочем, нашел, но не на хабре. http://varlamov.ru/2024702.html? page=3 и https://lenta.ru/articles/2016/11/07/gpsoff/ например
23 января 2017 в 13:09
+1↑
↓
Давно я не следил за темой, но это ещё один бюджетный способ ловить покемонов в Центральном парке Нью-Йорка, не вставая с дивана.23 января 2017 в 13:15
0↑
↓
Пробовал, работает ;)23 января 2017 в 13:19
0↑
↓
Неужели нет эмуляторов андроида, под которыми нормально работают покемоны?
23 января 2017 в 13:23 (комментарий был изменён)
0↑
↓
Есть конечно. Но там куча условий, то рут нужен, то игровой клиент подмену определяет.
А в эмуляторах, да, попроще.
23 января 2017 в 13:15
0↑
↓
Не все приемники подвержены влиянию имитационной помехи. Некоторые имеют защиту.
Мне видится, что дело не в защите, а в неполноценности имитационной помехи. С помощью этого устройства проигрывается совокупность мощных сигналов для некоторой точки пространства-времени. Ключевой момент в этой связке — «время». Оно сильно не бьется с часами приемника и сотовой сети, поэтому приемник откидывает такое решение. Это скорее настройка приемника, чем специальная «защита». Вопрос одной строчки кода в алгоритме отбраковки решения.
Нормальный постановщик должен иметь временную синхронизацию. Хотя, конечно, и без неё часть приемников уведётся.
23 января 2017 в 13:23
0↑
↓
спасибо за интерес к теме!«Не все приемники подвержены влиянию имитационной помехи. Некоторые имеют защиту.»
— это я про то, что сейчас NV08C, например, не садится. Вы правы, есть какой-то изъян в сигнале.
Остальные приемники его не видят. Будем еще смотреть на сигнал внимательно.23 января 2017 в 13:31
0↑
↓
Тут вопрос энергетики и времени. Если задрать сигнал дБ на 30 выше настоящих и дать время, то и описанная в статье помеха сработает. Но это что-то промежуточное между спуфингом и обычными помехами. Как раз такой вариант наблюдаем на Театральной, AoE атака =)Обычно же под спуфингом понимают более изящное решение, когда имитационный сигнал чуть выше настоящего, на начальном этапе они полностью совпадают по параметрам, а затем вносится рассогласование, уводящее имитационное решение в нужную точку. Такую помеху без пространственной обработки не отсечь и не заметить.
Например, вот статья на хабре.
23 января 2017 в 13:30
0↑
↓
Уже было в Симпсонах Бондиане.
«Завтра не умрёт никогда» 1997 г.