Используя устройство SkyLift и микроконтроллер семейства ESP8266, можно сымитировать поддельные сети, и в итоге смартфон будет «думать», что находится в совершенно другом месте.
Автор: Kody
Во многих городских районах GPS работает не очень хорошо. Здания отражают GPS сигналы между собой, создавая помехи для телефонов, в результате чего большинство современных устройств определяют собственное местонахождения при помощи россыпи разных техник, включая близлежащие Wi-Fi сети. Используя устройство SkyLift и микроконтроллер семейства ESP8266, можно сымитировать поддельные сети, и в итоге смартфон будет «думать», что находится в совершенно другом месте.
Wi-Fi сети являются надежным способом определения местонахождения для устройств с ограниченным доступом к GPS. Злоумышленники могут эксплуатировать уязвимость, распространяя широковещательные сигналы, как будто исходящие от известных сетей. Эта техника не работает, если в рядом есть множество других Wi-Fi сетей или сильный GPS сигнал, но хорошо зарекомендовала себя в местах, где устройства вынуждены использовать систему aGPS.
Как умные устройства определяют геолокацию
Проблема определения местоположения не нова, и большинство умных устройств помимо GPS используют другие методы, как, например, сотовые вышки, которые всегда неподвижны и полезны для определения относительной геолокации. Поскольку спрос на быстрые GPS устройства начал расти, технология aGPS (или Assisted GPS) стала решением проблемы, связанной с замедленным получением сигнала, имеющим место быть при использовании традиционного GPS. Чтобы решить проблему определения местонахождения устройства со слабым или отсутствующим GPS сигналом, большинство смартфонов непрерывно фиксируют координаты близлежащих Wi-Fi сетей. Собираемые сведения добавляются в огромную базу данных обнаруженных сетей, геолоцированные множеством пользователей. Эта информация используется для определения местонахождения устройства на основе обнаруженных близлежащих Wi-Fi сетей.
В общем-то, сей факт не должен удивлять того, кто знаком с вардрайвингом, поскольку проекты навроде Kismet существуют уже достаточно давно. Проект Wigle.net позволяет злоумышленникам загружать данные и определять, где находится каждая сеть, что упрощает задачу идентификации геолокации устройства, находящегося в районе сетей с известными координатами. В отличие от традиционного GPS в случае с aGPS устройства вызывает API для получения местонахождения на основе имени, MAC адреса и силы сигнала близлежащих Wi-Fi сетей на основе базы известных сетей с геотегами.
Рисунок 1: Сети с известной геолокацией из базы Wigle.net
Как происходит спуфинг aGPS
Теперь, когда мы в общих чертах поняли, как работает aGPS, можно приступить к поиску способов спуфинга сигналов. Один из наиболее очевидных путей – найти район, где определение геолокации в основном происходит при помощи aGPS, а не традиционного GPS. Подобные места могут быть везде, где отсутствует прямая видимость неба. Например, глубоко внутри зданий или паркингов с отсутствующим GPS сигналом. В этих условиях смартфоны вынуждены использовать менее точные данные для определения геолокации, как, например, на основе близлежащих Wi-Fi сетей.
Как только смартфон оказался в ситуации, когда нужно использовать aGPS, а не GPS, при помощи SkyLift мы можем распространять сигнальные Wi-Fi фреймы (beacon frame) с уже известной геолокацией с целью сбить устройство с толку. Эта схема будет работать только если рядом мало конкурирующих сетей, поскольку в плотной густонаселенном городском районе результаты могут быть как минимум непредсказуемыми из-за случайных перемещений, а как максимум – полностью провальными, когда рядом есть известные сети.
Если мы находимся в правильном месте, когда телефоны вынуждены использовать aGPS для определения местонахождения, то можем выбрать специфические локации с целью спуфинга. Чтобы решить эту задачу можно либо пойти в нужное место и проанализировать Wi-Fi трафик, или использовать сервис Wigle.net для получения списка сетей в нужном месте для спуфинга, а затем скопировать детальную информацию об этих сетях.
Что понадобится
Чтобы следовать этому руководству вам понадобится микроконтроллер серии ESP8266. Подойдет всё, начиная от D1 Mini и заканчивая NodeMCU. Можно найти задешево в интернет-магазине. Для настройки MCU вам понадобится макетная плата, перемычки, кабель Micro-USB и Wi-Fi антенна с кабелем SMA. Я не буду рассматривать сборку MCU, поскольку эта тема уже рассматривалась ранее.
Рисунок 2: Устройство в сборке
Кроме того, вам понадобится компьютер с подключением к интернету и установленной средой Arduino IDE, при помощи которой мы будем программировать микроконтроллер. Кабель Micro-USB используется для подключения ESP8266 к компьютеру с целью запитывания и программирования.
Шаг 1. Добавление платы с ESP8266 в Arduino
Мы будем использовать бесплатную и кроссплатформенную среду Arduino IDE, в которой можно создавать быстрые прототипы. Arduino IDE (Integrated Development Environment; Интегрированная среда разработки) позволяет писать и загружать скрипты на устройства с микроконтроллерами, поддерживаемые Arduino.
Вы можете скачать Arduino IDE с официального сайта. После установки нужно кликнуть на выпадающее меню Arduino и выбрать Preferences. Затем вставьте следующий URL в поле Additional Boards Manager URLs:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Далее нажмите OK, чтобы закрыть меню.
Рисунок 3: Настройка Arduino
Затем нужно добавить плату NodeMCU в Boards Manager. Кликните на Tools, наведите мышку на раздел Board, чтобы увидеть выпадающий список. Наверху кликните на Boards Manager и откройте окно, позволяющее добавить новые платы.
После открытия окна в поисковом поле введите «esp8266», выберите ESP8266 Community и выполните установку.
Рисунок 4: Установка новой платы
Теперь всё готово к программированию микроконтроллера ESP8266. Подключите устройство компьютеру, после чего, когда вы кликните на Tools, должен быть автоматически выбран корректный порт.
Выберите NodeMCU 1.0 или другое устройство, которое вы используете, в меню Board. Если у вас не очень качественный USB кабель, порт может не отображаться. Соответственно, если вы всё сделали правильно, но порт не показывается, в первую очередь следует попробовать другой кабель.
Рисунок 5: Выбор платы в меню Board
В верхней части интерфейса есть две основные кнопки: галочка отвечает за компилирование и проверку кода на предмет ошибок, стрелка вправо – отправляет код на устройство.
Шаг 2. Загрузка SkyLift
После настройки Arduino IDE нужно скачать SkyLift, например, из репозитория на GitHub при помощи следующей команды:
~$ git clone https://github.com/adamhrv/skylift.git
Переходим в директорию, куда был загружен SkyLift, и открываем проект в Arduino IDE.
~$ cd skylift
~$ cd skylift_demo/
~$ open skylift_demo.ino
Здесь есть конфигурационные файлы и основной скрипт.
Рисунок 6: Проект skylift_demo для Arduino
В этой статье мы не будем модифицировать файл. Если после подключения ESP8266 замигал LED индикатор, переходим к следующему шагу.
Шаг 3. Загрузка кода на ESP8266
Пришло время загрузить код на ESP8266, который должен быть подключен через кабель Micro-USB к нашему компьютеру, где запущена среда Arduino IDE.
Убедитесь, что выбрана правильная плата и порт настроен на правильный интерфейс, связанный с ESP8266. Как только все настройки будут выполнены, кликните на иконку в виде стрелки для загрузки кода на плату. После завершения вы должны увидеть открытые сети, находящиеся неподалеку.
В нашем примере открытые сети отсылают сигналы, которые мы будем спуфить, поскольку эти сети известны и привязаны к штаб-квартире Facebook. Если смартфон окажется в условиях, когда для определения геолокации нужно пираться только на эти сигналы, мы можем сделать подмену, чтобы устройство думало, что находится у штаб-квартиры Facebook вместо своего реального местоположения.
Шаг 4. Тестирование системы в полевых условиях
После загрузки кода на устройство пришло время протестировать систему в полевых условиях. Вы можете воспользоваться приложением Wigle WiFi для поиска близлежащих сетей и мест, где остальные сети плохо доступны. Как только место со слабым сигналом GPS обнаружено, выключите гелокационные службы на вашем телефоне, а затем включите обратно.
Когда ваш телефон попытается определить местонахождение, то сможет только принимать поддельные сигналы с устройства ESP8266, и в итоге на карте будет указаны координаты штаб-квартиры Facebook.
Рисунок 7: Местоположение на основе поддельных сигналов
Обнаруженное местоположение должно быть указано в фотографиях, сделанных с включенной геолокацией, предлагаться приложениям, использующую эту информацию и так далее до тех пор, пока вы не перестанете транслировать поддельные сигналы, или целевое устройство не получит сильный сигнал от спутника GPS или легитимной близлежащей сети с известными координатами.
Заключение
У смартфонов и других умных устройств есть много способов обнаружить местоположение, которые злоумышленники могут использовать для отправки поддельных сигналов. Эти сценарии реализуются везде, начиная от арт-проектов, в которых на устройство отсылается поддельный сигнал, и заканчивая бассейнами богатых и знаменитых и другими ситуациями, когда манипулирование координатами может быть полезно. Данная проблема имеет место быть не во всех случаях, однако следует быть сверх осторожным особенно внутри больших зданий и других территорий, где слабый GPS, и устройство вынуждено использовать легко подделываемые сигналы.
Надеюсь, это руководство, посвященное aGPS и подделке сигналов при помощи устройства на базе микроконтроллера ESP8266, вам понравилось. По любым вопросам можете обращаться ко мне в твиттер @KodyKinzie.
Но доступ к знаниям открыт для всех