- •От издательства
- •О техническом обозревателе
- •О соавторах
- •Об авторах
- •Вступительное слово
- •Благодарности
- •Предисловие
- •Почему важна защита интернета вещей?
- •Чем защита интернета вещей отличается от традиционной ИТ-защиты?
- •Законы хакинга интернета вещей
- •Заключение
- •Моделирование угроз для интернета вещей
- •Схема моделирования угроз
- •Определение архитектуры
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Использование деревьев атак для обнаружения угроз
- •Распространенные угрозы интернета вещей
- •Атаки с подавлением сигнала
- •Атаки с воспроизведением
- •Атаки со взломом настроек
- •Клонирование узла
- •Заключение
- •Пассивная разведка
- •Физический или аппаратный уровень
- •Периферийные интерфейсы
- •Среда загрузки
- •Блокировки
- •Предотвращение и обнаружение несанкционированного доступа
- •Прошивка
- •Интерфейсы отладки
- •Физическая устойчивость
- •Разведка
- •Атаки на сетевой протокол и службы
- •Тестирование беспроводного протокола
- •Оценка веб-приложений
- •Картирование приложений
- •Элементы управления на стороне клиента
- •Аутентификация
- •Управление сеансом
- •Проверка ввода
- •Логические ошибки
- •Сервер приложений
- •Исследование конфигурации хоста
- •Учетные записи пользователей
- •Привилегии учетной записи
- •Уровни патчей
- •Удаленное обслуживание
- •Управление доступом к файловой системе
- •Шифрование данных
- •Неверная конфигурация сервера
- •Мобильное приложение и облачное тестирование
- •Заключение
- •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 |
|
|
|||
ARC устраняет уязвимости, связанные с утечкой памяти, кото- |
|
|
|
to |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
df-x chan |
|
o |
|
|||||
рые возникают, когда разработчики не могут освободить ненужные |
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
выделенные блоки, что может привести к нехватке памяти. Метод автоматически подсчитывает ссылки на выделенные блоки памяти и помечает блоки, на которые нет ссылок, как подлежащие освобож дению.
Автоматизация статического анализа
Вы также можете автоматизировать статический анализ исходного кода приложения (если он доступен) и сгенерированного двоичного файла.Автоматическиестатическиеанализаторыисследуютнесколь- ко возможных вариантов и сообщают о потенциальных ошибках, ко- торые почти невозможно выявить с помощью ручной проверки.
Например,выможетеиспользоватьстатическийанализатор,такой как llvm clang,для аудита исходного кода приложения во время ком- пиляции. Этот анализатор обнаруживает множество групп ошибок, включая логические оплошности (например, разыменование пустых указателей, возврат адреса в стековую память или использование неопределенных результатов бизнес-логики операции); недостатки управления памятью (такие как утечка объектов и выделенной памя- ти и переполнение распределения); уязвимости ПЗУ (например, не- используемые назначения и начальные значения ПЗУ); и недостатки использования API, возникающие из-за неправильного использова- ния имеющихся фреймворков. В настоящее время он интегрирован
вXcode, и вы можете использовать его, добавив параметр анализа
вкоманду сборки:
$ xcodebuild analyze -project iGoat.xcodeproj -scheme iGoat -destination "name=iPhone X"
Выявленные анализатором ошибки появятся в журнале сборки. Существует множество других инструментов для автоматического сканирования двоичного файла приложения, в частности Mobile Se- curityFramework(MobSF)(https://github.com/MobSF/Mobile-Security-Frame- work-MobSF/).
Динамический анализ
В этом разделе мы запустим приложение на смоделированном устройстве iOS, протестируем функциональность устройства, отпра- вив данные, введенные пользователем, и изучим поведение при- ложения в экосистеме устройства. Самый простой подход к этой задаче – «вручную» изучить, как приложение влияет на основные компоненты устройства, такие как файловая система и связка клю- чей. Этот динамический анализ может выявить проблемы с небезо- пасным хранилищем данных и неправильным использованием API платформы.
398 Глава 14
|
|
|
|
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 |
|
|
||||
Изучение файловой структуры iOS и ее баз данных |
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
w |
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
o |
|||||
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
|
p |
df |
|
|
|
|
e |
|
||
|
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
|
-x cha |
|
|
|
|
|
||
Давайте перейдем к папке приложения на моделируемом устройстве, |
|
|
|
|
|
|
|
чтобыизучитьфайловуюструктуру,которуюиспользуютприложения iOS. На платформах iOS приложения могут взаимодействовать толь- ко с каталогами внутри каталога «песочницы» приложения. Каталог «песочницы» содержит контейнер Bundle,который защищен от запи- си и содержит фактический исполняемый файл,и контейнер данных, содержащий ряд подкаталогов (например, Documents (Документы), Library (Библиотека), SystemData (Системные данные) и tmp (Времен- ные файлы)), которые приложение использует для сортировки своих данных.
Для доступа к файловой системе смоделированного устройства, служащей корневым каталогом для следующих разделов главы, вве- дите следующую команду:
$ cd ~/Library/Developer/CoreSimulator/Devices/<simulator identifier>/
Затем перейдите в папку Documents, которая изначально будет пустой. Чтобы найти идентификатор приложения, вы можете найти приложение iGoat с помощью команды find:
$ find . -name *iGoat*
./data/Containers/Data/Application/<application id>/Library/Preferences/com. swaroop.iGoat.plist
$ cd data/Containers/Data/Application/<application id>/Documents
Первоначально пустая папка будет заполнена файлами, которые динамически создаются различными функциями приложения. На- пример, перейдя к категории Data Protection (Rest) (Защита данных (Прочее)) в функциях приложения, выбрав задачу Core Data Storage (Основное хранилище данных) и нажав кнопку Start (Пуск), вы сге- нерируете ряд файлов с префиксом CoreData. Задача требует, чтобы вы проверили эти файлы и восстановили пару сохраненных учетных данных.
Также можно отслеживать динамически созданные файлы с по мощью приложения fswatch, установив его при помощи любого из имеющихся у вас менеджеров пакетов сторонних производителей в macOS, например Homebrew (https://brew.sh/) или MacPorts (https:// www.macports.org/).
$ brew install fswatch $ fswatch -r ./
/Users/<имя пользователя>/Library/Developer/CoreSimulator/Devices/<идентификатор симулятора>/data/
Containers/Data/Application/<id приложения> /Documents/CoreData.sqlite
Взлом мобильных приложений 399
|
|
|
|
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 |
|
|
|||
Выполните установку, указав двоичный файл brew диспетчера па- |
|
|
|
to |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
m |
|||||
|
|
|
w Click |
|
|
|
|
|
|
|||||
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
df-x chan |
|
o |
|
|||||
кетов Homebrew, за которым следует параметр установки и имя за- |
. |
.c |
|
|||||||||||
|
|
|
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
|
прошенного пакета. Затем используйте двоичный файл fswatch, за |
|
|
|
|
|
|
|
|
|
|
||||
которым следует параметр -r, чтобы рекурсивно отслеживать под- |
|
|
|
|
|
|
|
|
|
|
||||
папки и целевую папку, которая в нашем случае является текущим |
|
|
|
|
|
|
|
|
|
|
||||
каталогом.Вывод будетсодержатьполный путьклюбому созданному |
|
|
|
|
|
|
|
|
|
|
||||
файлу. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Мы уже упоминали, как проверять содержимое файлов .plist, поэ- |
|
|
|
|
|
|
|
|
|
|
||||
томутеперьсосредоточимсянаэтихфайлахCoreData.Помимодругих |
|
|
|
|
|
|
|
|
|
|
||||
задач, платформа CoreData абстрагирует процесс сопоставления объ- |
|
|
|
|
|
|
|
|
|
|
||||
ектов с хранилищем, позволяя разработчикам легко сохранять дан- |
|
|
|
|
|
|
|
|
|
|
||||
ные в файловой системе устройства в формате базы данных sqlite без |
|
|
|
|
|
|
|
|
|
|
||||
необходимости управлять базой данных напрямую. Используя кли- |
|
|
|
|
|
|
|
|
|
|
||||
ент sqlite3, вы можете загрузить базу данных, просмотреть таблицы |
|
|
|
|
|
|
|
|
|
|
||||
базы данных и прочитать содержимое таблицы ZUSER, которая со- |
|
|
|
|
|
|
|
|
|
|
||||
держит конфиденциальную информацию,такую как учетные данные |
|
|
|
|
|
|
|
|
|
|
||||
пользователя: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$ sqlite3 CoreData.sqlite |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sqlite> .tables |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ZTEST |
ZUSER |
Z_METADATA |
Z_MODELCACHE Z_PRIMARYKEY |
|
|
|
|
|
|
|
|
|
|
|
sqlite> select * from ZUSER ; 1|2|1|john@test.com|coredbpassword
Вы можете использовать идентифицированные учетные данные позже для аутентификации в форме входа в систему Core Data Stor- age. Как только вы это сделаете, вы должны получить сообщение об успешном выполнении, указывающее на завершение задачи.
Аналогичная уязвимость существовала в приложении SIMATIC WinCC OA Operator для платформы iOS, которая позволяла пользо- вателям легко управлять оборудованием Siemens SIMATIC WinCC OA (например, объектами водоснабжения и электростанциями) с по мощью мобильного устройства. Злоумышленники, имеющие физи- ческий доступ к мобильному устройству, могли читать незашифро- ванные данные из каталога приложения (https://www.cvedetails.com/cve/
CVE-2018-4847/).
Запуск отладчика
Также можно проверить приложение с помощью отладчика. Этот метод позволит раскрыть внутреннюю работу приложения, включая расшифровку паролей или создание секретов. Изучая эти процессы, мы обычно можем перехватить конфиденциальную информацию, скомпилированную в двоичный файл приложения и доступную во время его выполнения.
Найдите идентификатор процесса и подключите отладчик, напри- мер gdb или lldb. Мы будем использовать lldb из командной строки. Это отладчик по умолчанию в Xcode, и вы можете использовать его
400 Глава 14
|
|
|
|
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 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
||
для отладки программ на языках C, Objective-C и C ++. Введитеwсле |
|
|
|
|
|
m |
||||||
|
w Click |
|
|
|
|
|
|
o |
||||
|
|
w |
|
|
|
|
|
|
|
|
|
|
дующие символы, чтобы найти идентификатор процесса и подклюd-f-x chan |
.c |
|
||||||||||
|
|
. |
|
|
|
|
|
|
|
|||
|
|
|
p |
|
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
|
чить отладчик lldb. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$ ps -A | grep iGoat.app |
|
|
|
|
|
|
|
|
|
|
|
|
59843 ?? |
0:03.25 /..../iGoat.app/iGoat |
|
|
|
|
|
|
|
|
|
|
|
$ lldb |
|
|
|
|
|
|
|
|
|
|
|
|
(lldb) process attach --pid 59843
Executable module set to "/Users/.../iGoat.app/iGoat". Architecture set to: x86_64h-apple-ios-.
(lldb) process continue
Process 59843 resuming
Когда вы подключаете отладчик, процесс приостанавливается, поэтому вам придется продолжить выполнение с помощью коман- ды process continue. Следите за выходными данными, чтобы найти интересные функции,выполняющие операции,связанные с безопас ностью. Например, следующая функция вычисляет пароль, который можно использовать для аутентификации в учебной задаче Private Photo Storage (Хранилище личных фото) категории Runtime Analysis (Анализ во время выполнения):
- (NSString *)thePw
{
char xored[] = {0x5e, 0x42, 0x56, 0x5a, 0x46, 0x53, 0x44, 0x59, 0x54, 0x55};
char key[] = "1234567890"; char pw[20] = {0};
for (int i = 0; i < sizeof(xored); i++) { pw[i] = xored[i] ^ key[i%sizeof(key)];
}
return [NSString stringWithUTF8String:pw];
}
Чтобы понять, что делает функция, проверьте исходный код при- ложения iGoat, который вы скачали ранее с помощью команды git. Точнее, посмотрите на функцию thePw класса iGoat/Personal Photo Storage/PersonalPhotoStorageVC.m.
Теперь можно намеренно прервать выполнение программы на этой функции, используя точку останова для чтения вычисленного пароля из памяти приложения.Чтобы установитьточку останова,ис- пользуйте команду b, за которой следует имя функции:
(lldb) b thePw
Breakpoint 1: where = iGoat`-[PersonalPhotoStorageVC thePw] + 39 at PersonalPhotoStorageVC.m:60:10, address = 0x0000000109a791cs7 (lldb)
Process 59843 stopped
Взлом мобильных приложений 401
|
|
|
|
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 |
|
|
|
|
*thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
...
59 - (NSString *)thePw{
-> 60 char xored[] = {0x5e, 0x42, 0x56, 0x5a, 0x46, 0x53, 0x44, 0x59, 0x54, 0x55};
61char key[] = "1234567890";
62char pw[20] = {0};
|
|
|
|
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 |
|
|
|
|
После перехода к соответствующей функции в имитируемом при- ложении оно должно остановиться, и в окне lldb появится сообще- ние, в котором стрелкой отмечен этап выполнения.
Теперь перейдите к следующим шагам выполнения приложения с помощью команды step. Продолжайте делать это, пока не дойдете до конца функции, где будет расшифрован секретный пароль:
(lldb) step
frame #0: 0x0000000109a7926e iGoat`-[PersonalPhotoStorageVC thePw] (self=0x00007fe4fb432710, _cmd="thePw") at PersonalPhotoStorageVC.m:68:12
65pw[i] = xored[i] ^ key[i%sizeof(key)];
66}
-> 68 return [NSString stringWithUTF8String:pw]; 69 }
71@e
(lldb) print pw
(char [20]) $0 = "opensesame"
Используя команду print ,вы можете получитьрасшифрованный пароль . Подробнее об отладчике lldb рассказано в книге Дэвида Тиля «Защита приложений iOS» (David Thiel. iOS Application Security, https://nostarch.com/iossecurity/).
Чтение сохраненных файлов cookie
Еще одно не столь очевидное место, где мобильные приложения обычно хранят конфиденциальную информацию,– это папка cookie- файлов в файловой системе, которая содержит файлы cookie HTTP, предназначенные для запоминания информации о пользователях сайтов. Приложения IoT переходят на веб-сайты и отображают их вWebView,чтобыпредставитьвеб-контентконечнымпользователям. (Обсуждение WebView выходит за рамки данной главы,но вы можете прочитатьонемнастраницахразработчиковiOSиAndroid.Мытакже будем использовать WebView в атаке на беговую дорожку в главе 15.) Но многие из этих сайтовтребуют аутентификации пользователя для представления персонализированного контента, и, как следствие, они используют файлы cookie для отслеживания сеансов HTTP актив- ных пользователей.Мы можем искатьв этих файлах cookie сеансы ау- тентифицированных пользователей, и в случае успеха выдавать себя за пользователя на соответствующих веб-сайтах и получать персона- лизированный контент.
402 Глава 14
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Платформа iOS хранит файлы cookie в двоичном формате часто |
|
|
|
|
|
m |
||||
w Click |
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
втечениедлительного времени.Мы можем использоватьинструментdf-x chan |
.c |
|
||||||||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
e |
|
BinaryCookieReader (https://github.com/as0ler/BinaryCookieReader/), чтобы расшифровать их и представить в удобочитаемой форме. Чтобы за- пустить инструмент, перейдите в папку Cookies, а затем запустите скрипт Python для чтения двоичных cookie-файлов:
$ cd data/Containers/Data/Application/<id приложения>/Library/Cookies/
$ python BinaryCookieReader/BinaryCookieReader.py com.swaroop.iGoat.binarycookies
...
Cookie : sessionKey=dfr3kjsdf5jkjk420544kjkll; domain=www.github.com; path=/OWASP/iGoat; expires=Tue, 09 May 2051;
BinaryCookieReader возвращает файлы cookie, содержащие клю- чи сеанса для веб-сайта . Вы можете использовать эти данные для аутентификации в учебной задаче Cookie Storage (Хранение файлов cookie) в категории Data Protection (Rest).
Также можно найти конфиденциальные данные в HTTP-кешах, которые веб-сайты используют для повышения производительно- сти за счет повторного использования ранее извлеченных ресурсов. Приложение хранит эти ресурсы в своей папке /Library/Caches/ в базе данныхSQLiteподназваниемCache.db.Например,выможетерешить учебную задачу Webkit Cache категории Data Protection (Rest), извле-
кая кешированные данные из этого файла. Загрузите базу данных, а затем получите содержимое таблицы cfurl_cache_receiver_data, которая содержит кешированные HTTP-ответы:
$ cd data/Containers/Data/Application/<id приложения>/Library/Caches/com. swaroop.iGoat/
$ sqlite3 Cache.db
sqlite> select * from cfurl_cache_receiver_data;
1|0|<table border='1'><tr><td>key</td><td>66435@J0hn</td></tr></table>
Похожая уязвимость затрагивает популярное приложение Hickory Smart для iOS версии 01.01.07 и более ранних, управляющее умны- ми замками. В базе данных приложения была обнаружена инфор- мация, позволяющая злоумышленникам в удаленном режиме от-
крывать двери и проникать в дома (https://cve.mitre.org/cgi-bin/cvename. cgi?name=CVE-2019-5633/).
Проверка журналов приложений и принуждение устройства к отправке сообщений
Продолжая нашу оценку, мы можем проверить журналы приложений для выявления утечек отладочной информации, которая может при- годиться нам,чтобы сделать вывод о бизнес-логике приложения.Мо- жете получить журналы через интерфейс приложения Console, кото- рый предустановлен в macOS (рис. 14.7).
Взлом мобильных приложений 403
|
|
|
|
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 |
|
|
|
|
Рис.14.7.Раскрытый пароль шифрования в журналах устройства iOS
|
|
|
|
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 |
|
|
|
|
Также их можно получить с помощью инструмента Xcrun:
$ `xcrun simctl spawn booted log stream > sim.log&`; open sim.log;
Журналы устройства содержат ключ шифрования, который мож- но использовать для аутентификации в учебной задаче Random Key Generation (Создание рандомного ключа) категории Key Management (Управление ключами). Похоже, хотя приложение правильно сгене- рировало ключ шифрования для целей аутентификации, этот ключ случайно оказался в журнале; в итоге злоумышленник с физическим доступом к компьютеру и подключенным к нему целевым устрой- ством может получить искомый ключ.
Тщательная проверка журналов при использовании других функ- ций приложения показывает, что приложение использует ранее по- казанную схему URL для отправки внутреннего сообщения,как пока- зано на рис. 14.8.
Рис.14.8.Раскрытые параметры схемы URL в журналах устройства iOS
Проверим это поведение,используя команду xcrun,чтобы открыть URL-адрес с аналогичной структурой в браузере симулятора:
$ xcrun simctl openurl booted "iGoat://?contactNumber=+1000000&message=hacked"
Чтобы воспользоваться этой уязвимостью, мы могли бы создать поддельную HTML-страницу, которая загружала URL-адрес, когда браузер отображает включенные HTML-элементы, а затем застав- ляла жертву отправлять несколько незапрашиваемых сообщений этого типа. Вы можете использовать следующий HTML-код для про- ведения этой атаки, когда пользователь нажимает на ссылку. Эта атака позволит вам успешно передать вызов схемы URL в функциях приложения:
<html>
<a href="iGoat://?contactNumber=+1000000&message=hacked"/> нажмите сюда</a>
</html>
На рис. 14.9 показано, что нам удалось отправить текстовое сооб- щение с телефона пользователя.
404 Глава 14
|
|
|
|
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 |
|
|
|
|
Рис.14.9.Злоупотребление открытой схемой URL-адресов для принуждения жертвы к отправке SMS-сообщений
Эта уязвимость может быть чрезвычайно полезной; в некоторых случаях она позволяет удаленно управлять IoT-устройствами, кото- рые получают команды через текстовые сообщения с авторизован- ных номеров. Таким свойством часто наделены умные автомобиль- ные сигнализации.
Снимки состояния приложений
Еще один распространенный способ утечки данных в приложениях iOS – это снимки экрана приложений. Когда пользователь нажимает кнопку Домой,iOS по умолчаниюделаетснимок состояния приложе- нияисохраняетеговфайловойсистемеввидеоткрытоготекста.Этот снимок экрана содержитконфиденциальныеданные–в зависимости от того, что просматривал пользователь. Вы можете воспроизвести этууязвимостьвучебнойзадачеBackgrounding(Фон)вкатегорииSide Channel Data Leaks (Утечки данных через побочный канал).
Используя следующие команды, перейдите к папке приложения Snapshots (Снимки), где вы можете найти сохраненные снапшоты:
$ cd data/Containers/Data/Application/<id приложения>/Library/Caches/Snapshots/com.swaroop.iGoat/ $ open E6787662-8F9B-4257-A724-5BD79207E4F2\@3x.ktx
Тестирование утечек данных из компоновочного буфера и прогнозирующего текстового движка
Помимо прочего, приложения для iOS часто страдают от утечки дан- ныхизкомпоновочногобуфераипрогнозирующеготекстовогодвиж-
Взлом мобильных приложений 405