- •От издательства
- •О техническом обозревателе
- •О соавторах
- •Об авторах
- •Вступительное слово
- •Благодарности
- •Предисловие
- •Почему важна защита интернета вещей?
- •Чем защита интернета вещей отличается от традиционной ИТ-защиты?
- •Законы хакинга интернета вещей
- •Заключение
- •Моделирование угроз для интернета вещей
- •Схема моделирования угроз
- •Определение архитектуры
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Использование деревьев атак для обнаружения угроз
- •Распространенные угрозы интернета вещей
- •Атаки с подавлением сигнала
- •Атаки с воспроизведением
- •Атаки со взломом настроек
- •Клонирование узла
- •Заключение
- •Пассивная разведка
- •Физический или аппаратный уровень
- •Периферийные интерфейсы
- •Среда загрузки
- •Блокировки
- •Предотвращение и обнаружение несанкционированного доступа
- •Прошивка
- •Интерфейсы отладки
- •Физическая устойчивость
- •Разведка
- •Атаки на сетевой протокол и службы
- •Тестирование беспроводного протокола
- •Оценка веб-приложений
- •Картирование приложений
- •Элементы управления на стороне клиента
- •Аутентификация
- •Управление сеансом
- •Проверка ввода
- •Логические ошибки
- •Сервер приложений
- •Исследование конфигурации хоста
- •Учетные записи пользователей
- •Привилегии учетной записи
- •Уровни патчей
- •Удаленное обслуживание
- •Управление доступом к файловой системе
- •Шифрование данных
- •Неверная конфигурация сервера
- •Мобильное приложение и облачное тестирование
- •Заключение
- •4. Оценка сети
- •Переход в сеть IoT
- •VLAN и сетевые коммутаторы
- •Спуфинг коммутатора
- •Двойное тегирование
- •Имитация устройств VoIP
- •Идентификация устройств IoT в сети
- •Обнаружение паролей службами снятия отпечатков
- •Атаки MQTT
- •Настройка тестовой среды
- •Написание модуля MQTT Authentication-Cracking в Ncrack
- •Тестирование модуля Ncrack на соответствие MQTT
- •Заключение
- •5. Анализ сетевых протоколов
- •Проверка сетевых протоколов
- •Сбор информации
- •Анализ
- •Создание прототипов и разработка инструментов
- •Работа с Lua
- •Общие сведения о протоколе DICOM
- •Генерация трафика DICOM
- •Включение Lua в Wireshark
- •Определение диссектора
- •Определение основной функции диссектора
- •Завершение диссектора
- •Создание диссектора C-ECHO
- •Начальная загрузка данных функции диссектора
- •Анализ полей переменной длины
- •Тестирование диссектора
- •Разработка сканера служб DICOM для механизма сценариев Nmap
- •Написание библиотеки сценариев Nmap для DICOM
- •Коды и константы DICOM
- •Написание функций создания и уничтожения сокетов
- •Создание заголовков пакетов DICOM
- •Написание запросов контекстов сообщений A-ASSOCIATE
- •Чтение аргументов скрипта в движке сценариев Nmap
- •Определение структуры запроса A-ASSOCIATE
- •Анализ ответов A-ASSOCIATE
- •Создание окончательного сценария
- •Заключение
- •6. Использование сети с нулевой конфигурацией
- •Использование UPnP
- •Стек UPnP
- •Распространенные уязвимости UPnP
- •Злоупотребление UPnP через интерфейсы WAN
- •Другие атаки UPnP
- •Использование mDNS и DNS-SD
- •Как работает mDNS
- •Как работает DNS-SD
- •Проведение разведки с помощью mDNS и DNS-SD
- •Злоупотребление на этапе проверки mDNS
- •Атаки «человек посередине» на mDNS и DNS-SD
- •Использование WS-Discovery
- •Как работает WS-Discovery
- •Подделка камер в вашей сети
- •Создание атак WS-Discovery
- •Заключение
- •UART
- •Аппаратные средства для связи с UART
- •Как найти порты UART
- •Определение скорости передачи UART
- •JTAG и SWD
- •JTAG
- •Как работает SWD
- •Аппаратные средства для взаимодействия с JTAG и SWD
- •Идентификация контактов JTAG
- •Взлом устройства с помощью UART и SWD
- •Целевое устройство STM32F103C8T6 (Black Pill)
- •Настройка среды отладки
- •Кодирование целевой программы на Arduino
- •Отладка целевого устройства
- •Заключение
- •Как работает SPI
- •Как работает I2C
- •Настройка архитектуры шины I2C типа «контроллер–периферия»
- •Заключение
- •9. Взлом прошивки
- •Прошивка и операционные системы
- •Получение доступа к микропрограмме
- •Взлом маршрутизатора Wi-Fi
- •Извлечение файловой системы
- •Статический анализ содержимого файловой системы
- •Эмуляция прошивки
- •Динамический анализ
- •Внедрение бэкдора в прошивку
- •Нацеливание на механизмы обновления микропрограмм
- •Компиляция и установка
- •Код клиента
- •Запуск службы обновления
- •Уязвимости служб обновления микропрограмм
- •Заключение
- •10. Радио ближнего действия: взлом rFID
- •Радиочастотные диапазоны
- •Пассивные и активные технологии RFID
- •Структура меток RFID
- •Низкочастотные метки RFID
- •Высокочастотные RFID-метки
- •Настройка Proxmark3
- •Обновление Proxmark3
- •Клонирование низкочастотных меток
- •Клонирование высокочастотных меток
- •Имитация RFID-метки
- •Изменение содержимого RFID-меток
- •Команды RAW для небрендированных или некоммерческих RFID-тегов
- •Подслушивание обмена данными между меткой и считывателем
- •Извлечение ключа сектора из перехваченного трафика
- •Атака путем подделки RFID
- •Автоматизация RFID-атак с помощью механизма скриптов Proxmark3
- •Пользовательские сценарии использования RFID-фаззинга
- •Заключение
- •11. Bluetooth Low Energy (BLE)
- •Как работает BLE
- •Необходимое оборудование BLE
- •BlueZ
- •Настройка интерфейсов BLE
- •Обнаружение устройств и перечисление характеристик
- •GATTTool
- •Bettercap
- •Взлом BLE
- •Настройка BLE CTF Infinity
- •Приступаем к работе
- •Заключение
- •12. Радиоканалы средней дальности: взлом Wi-Fi
- •Как работает Wi-Fi
- •Атаки Wi-Fi на беспроводные клиенты
- •Деаутентификация и атаки «отказ в обслуживании»
- •Атаки на Wi-Fi путем подключения
- •Wi-Fi Direct
- •Атаки на точки доступа Wi-Fi
- •Взлом WPA/WPA2
- •Взлом WPA/WPA2 Enterprise для сбора учетных данных
- •Методология тестирования
- •Заключение
- •13. Радио дальнего действия: LPWAN
- •Захват трафика LoRa
- •Настройка платы разработки Heltec LoRa 32
- •Настройка LoStik
- •Превращаем USB-устройство CatWAN в сниффер LoRa
- •Декодирование протокола LoRaWAN
- •Формат пакета LoRaWAN
- •Присоединение к сетям LoRaWAN
- •Атаки на LoRaWAN
- •Атаки с заменой битов
- •Генерация ключей и управление ими
- •Атаки воспроизведения
- •Подслушивание
- •Подмена ACK
- •Атаки, специфичные для приложений
- •Заключение
- •14. Взлом мобильных приложений
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Защита данных и зашифрованная файловая система
- •Подписи приложений
- •Аутентификация пользователя
- •Управление изолированными аппаратными компонентами и ключами
- •Проверенная и безопасная загрузка
- •Анализ приложений iOS
- •Подготовка среды тестирования
- •Статический анализ
- •Динамический анализ
- •Атаки путем инъекции
- •Хранилище связки ключей
- •Реверс-инжиниринг двоичного кода
- •Перехват и изучение сетевого трафика
- •Анализ приложений Android
- •Подготовка тестовой среды
- •Извлечение файла APK
- •Статический анализ
- •Обратная конвертация двоичных исполняемых файлов
- •Динамический анализ
- •Перехват и анализ сетевого трафика
- •Утечки по побочным каналам
- •Заключение
- •15. Взлом умного дома
- •Физический доступ в здание
- •Клонирование RFID-метки умного дверного замка
- •Глушение беспроводной сигнализации
- •Воспроизведение потока с IP-камеры
- •Общие сведения о протоколах потоковой передачи
- •Анализ сетевого трафика IP-камеры
- •Извлечение видеопотока
- •Атака на умную беговую дорожку
- •Перехват управления интеллектуальной беговой дорожкой на базе Android
- •Заключение
- •Инструменты для взлома интернета вещей
- •Предметный указатель
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
P |
|
|
|
|
|
NOW! |
o |
|
|
||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
(gdb)m |
stepi |
|
|||||||
|
|
|
|||||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
|
|
e |
|
|
|
|
|
|
-xchahalted: PC: 0x08002de8 |
|
|||||||
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
|
|
0x08002de8 in strcmp () |
|
||||
|
|
|
|
|
|
3: x/i $pc |
|
||||
|
|
|
|
|
|
=> 0x8002de8 <strcmp>: |
orr.w r12, r0, r1 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
(gdb) finish
Run till exit from #0 0x08002de8 in strcmp ()
0x08000174 in validate () at /home/ithilgore/Arduino/serial-simple/serial-simple.ino:59
59 |
if (strcmp(buf, "sock-raw.org") == 0) |
|
3: x/i $pc |
|
|
=> 0x8000174 <validate()+24>: |
cbnz r0, 0x8000182 <validate()+38> |
|
(gdb) set $r0=0 |
|
|
(gdb) x/x $r0 |
|
|
0x0: |
0x00 |
|
(gdb) c |
|
|
Continuing.
Когда мы это сделаем, наша программа не перейдет к адресу па- мяти 0x8000182. Вместо этого она продолжит выполнение инструк- ций сразу после cbnz. Если теперь вы позволите программе продол- жить работу, введя команду continue, вы увидите сообщение ACCESS GRANTED («Доступ разрешен») на серийном мониторе Arduino, ука- зывающее, что вы успешно взломали программу. Есть и другие спо- собы взломать программу, но мы предоставим вам поэксперименти- ровать самостоятельно.
Заключение
ВэтойглавевыузналипроUART,JTAGиSWDикаквыможетеисполь- зовать эти протоколы для получения полного доступа к устройству. Большая часть главы была отведена на практическое упражнение, где в качестве целевого устройства использовался микроконтрол- лер STM32F103C8T6 (Black Pill). Вы научились разрабатывать и за- пускать простую программу Arduino, которая выполняет очень про- стую процедуру аутентификации через UART. Затем подключились к устройству с помощью последовательного адаптера USB-UART. Мы использовали программатор ST-Link для доступа к SWD на целевом устройстве через OpenOCD и, наконец, прибегли к GDB для динами- ческого обхода функции аутентификации.
Использование UART и в особенности JTAG и SWD почти всегда оз- начает,что вы можете получитьполныйдоступ к устройству: ведьэти интерфейсы были разработаны, чтобы дать производителям полные права на отладку в целях тестирования. Узнайте, как максимально использовать их потенциал, и вы научитесь взламывать устройства интернета вещей гораздо эффективнее!
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
8
SPI И I2C
Эта глава познакомит вас с последовательным перифе-
рийным интерфейсом (Serial Peripheral Interface – SPI)
и последовательной шиной для связи интегральных схем (I2C),двумя общими протоколами связи в устройствах IoT, которые используют микроконтроллеры и периферийные устройства. Как вы узнали из главы 7, иногда простое подключение к интерфейсам, таким как UART и JTAG, предоставляет прямой до- ступ к системной оболочке – возможно, той, которую производите- ли оставили умышленно. Но что, если интерфейсы JTAG или UART устройства требуют аутентификации? Или (еще хуже!) что, если они небудутреализованы?Вэтихслучаяхвы,скореевсего,найдетеболее старые протоколы, такие как SPI и I2C, встроенные в микроконтрол-
леры.
Ниже мы будем использовать SPI для извлечения данных из EE- PROM и других микросхем флеш-памяти, которые часто содержат микропрограммное обеспечение и другие важные секреты, такие как ключи API, пароли пользователей и конечные точки служб. Вы также создадите свою собственную архитектуру I2C, а затем потре- нируетесь в сниффинге и управлении последовательной шиной, чтобы заставить периферийные устройства выполнять нужные дей- ствия.
SPI И I2C 227
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
||
|
|
C |
|
E |
|
|
|
|
|
C |
|
E |
|
|
||||||
|
X |
|
|
|
|
|
|
|
X |
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
- |
|
|
|
|
|
d |
|||
|
F |
|
|
|
|
|
|
t |
|
|
F |
|
|
|
|
|
|
|
t |
|
|
D |
|
|
|
|
|
|
i |
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
NOW! |
o |
|
P |
|
|
|
|
NOW! |
o |
||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
BUY |
|
|
|
|
|
|
BUY |
|
||||||||
|
wClick |
to |
Оборудованиеo m |
для связи с SPI и I2C |
|
wClick |
to |
|
|
|
|
o m |
||||||||
|
|
|
|
|
|
|
|
|||||||||||||
w |
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
||
w |
|
|
|
|
|
|
.c |
|
w |
|
|
|
|
|
|
.c |
||||
|
. |
|
|
|
|
g |
|
|
. |
|
|
|
|
g |
||||||
|
p |
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
||||
|
|
df |
|
|
n |
e |
|
|
|
|
df |
|
|
n |
e |
|||||
|
|
|
-xcha |
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
Для связи с SPI и I2C вам понадобится определенное оборудование. Вы могли бы использовать коммутационную плату или программа- тордля микросхем EEPROM / флеш-памяти,если хотите распаятьми- кросхемы (так следует поступать, если у вас нет другого выхода). Но если вы предпочитаете не выпаивать микросхемы с печатной платы, можете использовать либо специальные зажимы-крючки, подклю- чаемые непосредственно к выводам микросхемы, либо зажимы для микросхем в корпусе типа SOIC (обычно микросхемы флеш-памяти находятся в таких корпусах), которые дешевы и удобны.
Для проекта SPI, описанного в этой главе, вам понадобится вось- миконтактный кабель SOIC с зажимом или зажимы-крючки для под- ключениякмикросхемамфлеш-памяти.ЗажимыSOIC(рис.8.1)могут быть сложны в использовании, потому что вам нужно точно выров- нять контактные площадки при подсоединении зажима к микросхе- ме. Зажимы-крючки для многих удобнее в использовании.
Рис.8.1.Восьмиконтактный кабель SOIC
Вам также понадобится адаптер USB-UART. Хотя вы можете ис- пользовать адаптер, использованный в главе 7, мы рекомендуем Bus Pirate (http://dangerousprototypes.com/docs/Bus_Pirate), надежное устрой-
ство с открытым исходным кодом, которое поддерживает несколько
228 Глава 8
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
протоколов.Оно имеет встроенные макросы для взлома IoT,включая |
|
|
|
|
|
m |
|||||
|
w Click |
|
|
|
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
возможности сканирования и сниффинга I |
|
w |
|
|
|
|
|
|
|
o |
|
C и многих других проd-f-x chan |
.c |
|
|||||||||
2 |
|
. |
|
|
|
|
|
|
|||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
токолов. Вы можете опробовать и более дорогие инструменты, кото- рые анализируют сообщения I2C в большем количестве форматов – например, Beagle (https://www.totalphase.com/products/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/),макетнаяплатаинесколькосоединительныхкабе- лей. Вы также можете использоватьтак называемую «третью руку» – кронштейны, которые помогают удерживать несколько частей обо- рудования. Их стоимость варьируется в широких пределах. В разделе «Инструменты для взлома интернета вещей» представлен полный список инструментов с описанием их сильных и слабых сторон.
SPI
SPI – коммуникационный протокол, который передает данные меж- ду периферийными устройствами и микроконтроллерами. Широко используемый в популярном оборудовании, таком как Raspberry Pi
иArduino, SPI является протоколом синхронной связи, т. е. он может передаватьданныебыстрее,чемI2CиUART.Частоониспользуетсядля связи на короткие расстояния в местах, где важна скорость чтения
изаписи,втом числе в периферийных устройствах Ethernet,ЖК-дис- плеях, устройствах чтения SD-карт и микросхемах памяти почти на любом устройстве IoT.
Как работает SPI
SPI использует четыре провода для передачи данных. В полноду- плексном режиме,когда передача данных происходит одновременно в обоих направлениях, он полагается на архитектуру периферийного контроллера. В такой архитектуре устройство, служащее контролле- ром, генерирует тактовые импульсы, которые управляют передачей данных, и все устройства, которые являются периферийными, про- слушивают шину и отправляют или принимают сообщения. SPI ис- пользует следующие четыре линии (не считая «земли»):
zzController In, Peripheral Out (CIPO) – для сообщений, отправляе-
мых периферийными устройствами на контроллер;
zzController Out,Peripheral In (COPI)–для сообщений от контролле-
ра периферийным устройствам;
zzSerial Clock (SCK) – тактовые импульсы, указывающие, когда устройства должны считывать данные с шины;
SPI И I2C 229
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
|
X |
|
|
|
|
|
|||
|
|
|
- |
|
|
|
|
|
d |
|
||
|
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||
|
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
BUY |
|
|
|||
|
Chip Select (CS) – сигнал выбора периферийного устройства, ко- |
|
|
to |
|
|
|
|
|
|||
zz |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
||||
|
w |
|
|
|
|
|
|
|
|
|||
|
торое должно получать сообщение. |
w Click |
|
|
|
|
|
o |
||||
|
|
w |
|
df-x chan |
|
|
||||||
|
|
. |
.c |
|
||||||||
|
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
Обратите внимание,что,в отличие от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квыводу№1микросхемы.ПервыйвыводзажимаSOIC,какпра- вило,отличается отдругих по цвету,что упрощает поиск.Используй- те информацию о расположении выводов, взятую из таблицы, чтобы правильно подключить остальные выводы SOIC. На рис. 8.3 показано типичное расположение выводов. В частности, именно так располо- жены выводы у микросхемы памяти WinBond 25Q64.
Когда вы подключили все части зажима SOIC к микросхеме флеш- памяти, ваша установка должна выглядеть, как показано на рис. 8.4. Будьте осторожны при подсоединении зажима SOIC: штифты легко повредить.
230 Глава 8
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Рис.8.2.Микросхема флеш-памяти
|
• 1(/CS) |
8 (VCC) |
|
|
|
|
|
|
|||
|
2 |
(DO) |
7(/HOLD) |
|
|
|
|
|
|||
|
3 |
(/WP) |
6 (CLK) |
|
Рис.8.3.Конфигурация контактов |
|
|
||||
|
4 |
(GND) |
5 (DI) |
|
|
|
|
||||
|
|
|
|
|
микросхемы памяти |
|
|
|
|
|
Рис.8.4.Зажим SOIC,подключенный к микросхеме флеш-памяти
SPI И I2C 231
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|||
P |
|
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
Если у вас возникли проблемы с подключением зажима SOIC, по- |
|
|
|
to |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
df-x chan |
|
o |
|
|||||
дойдутизажимы-крючки(рис.8.5.);возможно,вамбудетдажепроще |
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
их подключить.
Рис.8.5.Зажимы-крючки подключаются к контактам SPI
Связьс микросхемой SPI
Вам понадобится адаптер для чтения содержимого микросхемы па- мяти. В этом примере мы будем использовать Bus Pirate, но вы мо- жете использовать любой адаптер, поддерживающий протокол SPI. Если вы возьмете Bus Pirate, убедитесь, что его прошивка обновлена до последней стабильной версии.
Проверьте, чтобы устройство, содержимое памяти которого вы из- влекаете, было выключено, затем подключите к микросхеме прово- да. Соедините контакты Bus Pirate и микросхемы с помощью зажима SOIC, как указано в таблице. Например, микросхему WinBond 25Q64 мы бы подключили в соответствии с табл. 8.1.
Таблица 8.1.Подключение контактов
Вывод |
Bus Pirate |
||
#1 |
(CS) |
|
CS |
#2 |
(DO)→ |
CIPO (MISO) |
|
#4 |
(GND)→ GND |
||
#5 |
(DI) |
|
COPI (MOSI) |
|
|
→ |
|
#6 |
(CLK)→ |
→CLK |
|
#8 |
(VCC) |
→ 3V3 |
232 Глава 8
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
ПРИМЕЧАНИЕ |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
В обозначениях вашей платы или схемы могут при- |
|
|
|
|
|
m |
|||||
|
w Click |
|
|
|
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
меняться устаревшие имена сигналов SPI MISO и MOSI вместо CIPOdf-x chan |
.c |
|
|||||||||
|
|
. |
|
|
|
|
|
|
|||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
и COPI соответственно. Вы также можете встретить устаревшие термины master/slave (главный/подчиненный) вместо «контроллер / пе- риферийное устройство» в схемах и платах c протоколом I2C.
По завершении работы соединения должны выглядеть так, как на рис. 8.6.
Рис.8.6.Bus Pirate,подключен к микросхеме SPI с помощью зажимов-крючков. Мы использовали «третью руку» для фиксации различных компонентов
Теперь, когда устройство, память которого вы будете читать, вы- ключено, подключите USB-кабель Bus Pirate к компьютеру. Вы може- те проверить связь с микросхемой SPI с помощью утилиты flashrom Linux,которую можно загрузить с https://flashrom.org/Flashrom (или при помощи большинства менеджеров пакетов). Следующая команда идентифицирует набор микросхем памяти:
# flashrom -p buspirate_spi:dev=/dev/ttyUSB0
Убедитесь,что вы заменили ttyUSB0 на дескриптор устройства,ко- торый был назначен адаптеру. Обычно это будет что-то вроде ttyUSB <number>, и вы можете ввести команду ls /dev/tty*, чтобы уви- деть дескрипторы в вашей системе. Утилита либо идентифицирует микросхему SPI, либо вернет сообщение No EEPROM/flash device found (Не найдено EEPROM / флеш-устройство).
SPI И I2C 233
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
|
X |
|
|
|
|
|
|||
|
|
|
- |
|
|
|
|
|
d |
|
||
|
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
|||
|
P |
|
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
BUY |
|
|
|||
Чтение содержимого микросхемы памяти |
|
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||||
|
|
|
|
|
|
|||||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
|
p |
|
|
|
|
g |
|
|
|
Установив связь с микросхемой, вы можете выполнить операцию |
|
|
df |
|
|
n |
e |
|
||||
|
|
|
|
|
|
-x cha |
|
|
|
|
чтения, чтобы получить ее содержимое. Воспользуйтесь командой 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))
Если вы не знаете размер извлекаемого дампа флеш-памяти, вы- берите случайное значение,достаточно большое,чтобы вместить все содержимое флеш-памяти.
234 Глава 8