Статьи

Як я зламав свій фітнес-браслет

  1. Розумні браслети: комунікації з телефоном
  2. сканування
  3. Мій браслет: аутентифікація
  4. висновок

Ця історія почалася кілька місяців тому, коли до мене потрапив популярний фітнес-трекер в вигляді браслета від одного з відомих виробників подібних пристроїв. Так як це переносна пристрій (wearable device), то я встановив собі Android Wear app - додаток, створений спеціально для носяться пристроїв. Ця програма без проблем підключилося до фітнес-браслету.

Android Wear app

Правда, була одна дивина: програма підключилася до браслету Nike + Fuel Band SE, а у мене був браслет іншої фірми. Досить швидко мені вдалося з'ясувати, що браслет Nike належить моєму колезі. А він навіть не помітив, як я підключився до його пристрою.

Після цього мені захотілося провести невелике дослідження і перевірити свій браслет на предмет безпеки.

Розумні браслети: комунікації з телефоном

Зараз на ринку досить багато пропозицій аналогічних браслетів від інших виробників. Нижче наведена статистика KSN по установкам на мобільні пристрої користувачів додатків під Android для роботи з популярними фітнес-трекера (дані для статистики отримані від користувачів KSN, які дали свою згоду на їх передачу).

Розподіл установок Android-додатків
для роботи з фітнес-трекера різних виробників

Хоча ця статистика популярності саме Android-додатків (у нас немає гарантій, що відповідні пристрої є у ​​користувачів), в деякому наближенні вона відображає ситуацію з популярністю і носяться пристроїв.

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

У цих браслетах використовується GATT (Generic Attribute Profile) - профіль загальних атрибутів. Тобто на носимом пристрої є якийсь набір сервісів, у кожного сервісу є набір характеристик. Кожна характеристика містить байтовий буфер і список дескрипторів, кожен дескриптор містить значення - байтовий буфер.

Для того щоб це проілюструвати, я взяв готовий код з Android SDK - приклад програми для підключення до Bluetooth LE пристроїв. Мені не довелося писати жодного рядка коду - просто відкрив вже існуючий проект в Android Studio і натиснув кнопку Start.

На скріншоті вище видно результат підключення до мого браслету за допомогою цього додатка. Тут видно сервіси та їх характеристики. Але для мого браслета не так просто отримати дані з характеристик - для цього необхідно не тільки підключення, але і аутентифікація. У разі ж деяких з FitBit пристроїв мені вдалося прочитати дані з характеристик і їх дескрипторів. Цілком можливо, що це призначені для користувача дані.

сканування

Отже, використовуючи приклад програми з Android SDK, мені вдалося підключитися до деяких пристроїв. Після цього я зробив свій додаток, яке автоматично шукало Bluetooth LE пристрої, намагалося до них підключитися і отримати їх список сервісів.

Використовуючи цю програму, я провів кілька сканувань.

  • За дві години в Московському метро я зміг підключитися до 19 пристроїв 11 FitBit і 8 Jawbone.
  • Протягом години в фітнес-клубі в місті Bellevue, WA, USA, було виявлено 25 пристроїв: 20 Fitbit, по одному - Nike, Jawbone, Microsoft, Polar, Quans.
  • За дві години в Канкуні (Мексика) вчасно SAS2015 я зміг підключитися до 10 фітнес-трекера: 3 Jawbone і 7 FitBit.

Всього за шість годин сканування я зміг підключитися до 54 пристроїв. І це при наявності двох серйозних обмежень:

  1. Незважаючи на зазначені в специфікації 50 метрів, реальне максимальна відстань для підключень в більшості випадків - не більш 6 метрів.
  2. Передбачається, що до вже підключеного пристрою неможливо підключитися. Тобто якщо ваш девайс спарений з вашим телефоном, то ніхто не зможе до нього підключитися, його навіть не повинно бути видно в ході сканування.

Друге обмеження в принципі означає, що поки пристрій підключено до смартфону, воно не є для атаки. Хоча насправді це не так. І ось приклад: використовуючи моє додаток для сканування, мені вдалося заблокувати комунікацію між моїм браслетом і офіційним додатком, хоча вони заздалегідь були спарені.

З огляду на другий пункт наведених вище обмежень, можна припустити, що виявлені мною пристрої ніколи не підключалися до телефону, або браслет не був підключений до смартфону під час сканування (bluetooth на телефоні вимкнений). А може бути, вже підключений пристрій було доступно для підключення, незважаючи на передбачуване обмеження. Як би там не було, шанси у потенційних зловмисників підключитися до фітнес-трекера досить великі.

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

Мій браслет: аутентифікація

Для аутентифікації на телефоні офіційний додаток мого браслета використовує один з чотирьох доступних на пристрої сервісів. Для кожної характеристики з цього сервісу додаток встановлює прапор «CharacteristicNotification» - таким чином додаток повідомляє браслету, що хоче отримувати нотифікації про будь-яку зміну цієї характеристики. Потім додаток отримує список дескрипторів для кожної характеристики і встановлює прапор «ENABLE_NOTIFICATION_VALUE» - так додаток повідомляє браслету, що хоче отримувати нотифікації про будь-яку зміну кожного дескриптора.

Після цього одна з характеристик змінює своє значення - байтовий буфер. Додаток зчитує з браслета цей буфер: заголовок 200f1f і масив байт - назвемо його authBytes.

Додаток створює новий масив. Першою його частиною буде константний масив, що міститься в додатку і починається з 6dc351fd44, другою частиною нового масиву буде authBytes. Додаток отримує MD5 хеш від нового масиву і відправляє його назад на пристрій в наступній структурі:

  • Header (201210051f)
  • MD5
  • перевірки байт

Потім додаток відправляє на пристрій ще один масив, також міститься в цьому додатку.

Після цього браслет починає вібрувати, користувачеві залишається лише натиснути кнопку - і аутентифікація буде завершена.

Для офіційного додатку процес аутентифікації займає близько 15 секунд. Я зробив додаток, з яким треба всього лише 4 секунди для того, щоб браслет завібрував.

Змусити користувача натиснути єдину кнопку на браслеті легко. Потрібно лише бути досить наполегливим - можна перезапускати процес аутентифікації багато разів, поки користувач все-таки не натисне кнопку. Або поки він не відійде на відстань, що перевищує 6 метрів.

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

Після аутентифікації на пристрої легко виконувати команди. Наприклад, для того, щоб поміняти час, потрібно відправити на пристрій масив байт, що починається з f0020c, а потім дату у вигляді YYYY MM DD DW HH MM SS MSMSMSMS.

У випадку з іншими фітнес-трекера все ще простіше: для FitBit частина даних доступна відразу після підключення, а код програми для Nike навіть не обфусцірован і читається дуже легко (результати одного дослідження можна подивитися тут ).

висновок

Як показали результати мого маленького дослідження, в деяких випадках підключитися до носимо пристрою можна без відома користувача.

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

Просто уявіть - якщо зламаний браслет з датчиком пульсу, власник магазину може стежити за частотою пульсу покупця, поки той дивиться на знижки в його магазині. Так само можна дізнаватися реакцію людей на рекламу. Більш того, зламаний браслет з датчиком пульсу можна використовувати в якості детектора брехні.

Звичайно, можливі й більш шкідливі дії - наприклад, застосування Trojan-Ransom. Зловмисник може перехопити контроль над вашим браслетом і змусити його постійно вібрувати. А за відключення вібрації вимагати гроші.

Ми повідомили розробника пристрою про результати цього дослідження, і розробник повідомив, що даний метод є скоріше наслідком помилки в інтерфейсі, ніж справжньою проломом в безпеці пристрою. Мені важко з цим сперечатися: знайти по-справжньому «шкідливе» і масове застосування цього методу дійсно складно. З іншого боку, і простою помилкою в інтерфейсі я назвати це не можу. Швидше, це вразливість в безпеці пристрою, якої могло б і не бути, застосуй виробник більш просунуту схему аутентифікації пристрої; Оскільки ми не отримали підтвердження про те, що ця помилка буде усунена, ми не станемо розкривати ім'я вендора і назва браслета, в якому наявність помилки було підтверджено дослідним шляхом - щоб не давати хуліганам прямого наведення на конкретну модель. Користувачам, яких стривожила представлена ​​в цій статті інформація про спосіб перехоплення управління розумним браслетом, ми рекомендуємо звернутися до виробника пристрою і уточнити, чи є інформація з цієї статті актуальною для їх пристроїв.

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

Новости