September 8, 2023

Подделка устройства iOS с помощью сообщений о сопряжении Bluetooth, отправляемых с Android.

Возможно, вы слышали о недавних назойливых появляющихся сообщениях для сопряжения, которые получили многие участники Defcon в этом году, с предложением сопряжения их iPhone с ближайшим Apple TV или другим гаджетом через Bluetooth. В этом блоге мы продемонстрируем, как отправлять такие всплывающие сообщения на ближайшие устройства iPhone с Android-смартфона. Это возможно благодаря инструменту AppleJuice, предназначенному для устройств на Linux, и успешно протестированному на ноутбуке и Raspberry Pi 3B+. Из-за этого мы можем установить и использовать его на устройствах Android. Подделку можно выполнить даже с использованием встроенного чипа Bluetooth. Если вас интересует, как использовать инструменты Bluetooth на Android с NetHunter, следите за нашим предстоящим блог-постом, который будет посвящен Арсеналу Bluetooth.

Отказ от ответственности: Информация, предоставленная в этой статье блога, предназначена исключительно для образовательных и информационных целей. Она не призывает и не поощряет какие-либо незаконные или нравственно неприемлемые действия, включая взлом, кибератаки или любые формы несанкционированного доступа к компьютерным системам, сетям или данным.

Требования

Нам нужно Android-устройство с правами root и установленным пользовательским ядром NetHunter или любым другим ядром, которое поддерживает встроенный Bluetooth-чип или любой внешний Bluetooth-адаптер. В случае использования внешнего Bluetooth-адаптера необходимо иметь адаптер OTG для подключения его к смартфону. И не забудьте о целевом iPhone.

В моем случае я буду использовать OnePlus 7T Pro с встроенным чипом Bluetooth и внешним Bluetooth-адаптером.

Как это работает

Сопряжение устройств через Bluetooth Low Energy (BLE) на устройствах Apple осуществляется с использованием пакетов рекламы (ADV) и следует определенному процессу для установления безопасного соединения между двумя устройствами. Вот общий обзор того, как это происходит:

  1. Реклама (Advertising): Гаджет-устройство, такое как AirTags, AirPods, Apple TV и т. д., рекламирует себя, транслируя ADV-пакеты. Эти пакеты содержат важную информацию о них, такую как название, услуги и идентификатор.
  2. Сканирование (Scanning): iPhone сканирует близлежащие устройства BLE, прослушивая ADV-пакеты. Когда он обнаруживает ADV-пакет от таких устройств, он собирает информацию и выводит уведомление.
  3. Установление соединения (Establishing a Connection): Когда iPhone решает соединиться с устройством (например, пользователь выбирает устройство для сопряжения), он отправляет запрос на соединение. Это устанавливает безопасное и зашифрованное соединение между двумя устройствами.

Это стандартный процесс сопряжения устройств. Однако проблема заключается в том, что любое устройство Apple в окружающей среде получает такое уведомление о сопряжении. Именно поэтому мы можем имитировать наше Android-устройство для отправки этих сообщений о сопряжении и заставить устройства iOS в окрестностях поверить, что мы, например, AirPods. В результате этого это может рассматриваться как локальная атака Denial of Service (DoS).

Установка

Мы начнем с процесса установки AppleJuice, затем активируем наше устройство Bluetooth и протестируем инструмент.

Давайте перейдем к процессу установки, доступному на GitHub.

Откройте приложение NetHunter Terminal и клонируйте проект:

git clone https://github.com/ECTO-1A/AppleJuice.git && cd ./AppleJuice

Установите необходимые зависимости:

sudo apt update && sudo apt install -y bluez libpcap-dev libev-dev libnl-3-dev libnl-genl-3-dev libnl-route-3-dev cmake libbluetooth-dev

Установите pybluez и pycrypto:

pip3 install git+https://github.com/pybluez/pybluez.git#egg=pybluez

pip3 install pycryptodome

Установите необходимое для AppleJuice:

pip3 install -r requirements.txt

Установка должна быть успешно завершена. Теперь нам нужно активировать наше устройство Bluetooth. Откройте приложение NetHunter, перейдите в раздел "Bluetooth Arsenal" и запустите Bluebinder, Dbus Services, Bluetooth Service и Interface. В случае, если интерфейс не был инициализирован правильно, нажмите на значок трех точек в правом верхнем углу и убедитесь, что запущены функции "Update" и "Setup".

Активация интерфейса Bluetooth через Bluetooth Arsenal

Чтобы убедиться, что ваш адаптер обнаружен, используйте команду hcitool для перечисления доступных адаптеров из приложения NetHunter Terminal с помощью следующей команды:

hcitool dev

В результате были обнаружены два адаптера: внутренний (hci0) и внешний (hci1), как показано на следующем скриншоте.

Список подключенных Bluetooth-адаптеров

Если вы используете внутренний адаптер, то вам следует работать с интерфейсом hci0. Если у вас есть внешний адаптер, то вам нужно будет работать с интерфейсом hci1. По умолчанию AppleJuice использует интерфейс hci0. Если вы хотите изменить это, вам нужно отредактировать скрипт app.py и присвоить правильный интерфейс (1) переменной dev_id, как показано на Рисунке 3.

Изменение значения по умолчанию для устройства hci

Вернитесь в каталог AppleJuice и предоставьте исполняемое разрешение для скрипта app.py следующей командой:

chmod +x app.py

Использование

Запустите скрипт, чтобы перечислить доступные устройства, которые вы можете подделать:

python3 app.py

Список устройств, которые можно подделать

Для выбора одной из опций используйте аргумент -d с номером присвоенного гаджета. В команде ниже я подделаю AirPods, используя значение 1.

python3 app.py -d 1

В результате любой iPhone или iPad с включенным Bluetooth в вашей близости получит запрос на сопряжение, как показано на следующем скриншоте. Если вы нажмете "Подключить", то никаких дополнительных действий не последует, что означает, что для устройств iOS нет никакого вреда.

Подделка AirPods на iPhone

Кроме того, я создал быстрый скрипт на Python, который будет каждые 5 секунд перебирать все доступные устройства, чтобы запутать ближайшие устройства iOS. Вы можете посмотреть демонстрационное видео в начале блога. Скрипт доступен на GitHub.

Предотвращение

Нет многого, что можно сделать с протоколом оповещения, который по умолчанию включен, поэтому единственное, что вы можете сделать, это отключать Bluetooth, когда вам он не нужен.

Вывод

В ходе моих тестов мне не удалось подделать все устройства из списка, возможно, возникли какие-то ошибки. Когда я решал отправить запрос на сопряжение для другого устройства, целевой iPhone все равно получал запрос от предыдущего выбранного устройства. Однако это не является большой проблемой. Эти уведомления отображаются даже на заблокированном экране.

У внутренних Bluetooth-чипов есть определенные ограничения по дальности действия, поэтому использование внешнего адаптера даже с внешней и съемной антенной может обеспечить еще более широкое покрытие области для отображения всплывающих уведомлений.

Также я прикрепляю оригинальный пост, чтобы вы могли прочесть оригинал данной статьи, без переработок, данный эксперимент я реализую на Xiaomi mi 9t и сделаю обновления на своём GitHub

В результате отправка этих запросов не наносит вреда устройствам iOS, но они могут легко раздражаться, так как это можно рассматривать как локальную атаку отказа в обслуживании (DoS).

Если вы являетесь поклонником Flipper Zero, вы также можете протестировать эту шутку, следуя инструкции "Annoying Apple Fans: The Flipper Zero Bluetooth Prank Revealed".