юни 5, 2023

Хакване на смарт четка за зъби

Само си помислете: все по-често използваме умни хладилници, автомобили, контакти и крушки, умни часовници и високоговорители. Заобиколени сме от умни неща и умни хора. Но колко умни са те и дали тази „интелигентност“ е наистина необходима? Също така, колко лесно е да се хакнат тези неща? Един смарт часовник, например, не е труден  за хакване. Нека разгледаме друг пример: смарт четка за зъби.

Преди време си купих смарт четката за зъби Philips Sonicare и по време на миенето забелязах, че тя реагира на поставянето на накрайника с мигането на своя светодиод. Едно бързо търсене в интернет ми показа, че накрайникът взаимодейства с дръжката на четката, за да може да напомни на потребителя, че е време да купи нова..

Описанието на четката в сайта на Philips. Тя наистина изглежда много смарт

Реших, че ще бъде интересно да изуча как работи всичко това.

Реверсивно инженерство на моята интелигентна четка за зъби

В основата на накрайника се вижда антенка и малка черна кутийка, която вероятно е чип. В ръководството може да се намери следната подсказка: „Радиооборудването в този продукт работи на честота 13,56 MHz„. Това много прилича на NFC маркер и наистина, когато държа накрайника до смартфона си, се отваря линк към страницата на продукта.

С помощта на приложението NFC Tools можем да разберем много неща за този маркер:

Вижда се следното:

  • Това е NTAG213
  • Използва се NfcA
  • Има защита с помощта на парола
  • Има линк към страницата на Philips

Също с помощта на NFC Tools можем да прочетем данните за състоянието на паметта и достъпа до нея:

Address Data Type Access

0x00

04:EC:FC:9C

UID0-UID2/BCC0

Read-Only

0x01

A2:94:10:90

UID3-UDI6

Read-Only

0x02

B6:48:FF:FF

BCC1/INT./LOCK0-LOCK1

Read-Only

0x03

E1:10:12:00

OTP0-OTP3

Read-Only

0x04

03:20:D1:01

DATA

Read-Only

0x05

1C:55:02:70

DATA

Read-Only

0x06

68:69:6C:69

DATA

Read-Only

0x07

70:73:2E:63

DATA

Read-Only

0x08

6F:6D:2F:6E

DATA

Read-Only

0x09

66:63:62:72

DATA

Read-Only

0x0A

75:73:68:68

DATA

Read-Only

0x0B

65:61:64:74

DATA

Read-Only

0x0C

61:70:FE:00

DATA

Read-Only

0x0D…

00:00:00:00

DATA

Read-Only

0x1F

00:01:07:00

DATA

Readable, write protected by PW

0x20

00:00:00:02

DATA

Read-Only

0x21

60:54:32:32

DATA

Read-Only

0x22

31:32:31:34

DATA

Read-Only

0x23

20:31:32:4B

DATA

Read-Only

0x24

B3:02:02:00

DATA

Readable,write protected by PW

0x25

00:00:00:00

DATA

Readable,write protected by PW

0x26

00:00:00:00

DATA

Readable,write protected by PW

0x27

00:00:00:01

DATA

Readable,write protected by PW

0x28

00:03:30:BD

LOCK2 – LOCK4

Readable,write protected by PW

0x29

04:00:00:10

CFG 0

Read-Only

0x2A

43:00:00:00

CFG 1

Read-Only

0x2B

00:00:00:00

PWD0-PWD3

Write-Only

0x2C

00:00:00:00

PACK0-PACK1

Write-Only

Повторих този процес за един черен и два бели накрайника модел W DiamondClean и разбрах следното:

      • 0x00-0x02 – съдържа уникален идентификатор и контролна сума
      • 0x04-0x0C – там се намира линка към магазина на Philips
      • 0x22 – на това отместване са записани байтовете 31:32:31:34 за черните и 31:31:31:31 за белите накрайници
      • 0x24 – тук е записано общото време на миенето
      • Всички останали данни, които могат да бъдат прочетени са съвсем еднакви за всички накрайници

Декриптиране на записаното време

Нека да направим един експеримент и да разберем какви промени стават с NFC маркера при използването на тази смарт четка за зъби:

  • Прочитане на NFC маркера
    • при поставянето на нов накрайник, който още не е използван, данните на addr. 0×24 са съответно 00:00:02:00
    • Ако просто поставим накрайника без да мием зъбите, нищо не се променя
  • Миене
    • Дадох на четката да работи в продължение на 5 секунди
  • Отново прочетох данните от накрайника
    • Данните на отместване 0×24 са се променили и сега там има 05:00:02:00
  • По всичко личи, че на addr. 0x24 се записва боя секунди, в продължение на които е използван накрайникът на тази четка

Когато това използва не премине 255 секунди, таймерът започва да използва втория байт  (02:01:02:00 -> 258s). Опитът да презапиша това записано време за съжаление бе неуспешен, понеже този адрес на паметта е защитен с парола. Даа.

Получаване на паролата

Опа, оказа се, че необходимата парола се подава с обикновен отворен и некриптиран текст! Тоест всичкото, което трябва на направя е да прихвана обмена на данните между четката за зъби и накрайника. След като си поиграх с моя специализиран приемник със софтуерна настройка HackRF, чрез метода на пробите и грешките съставих необходимия работещ алгоритъм.

Запис на радиосигнала

Стартираме програмата gqrx и избираме честота 17,736 MHz. Сега, когато поднасям четката за зъби близо до антената се вижда, че тя на няколко пъти в секундата се опитва да осъществи връзка с накрайника.

По време на миенето на зъбите NFC четецът прави кратка пауза и следващият пакет от байтове обновява брояча на времето.

Преобразуване на записаното

Преди този необработен I/O файл да бъде декодиран, той трябва да бъде конвертиран в малко по-различен формат, за да може декодерът да го прочете. Използвах честота на дискретизация 2 MHz. (Всичкият необходим софтуер и използваните скриптове са качени в сайта на автора (kuenzi.dev).

Декриптиране на записаното

Намерих перфектния инструмент за тази задача, наречен NFC-laboratory. След като отворите новосъздадения WAV файл, той трябва да изглежда като на изображението по-горе. В този случай записът ви позволява да видите само връзката, която преминава от хоста към маркера (зелената стрелка). Но за подбора на пароли това е идеално. Ако разгледате спецификацията на NTAG213, можете да разберете какво се случва:

  • Редове #0-#6: прави се връзка към уникалния идентификатор на тага (маркера)
  • Ред  #7″ четката за зъби изпраща паролата (командата 0x1B = PWD_AUTH)
  • Ред  #9: броя на времето, в който новата информация се записва с помощта на командата 0xA2 = WRITE

И така паролата на моята смарт четка за зъби се оказа 67:B3:8B:98. В изображението тя се вижда много ясно.

С тази парола мога да използвам накрайника колкото си искам дълго. Разбира се, не възнамерявам да правя подобно нещо. Просто почти същият подход се използва в някои принтери, тонер касети и какво ли още не.

Запис на собствени данни в четката за зъби

С успешно получената парола можем са запишем в брояча на четката за зъби каквото си поискаме значение, като изпратим съответните байтове чрез NFC. Отново  NFC Tools ни идва на помощ:

  • От менюто преминете към Other -> Advanced NFC commands
  • Изберете входно/изходния клас (I/O Class) на NfcA
  • Подайте следната поредица от байтове: 1B:67:B3:8B:98,A2:24:00:00:02:00
  • Наслаждавайте се на „новия“ накрайник на четката (нали разбирате, че става дума само за брояча на времето?)

Ето как изглежда последователността от команди на по-горната стъпка:

Команда Действие

1B

PWD_AUTH

67:B3:8B:98

The password

,

Package delimiter

A2

WRITE

24

To address 0x24

00:00:02:00

Timer set to 0s

И така, смарт четката е успешно хакната и сега можем да си играем с таймера както си поискаме.

Ето някои интересни наблюдения:

  • Само първите два байта на адрес 0x24 се използват за отчитане на времето. След като броячът достигне FF:FF:02:00, той спира да се увеличава (18 часа непрекъснато миене на зъби)
  • Когато запаметеното време надхвърли 0x5460, четката за зъби мига със светодиода, за да ви уведоми да смените главата. Това съответства на 21 600 s -> 180 x 2 min -> 3 месеца миене на зъбите два пъти дневно, което е точно в съответствие с препоръката на Philips за смяна на главите на четките на всеки 3 месеца

Заключение

Ако се вгледате внимателно в съдържанието на 0x2A – 43:00:00:00 и страница 18 от техническото описание, можете да видите, че маркерът е конфигуриран така, че да забрани трайно достъпа до запис след три неправилни опита за въвеждане на паролата (което и направих по време на експериментите си).

Това означава, че дори дръжката на четката за зъби няма да може да запише данни върху този накрайник.

Генериране на паролата

За съжаление паролата на всяка глава на тази четка е уникална и процесът на извличането ѝ с помощта на SDR е сложен и изисква специално оборудване. В долната част на страница 30 в информационния лист NXP препоръчва паролата да се генерира от 7-байтовия UID. По-долу са представени всички двойки UID – парола, които получих от моите три четки:

UID Парола

04:79:CF:7A:89:10:90

FF:34:CE:4C

04:EC:FC:A2:94:10:90

61:F0:A5:0F

04:D7:29:0A:94:10:90

67:B3:8B:98

Всичките ми опити да отгатна каква е еднопосочната функция за генериране на паролите бяха неуспешни. В зависимост от това колко внимателно инженерите на Philips са се справили с тази функция, отгатването ѝ може да се окаже почти невъзможно


source

Сподели: