- •От издательства
- •О техническом обозревателе
- •О соавторах
- •Об авторах
- •Вступительное слово
- •Благодарности
- •Предисловие
- •Почему важна защита интернета вещей?
- •Чем защита интернета вещей отличается от традиционной ИТ-защиты?
- •Законы хакинга интернета вещей
- •Заключение
- •Моделирование угроз для интернета вещей
- •Схема моделирования угроз
- •Определение архитектуры
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Использование деревьев атак для обнаружения угроз
- •Распространенные угрозы интернета вещей
- •Атаки с подавлением сигнала
- •Атаки с воспроизведением
- •Атаки со взломом настроек
- •Клонирование узла
- •Заключение
- •Пассивная разведка
- •Физический или аппаратный уровень
- •Периферийные интерфейсы
- •Среда загрузки
- •Блокировки
- •Предотвращение и обнаружение несанкционированного доступа
- •Прошивка
- •Интерфейсы отладки
- •Физическая устойчивость
- •Разведка
- •Атаки на сетевой протокол и службы
- •Тестирование беспроводного протокола
- •Оценка веб-приложений
- •Картирование приложений
- •Элементы управления на стороне клиента
- •Аутентификация
- •Управление сеансом
- •Проверка ввода
- •Логические ошибки
- •Сервер приложений
- •Исследование конфигурации хоста
- •Учетные записи пользователей
- •Привилегии учетной записи
- •Уровни патчей
- •Удаленное обслуживание
- •Управление доступом к файловой системе
- •Шифрование данных
- •Неверная конфигурация сервера
- •Мобильное приложение и облачное тестирование
- •Заключение
- •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 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
df-x chan |
|
o |
|
|||||
среду выполнения, перепрограммируемый компонент, расположен- |
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
ный в защищенной области основного процессора; или защищенное от несанкционированного доступа оборудование, размещенное на отдельном чипе рядом с основным процессором. Для поддержки фи- нансовых транзакций некоторые устройства также имеют защищен- ный элемент, который выполняет код в виде апплетов Java и может безопасно хранить конфиденциальные данные.
Некоторые поставщики устройств используют измененные реа- лизации этих технологий. Например, последние устройства Apple используют Secure Enclave, отдельный аппаратный компонент, спо- собный размещать код и данные и выполнять операции аутентифи- кации.ВпоследнихустройствахGoogleиспользуетсяаппаратныйчип с защитой от несанкционированного доступа Titan M с аналогичны- ми возможностями. Основные наборы микросхем на базе ARM под- держивают надежную среду выполнения под названием TrustZone, а базовые чипсеты Intel поддерживают функцию под названием SGX. Эти изолированные аппаратные компоненты реализуют ключевые функции хранилища платформ. Но разработчики должны использо- вать правильные вызовы API для безопасного использования надеж- ных хранилищ ключей.
Проверенная и безопасная загрузка
Обе платформы используют программные компоненты, которые проверяются на этапе загрузки при запуске операционной системы. Безопасная загрузка проверяет загрузчик устройства и программное обеспечение определенных изолированных аппаратных реализаций, инициируя аппаратную «основудоверия» (Root of Trust).На платфор- мах на базе Android за проверку компонентов программного обеспе- ченияотвечаетмеханизмпровереннойзагрузкиAndroidVerifiedBoot, а на платформах на базе iOS за это отвечает механизм SecureRom.
Анализ приложений iOS
В этом разделе мы исследуем мобильное приложение с открытым ис- ходным кодом для iOS: проект OWASP iGoat (https://github.com/OWASP/ igoat/). Проект iGoat не является приложением специально для ин- тернета вещей, но содержит идентичную бизнес-логику и использует функции, аналогичные функциям многих приложений для устройств интернета вещей. Мы сосредоточимся только на обнаружении уязви- мостей,которыемогутсуществоватьвприложенияхинтернетавещей.
Мобильное приложение iGoat (рис. 14.4) содержит ряд проблем на основе распространенных уязвимостей мобильных приложений. Пользователь может переходить к каждой задаче и взаимодейство- вать с намеренно уязвимым компонентом,чтобы извлекать скрытые секретные флаги или вмешиваться в функциональность приложения.
392 Глава 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.4.Категории в мобильном приложении iGoat
Подготовка среды тестирования
Для тестирования iGoat вам понадобится настольный или портатив- ный компьютер Apple, который вы будете использовать для настрой-
киимитатораiOSвсредеXcodeIDE(интегрированнаясредаразработ-
ки).ВыможетеустановитьXcodeнаmacOSтолькочерезMacAppStore. Вамтакже следуетустановить инструменты командной строки Xcode, используя команду xcode-select:
$ xcode-select –install
Теперь создайте свой первый симулятор,используя команду xcrun, которая позволяет запускать инструменты разработки Xcode:
$ xcrun simctl create simulator com.apple.CoreSimulator.SimDeviceType.iPhone-X com.apple.CoreSimulator.SimRuntime.iOS-12-2
Первый параметр, названный simctl, позволяет вам взаимодей- ствовать с симуляторами iOS. Параметр create создает новый симу- лятор с именем следующего параметра. Последние два параметра определяюттип устройства,которым в нашем случае является iPhone X, и среду выполнения iOS, которой является iOS 12.2. Вы можете установитьдругие среды выполнения iOS,открыв Xcode,щелкнув па-
Взлом мобильных приложений 393
|
|
|
|
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 |
|
|
|||
раметр Preferences (Настройки), а затем выбрав один из доступных |
|
|
to |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
|||
|
w Click |
|
|
|
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
имитаторов iOS на вкладке Components (Компоненты) (рис. 14.5). |
|
w |
|
df-x chan |
|
o |
|
||||
|
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
Рис.14.5.Установка среды выполнения iOS
Загрузите и откройте свой первый симулятор, используя следую- щие команды:
$ xcrun simctl boot <simulator identifier>
$ /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/
Contents/MacOS/Simulator -CurrentDeviceUDID booted
Используйте команду git, чтобы загрузить исходный код из ре- позитория, перейдите в папку приложения iGoat и скомпилируйте приложение для моделируемого устройства с помощью команды xcodebuild. Затем установите сгенерированный двоичный файл в за- груженный симулятор:
$ git clone https://github.com/OWASP/igoat $ cd igoat/IGoat
$ xcodebuild -project iGoat.xcodeproj -scheme iGoat -destination "id=<simulator identifier>"
$ xcrun simctl install booted ~/Library/Developer/Xcode/DerivedData/ iGoat-<application identifier>/Build/Products/Debug-iphonesimulator/iGoat.app
Вы можете найти идентификатор приложения, проверив послед- ние строки команды xcodebuild или перейдя в папку ~/Library/Devel- oper/Xcode/DerivedData/.
Извлечение и повторная подписьIPA
Если у вас уже есть устройство iOS, которое вы хотите использовать для тестирования установленного приложения, придется извлечь приложение другим способом. Все приложения iOS распространя- ются в виде архивного файла, который называется пакетом iOS App Store Package (IPA). Более ранние версии iTunes (до 12.7.x) позволя-
ли пользователям извлекать IPA приложений, приобретенных через App Store.Крометого,в предыдущих версиях iOS,до 8.3,вы могли из-
394 Глава 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 |
|
|
|||
влечь IPA из локальной файловой системы с помощью |
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
программно- |
|
|
|
|
|
m |
|||||
|
w Click |
|
|
|
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
го обеспечения, например iFunBox или инструмента iMazing. Но этоdf-x chan |
.c |
|
|||||||||
|
|
. |
|
|
|
|
|
|
|||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
неофициальные методы,и они могут не поддерживаться новейшими платформами iOS.
Вместо этого вы можете использовать взломанное пр помощи джейлбрейка1 устройство для извлечения папки приложения из фай- ловой системы или попытайтесь найти уже расшифрованое другим пользователем приложение в онлайн-хранилище. Например, чтобы извлечьпапку iGoat.app со взломанного устройства,перейдите в пап- ку Applications (Приложения) и найдите подпапку, содержащую при- ложение:
$ cd /var/containers/Bundle/Application/
Если вы установили приложение через App Store, основной дво- ичный файл будет зашифрован. Чтобы расшифровать IPA из памя- ти устройства, используйте общедоступный инструмент, например
Clutch (http://github.com/KJCracks/Clutch/):
$ clutch -d <bundle identifier>
У вас также может быть IPA, не подписанный для вашего устрой- ства, потому что поставщик программного обеспечения предоставил вамегоилипотомучтовыизвлеклиэтотIPAоднимизранееупомяну- тых способов. В этом случае самый простой способ установить его на тестовое устройство–это повторно подписать его,используя личную учетную запись разработчика Apple с помощью такого инструмента,
как Cydia Impactor ( http://www.cydiaimpactor.com/) или node-applesign (https://github.com/nowsecure/node-applesign/).Этотметодявляетсяобыч-
нымдляустановкиприложений,такихкакunc0ver,припомощикото- рых выполняют джейлбрейк устройства.
Статический анализ
Первый наш шаг – изучение созданного архивного файла IPA. Этот пакет представляет собой ZIP-файл, поэтому начните с его распаков- ки, воспользовавшись следующей командой:
$ unzip iGoat.ipa
-- Payload/
---- iGoat.app/
1Джейлбрейк (jailbrake, «побег из тюрьмы») – процедура получения прав суперпользователя программного обеспечения на iOS без официально- го разрешения Apple. Предоставляет полный доступ к файловой системе устройства и ряд других возможностей, недоступных обычному пользова-
телю.– Прим.ред.
Взлом мобильных приложений 395
|
|
|
|
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 |
|
|
|
|
------- Info.plist
------- iGoat
------- ...
|
|
|
|
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 |
|
|
|
|
Наиболее важными файлами в распакованной папке являются ин-
формационный файл списка свойств (с именем Info.plist ), который представляетсобойструктурированныйфайл,содержащийинформа- цию о конфигурации для приложения, и исполняемый файл с тем же именем, что и приложение. Вы также увидите другие файлы ре- сурсов, которые находятся вне исполняемого файла основного при- ложения.
Откройте файл списка свойств. Чаще всего здесь удается найти за- регистрированные URL-схемы (рис. 14.6).
Рис.14.6.Зарегистрированная URL-схема в файле списка свойств
URL-cхема в основном позволяет пользователю открывать интер- фейс определенного приложения из других приложений. Злоумыш- ленники могут попытаться использовать их, заставив устройство выполнять нежелательные действия в уязвимом приложении при загрузке этого интерфейса. Нам придется протестировать схемы URL-адресов для этой уязвимости позже на этапе динамического анализа.
Проверка файлов списка свойств на предметконфиденциальных данных
Давайтепосмотримнаостальныефайлыспискасвойств(файлысрас- ширением.plist),которые хранятупорядоченные объекты и часто со- держат пользовательские настройки или другие конфиденциальные данные. Например, в приложении iGoat файл Credentials.plist содер- жит конфиденциальные данные, относящиеся к элементу управле- ния аутентификацией. Вы можете прочитать этот файл с помощью инструмента Plutil, который преобразует файл .plist в формат XML:
$ plutil -convert xml1 -o - Credentials.plist
<?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"> <string>Secret@123</string> <string>admin</string>
</plist>
Можете использовать найденные учетные данные для выполнения задания Plist Storage в категории Data Protection (Rest) демонстраци-
онного приложения.
396 Глава 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 |
|
|
||||
Проверка защиты памяти в исполняемом двоичном файле |
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
w |
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
o |
|||||
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
|
p |
df |
|
|
|
|
e |
|
||
|
|
|
|
|
|
g |
|
|
|
|||
|
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
|
-x cha |
|
|
|
|
|
||
Теперь проверим исполняемый двоичный файл и посмотрим, реали- |
|
|
|
|
|
|
|
зована ли в нем необходимая защита памяти при компиляции. Для этого запустите инструмент отображения объектного файла (Otool), который является частью пакета инструментов разработчика Xcode CLI:
$ otool -l iGoat | grep -A 4 LC_ENCRYPTION_INFO cmd LC_ENCRYPTION_INFO
cmdsize 20 cryptoff 16384 cryptsize 3194880
cryptid 0
$ otool -hv iGoat
magic |
cputype cpusubtype |
caps |
filetype ncmds sizeofcmds |
flags |
||
MH_MAGIC |
ARM |
V7 |
0x00 |
EXECUTE 35 |
4048 |
NOUNDEFS |
DYLDLINK TWOLEVEL |
WEAK_DEFINES BINDS_TO_WEAK PIE |
|
|
|||
|
|
|
|
|
|
|
Сначала проверяем, был ли зашифрован двоичный файл в App Store,исследуя cryptid .Если этот флаг установлен в 1,то двоичный файл зашифрован и вам следуетпопытаться расшифроватьего из па- мяти устройства с использованием подхода,описанного выше,в раз- деле «Извлечение и повторная подпись IPA». Мы также проверяем,
включена ли рандомизация разметки адресного пространства,прове-
ряя наличие флага PIE в заголовкедвоичного файла.Рандомизация разметки адресного пространства – это метод, который случайным образом упорядочивает позиции адресного пространства памяти процессадля предотвращения эксплуатации уязвимостей,связанных с повреждением памяти.
Используя тот же инструмент, проверьте, включена ли защита от нарушения стека (метод,который обнаруживает уязвимости повреж- дения памяти путем прерывания выполнения процесса, если изме- нилось секретное значение в стеке).
$ otool -I -v iGoat | grep stack
0x002b75c8 478 ___stack_chk_fail 0x00314030 479 ___stack_chk_guard 0x00314bf4 478 ___stack_chk_fail
Флаг __stack_chk_guard указывает, что защита от нарушения стека включена. Наконец, посмотрите, использует ли приложение автоматический подсчет ссылок (ARC) – метод, заменяющий тради- ционное управление памятью, – проверяя _objc_autorelease, _objc_ storeStrong и _objc_retain:
$ otool -I -v iGoat | grep _objc_autorelease
0x002b7f18 715 _objc_autorelease\
Взлом мобильных приложений 397