Частина 8. Злом апаратної частини системи. (SPI та I2C)

9 жовтня 2023 4 хвилин Автор: Lady Liberty

Взаємодія з IoT: Аналіз і керування через SPI та I2C

SPI (Serial Peripheral Interface) та I²C (Inter-Integrated Circuit, часто просто I2C) є двома поширеними серійними протоколами зв’язку, які використовуються для передачі даних між мікроконтролерами та іншими периферійними пристроями в вбудованих системах. У цьому розділі ми розглянемо два поширені протоколи зв’язку, які використовуються в пристроях IoT для спілкування між мікроконтролерами та периферійними пристроями – SPI (Serial Peripheral Interface) та I2C (Inter-Integrated Circuit). Як ми вже знаємо з попередніх розділів, іноді просто підключення до інтерфейсів, таких як UART і JTAG, може надати доступ до системної оболонки, але що робити, якщо ці інтерфейси вимагають аутентифікації або навіть не реалізовані?

У таких випадках ми можемо звертатися до старіших протоколів, таких як SPI та I2C, які зазвичай вбудовані в мікроконтролери пристроїв IoT. Ми використовуватимемо SPI для вилучення даних з EEPROM та інших мікросхем флеш-пам’яті, які часто містять прошивку та інші важливі дані, такі як ключі API, паролі користувачів і URL-адреси обслуговування. Також ми розглянемо I2C, створимо власну архітектуру для комунікації через цю послідовну шину, а потім навчимося сніфінгу та управлінню пристроями, щоб змусити їх виконувати певні дії. Ці протоколи дозволяють взаємодіяти з різними компонентами IoT і дістатися до важливої інформації, яка може бути корисною для аналізу та досліджень безпеки.

Комунікаційне обладнання SPI та I2C

Для зв’язку з SPI та I2C знадобиться певне обладнання. Ви можете використовувати патч-плату або програматор для EEPROM/флеш-чіпів, якщо ви хочете випаяти мікросхеми (це слід зробити, якщо у вас немає іншого варіанту). Але якщо ви віддаєте перевагу не відпаювати мікросхеми від друкованої плати, ви можете використовувати або спеціальні затискачі-гачки, які з’єднуються безпосередньо з контактами мікросхеми, або затискачі мікросхем в корпусі SOIC (зазвичай мікросхеми флеш-пам’яті зустрічаються в таких упаковках), які дешеві і зручні.

Для проекту SPI, описаного в цьому розділі, вам знадобиться восьмиконтактний кабель SOIC із затискачем або затискачами-гачками для підключення до мікросхем флеш-пам’яті. Затискачі SOIC (Малюнок 8.1) можуть бути складними у використанні, оскільки вам потрібно точно вирівняти колодки при підключенні кліпси до мікросхеми. Кліпси-гачки зручніші у використанні для багатьох.

Вам також знадобиться адаптер USB-UART. Хоча ви можете використовувати адаптер, який використовується в розділі 7, ми рекомендуємо Bus Pirate (http://dangerousprototypes.com/docs/Bus_Pirate), надійний пристрій з відкритим вихідним кодом, який підтримує кілька протоколів. Він має вбудовані макроси для злому IoT, включаючи можливості сканування та сніфінгу I2С і багато інших протоколів. Ви також можете спробувати дорожчі інструменти, які аналізують повідомлення I2C у більшій кількості форматів, таких  як Beagle (https://www.totalphase.com/pro ducts/beagle-i2cspi/) або Aardvark (https://www.totalphase.com/products/aardvark-i2cspi/). У цьому розділі ви дізнаєтеся, як використовувати вбудовані макроси Bus Pirate для виконання типових атак.

Крім того, для виконання лабораторної вправи I2C (далі в цьому розділі) вам знадобиться Arduino Uno (https://store.arduino.cc/usa/ arduino-uno-rev3/), принаймні один світлодіод BlinkM (https://www.sparkfun. com/products/8579/), макетну плату та кілька патч-кабелів. Ви також можете використовувати так звану «третю руку» – кронштейни, які допомагають утримувати кілька одиниць обладнання. Їх вартість варіюється в широких межах. Розділ IoT Hacking Tools надає повний список інструментів з описом їх сильних і слабких сторін.

SPI

SPI – це протокол зв’язку, який передає дані між периферійними пристроями та мікроконтролерами. Широко використовуваний в популярному обладнанні, такому як Raspberry Pi і Arduino, SPI є синхронним протоколом зв’язку, тобто може передавати дані швидше, ніж I2C і UART.  РК-дисплеї, зчитувачі SD-карт і мікросхеми пам’яті майже на будь-якому пристрої IoT.

Як працює SPI

SPI використовує чотири дроти для передачі даних. У повнодуплексному режимі, де дані передаються в обох напрямках одночасно, він покладається на архітектуру периферійного контролера. У такій архітектурі пристрій, який служить контролером, генерує тактові імпульси, які керують передачею даних, а всі пристрої, які є периферійними пристроями, прослуховують шину і відправляють або приймають повідомлення. SPI використовує наступні чотири рядки (не рахуючи «ground»):

  • Controller In, Peripheral Out (CIPO) – для повідомлень, що надсилаються периферійними пристроями на контролер;

  • Controller Out, Peripheral In (COPI) – для повідомлень від контролера до периферійних пристроїв;

  • Serial Clock (SCK) – тактові імпульси, що вказують, коли пристрої повинні вміти зчитувати дані з шини.

  • Chip Select (CS) – це сигнал для вибору периферійного пристрою, який повинен прийняти повідомлення.

Зауважимо, що, на відміну від UART, SPI використовує окремі лінії для надсилання та отримання даних (COPI та CIPO відповідно). Також враховуйте, що апаратне забезпечення, необхідне для реалізації SPI, дешевше і простіше, ніж UART, і може забезпечити більш високу швидкість передачі даних. З цих причин багато мікроконтролерів, що використовуються в світі Інтернету речей, підтримують його. Для отримання додаткової інформації про реалізацію SPI дивіться сторінку https://learn.sparkfun.com/tutorials/serial-peripheral-interface-spi/all/.

Вилучення вмісту мікросхем флеш-пам’яті EEPROM за допомогою SPI

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

Знайдіть правильні фішки та шпильки

Знайдіть мікросхему флеш-пам’яті пристрою. Виробники, які піклуються про безпеку, зазвичай видаляють маркування мікросхем на платі пристрою, але мікросхеми флеш-пам’яті зазвичай мають 8 або 16 контактів. Ви також можете знайти мікросхему, подивившись таблицю даних мікроконтролера в Інтернеті, як ми це зробили в главі 7. Таблиця повинна містити діаграму із зазначенням конфігурації та опису контактів. Таблиця, ймовірно, також міститиме інформацію, що підтверджує, чи підтримує мікроконтролер протокол SPI. Інша інформація, така як версія протоколу, підтримувані швидкості та розмір пам’яті, також буде корисною під час налаштування інструментів для взаємодії з SPI.

Знайшовши мікросхему пам’яті, знайдіть маленьку крапку в одному з кутів мікросхеми, яка позначає контакт 1 (Малюнок 8.2).

Тепер підключіть перший контакт восьмиконтактного кабелю SOIC до контакту No1 мікросхеми. Перший штифт затискача SOIC, як правило, відрізняється за кольором, тому його легко знайти. Використовуйте інформацію про розташування контактів, взяту з таблиці, щоб правильно підключити решту контактів SOIC. Рис. На малюнку 8.3 показано типове розташування штифтів. Зокрема, так розташовані контакти мікросхеми пам’яті WinBond 25Q64.

Коли ви підключили всі частини затискача SOIC до мікросхеми флеш-пам’яті, ваша установка повинна виглядати так, як показано на мал. 8.4. Будьте обережні при підключенні затискача SOIC: штифти легко пошкодити.

Якщо у вас виникли проблеми з підключенням затискача SOIC, затискачі-гачки також підійдуть (мал. 8.5.); Можливо, вам навіть буде простіше їх підключити.

Зв’язок з чіпом SPI

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

Переконайтеся, що пристрій, пам’ять якого ви витягуєте, вимкнено, після чого підключіть дроти до мікросхеми. З’єднайте контакти та мікросхеми Bus Pirate за допомогою затискача SOIC, як показано в таблиці. Наприклад, ми б підключили мікросхему WinBond 25Q64 відповідно до таблиці 1. 8.1.

ПРИМІТКИ:  Ваша плата або позначення схеми може використовувати застарілі назви сигналів SPI MISO та MOSI замість CIPO та COPI відповідно. Ви також можете зустріти застарілі терміни master/slave замість «контролер/периферійний пристрій» у схемах і платах I 2C.

По закінченню з’єднання повинні виглядати так, як показано на мал. 8.6.

Тепер, коли пристрій, пам’ять якого ви будете зчитувати, вимкнено, підключіть USB-кабель Bus Pirate до комп’ютера. Перевірити сполучення з мікросхемою SPI можна за допомогою утиліти Linux-flashrom, яку можна завантажити з https://flashrom.org/Flashrom  (або більшості пакетних менеджерів). Наступна команда ідентифікує чіпсет пам’яті:

# flashrom -p buspirate_spi:dev=/dev/ttyUSB0

Переконайтеся, що ви замінили ttyUSB0 на ручку пристрою, призначену адаптеру. Зазвичай це буде щось на кшталт ttyUSB <номер>, і ви можете ввести  команду ls /dev/tty*, щоб переглянути дескриптори у вашій системі. Утиліта або визначить мікросхему SPI, або поверне  повідомлення No EEPROM/flash device found.

Зчитування вмісту мікросхеми пам’яті

Після того, як ви встановили з’єднання з мікросхемою, ви можете виконати операцію зчитування, щоб отримати її вміст. Використовуйте команду flashrom:

# flashrom -p buspirate_spi:dev=/dev/ttyUSB0 -r out.bin

Прапорець -r  запускає операцію читання, яка зберігає вміст у вказаному файлі. Прапорець -p   визначає назву адаптера. Ім’я Bus Pirate у цьому прикладі buspirate_spi, але вам слід змінити його, якщо ви використовуєте інший адаптер. Ви повинні побачити такий результат:

Found Winbond flash chip "W25Q64.V" (8192 kB, SPI).
Block protection is disabled.
Reading flash…

Після виконання команди вихідний файл повинен відповідати розміру пам’яті мікросхеми, зазначеному у виході команди. Для цього чіпсета було вказано 8 МБ.

Крім того, ви можете отримати вміст мікросхеми за допомогою популярного скрипта spiflash.py з бібліотеки libmpsse. Завантажте бібліотеку за адресою https:// github.com/devttys0/libmpsse/, потім скомпілюйте та встановіть її:

# cd libmpsse
# ./configure && make
# make install

Якщо все запрацює, ви зможете запустити spiflash.py. Щоб переконатися, що інструмент правильно визначає мікросхему і що всі контакти підключені правильно, запустіть spiflash.py і знайдіть назву мікросхеми на виході. Щоб отримати файл пам’яті, що зберігається в мікросхемі, введіть наступну команду:

# spiflash.py -r out.bin -s <size to read>

Щоб прочитати, наприклад, дамп пам’яті об’ємом 8 МБ, запустіть:

# spiflash.py -r out.bin -s $((0x800000))

Якщо ви не знаєте розмір дампа флеш-пам’яті, який потрібно отримати, виберіть випадкове значення, достатньо велике, щоб вмістити весь вміст флеш-пам’яті.

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

І2С

I2C — це послідовний протокол зв’язку для низькошвидкісних пристроїв. Компанія Phillips Semiconductors розробила I 2C у 1980-х роках для зв’язку між компонентами на одній друкованій платі, але ви також можете використовувати її між компонентами, з’єднаними кабелем. У світі Інтернету речей ви часто знайдете його в мікроконтролерах, інтерфейсах вводу/виводу, таких як клавіатури та кнопки, звичайних споживчих та бізнес-пристроях,  а також датчики всіх типів. Важливо відзначити, що навіть датчики в багатьох промислових системах управління (АСУ) використовують I2C, тому він став дуже поширеним.

Головною перевагою цього протоколу є його простота. Замість чотирьох проводів, які використовує SPI, I2C має двопровідний інтерфейс. Крім того, обладнання без вбудованої підтримки I2C може використовувати I2C через контакти вводу/виводу загального призначення. Але його простота, а також той факт, що всі дані передаються по одній шині, збільшує ризики, якщо зловмисник захоче перехопити дані або ввести свої власні. Причина в тому, що  що пристрої IoT, які використовують ту саму шину I2C,  не забезпечують аутентифікацію компонентів.

Як працює I2C

Простота I2C дозволяє обладнанню обмінюватися даними без жорстких вимог до швидкості. Протокол використовує три лінії:  послідовний канал  передачі даних (SDA) для передачі даних, послідовну лінію синхронізації  (SCL) для визначення часу зчитування даних і  лінію заземлення  (ВНД). Лінії SDA і SCL з’єднані з периферійними пристроями, і вони є драйверами з відкритим стоком: обидві лінії потрібно підключити до резисторів. (Вам знадобиться лише один резистор для кожної лінії, а не один для кожного периферійного пристрою.) Напруга коливається від 1,8, 3,3 до 5,0 В, і передача може відбуватися на чотирьох різних швидкостях: 100 кГц або початкова швидкість відповідно до специфікацій I2C; 400 кГц – швидкий режим; 1 МГц для високошвидкісного режиму та 3,2 МГц для надшвидкого режиму.

Як  і послідовний периферійний інтерфейс SPI, I2C використовує контролер і периферійну конфігурацію. Компоненти передають дані по SDA побітово у восьмибітних послідовностях. Контролер або кілька контролерів керують лінією SCL. Архітектура I2C підтримує більше одного контролера та один або кілька периферійних пристроїв, кожен з яких має унікальні адреси, що використовуються для зв’язку. У табл. На малюнку 8.2 зображена структура повідомлення,  відправляється з контролера на периферійний пристрій.

Контролер запускає кожне повідомлення зі станом шини START, яка сигналізує про початок повідомлення. Потім він надсилає адресу периферійного пристрою, яка зазвичай має довжину 7 біт, але може мати довжину до 10 біт. Це дозволяє використовувати до 128 (при використанні 7-бітних адрес) або до 1024 периферійних пристроїв (при використанні 10-бітних адрес) на одній шині. Контролер також додає біт читання/запису,  який вказує на тип операції, яку потрібно виконати. Біт ACK/NACK вказує на те, яким буде наступний сегмент даних. I2C ділить фактичні дані на восьмибітні послідовності, кожна з яких закінчується різним бітом ACK/NACK. Контролер завершує повідомлення, генеруючи стан STOP. Для отримання додаткової інформації про протокол відвідайте  https://www.i2c-bus.org/.

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

У наступному розділі ми налаштуємо власну архітектуру шини I2C.

Налаштування архітектури шини i2C контролер-периферія

Щоб продемонструвати, як контролювати зв’язок I2C і записувати дані на периферійні пристрої шини, давайте побудуємо класичну архітектуру шини зв’язку з периферією контролера, використовуючи наступне обладнання з відкритим вихідним кодом:

  • мікроконтролера Arduino Uno (https://store.arduino.cc/usa/arduino-uno-rev3/), який діятиме як контролер шини;

  • одного або декількох світлодіодів RGB, керованих по I2C (https://www.sparkfun.com/products/8579/), – як периферійні пристроїв. Повну документацію по світлодіодам BlinkM, включаючи приклади інших способів програмування, ви знайдете на сторінці https://thingm.com/products/blinkm/.

Ми вирішили використовувати Arduino Uno, тому що аналогові контакти, які Arduino використовує для SDA і SCL, мають вбудовані резистори, і нам не доведеться додавати в схему підтягуючі резистори. Крім того, він дозволяє використовувати офіційну бібліотеку Arduino Wire для управління шиною I 2C в якості контролера і відправки команд на периферійні пристрої I2C. У табл. На малюнку 8.3 перераховані аналогові контакти  Arduino Uno,  підтримка І2С.

Знайдіть контакти A2, A3, A4 і A5 на Arduino Uno, а потім підключіть до них дроти штекера, як показано на мал. 8.7.

Потім знайдіть контакти GND (–), PWR (+), SDA (d) і SCL (c) на світлодіоді BlinkM, перевіривши етикетку у верхній частині кожного ряду контактів, як показано на мал. 8.8. Тепер за допомогою макетної плати підключіть світлодіод BlinkM і кабелі до відповідних контактів плати Arduino, виходячи з даних таблиці 1. 8.4.

Якщо у вас більше одного периферійного пристрою I2C, підключіть їх до одних ліній SDA і SCL. Виберіть один бекер макетної плати для лінії SDA та інший для лінії SCL; Потім підключіть пристрої до цих ліній. Наприклад, на рис. На малюнку 8.10 показані два підключених світлодіода BlinkM. Світлодіоди BlinkM одного типу за замовчуванням мають однакову адресу I 2C (0x09),  який можна програмувати, як зазначено в паспорті продукту, доступному за адресою https://www.infinite-electronic.kr/datasheet/ e0-COM-09000.pdf. (Це показує, чому завжди корисно звертатися до таблиці даних, якщо вона у вас є; інформація, яку ви знайдете, може заощадити ваші зусилля з реверс-інжинірингу.

Після підключення контролера (Arduino) і периферійного пристрою (BlinkM LED) запрограмуйте Arduino на підключення дошини I 2C і відправте деякі команди на периферійні пристрої. Для написання програми ми будемо використовувати Arduino IDE. Дивіться Розділ 7 для вступу до Arduino, а також інструкцій по встановленню. В IDE виберіть плату Arduino, яку ви використовуєте, натиснувши Tools  > Board > Arduino/  Genuino UNO (Tools > Board > Arduino/Genuino Uno), а потім завантажте код у лістингу 8.1.

Лістинг коду 8.1. Код контролера I2C, який керуватиме світлодіодом BlinkM RGB

#include <Wire.h>
void setup() {
pinMode(13, OUTPUT); //Отключить встроенный светодиод Arduino
 pinMode(A3, OUTPUT); //Настроить вывод A3 как выход
 pinMode(A2, OUTPUT); //Настроить A2 как выход
 digitalWrite(A3, HIGH); //A3 в качестве источника питания
 digitalWrite(A2, LOW); //A2 в качестве GND
Wire.begin(); // Использовать шину I2C в роли контроллера
}
byte x = 0;
void loop() {
Wire.beginTransmission(0x09);
Wire.write('c');
 Wire.write(0xff);
 Wire.write(0xc4);
Wire.endTransmission();
 x++;
 delay(5000);
}

Код налаштовує контакти Arduino для зв’язку протоколу I2 C підключається до шини I2 C як контролер і, використовуючи цикл, періодично надсилає повідомлення периферійним пристроям з адресою 0x09. Код повідомлення містить команди для увімкнення світлодіодів.

Докладніші описи цих команд можна знайти у специфікації BlinkM. Нарешті, код надсилає послідовність STOP, щоб вказати кінець повідомлення. Тепер підключіть Arduino Uno до комп’ютера та завантажте свій код. Світлодіоди BlinkM RGB повинні отримувати команди та блимати відповідно до них (мал. 8.11).

Атака I2C за допомогою Bus Pirate

Давайте підключимо Bus Pirate до нашоїшини I 2C і почнемо прослуховувати комунікації.

Прошивка Bus Pirate має вбудовану підтримку I 2C. Він також має кілька корисних макросів, які ми можемо використовувати для аналізу та атаки на комунікації I2C. На Bus Pirate ми будемо використовувати такі контакти: COPI (MOSI), які відповідають контакту I2C SDA; CLK, що відповідає штифту SCL; і GND. З’єднайте ці три лінії від шини I2C (табл. 8.5) за допомогою перемичок.

Після того, як всі контакти будуть підключені, підключіть Bus Pirate до комп’ютера. Щоб зв’язатися з Bus Pirate, вам потрібно підключитися до порту послідовного зв’язку (COM), використовуючи стандартну швидкість 115 200 бод. У Linux зробіть це за допомогою screen або утиліт minicom:

$ screen /dev/ttyUSB0 115200

У Windows відкрийте диспетчер пристроїв, щоб побачити номер COM-порту. Потім використовуйте PuTTY з конфігурацією, показаною на мал. 8.12.

Після того, як ви налаштували параметри порту в PuTTY, натисніть Відкрити.  Тепер у вас має бути з’єднання.

Виявлення пристроїв I2C

Щоб відобразити список усіх пристроїв I2C, підключених до шини, використовуйте бібліотеку I2C Bus Pirate для пошуку у всьому адресному просторі. Це дає всі підключені мікросхеми I 2C, а також недокументовані адреси доступу. Почнемо з налаштування  режиму Bus Pirate за допомогою  команди m:

I2
C >m
1. HiZ
2. 1-WIRE
3. UART
4. I2C
5. SPI
6. 2WIRE
242  Глава 8
7. 3WIRE
8. LCD
9. DIO
x. exit(without change)

Виберіть 4, щоб вибрати режим I2C, а потім встановіть потрібну швидкість:

(1)>4
Set speed:
 1. ~5KHz
 2. ~50KHz
 3. ~100KHz
 4. ~400KHz
(1)>4
Ready

Ми встановлюємо  швидкість 4, що відповідає приблизно 400 кГц, або швидкості I2C, тому що саме з такою швидкістю працює контролер Arduino Uno. Бібліотека I2C підтримує два макроси. Перший – це макрос  пошуку адреси, який автоматично пробує кожну адресу I2C. Потім він шукає відповідь, щоб визначити, скільки периферійних пристроїв підключено та чи можете ви використовувати будь-які інші адреси,   Наприклад, трансляції. Виконайте макрос, ввівши дію (1):

I2
C >(1)
Searching I2C address space. Found devices at:
0x00(0x00 W) 0xFF(0x7F R)

У цьому макросі відображаються адреси, за якими слідує 7-бітна адреса з бітом, що вказує на те, чи призначена адреса для читання або запису. У цьому випадку ми бачимо адреси 0x00 (W), адресу трансляції BlinkM і адресу 0x7F, яка належить світлодіоду BlinkM.

Аналізуйте та надсилайте повідомлення

Другим макросом, вбудованим в бібліотеку  Bus Pirate I 2C, є сніффер. Він відображає всі послідовності START/STOP, біти ACK/NACK і дані, що передаються через SPI і I 2C 205 по шині I2C. Нам знову потрібно перевести  Bus Pirate в режим I 2C, вибрати швидкість, а потім виконати макрос номер два за допомогою команди (2):

I2
C >(2)
Sniffer
Any key to exit
[0x12][0x12+0x63+]][0x12+0x63+0xFF+0xC4+][0x12+0x63+]][0x12+0x63+]]
[0x12+0x63+]][0x12+0x63+]][0x12+0x63+0xFF+0xC4+][0x12+0x63+0xFF+0xC4+]
[0x12+0xC6-0xFD-][0x12+0x63+0xFF+]

Захоплені дані відображаються на екрані у форматі повідомлення Bus Pirate для I 2C, що дозволяє нам скопіювати та вставити повідомлення для його відтворення за бажанням. У таблиці 8.6 показаний синтаксис, який використовується Bus Pirate для представлення символів I2C.

Переконайтеся, що ваш сніффер працює правильно, зіставивши дані сніфера з даними, надісланими Arduino Uno. Тепер, щоб відправити дані на будь-який з периферійних пристроїв на шині, введіть повідомлення безпосередньо в запрошенні Bus Pirate або скопіюйте будь-яке повідомлення, яке бажаєте відтворити. Ми можемо побачити структуру команд для зміни кольори у трафіку I2 C і, переглянувши технічний опис світлодіода, зробити висновки щодо цієї структури. Тепер перевіримо це, повторивши команду:

I2C>[0x12+0x63+0xFF+0xC4+]
I2C START BIT
WRITE: 0x12 NACK
WRITE: 0x63 NACK
WRITE: 0xFF NACK
WRITE: 0xC4 NACK
I2C STOP BIT

На виході відображаються біти послідовності та дані, які ви надіслали на шину. Проаналізуйте рух автобусів на своїх пристроях, щоб виявити закономірності, а потім спробуйте надіслати власні команди. Якщо ви використовували демонстраційну шину I2C, показану в цьому розділі, ви можете знайти більш підходящі команди в таблиці даних BlinkM.

Частота відтворення цієї команди досить низька; Ми просто робимо так, щоб світлодіод блимав у правильному порядку. Але в реальних атаках ви можете використовувати ту саму техніку для запису MAC-адрес, прапорців або заводських налаштувань, включаючи серійні номери. Використовуючи той самий підхід, який ми використовували тут, ви зможете знайти шини I2C на будь-якому пристрої IoT, а потім проаналізувати зв’язок між компонентами, щоб зчитувати та надсилати власні дані. Крім того, через простоту цього протоколу, велика ймовірність, що ви зіткнетеся з ним на всіх типах пристроїв.

Висновок

У цьому розділі ви дізналися про два найпоширеніші протоколи, які зустрічаються в пристроях IoT апаратного рівня: SPI та I 2C. Швидкі периферійні пристрої з більшою ймовірністю реалізують SPI, тоді як I2C може бути реалізований  у програмному забезпеченні навіть у мікроконтролерах, які не мають апаратного модуля I2C через його простоту та низькі вимоги до обладнання. Методи та інструменти, які ми обговорюємо, дозволяють розібрати пристрої та проаналізувати їх, щоб зрозуміти їхні функції, щоб виявити слабкі місця в системі безпеки. Протягом усього розділу ми використовували Bus Pirate, один з багатьох чудових інструментів, доступних для взаємодії з SPI та I2C. Ця плата з відкритим вихідним кодом має надійну підтримку більшості протоколів зв’язку IoT, включаючи вбудовані макроси для аналізу та атак на широкий спектр пристроїв IoT.

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

Інші статті по темі
Для початківцівОсвіта
Читати далі
Частина 3. Загрози у світі речей інтернету (Методологія тестування безпеки)
В нашій частині ми докладно розберемося з основними загрозами, які можуть трапитися у світі IoT. Від вразливостей в програмному забезпеченні до фізичного доступу до пристроїв.
402
Для початківцівОсвіта
Читати далі
Частина 6. Злом мережі. (Використання мережі з нульовою конфігурацією)
Використання мережі з нульовою конфігурацією: дізнайтеся, як ефективно налаштувати та захистити вашу мережеву систему без ручних налаштувань. Поглибіть свої знання в мережевих технологіях з нашим керівництвом.
426
Для початківцівОсвіта
Читати далі
Частина 11. Злом радіоканалів. (Bluetooth Low Energy)
У цьому розділі ви дізнаєтеся, як працює зв'язок BLE, вивчите поширене апаратне та програмне забезпечення для зв'язку з пристроями BLE, а також дізнаєтеся, як ефективно виявляти та використовувати вразливості безпеки.
390
Для початківцівОсвіта
Читати далі
Частина 12. Злом радіоканалів. (Радіоканали середнього радіусу дії злом Wi-Fi)
В розділі, присвяченому технології Wi-Fi в контексті пристроїв Інтернету речей (IoT), ми дослідимо основи функціонування Wi-Fi, а також вивчимо деякі з основних атак, які можуть бути спрямовані на бездротові мережі.
663
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.