Моніторинг Bluetooth
UA_HACKВступ
Сьогодні Bluetooth вбудований майже у всі наші гаджети. Сюди входять персональні комп’ютери, смартфони, iPod, планшети, динаміки, ігрові контролери та багато інших пристроїв. У цій статті ми зосередимося на пентестінгу мобільних пристроїв та планшетів, оскільки вони є найбільш зручною ціллю для хакерів. Можливість хакнути Bluetooth може призвести до компрометації будь-якої інформації на пристрої (зображення, електронні листи, СМС тощо), керування пристроєм та можливості надсилання небажаної інформації на пристрій.
Перш ніж ми почнемо пентест Bluetooth, нам слід зрозуміти технологію, умови роботи та безпеку протоколу Bluetooth, якщо ми хочемо його успішно зламати. Я не можу передати глибокого розуміння Bluetooth, але я думаю, що можу дати вам базові знання, які ви можете використовувати в подальшій вашій роботі.
Апаратне забезпечення
Сьогодні в моєму розпорядженні будуть такі Bluetooth-адаптери як Sena UD100, Ubertooth One та Wi-Fi-адаптер Alfa AWUS036NH. Операційна система
— Ubuntu 20.04 LTS.
Оскільки Sena UD100 за замовчуванням вже розпізнається в системі, то з Ubertooth є проблеми.
Ubertooth One - безпровідна дослідницька платформа на 2,4 ГГц для радіомоніторингу Bluetooth. Основана на потужному мікропроцесорі LPC175x ARM Cortex-M3 із швидким інтерфейсом USB 2.0. Bluetooth-пристрій класу 1. Загальна довжина плати всього близько 6 см.
Даний модуль може не лише відправляти і приймати сигнал 2,4 ГГц, а також працювати в режимі моніторингу, спостерігаючи за Bluetooth-трафіком у реальному часі. Його використовують успішно для розробки та аудиту безпеки. Це повністю відкрита платформа в програмній та апаратній частинах, схемах та кодах, що доступні в Інтернеті.
Специфікації:
- Діапазон прийому і передачі 2,4 ГГц;
- вихідна потужність +20 дБм (100 мВт);
- приблизний радіус дії 100 м;
- стандартний коннектор Cortex для отладок (10-піновий 50-мм JTAG);
- серійний коннектор ISP;
- коннектор розширення для зв'язку між модулями Ubertooth і для розширення функціональності в майбутньому;
- 6 індікаторів.
Інсталяція пристрою
Залежності
Існує кілька залежностей, які потрібно встановити перед інсталяцією libbtbb та інструментів Ubertooth. Багато з них доступні у репозиторіях вашої операційної системи, наприклад:
sudo apt install cmake libusb-1.0-0-dev make gcc g++ libbluetooth-dev wget pkg-config python3-numpy python3-qtpy python3-distutils python3-setuptools
Встановлення libbtbb
Далі потрібно створити бібліотеку libbtbb, щоб інструменти Ubertooth декодували пакети Bluetooth:
wget https://github.com/greatscottgadgets/libbtbb/archive/2020-12-R1.tar.gz -O libbtbb-2020-12-R1.tar.gz
tar -xf libbtbb-2020-12-R1.tar.gz
cd libbtbb-2020-12-R1
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
Ubertooth tools
Репозиторій Ubertooth містить код для моніторингу та перехвату пакетів Bluetooth, налаштування самого пристрою та оновлення мікропрограм.
wget https://github.com/greatscottgadgets/ubertooth/releases/download/2020-12-R1/ubertooth-2020-12-R1.tar.xz
tar -xf ubertooth-2020-12-R1.tar.xz
cd ubertooth-2020-12-R1/host
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
Плагіни Wireshark
Користувачам Wireshark версії 2.2+ не потрібно взагалі створювати будь-які плагіни, і вони можуть пропустити цей розділ. Сюди входять користувачі Debian 10+, Ubuntu 20.04+, Fedora 33+, RHEL 8.3+ та більшості інших дистрибутивів Linux.
Версія Wireshark 1.12 та новіші за замовчуванням включають плагін Ubertooth BLE.
Плагіни Wireshark BTBB та BR/EDR дозволяють аналізувати трафік базової смуги Bluetooth, який був захоплений за допомогою Kismet, у графічному інтерфейсі Wireshark. Вони побудовані окремо від решти програм Ubertooth та libbtbb.
sudo apt-get install wireshark wireshark-dev libwireshark-dev cmake
cd libbtbb-2020-12-R1/wireshark/plugins/btbb
mkdir build
cd build
cmake -DCMAKE_INSTALL_LIBDIR=/usr/lib/x86_64-linux-gnu/wireshark/libwireshark3/plugins ..
make
sudo make install
Каталог, переданий cmake як MAKE_INSTALL_LIBDIR, різниться залежно від системи, але він повинен знаходитись у наявних плагінах Wireshark, таких як asn1.so та ethercat.so. На macOS це, швидше за все, /Applications/Wireshark.app/Contents/PlugIns/wireshark/.
Потім повторіть для плагіна BT BR/EDR:
sudo apt-get install wireshark wireshark-dev libwireshark-dev cmake
cd libbtbb-2020-12-R1/wireshark/plugins/btbredr
mkdir build
cd build
cmake -DCMAKE_INSTALL_LIBDIR=/usr/lib/x86_64-linux-gnu/wireshark/libwireshark3/plugins ..
make
sudo make install
Перевірте чи все правильно у вас ініціалізувалось:
Але ще не поспішайте працювати. Потрібно ще оновити прошивку.
Як оновити прошивку
Спочатку завантажте останню версію Ubertooth (https://github.com/greatscottgadgets/ubertooth/releases/tag/2020-12-R1). Потім розархівуйте архів і перейдіть у каталог ubertooth-one-firmware-bin. Потім ви можете запустити команду ubertooth-df:
ubertooth-dfu -d bluetooth_rxtx.dfu -r
Пристрій автоматично перейде в режим DFU і прошиє прошивку.
Проблеми
Якщо в кінці ви побачите контрольне повідомлення, яке не підтримується, це означає, що скидання налаштування пристрою не вдалося. Ви можете впоратися з цим, запустивши ubertooth-util -r або просто відключивши USB-кабель від Ubertooth і знову підключивши його.
Вирішення проблем
Якщо у вас трапляється така помилка, як "libUSB Error: Command Error: (-1)", після розархівування, перейдіть у каталог прошивки . Потім запустіть:
make clean all && make
ubertooth-dfu -r -d bluetooth_rxtx / bluetooth_rxtx.dfu
Яку версію я запускаю?
У режимі, що не є DFU, ви можете отримати інформацію про мікропрограму за допомогою ubertooth-util -v. Зверніть увагу, що показана версія повинна відповідати тій, яку ви щойно встановили:
ubertooth-util -v
Початок роботи
Перше, що слід спробувати з новим Ubertooth One - це аналіз спектра в реальному часі.
Підключіть Ubertooth One до комп’ютера. Ніколи не використовуйте Ubertooth One без підключеної антени! Ви повинні побачити, як світяться світлодіоди RST та 1V8. Це вказує на те, що працює мікроконтролер LPC175x (RST) і що живлення подається на бездротовий трансивер CC2400 IC (1V8). Індикатор USB також може загорітися, якщо операційна система вашого комп'ютера ініціазувала та налаштувала пристрій (типово для Linux).
Виглядає це так:
Перехоплення BLE в Wireshark
Ви можете перехоплювати BLE у Wireshark за допомогою стандартних збірок Wireshark.
- Запустіть команду: sudo mkfifo/tmp/pipe
- Відкрийте Wireshark
- Клацніть Capture -> Options
- Натисніть кнопку "Manage Interfaces" в правій частині вікна
- Натисніть кнопку «New»
- У текстовому полі "Pipe" введіть "/tmp/pipe"
- Натисніть Зберегти, а потім - Закрити
- Натисніть "Пуск"
У терміналі запустіть ubertooth-btle:
ubertooth-btle -f -c /tmp/pipe
У вікні Wireshark ви побачите, як ідуть пакети.
Примітка: Якщо ви побачили поле в пакетах User encapsulation not handled: DLT=147, check your Preferences->Protocols->DLT_USER, потрібні зробити дані кроки:
- Натисність Edit -> Preferences
- Натисність Protocols -> DLT_USER
- Натисність Edit (Encapsulations Table)
- Натисність New
- У розділі DLT виберіть "User 0 (DLT=147)"
- У розділі Payload Protocol введіть: btle
- Натисність OK
- Натисність OK
З нещодавньою прошивкою Ubertooth за замовчуванням фіксуються лише рекламні(advertising) канали. Визначивши адресу пристрою цільового пристрою, який ви хочете перехоплювати, запустіть:
ubertooth-btle -t your mac-adress
Ubertooth буде слідувати за з'єднаннями, що включають цю ціль, доки не буде передано аргумент -t, або не буде скинуто налаштування пристрою.
Можливо, вам доведеться спробувати підключитися кілька разів, доки Ubertooth не зможе успішно пройти з'єднання.
Виявлення приладів BLE у режимі реального часу за допомогою Blue Hydra
Bluetooth Low Energy (BLE) - це технологія цифрової бездротової передачі даних (можливо стане відкритим стандартом по бездротовому зв'язку) з низьким енергоспоживанням і малим радіусом передачі (10 м), заснована на недорогих мікросхемах в передавальних пристроях. Завдяки своїй поширеності в сучасних смартфонах, планшетах та комп’ютерах, BLE являє собою вже деяку вразливість. Їх як мінімум можливо локалізувати за допомогою Blue Hydra.
Програма побудована на основі бібліотеки bluez. Blue Hydra використовує вбудоване обладнання BLE, яке можна додатково активувати за допомогою апаратного забезпечення Ubertooth для виявлення та відстеження не тільки низькоенергетичних, але й класичних пристроїв Bluetooth. Ви можете дізнатись більше про те, як працює Blue Hydra, переглянувши Defcon 24.
Ті з вас, хто вже знайомий з використанням Aircrack -ng, будуть відчувати себе, як вдома з Blue Hydra, оскільки вони дуже схожі.
Рекомендоване обладнання
BlueHydra може працювати з більшістю внутрішніх карт Bluetooth, але ми рекомендуємо використовувати адаптер Sena UD100.
Додатково ви можете використовувати обладнання Ubertooth One для виявлення активних пристроїв у режимі видимості.
Примітка: використання Ubertooth One не є заміною для звичайного адаптера Bluetooth. Саме тому ми використовуємо в цій роботі 2 адаптера.
Опції налаштування
Конфігураційний файл розміщений у корневому каталозі служб (де лежить файл README), що називається blue_hydra.yml
Можливо налаштувати наступні варіанти:
log_level: рівень інформації. Якщо встановити значення на false, то логи не будуть створюватися.
bt_device: визначає пристрій для використання, як головний інтерфейс Bluetooth, за умовою це hci0.
info_scan_rate: швидкість у секундах, при якій запускається інформаційне сканування, за умовою встановлена на 60.
status_sync_rate: швидкість у секундах, при якій синхронізується статус пристрою з Pulse.
btmon_log: true | false, якщо встановлено на true, фільтрований вивід btmon буде записуватись в журнал.
btmon_rawlog: true | false, якщо встановлено true, то в журнал буде записуватись нефільтрований вивід btmon.
rssi_log: true | false, якщо встановлено, будуть записуватись в логи значення RSSI.
aggressive_rssi: true | false, якщо встановлена, адаптер буде агресивно відправляти RSSI на Pulse.
Інсталяція
У системах на базі Debian залежності можна встановити за допомогою команд:
sudo apt-get install bluez bluez-test-scripts python-bluez python-dbus libsqlite3-dev ubertooth
sudo apt-get install bluez bluez-test-scripts python-bluez python-dbus libsqlite3-dev ubertooth ruby-dev bundler
git clone https://github.com/pwnieexpress/blue_hydra.git
cd blue_hydra/
bundle install
Запуск
sudo ./blue_hydra
Ну і Apple, BLEee
Компанія Apple активно впроваджує в маси ідею про те, що тепер-то з приватними даними користувачів їх продукції все в порядку. Але дослідники з Hexway з'ясували, що активний механізм Bluetooth LE (BLE) дозволяє дізнатися досить багато про твій айфончик.
Якщо Bluetooth включений, то будь-яка людина в радіусі дії сигналу може дізнатися:
- стан пристрою;
- інформацію про заряд;
- контакт передачі;
- стан Wi-Fi;
- доступність буфера;
- версію iOS;
- номер телефону.
Швидше за все, це пов'язано з новою функцією «Find my phone». Її суть полягає в створенні екосистеми Apple пристроїв, які обмінюються між собою інформацією по BLE для можливості відстеження вкрадених і втрачених пристроїв без використання GPS і мобільних каналів зв'язку навіть у вимкненому стані.
Інсталяція програмного забезпечення
git clone https://github.com/hexway/apple_bleee.git && cd ./apple_bleee
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
sudo pip3 install -r requirements.txt
git clone https://github.com/seemoo-lab/owl.git && cd ./owl && git submodule update --init && mkdir build && cd build && cmake .. && make && sudo make install && cd ../..
Скрипт: ble_read_state.py
Цей скрипт перехоплює трафік BLE і відображає повідомлення про стан пристроїв Apple. Більше того, засіб виявляє запити на спільний доступ до паролів від пристроїв Apple. У цих пакетах ми можемо отримати перші 3 байти sha256 (phone_number) і спробувати вгадати оригінальний номер телефону, використовуючи підготовлені таблиці зі значеннями хешу телефону.
Приклади актуальних векторів атак
AirDrop
Ця технологія дозволяє обмінюватися файлами між пристроями Apple без інтернет-з'єднання. При кожному з’єднанні пристрій посилає хеш твого номеру телефону в SHA256. Це просто жах!
Приклад:
sudo python3 airdrop_leak.py
sudo sudo p link set wlan1 down && iwconfig wlan1 mode monitor && sudo ip link
set wlan1 up && sudo owl -i wlan1 -N & (запуск wlan1 в режим моніторингу)
На даних рисунках видно номер телефону пристрою у вигляді хешу SHA256 (64ff9d7e6b13e***************5527964fa98728eaab94aeec67778db27a) та його MAC-адресу (b6:**:**:2b:**:5b). Якщо перебрати даний хеш, то отримаємо відкритий номер телефону.
Як це працює?
Аналіз BLE-пакетів
Модифікувавши скрипти з пакета py-bluetooth-utils, можна переглянути BLE-трафік. Apple використовує ADV_IND-повідомлення для відправки статусу пристрою.
Структура advertise-пакета
Nearby-повідомлення
Приклад типів повідомлень:
0x05 — Airdrop
0x07 — Airpods
0x10 — Nearby
0x0b — Watch Connection
0x0c — Handoff
0x0d — Wi-Fi Settings
0x0e — Hotspot
0x0f — Wi-Fi Join Network
Також з Nearby-пакетів можна отримати статуси:
0x0b — Home screen
0x1c — Home screen
0x1b — Home screen
0x11 — Home screen
0x03 — Off
0x18 — Off
0x09 — Off
0x13 — Off
0x0a — Off
0x1a — Off
0x01 — Off
0x07 — Lock screen
0x17 — Lock screen
0x0e — Calling
0x5b — Home screen
0x5a — Off
AirDrop
Apple AirDrop має три налаштування приватності:
- Receiving Off (Відключено).
- Contacts Only (Тільки контакти).
- Everyone (Любий).
При запуску AirDrop розсилається пакет наступної структури, що містить по два байта хешів AppleID, email і номера телефону:
При цьому AirDrop використовується тільки для ініціації передачі, для самої ж передачі даних використовується p2p-з'єднання по Wi-Fi (AWDL - Apple Wireless Direct Link).
Під час аутентифікації відправник відсилає ідентифікаційні дані sender's record data для перевірки налаштувань приватності одержувачем. У цьому повідомленні міститься повний SHA256-хеш відправника. Таким чином, зловмисник може відповідати на всі чужі AirDrop BLE-запити, отримуючи повні хеші номерів.
Схема роботи AirDrop:
Висновок
Сьогодні було розглянуто тільки частина витоків інформації, яка можлива з використанням BLE. Деякі з них на даний момент складно назвати вразливостями, скоріше, погано продуманою реалізацією нової системи. Ми бачимо, що уже досить часто стали з’являтись нові вектори атак на Bluetooth протокол, що не може на не турбувати.