- •От издательства
- •О техническом обозревателе
- •О соавторах
- •Об авторах
- •Вступительное слово
- •Благодарности
- •Предисловие
- •Почему важна защита интернета вещей?
- •Чем защита интернета вещей отличается от традиционной ИТ-защиты?
- •Законы хакинга интернета вещей
- •Заключение
- •Моделирование угроз для интернета вещей
- •Схема моделирования угроз
- •Определение архитектуры
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Использование деревьев атак для обнаружения угроз
- •Распространенные угрозы интернета вещей
- •Атаки с подавлением сигнала
- •Атаки с воспроизведением
- •Атаки со взломом настроек
- •Клонирование узла
- •Заключение
- •Пассивная разведка
- •Физический или аппаратный уровень
- •Периферийные интерфейсы
- •Среда загрузки
- •Блокировки
- •Предотвращение и обнаружение несанкционированного доступа
- •Прошивка
- •Интерфейсы отладки
- •Физическая устойчивость
- •Разведка
- •Атаки на сетевой протокол и службы
- •Тестирование беспроводного протокола
- •Оценка веб-приложений
- •Картирование приложений
- •Элементы управления на стороне клиента
- •Аутентификация
- •Управление сеансом
- •Проверка ввода
- •Логические ошибки
- •Сервер приложений
- •Исследование конфигурации хоста
- •Учетные записи пользователей
- •Привилегии учетной записи
- •Уровни патчей
- •Удаленное обслуживание
- •Управление доступом к файловой системе
- •Шифрование данных
- •Неверная конфигурация сервера
- •Мобильное приложение и облачное тестирование
- •Заключение
- •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 |
|
|
|
|
|
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 |
|
|
|||
ти (указанное с помощью |
fw_p), в этот файл на диске. Он отправляет |
|
|
|
to |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
m |
|||
|
w Click |
|
|
|
|
|
|
|||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
df-x chan |
|
o |
|
|||||
последнее сообщение в системный журнал о завершении загрузки |
. |
.c |
|
|||||||||
|
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
новой прошивки, выполняет некоторую очистку и завершает работу.
ПРЕДУПРЕЖДЕНИЕ Имейте в виду, что этот клиент был написан намеренно небезопасным образом.Не используйте его в производствен- нойсреде(обратитевнимание,чтовнемдлякраткостидажепропуще- на проверканекоторыхошибок).Используйтеэтот код тольков изоли- рованной лабораторной среде.
Запуск службы обновления
Чтобы протестировать службу обновления, для начала запустим сер- вер. Мы делаем это на хосте Ubuntu с IP-адресом 192.168.10.219. Как только сервер начинает прослушивание, мы запускаем клиента, пе- редавая ему IP-адрес сервера в качестве первого аргумента.Мы запу- скаем клиента на хосте Kali с IP-адресом 192.168.10.10:
root@kali:~/firmware_update# ls client client.c Makefile
root@kali:~/firmware_update# ./client 192.168.10.219 filelen: 6665864
calculated hash: d21843d3abed62af87c781f3a3fda52d received hash: d21843d3abed62af87c781f3a3fda52d hashes match
root@kali:~/firmware_update# ls
client client.c Makefile received_firmware.gz
Клиентподключается к серверу и загружаетфайл прошивки.Обра- титевниманиенановыйзагруженныйфайлмикропрограммывтеку- щем каталоге после завершения выполнения. В следующем листинге показаны выходные данные сервера. Перед запуском клиента убеди- тесь, что сервер включен.
user@ubuntu:~/fwupdate$ ./server Listening on port 31337 Connection from 192.168.10.20 Credentials accepted.
hash: d21843d3abed62af87c781f3a3fda52d filelen: 6665864
Обратите внимание: поскольку это эмулируемая служба, клиент фактически не обновляет микропрограммы после загрузки файла.
Уязвимости служб обновления микропрограмм
Давайте теперь проверим уязвимости в этом небезопасном механиз- ме обновления микропрограммы.
274 Глава 9
|
|
|
|
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 |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
t |
|
||
|
P |
D |
|
|
|
|
|
|
|
|
o |
|
|
|
|
|
|
NOW! |
r |
||||||
|
|
|
|
|
|
BUY |
|
|
||||
Жестко запрограммированные учетные данные |
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
w |
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
o |
|||||
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
|
p |
df |
|
|
|
|
e |
|
||
|
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
|
-x cha |
|
|
|
|
|
||
Сначала клиент аутентифицируется на сервере, используя пароль, |
|
|
|
|
|
|
|
|||||
сохраненный прямо в коде. Использование жестко закодированных |
|
|
|
|
|
|
|
|||||
учетных данных (таких как пароли и криптографические ключи) си- |
|
|
|
|
|
|
|
|||||
стем IoT – огромная проблема по двум причинам: во-первых, из-за |
|
|
|
|
|
|
|
|||||
частоты, с которой они обнаруживаются в устройствах IoT, а во-вто- |
|
|
|
|
|
|
|
|||||
рых, из-за последствий злоупотребления ими. Жестко закодирован- |
|
|
|
|
|
|
|
|||||
ные учетные данные встраиваются в двоичные файлы, а не в файлы |
|
|
|
|
|
|
|
|||||
конфигурации. Таким образом, конечные пользователи или адми- |
|
|
|
|
|
|
|
|||||
нистраторы практически не имеют возможности менять их без тру- |
|
|
|
|
|
|
|
|||||
доемкого редактирования двоичных файлов с риском их повредить. |
|
|
|
|
|
|
|
|||||
Кроме того, если злоумышленники когда-либо обнаружат жестко за- |
|
|
|
|
|
|
|
|||||
программированные учетные данные с помощью |
двоичного анализа |
|
|
|
|
|
|
|
||||
или реверс-инжиниринга, они могут попасть в интернет или на под- |
|
|
|
|
|
|
|
|||||
польный рынок, что позволит любому получить доступ к конечной |
|
|
|
|
|
|
|
|||||
точке.Другая проблема заключается втом,что чаще всего эти жестко |
|
|
|
|
|
|
|
|||||
заданные учетные данные одинаковы для каждого устройства, даже |
|
|
|
|
|
|
|
|||||
в разных организациях. Причина в том, что поставщикам проще со- |
|
|
|
|
|
|
|
|||||
здать один мастер-пароль или ключ вместо уникальных для каждого |
|
|
|
|
|
|
|
|||||
устройства. В следующем листинге вы можете увидеть часть вывода |
|
|
|
|
|
|
|
|||||
команды strings для клиентского двоичного файла, которая показы- |
|
|
|
|
|
|
|
|||||
вает жестко закодированный пароль (выделен): |
|
|
|
|
|
|
|
|
|
|
|
|
QUITTING! firmware_update
firmware update process started with PID: %d Could not open socket %s
Could not connect to server %s: %s jUiq1nzpIOaqrWa8R21
Authenticating with %s using key %s filelen: %d
cannot allocate memory for incoming firmware calculated hash:
received hash: hashes match hash mismatch
./received_firmware.gz
Can't open file for writing %s Firmware downloaded successfully
Злоумышленникитакже могутобнаружитьключ,проанализировав двоичный файл сервера (который, однако, будет размещен в облаке, что затруднит взлом). Обычно клиент находится на устройстве IoT, что значительно упрощает его проверку.
Небезопасные алгоритмы хеширования
Сервер и клиент полагаются на HMAC-MD5 для вычисления крипто- графическогохеша,которыйклиентиспользуетдляпроверкицелост-
Взлом прошивки 275
|
|
|
|
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 |
|
df-x chan |
|
o |
|
|||||
MD5теперьсчитаетсявзломаннойирискованнойкриптографической |
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
хеш-функцией,HMAC-MD5 не страдает этими недостатками.HMAC– это код сообщения аутентификации с хеш-ключом, в котором ис- пользуется криптографическая хеш-функция (в данном случае MD5) и секретный криптографический ключ (в нашем примере – общий ключ). На сегодняшний день не было доказано, что HMAC-MD5 уяз- вим для практических атак путем поиска коллизии ключей, которые есть у MD5. Тем не менее современные передовые методы безопас ности предполагают, что HMAC-MD5 не следует включать в будущие инструменты шифрования.
Незашифрованные каналы связи
Использованиенезашифрованногоканаласвязи–уязвимостьсвысо- ким риском для службы обновлений. Клиент и сервер обмениваются информацией, используя настраиваемый протокол открытого текста по TCP. Это означает, что, если злоумышленники занимают позицию «человек посередине» в сети, они могут захватывать и читать пере- данные данные. Сюда входит файл прошивки и ключ, используемый для аутентификации на сервере (рис. 9.6). Кроме того, поскольку HMAC-MD5 использует один и тот же криптографический ключ, зло- умышленник можетзлонамеренно изменитьпрошивку при передаче и установить в нее бэкдоры.
Рис.9.6.Снимок экрана Wireshark,показывающий передачу конфиденциальной информации (ключ аутентификации) по незашифрованному протоколу TCP
Sensitive Log Files
Наконец, что не менее важно, механизм ведения журнала клиента включает конфиденциальную информацию (значение KEY) в файлах журнала (вданном случае /var/log/messages).Мы показалиточное ме- сто,где это произошло,при просмотре исходного кода клиента.В це-
276 Глава 9