- •От издательства
- •О техническом обозревателе
- •О соавторах
- •Об авторах
- •Вступительное слово
- •Благодарности
- •Предисловие
- •Почему важна защита интернета вещей?
- •Чем защита интернета вещей отличается от традиционной ИТ-защиты?
- •Законы хакинга интернета вещей
- •Заключение
- •Моделирование угроз для интернета вещей
- •Схема моделирования угроз
- •Определение архитектуры
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Использование деревьев атак для обнаружения угроз
- •Распространенные угрозы интернета вещей
- •Атаки с подавлением сигнала
- •Атаки с воспроизведением
- •Атаки со взломом настроек
- •Клонирование узла
- •Заключение
- •Пассивная разведка
- •Физический или аппаратный уровень
- •Периферийные интерфейсы
- •Среда загрузки
- •Блокировки
- •Предотвращение и обнаружение несанкционированного доступа
- •Прошивка
- •Интерфейсы отладки
- •Физическая устойчивость
- •Разведка
- •Атаки на сетевой протокол и службы
- •Тестирование беспроводного протокола
- •Оценка веб-приложений
- •Картирование приложений
- •Элементы управления на стороне клиента
- •Аутентификация
- •Управление сеансом
- •Проверка ввода
- •Логические ошибки
- •Сервер приложений
- •Исследование конфигурации хоста
- •Учетные записи пользователей
- •Привилегии учетной записи
- •Уровни патчей
- •Удаленное обслуживание
- •Управление доступом к файловой системе
- •Шифрование данных
- •Неверная конфигурация сервера
- •Мобильное приложение и облачное тестирование
- •Заключение
- •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 |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Рис.4.7.Дамп трафика Wireshark кадра DHCP в голосовой сети (Voice VLAN)
Идентификация устройств IoT в сети
Одна из проблем, с которыми вы столкнетесь при попытке иденти- фицировать устройства IoT в сети, состоит в том, что они часто ис- пользуют общие стеки технологий. Например, BusyBox, популярный исполняемый файл на устройствах интернета вещей, обычно запу- скаетодни ите же сетевые службы на всех устройствах.Это затрудня- ет идентификацию устройства на основе его сервисов.
Это означает, что нам нужно углубиться в детали. Мы должны со- здать специальный запрос в надежде получить ответ от целевого устройства, который позволит его однозначно идентифицировать.
Обнаружение паролей службами снятия отпечатков
Ниже продемонстрирован характерный пример того, как иногда вы можете перейти отобнаружения неизвестной службы к обнаружению жестко запрограммированного бэкдора, которым можно злоупотре- бить. Мы будем нацелены на IP-вебкамеру.
Из всех доступных инструментов Nmap имеет наиболее полную базу данных для сервисного снятия отпечатков. Nmap доступен по умолчанию в ориентированных на безопасность дистрибутивах Li- nux, таких как Kali, но вы можете получить его исходный код или предварительно скомпилированные двоичные файлы для всех ос- новных операционных систем, включая Linux, Windows и macOS, по адресу https://nmap.org/. Он использует файл nmap-service-probes, рас-
98 Глава 4
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
положенный в корневой папке Nmap, для хранения тысяч подписей |
|
|
|
|
|
m |
||||
w Click |
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
для всех видов служб. Эти подписи состоят из зондов, часто отправd-f-x chan |
.c |
|
||||||||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
e |
|
ляемых данных и иногда сотен строк, которые соответствуют извест- ным ответам на определенные службы.
При попытке идентифицировать устройство и службы, которые оно запускает, самая первая команда Nmap, которую вы должны по- пробовать,–сканированиесвключеннымопределениемслужбы(-sV)
иоперационной системы (-O):
#nmap -sV -O <target>
Этого сканирования обычно бывает достаточно, чтобы идентифи- цировать базовую операционную систему и основные службы, вклю- чая их версии.
Но хотя эта информация сама по себе ценна, еще более полезно провести сканирование, которое увеличивает глубину сканирова- ния версий до максимального уровня с помощью аргументов --ver- sion-all или --version-intensity 9. Увеличение глубины сканиро-
вания версий вынуждает Nmap игнорировать параметр rarity level (число, указывающее, насколько распространен сервис согласно ис- следованиям Nmap) и выбор порта и запускать все зонды для любой службы, которую он обнаруживает.
Когда мы запустили полное сканирование порта (-p-) IP-веб-каме ры с включенным обнаружением версии и глубиной, увеличенной до максимума,сканированиеобнаружилоновуюслужбу,работающуюна более высоких портах,которая не была обнаружена при предыдущем сканировании:
# nmap -sV --version-all -p- <target>
Host is up (0.038s latency). Not shown: 65530 closed ports
PORT |
STATE |
SERVICE |
VERSION |
21/tcp |
open |
ftp |
OpenBSD ftpd 6.4 (Linux port 0.17) |
80/tcp |
open |
http |
Boa HTTPd 0.94.14rc21 |
554/tcp |
open |
rtsp |
Vivotek FD8134V webcam rtspd |
8080/tcp |
open |
http |
Boa HTTPd 0.94.14rc21 |
42991/tcp |
open |
unknown |
|
1 service |
unrecognized despite returning data. If you know the service/version, |
please submit
the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service : SF-Port42991-TCP:V=7.70SVN%I=7%D=8/12%Time=5D51D3D7%P=x86_64-unknown-linux SF:-gnu%r(GenericLines,3F3,"HTTP/1\.1\x20200\x20OK\r\nContent-Length:\x209 SF:22\x20\r\nContent-Type:\x20text/xml\r\nConnection:\x20Keep-Alive\r\n\r\ SF:n<\?xml\x20version=\"1\.0\"\?>\n<root\x20xmlns=\"urn:schemas-upnp-org:d SF:evice-1-0\">\n<specVersion>\n<major>1</major>\n<minor>0</minor>\n</spec SF:Version>\n<device>\n<deviceType>urn:schemas-upnp-org:device:Basic:1</de SF:viceType>\n<friendlyName>FE8182\(10\.10\.10\.6\)</friendlyName>\n<manuf SF:acturer>VIVOTEK\x20INC\.</manufacturer>\n<manufacturerURL>http://www\.v SF:ivotek\.com/</manufacturerURL>\n<modelDescription>Mega-Pixel\x20Network
Оценка сети 99
|
|
|
|
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 |
|
|
|
|
SF:\x20Camera</modelDescription>\n<modelName>FE8182</modelName>\n<modelNum SF:ber>FE8182</modelNumber>\n<UDN>uuid:64f5f13e-eb42-9c15-ebcf-292306c172b SF:6</UDN>\n<serviceList>\n<service>\n<serviceType>urn:Vivotek:service:Bas SF:icService:1</serviceType>\n<serviceId>urn:Vivotek:serviceId:BasicServic SF:eId</serviceId>\n<controlURL>/upnp/control/BasicServiceId</controlURL>\ SF:n<eventSubURL>/upnp/event/BasicServiceId</eventSubURL>\n<SCPDURL>/scpd_ SF:basic\.xml</");
Service Info: Host: Network-Camera; OS: Linux; Device: webcam; CPE: cpe:/ o:linux:linux_kernel,
cpe:/h:vivotek:fd8134v
|
|
|
|
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 |
|
|
|
|
Обратите внимание,что в зависимости от количества запущенных служб это сканирование может быть очень заметным и трудоемким. Плохо написанное программное обеспечение можеттакже дать сбой, потому что оно получит тысячи неожиданных запросов. Найдите вTwitterзаписисхештегом#KilledByNmap,чтобыувидетьмножество устройств, которые дают сбой при сканировании.
Отлично–обнаружена новая служба на порте 42991.Но даже меха- низмобнаружениясервисовNmapстысячамиподписейнераспознал его, потому что он пометил сервис как неизвестный в столбце серви- са. Однако служба вернула данные. Nmap даже предлагает отправить подпись,чтобы улучшитьсвою базуданных (что мы рекомендуемде- лать всегда).
Если мы обратим более пристальное внимание на частичный от- вет, который показывает Nmap, то можем распознавать XML-файл, содержащий информацию об устройстве,такую как настроенное имя, название и номер модели, а также услуги. Этот ответ выглядит ин- тересным, потому что служба работает на высокопроизводительном необычном порте:
SF-Port42991-TCP:V=7.70SVN%I=7%D=8/12%Time=5D51D3D7%P=x86_64-unknown-linux
SF:-gnu%r(GenericLines,3F3,"HTTP/1\.1\x20200\x20OK\r\nContent-Length:\x209
SF:22\x20\r\nContent-Type:\x20text/xml\r\nConnection:\x20Keep-Alive\r\n\r\
SF:n<\?xml\x20version=\"1\.0\"\?>\n<root\x20xmlns=\"urn:schemas-upnp-org:d
SF:evice-1-0\">\n<specVersion>\n<major>1</major>\n<minor>0</minor>\n</spec
SF:Version>\n<device>\n<deviceType>urn:schemas-upnp-org:device:Basic:1</de
SF:viceType>\n<friendlyName>FE8182\(10\.10\.10\.6\)</friendlyName>\n<manuf
SF:acturer>VIVOTEK\x20INC\.</manufacturer>\n<manufacturerURL>http://www\.v
SF:ivotek\.com/</manufacturerURL>\n<modelDescription>Mega-Pixel\x20Network
SF:\x20Camera</modelDescription>\n<modelName>FE8182</modelName>\n<modelNum
SF:ber>FE8182</modelNumber>\n<UDN>uuid:64f5f13e-eb42-9c15-ebcf-292306c172b
SF:6</UDN>\n<serviceList>\n<service>\n<serviceType>urn:Vivotek:service:Bas
SF:icService:1</serviceType>\n<serviceId>urn:Vivotek:serviceId:BasicServic
SF:eId</serviceId>\n<controlURL>/upnp/control/BasicServiceId</controlURL>\
SF:n<eventSubURL>/upnp/event/BasicServiceId</eventSubURL>\n<SCPDURL>/scpd_
SF:basic\.xml</");
Чтобы попытаться сгенерироватьответотустройствадля его иден- тификации, мы можем отправить случайные данные в службу. Но если мы сделаем это с помощью ncat, соединение просто закроется:
100 Глава 4
|
|
|
|
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 |
|
|
|
|
# ncat 10.10.10.6 42991 eaeaeaea
eaeaeaea
Ncat: Broken pipe.
|
|
|
|
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 |
|
|
|
|
Если мы не можем отправить данные на этот порт, почему служба вернула данные, когда мы сканировали их ранее? Давайте проверим файл подписи Nmap, чтобы увидеть, какие данные отправил Nmap. Подпись включает имя зонда, который сгенерировал ответ, – в дан- номслучаеGenericLines.Мыможемпросмотретьэтотзонд,используя следующую команду:
# cat /usr/local/share/nmap/nmap-service-probes | grep GenericLines
Probe TCP GenericLines q|\r\n\r\n|
Внутри файла nmap-service-probes мы можем найти имя этого зон- да, за которым следуют данные, отправленные на устройство, разде- ленные символами q | <data> |. Данные показывают, что зонд Ge- nericLines отправляет два возврата каретки и новые строки.
Давайте отправим это прямо на сканируемое устройство, чтобы получить полный ответ, который показывает Nmap:
# echo -ne "\r\n\r\n" | ncat 10.10.10.6 42991
HTTP/1.1 200 OK Content-Length: 922 Content-Type: text/xml Connection: Keep-Alive
<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0"> <specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device> <deviceType>urn:schemas-upnp-org:device:Basic:1</deviceType> <friendlyName>FE8182(10.10.10.6)</friendlyName> <manufacturer>VIVOTEK INC.</manufacturer> <manufacturerURL>http://www.vivotek.com/</manufacturerURL> <modelDescription>Mega-Pixel Network Camera</modelDescription> <modelName>FE8182</modelName> <modelNumber>FE8182</modelNumber> <UDN>uuid:64f5f13e-eb42-9c15-ebcf-292306c172b6</UDN> <serviceList>
<service>
<serviceType>urn:Vivotek:service:BasicService:1</serviceType>
<serviceId>urn:Vivotek:serviceId:BasicServiceId</serviceId>
<controlURL>/upnp/control/BasicServiceId</controlURL>
<eventSubURL>/upnp/event/BasicServiceId</eventSubURL> <SCPDURL>/scpd_basic.xml</SCPDURL>
Оценка сети 101
|
|
|
|
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 |
|
|
|
|
</service>
</serviceList>
<presentationURL>http://10.10.10.6:80/</presentationURL>
</device>
</root>
|
|
|
|
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 |
|
|
|
|
Служба отвечает большим количеством полезной информации, включая имя устройства, название модели, номер модели и службы, работающие внутри устройства. Злоумышленник может использо- вать эту информацию для точного определения модели IP-веб-ка меры и версии прошивки.
Но мы можем пойти дальше. Давайте воспользуемся названием модели и номером,чтобы получить прошивку устройства с веб-сайта производителя и выяснить,как оно генерирует этот XML-файл.(Под- робные инструкции по получению прошивки устройства приведены в главе 9.) Когда у нас есть прошивка, мы извлекаем файловую систе- му внутри прошивки с помощью binwalk:
$ binwalk -e <файл прошивки>
Запустив эту командудля прошивки IP-веб-камеры,мы обнаружи- ли незашифрованную прошивку, которую можно проанализировать. Файловая система представлена в формате Squashfs,файловой систе- метолькодлячтениядляLinux,обычновстречающейсявустройствах
IoT.
МыпровелипоисквпрошивкестроквответеXML,которыйвидели ранее, и нашли их внутри двоичного файла check_fwmode:
$ grep -iR "modelName" |
|
./usr/bin/update_backup: |
MODEL=$(confclient -g system_info_extendedmodelname -p 9 -t Value) |
./usr/bin/update_backup: |
BACK_EXTMODEL_NAME=`${XMLPARSER} -x /root/system/info/ |
extendedmodelname -f ${BACKUP_SYSTEMINFO_FILE}` |
|
./usr/bin/update_backup: |
CURRENT_EXTMODEL_NAME=`${XMLPARSER} -x /root/system/info/ |
extendedmodelname -f ${SYSTEMINFO_FILE}` |
|
./usr/bin/update_firmpkg:getSysparamModelName() |
|
./usr/bin/update_firmpkg: |
sysparamModelName=`sysparam get pid` |
./usr/bin/update_firmpkg: |
getSysparamModelName |
./usr/bin/update_firmpkg: |
bSupport=`awk -v modelName="$sysparamModelName" ‚BEGIN{bFlag=0} |
{if((match($0, modelName)) && (length($1) == length(modelName))){bFlag=1}}END{print bFlag}'
$RELEASE_LIST_FILE` |
|
./usr/bin/update_lens: |
SYSTEM_MODEL=$(confclient -g system_info_modelname -p 99 -t |
Value) |
|
./usr/bin/update_lens: |
MODEL_NAME=`tinyxmlparser -x /root/system/info/modelname -f |
/etc/conf.d/config_systeminfo.xml` |
|
./usr/bin/check_fwmode: |
sed -i "s,<modelname>.*</modelname>,<modelname>${1}</modelname>,g" |
$SYSTEMINFO_FILE |
|
./usr/bin/check_fwmode: |
sed -i "s,<extendedmodelname>.*</extendedmodelname>,<extendedmodeln |
ame>${1}</extendedmodelname>,g" $SYSTEMINFO_FILE
102 Глава 4
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Файл check_fwmode содержит желаемую строку, и внутри мы так- |
|
|
|
|
|
m |
||||
w Click |
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
же нашли нечто ценное: вызов eval(), который включает переменd-f-x chan |
.c |
|
||||||||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
e |
|
ную QUERY_STRING, содержащую неизменяемый пароль, сохраненный непосредственно в коде прошивки:
eval `REQUEST_METHOD='GET' SCRIPT_NAME='getserviceid.cgi' QUERY_STRING='pas swd=0ee2cb110a9148cc5a67f13d62ab64ae30783031' /usr/share/www/cgi-bin/admin/ serviceid.cgi | grep serviceid`
Мымоглибыиспользоватьэтотпарольдлявызоваадминистратив- ного сценария CGI getserviceid.cgi или других сценариев,использу- ющих тот же жестко запрограммированный пароль.
Написание новых инструментов зондирования служб
Nmap
Как мы видели, инструмент обнаружения версий Nmap работает очень хорошо, а его база данных для зондирования служб довольно велика,потому что ее пополняютпользователи со всего мира.В боль- шинстве случаев Nmap распознает службу правильно, но что мы мо- жем сделать, если она ошиблась– как в нашем предыдущем примере с веб-камерой?
Формат отпечатка службы Nmap прост, что позволяет нам быстро разрабатывать новые сигнатуры (описания характерных признаков) для обнаружения новых услуг. Иногда служба включает дополни- тельную информацию об устройстве. Например, антивирусная служ- ба, такая как ClamAV, может возвращать дату обновления вирусных баз, или сетевая служба может включать номер сборки в дополнение к своей версии. В этом разделе мы разработаем новую сигнатуру для службы IP-веб-камеры, работающей на порте 42991, который мы об- наружили в предыдущем разделе.
Каждая строка зонда должена содержать хотя бы одну из команд, показанных в табл. 4.1.
Таблица 4.1.Директивы Nmap Service Probe
Команда |
Описание |
Exclude |
Порты,которые нужно исключить из зондирования |
Probe |
Строка,определяющая протокол,имя и данные для отправки |
Match |
Ответ для сопоставления и определения услуги |
Softmatch |
Аналогичен директиве match,но позволяет продолжить сканирование |
ports and sslports |
Порты,определяющие,когда выполнять зонд |
totalwaitms |
Тайм-аут ожидания ответа от зонда |
tcpwrappedms |
Используется только для проверки NULL для идентификации служб |
|
tcpwrapped |
rarity |
Описывает,насколько распространена услуга |
fallback |
Определяет,какие зонды использовать в качестве запасных,если |
|
совпадений нет |
Оценка сети 103
|
|
|
|
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 |
|
|
|||
В качестве примера рассмотрим NULL-зонд, который выполняет |
|
|
|
to |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
df-x chan |
|
o |
|
|||||
простой захват баннера службы: когда вы его используете, Nmap не |
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
отправляетникаких данных; он просто подключится к порту,прослу- шает ответ и попытается сопоставить строку с известным ответом от приложения или службы.
# This is the NULL probe that compares any banners given to us
Probe TCP NULL q||
#Wait for at least 5 seconds for data. Otherwise an Nmap default is used. totalwaitms 5000
#Windows 2003
match ftp m/^220[ -]Microsoft FTP Service\r\n/ p/Microsoft ftpd/ match ftp m/^220 ProFTPD (\d\S+) Server/ p/ProFTPD/ v/$1/
softmatch ftp m/^220 [-.\w ]+ftp.*\r\n$/i
Зонд может иметь несколько строк строгих и мягких совпадений для обнаружения служб, которые отвечают на одни и те же данные запроса. Для простейших отпечатков сервисов, таких как тест NULL, нам нужны только следующие команды: Probe, rarity, ports и match.
Например, чтобы добавить сигнатуру, которая правильно опреде- ляетредкую службу,работающую на веб-камере,добавьте следующие строки в nmap-service-probes в вашем локальном корневом каталоге Nmap. Он загрузится автоматически вместе с Nmap, поэтому нет не- обходимости перекомпилировать инструмент:
Probe TCP WEBCAM q|\r\n\r\n| rarity 3
ports 42991
match networkcaminfo m|<modelDescription>Mega-Pixel| p/Mega-Pixel Network Camera/
Обратите внимание, что мы можем использовать специальные разделители для указания дополнительной информации о службе. Например, p/<имя продукта>/ задает название продукта. Nmap может заполнять другие поля, такие как i/ <дополнительная информация> / для сопутствующей информации или v /<информацияо дополнительной версии>/ дляномеровверсий.Онможетиспользоватьрегулярныевы- ражениядляизвлеченияданныхизответа.Когдамысновасканируем веб-камеру,Nmapдаетследующие результаты по сравнению с нашим ранее не известным сервисом:
# nmap -sV --version-all -p- <целевой хост>
Host is up |
(0.038s latency). |
|
|
|
Not shown: |
65530 closed ports |
|
|
|
PORT |
STATE |
SERVICE |
VERSION |
|
21/tcp |
open |
ftp |
OpenBSD |
ftpd 6.4 (Linux port 0.17) |
104 Глава 4