Спуфинг Wi-Fi сетей для отправки поддельных сигналов геолокации на телефон

Спуфинг Wi-Fi сетей для отправки поддельных сигналов геолокации на телефон

Используя устройство 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.


Ученые доказали: чтение нашего канала продлевает жизнь!

Ладно, не доказали. Но мы работаем над этим

Поучаствуйте в эксперименте — подпишитесь