• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Детальный разбор IPSW - "Швейцарский нож" в сфере исследования безопасности IOS/MacOS

PUG

floppy-диск
Пользователь
Регистрация
16.02.2024
Сообщения
3
Реакции
8
Детальный разбор IPSW (Часть 1) - "Швейцарский нож" в сфере исследования безопасности IOS/MacOS

В первой части разбора IPSW мы рассмотрим основные возможности инструмента и то, как он может значительно облегчить нашу жизнь.

IPSW - это инструмент, который каждый найдет полезным для исследования *OS, так как он предоставляет множество функций, связанных с dyld_shared_cache, DeviceTree, kernelcache, Img4 и другими. Они и представляют интерес для исследователей безопасности.

Мы рассмотрим каждую из ключевых команд, чтобы понять, что она делает и как ее использовать, но перед этим нам нужно сделать главное - установить IPSW. Мы можем собрать IPSW из исходного кода или можем скачать один из предварительно собранных бинарных файлов, доступных в репозитории (https://github.com/blacktop/ipsw/releases) GitHub.

После загрузки IPSW необходимо убедиться, что все работает исправно. Для этого напечатаем --help - данная команда также отобразит доступный нам список команд.

ipsw_help.png


Меню с доступными командами после введенной команды ipsw --help

Теперь, поговорим про каждую из них поподробнее:

Appstore

appstore
- это первая команда, которую предоставляет ipsw. Она позволяет нам взаимодействовать с App Store Connect API.

ipsw_appstore.png


Меню ipsw appstore

ipsw appstore даёт возможность:

- управлять идентификаторами связок (Bundle IDs) созданных приложений

- управлять сертификатами подписи

- просматривать и регистрировать новые устройства

- управлять профилями обеспечения

- генерировать JWT-токены, которые могут быть использован для взаимодействия с App Store Connect API.


Довольно большое количество ipsw-команд требуют ключ App Store Connect API. Его можно получить здесь: https://appstoreconnect.apple.com/access/api.

creating_appstore_key.png



Панель генерации App Store Connect API Key

После создания ключа нам нужно загрузить его, нажав на кнопку Download. Путь к файлу будет указан с помощью флага -p, идентификатор эмитента (Issuer ID) с помощью флага -i и идентификатор ключа (Key ID) с помощью флага -k соответственно. Оба этих идентификатора (IDs) можно скопировать с веб-страницы, как показано на скрине выше.


Bundle

Данная команда выводит список зарегестрированных идентификаторов связок (Bundle IDs), созданных в XCode. С помощью ipws appstore bundle ls, предоставив при этом ранее полученну информацию (файл .p8, идентфикатор эмитента (Issuer ID) и идентификатор ключа (Key ID)). Мы можем использовать эту команду, чтобы просмотреть все зарегестрированные нами идентификаторы связок (Bundle IDs).

Команда: ipsw appstore bundle ls -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID

ipsw_appstore_bundle_ls.png


Пример использования ipsw appstore bundle ls -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID


Cert
С помощью команды appstore cert у нас появляется возможность управления сертификатами подписи. Для получения списка сертификатов мы можем просто вызвать команду ipsw appstore cert ls вместе с указанием файла .p8, идентификатора эмитента (Issuer ID) и идентификатора ключа (Key ID). Полезно будет использовать эту команду в случаях, когда хотим быстро создать новый сертификат подписи или проверить информацию о уже существующих.

Команда: ipsw appstore cert ls -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID

ipsw_appstore_cert_ls.png


Пример использования ipsw appstore cert ls -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID


Теперь рассмотрим процесс создания нового сертификата подписи.
Первое, что нам нужно сделать, это создать новый ключ с помощью openssl.

Команда: openssl req -newkey rsa:2048 -keyout 8ksec.key -out 8ksec.csr

После заполнения необходимой информации мы получим запрос на подписание сертификата в файле 8ksec.csr и закрытый ключ в файле 8ksec.key. Содержимое файла 8ksec.csr будет передано флагу -c в ipsw appstore cert add. Содердимое также следует немного "почистить" путем удаления новых строк с помощью tr -d '\n'

openssl_csr.png


Пример использования openssl req -newkey rsa:2048 -keyout 8ksec.key -out 8ksec.csr и [B]tr -d '\n'[/B]


После того как мы получили наш csr, вызовем ipsw appstore cert add с параметром --type DEVELOPMENT.


Команда: ipsw appstore cert add -c CONTENTS_OF_CSR -t DEVELOPMENT -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID

ipsw_appstore_cert_add.png


Пример использования ipsw appstore cert add с параметром --type DEVELOPMENT: ipsw appstore cert add -c CONTENTS_OF_CSR -t DEVELOPMENT -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID

Вот и наш результат: мы успешно создали новый сертификат подписи, который был сохранен в файл в нашей системе. Чтобы убедиться, что он действительно создан, вызовем ipsw appstore cert ls ещё раз.

ipsw_appstore_cert_ls_again.png


Проверка создания нового сертификата подписи через ipsw appstore cert ls

Чтобы удалить сертификат, мы просто передаем команду --id в ipsw appstore cert rm. В нашем случае команда будет выглядеть так:
ipsw appstore cert rm --id Q6FAZ3K5VT -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID


Device

Функционал ipsw также дает нам возможность управлять устройствами с помощью appstore. Например, используя device, мы можем перечислять существующие устройства или регистрировать новые. Чтобы добавить новое устройство, нам нужно иметь UDID устройства и указать его имя и платформу (iOS). UDID устройства можно узнать с помощью команды idevice_id из libimobiledevice.

Чтобы получить список устройств, выполните команду:
ipsw appstore device ls -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID

ipsw_appstore_device_ls.png


Отображение существующих устройств с помощью команды ipsw appstore device ls -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID

Profile

Подкоманда profile позволяет управлять профилями обеспечения (инициализации). Мы можем выполнять такие действия, как перечисление, создание, обновление и удаление профилей. Сами профили позволяют запускать приложения с правами или сертификатами подписи вне обычной конфигурации iOS.

Чтобы отобразить список профилей необходимо ввести следующую команду: ipsw appstore profile ls -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID

ipsw_appstore_profile_ls.png


Список доступных нам профилей, отображенный с помощью команды ipsw appstore profile ls -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID


Для создания нового профиля необходимо следующее:

- имя профиля

- идентификатор сертификата (Certificate ID) для вновь созданного профиля

- идентификатор устройства (Device ID), с которым будет связан новый профиль

Команда: ipsw appstore profile create NAME -c CERTIFICATES_ID -d DEVICES_ID -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID

ipsw_appstore_profile_create.png


Пример создания нового профиля с помощью команды ipsw appstore profile create NAME -c CERTIFICATES_ID -d DEVICES_ID -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID

Если запрос прошел успешно, то новый профиль будет записан в папку NAME.mobileprovision на вашем диске. Чтобы убедиться, что мы действительно создали профиль, давайте выполним еще один запрос (profile ls):

ipsw_appstore_profile_ls_again.png


Проверка создания профиля через profile ls

Если Вы хотите удалить профиль - укажите имя профиля в команде ipsw appstore profile rm с флагом -n.

Команда: ipsw appstore profile rm -n 8ksec -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID


Token

Команда token помогает сгенерировать JWT-токен для использования вместе с App Store Connect API.

Команда: ipsw appstore token -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID

ipsw_appstore_token.png



Генерация JWT-токена с помощью ipsw appstore token -p PATH_TO_P8_FILE -i ISSUER_ID -k KEY_ID


Device-list


Вторая основная подкоманда, которую предоставляет ipsw, - device-list. Она позволяет просмотреть список всех iOS-устройств, их архитектуры и процессоры, установленные в них.


ipsw_device-list.png



Меню ipsw device-list


Diff

Третья основная подкоманда связана с поиском различий между двумя ipsw-файлами. ipsw-файлы - это, по сути, файлы прошивки, и мы можем найти различия между двумя из них с помощью подкоманды Diff. Это может быть полезно, например, если уязвимость была исправлена, а мы не знаем точных деталей. В таком случае Diff может указать нам правильное направление.

Мы, в качестве примера, будем использовать ipsw-файлы iPhone 15 17.0.2 и iPhone 15 7.0.3.

Команда: ipsw diff ~/Downloads/iPhone15,4_17.0.2_21A350_Restore.ipsw ~/Downloads/iPhone15,4_17.0.3_21A360_Restore.ipsw

ipsw_diff.png



Результат ввода команды ipsw diff ~/Downloads/iPhone15,4_17.0.2_21A350_Restore.ipsw ~/Downloads/iPhone15,4_17.0.3_21A360_Restore.ipsw


После выполнения команды мы видим, что проверяется множество различных категорий, таких как dyld_shared_cache, права доступа и т.д.

Парой строк ниже мы можем увидеть некоторые фактические изменения:

ipsw_diff_diffed.png




Download

Четвертая команда позволяет нам загружать множество различных вещей, таких как ОС, IPA, IPSW-файлы, инсталляторы macOS и многое другое. Мы можем использовать эту команду для загрузки или просмотра различных веб-страниц из терминала.

ipsw_download_help.png


Меню ipsw download

Appledb

Эта подкоманда позволяет загружать файлы IPSW непосредственно из appledb.

Команда: ipsw download appledb --os iOS --version '17.0.3' --device iPhone15,2 --kernel

ipsw_download_appledb.png


Пример использования ipsw download appledb --os iOS --version '17.0.3' --device iPhone15,2 --kernel

ipsw_download_appledb_ls.png





Dev

Подкоманда dev позволяет загружать IPSW, XCode, Операционные Системы (ОС) и многое другое с сайта https://developer.apple.com/download.

Команда: ipsw download dev

Набрав данную команду, вы получите список того, что хотите скачать, и сможете легко выбрать нужные вам элементы для установки.

ipsw_download_dev.png


Установка с помощью команды ipsw download dev на примере Xcode 15.0.1

Macos

Еще одна полезная подкоманда для ipsw download, которая позволяет загружать установщики macOS.

ipsw_download_macos.png


Доступные установщики MacOS

Стоит отметить, что ipsw download предлагает и другие подкоманды, такие как git и ipa. Однако, мы их пропустим, чтобы уделить большее внимание остальным командам.

Dtree

Эта команда позволяет нам спарсить DeviceTree. DeviceTree - это представление аппаратного обеспечения, которое загрузчиками предоставляют ядру.

Чтобы спарсить DeviceTree, нам сначала нужно его получить. Для этого мы можем использовать ipsw extract для извлечения DeviceTree из файла IPSW.

ipsw_extract_dtree.png



После извлечения DeviceTree мы можем спарсить его с помощью ipsw dtree.

Команда: ipsw dtree PATH_TO_DEVICE_TREE_FILE

ipsw_dtree.png


Dyld

Подкоманда dyld предоставляет множество функциональных возможностей, связанных с dyld_shared_cache.

Вот некоторые из них:

- получение информации о dyld_shared_cache

- поиск того, какой dylib импортирует другой dylib
- извлечение dyld_shared_cache

- поиск строки внутри dyld_shared_cache

- и многое другое...


dyld расшифровывается как dynamic loader, и его работа заключается в загрузке общих библиотек в память процесса. Чтобы ускорить процесс загрузки, все они объединены в один файл под названием dyld shared cache. Мы рассмотрим лишь несколько из этих функций, так как их очень много.


Info

Чтобы получить всю информацию из dyld_shared_cache, мы можем вызвать ipsw dyld info с указанием пути к dyld_shared_cache. Здесь также имеются некоторые опции: например, печать только dylibs, dlopen closures.

Команда: ipsw dyld info PATH_TO_DYLD_SHARED_CACHE

ipsw_dyld_info.png


Пример применения подкоманды Info через команду ipsw dyld info PATH_TO_DYLD_SHARED_CACHE

Также, после некоторой общей информации мы можем увидеть dylibs внутри dyld_shared_cache, как показано на скрине ниже.

ipsw_dyld_info_images.png


Extract
Мы можем извлечь определенный фреймворк из dyld_shared_cache для дальнейшего анализа с помощью команды ipsw dyld extract.

Команда: ipsw dyld extract PATH_TO_DYLD_SHARED_CACHE DYLIB

На изображении ниже мы видим как извлекается Accelerate.framework.

ipsw_dyld_extract.png



Macho

Эта подкоманда позволяет разобрать конкретный dylib внутри файла dyld_shared_cache.

Команда: ipsw dyld macho PATH_TO_DYLD_SHARED_CACHE DYLIB

Например, чтобы получить команды загрузки из Accelerate.framework, мы можем сделать следующее (использовать команду):

ipsw_dyld_macho.png


Imports

Чтобы узнать, какие dylib'ы загружают определенный dylib, мы можем использовать команду ipsw dyld imports. Допустим, мы нашли уязвимость в определенном dylib и хотим проверить, какие другие фреймворки/dylib'ы импортируют его.

Команда: ipsw dyld imports PATH_TO_DYLD_SHARED_CACHE DYLIB

ipsw_dyld_imports.png


На скрине показано, какие dylibs загружают Accelerate.framework.

Objc

Мы можем собрать информацию об Objective C из dylibs с помощью ipsw dyld objc. Её же мы можем использовать для печати классов, протоколов, селекторов или имп-кэшей для dyld_shared_cache. Эта команда полезна, если мы хотим увидеть некоторые классы/функции внутри PrivateFrameworks.

Чтобы вывести все классы, мы можем использовать следующую команду: ipsw dyld objc -class PATH_TO_DYLD_SHARED_CACHE

ipsw_dyld_objc.png


Split

Мы можем разделить dyld_shared_cache с помощью ipsw dyld split, что позволит нам увидеть все, что находится внутри dyld_shared_cache. Мы рассмотрим разделение dyld_shared_cache на примере macOS Ventura.


На macOS Ventura dyld_shared_cache хранится в каталоге /System/Cryptexes/OS/System/Library/dyld/.

dyld_shared_cache_ventura_location.png



Для разделения нам нужно дать путь к файлу dyld_shared_cache и путь вывода (по желанию). Помните, что наши файлы dyld_shared_cache хранятся в каталоге /System/Cryptexes/OS/System/Library/dyld/, и мы будем использовать один из них - dyld_shared_cache_arm64e.

Команда: ipsw dyld split /System/Cryptexes/Os/System/Library/dyld/dyld_shared_cache_arm64e /tmp/8ksec.

ipsw_dumping_cache.png


Через несколько секунд мы можем просмотреть выходную директорию, чтобы узнать, что находится внутри dyld_shared_cache.

examining_output.png


Как итог, мы видим множество интересных директорий, таких как PrivateFrameworks и Frameworks. Теперь мы можем, например, посмотреть экспортированные символы одного из этих фреймворков, скажем, CalendarWidget.framework, используя nm -Ug, за которым следует путь к общей библиотеке CalendarWidget.

calendar_widget_symbols.png


Str

ipsw dyld str
позволяет нам искать определенные шаблоны строк в файлах dyld_shared_cache. Это удобно, когда мы хотим проверить, например, где используется или на что ссылается определенная строка.

Команда: ipsw str PATH_TO_DYLD_SHARED_CACHE -p "REGEX PATTERN"

ipsw_dyld_str.png



Как видно на скрине выше, случаев, в которых присутствует строка "world", довольно много. Мы также можем увидеть название фреймворка, в котором был найден данный паттерн.


Ent
ipsw ent
позволяет нам искать определенные права внутри IPSW, сделать различие между правами внутри двух разных IPSW-файлов или дамп прав для определенного MachO-файла. Это может быть полезно, если мы хотим знать каждый бинарный файл, содержащий определенный элемент, или хотим увидеть изменения между двумя разными IPSW-файлами.


Search

Если мы хотим, например, выполнить поиск конкретного правомочия (разрешения) для com.apple.developer.carplay-audio, то команда будет выглядеть следующим образом:

Команда: ipsw ent -e com.apple.developer.carplay-audio PATH_TO_IPSW_FILE


ipsw_ent_search.png



Diff

Diff
позволяет увидеть разницу в правах между двумя IPSW-файлами.

Команда: ipsw ent --diff PATH_TO_FIRST_IPSW PATH_TO_SECOND_IPSW

ipsw_ent_diff.png


Поиск различий с помощью подкоманды diff - различий не найдено

Info

Команда ipsw info позволяет просмотреть информацию о файле IPSW либо о файле OTA. Мы можем использовать эту команду, если хотим узнать версию чипа или iOS для конкретного IPSW/OTA файла. Для анализа удаленного (в знач. remote) файла мы можем выполнить проверку локальных файлов или передать URL с флагом -r.

Команда для локального файла: ipsw info PATH_TO_IPSW_OTA_FILE

Команда для удаленного (в знач. remote) файла: ipsw info -r URL

ipsw_info.png


Mdevs

ipsw mdevs
позволяет увидеть все мобильные устройства в определенном файле IPSW.

Команда: ipsw mdevs PATH_TO_IPSW

ipsw_mdevs.png


Mount

ipsw mount
позволяет нам поднять (возвести) определенную часть файла IPSW. Этими частями являются fs (файловая система), sys (система) или app (библиотека). Мы можем использовать эту команду, если хотим увидеть, что именно находится внутри IPSW-файла. После этого провести дальнейший анализ/исследование определенной его части, например, конкретной dylib.

Команда: ipsw mount [fs|sys|app] PATH_TO_IPSW_FILE


На следующих двух изображениях мы видим поднятие/возведение fs (файловой системы) и то, что находится внутри нее.

ipsw_mount_fs.png



ipsw_mount_fs_in.png


Теперь мы возведем диск sys (system) и проверим его содержимое.

ipsw_mount_sys.png


ipsw_mount_sys_in.png


Осталось лишь возвести app:

ipsw_mount_app.png


ipsw_mount_app_in.png


Plist

ipsw plist
позволяет сделать дамп .plist-файла в виде json или, например, проследить за изменениями в plist-файлах внутри определенной директории. Допустим, мы анализируем приложение и хотим узнать, что и когда вызывает запись определенной опции в plist-файл.

Мы также можем использовать ipsw plist для просмотра определенной директории на предмет изменений внутри файлов plist. Это удобно, когда мы хотим отследить, что изменилось в plist-файле во время работы с приложением.

File


Команда: ipsw plist PATH_TO_PLIST_FILE

ipsw_plist_file.png


Мы также можем передать вывод этой функции в jq, чтобы получить, например, идентификатор связки (Bundle ID).

ipsw_plist_file_jq.png


watch

Мы также можем использовать ipsw plist для просмотра определенной директории на предмет изменений внутри файлов plist. Это пригодится, когда мы хотим отслеживать, какие изменения произошли внутри файла plist во время работы с приложением.

команда: ipsw plist -w PATH_TO_DIRECTORY

ipsw_plist_watch.png



Update

ipsw
предоставляет нам удобный способ обновиться, выполнив команду ipsw update, которая позволяет загрузить новую версию для конкретной ОС и архитектуры.

Команда: ipsw update

ipsw_update_before.png


Пример использования ipsw update

После завершения загрузки мы можем извлечь архив, проверить нашу версию и убедиться, что мы действительно используем последнюю версию, запустив ipsw update внутри загруженного пакета.

ipsw_update_after.png


"У Вас уже установлена последняя версия" - обновлений нет

Watch

ipsw watch
- это команда, которая не имеет отношения к iOS или macOS, но связана с наблюдением за изменениями в конкретном репозитории GitHub. Мы можем следить за измененным файлом или шаблоном в сообщениях и получать уведомления об изменениях через Discord.


В следующей части мы рассмотрим некоторые дополнительные возможности использования ipsw для исследования безопасности *OS.

//////////////////////////////////////////////////////////////

Переведено PUG по просьбе weaver

Оригинал статьи: https://8ksec.io/ipsw-walkthrough-part-1-the-swiss-army-knife-for-ios-macos-security-research/

Надеюсь, что данная статья оказалась для Вас полезной и интересной!
 
Последнее редактирование модератором:

Детальный разбор IPSW (Часть 2) - "Швейцарский нож" в сфере исследования безопасности IOS/MacOS


В первой части этой серии мы рассмотрели большинство команд IPSW, а сегодня продолжим работу с оставшимися. Мы узнаем, как работать с kernelcache, img4, как взаимодействовать с подключенным USB-устройством и многое другое.



Extract

Начнем с команды ipsw extract, которая позволяет извлечь kernelcache, dyld_shared_cache, DeviceTree и Im4p keybags из файлов IPSW/OTA.

Поскольку мы уже рассмотрели извлечение DeviceTree (Dtree - Часть 1), мы сразу перейдем к извлечению kernelcache и dyld_shared_cache. kernelcache - это, по сути, ядро вместе со всеми расширениями (kexts). Чтобы проанализировать kernelcache, нам сначала нужно извлечь его. Позже мы увидим, как его анализировать и получать из него нужную информацию.

Команда: ipsw extract --kernel PATH_TO_IPSW_FILE

ipsw_extract_kernel.png



Чтобы сдампить dyld_shared_cache, вместо флага --kernel мы используем флаг --dyld.

Команда: ipsw extract --dyld PATH_TO_IPSW_FILE

ipsw_extract_dyld_shared_cache.png



Еще одна полезная функция - дамп im4p keybags в виде json-файла. im4p-файл - это файл формата IMG4, который используется для iBoot, ramdisk и т. д. на 64-битных устройствах.

Команда: ipsw extract --kbag PATH_TO_IPSW_FILE

ipsw_extract_kbag.png



Idev

ipsw idev предоставляет множество функций, связанных с взаимодействием с подключенным USB-устройством.

Afc

Первая подкоманда ipsw idev - afc. Она предоставляет пару команд файловой системы, позволяющих нам манипулировать файлами и каталогами внутри /var/mobile/Media на устройстве.

Команда для просмотра списка файлов: ipsw idev afc ls OPTIONAL_FILE

ipsw_idev_afc_ls.png



Команда для вывода списка всех файлов: ipsw idev afc tree

ipsw_idev_afc_tree.png


Apps

Команда ipsw idev apps позволяет просмотреть установленные приложения, установить их из файла IPA или удалить.

Команда для вывода списка приложений: ipsw idev apps ls

ipsw_idev_apps_ls.png




Команда для деинсталляции приложения: ipsw idev apps uninstall BUNDLE_ID

ipsw_idev_apps_uninstall.png


Comp
ipsw idev comp позволяет просмотреть все сопряженные устройства, например AppleWatch.

Команда: ipsw idev comp

ipsw_idev_comp.png




Crash

Эта команда дает нам возможность работать с крашами. Мы можем составить список всех крашей, очистить их или загрузить.

Команда для вывода списка крашей: ipsw idev crash ls

ipsw_idev_crash_ls.png



Команда для скачивания списка крашей: ipsw idev crash pull NAME_OF_THE_CRASH

ipsw_idev_crash_pull.png


Diag

ipsw idev diag предоставляет нам несколько команд диагностики: получение данных о батарее, запрос IORegistry, выключение, перезагрузка, перевод устройства в спящий режим и так далее.

Команда для получения информации: ipsw idev diag info

ipsw_idev_diag_info.png




Мы также можем просмотреть I/ORegistry: динамическую базу данных, описывающую драйвера и имеющую древовидную структуру.

Команда для запроса ioreg: ipsw idev ioreg FLAGS

ipsw_idev_diag_ioreg.png


Fsyms

Еще одна полезная команда, которая позволяет нам загрузить линкер и dyld_shared_cache с устройства. Это может пригодиться, когда мы захотим, например, символизировать (расшифровать) краш.

Команда: ipsw idev fsyms

ipsw_idev_fsyms.png


List

C помощью команды ipsw idev list, мы можем вывести информацию о подключенном устройстве.

Команда: ipsw idev list

ipsw_idev_list.png


Pcap

Эта команда позволяет перехватывать трафик. При желании трафик можно отфильтровать по идентификатору процесса (Process ID).

команда: ipsw idev pcap OPTIONAL_FLAGS

ipsw_idev_pcap.png


Proxy

В ситуации, когда мы хотим поставить прокси на соединение с нашего localhost на порт подключенного USB-устройства, мы можем использовать эту команду.

Команда: ipsw idev proxy --lport LOCAL_PORT --rport REMOTE_PORT

ipsw_idev_proxy-2.png



Restore

Мы можем войти в режим восстановления и выйти из него с помощью команды ipsw idev restore

Команда для входа в режим восстановления: ipsw idev restore enter

Команда для выхода из режима восстановления: ipsw idev restore exit


Screen

Cделать снимок экрана устройства нам поможет команда ipsw idev screen

Команда: ipsw idev screen

ipsw_idev_screen.png



Syslog

Отслеживание syslog подключенного устройства возможно с помощью команды ipsw idev syslog.

Команда: ipsw idev syslog

ipsw_idev_syslog.png



Img4

ipsw img4 позволяет нам работать с файлами im4p. Например, если мы сделаем дамп iBoot из файла IPSW с помощью ipsw extract, то он будет в формате im4p.


ipsw_extract_iboot.png



На скрине выше видно, что извлеченные файлы имеют формат im4p. Эти файлы зашифрованы, и если мы хотим их расшифровать, то сначала нужно извлечь keybag'и, чтобы увидеть ключ.

Команда: ipsw img4 kbag PATH_TO_IM4P_FILE

ipsw_img4_kbag.png




Получив ключ, мы можем расшифровать файл im4p, но перед этим мы можем извлечь payload'ы с помощью ipsw img4 extract.

Команда: ipsw img4 extract PATH_TO_IM4P_FILE

ipsw_img4_extract.png



Мы видим, что теперь у нас есть новый файл (iBoot.d37.RELEASE.im4p.payload), который является фактическим содержимым файлов im4p.

Команда: ipsw img4 dec -i IV_FROM_KEYBAGS -k KEY_FROM_KEYBAGS PATH_TO_IM4P_FILE

ipsw_img4_dec.png



Kernel

Команды ipsw kernel позволяют нам работать с кэшами ядра. Kernel поддерживает просмотр отладочной информации DWARF, извлечение расширений ядра (kexts), просмотр системных вызовов, операции с песочницей и многое другое.

Ctfdump
ipsw kernel ctfdump позволяет просмотреть формат CTF (Compact ANSI-C Type Format), который похож на формат DWARF и содержит много полезной информации для реконструирования (Reverse Engineering). Важно: только KDK (Kernel Development Kit) содержит эту информацию.

Команда: ipsw ctfdump PATH_TO_KDK

ipsw_kernel_ctfdump.png


Dwarf
ipsw kernel dwarf позволяет просматривать отладочную информацию DWARF. Для этого нам необходимо предоставить тип для поиска или выполнить diff по типам/двум ядрам.

Команда: ipsw kernel dwarf --type TYPE_TO_LOOKUP PATH_TO_DSYM

ipsw_kernel_dwarf.png


Kexts

ipsw kernel kexts позволяет просматривать расширения ядра. Расширения ядра - модули, каждый из которых выполняет определенную задачу.

Команда: ipsw kernel kexts PATH_TO_KERNEL

ipsw_kernel_kexts.png


Extract

ipsw kernel extract позволяет извлечь одно или все расширения ядра.

Команда: ipsw kernel extract PATH_TO_KERNELCACHE KEXT

ipsw_kernel_extract.png


Sbopts

Мы можем просмотреть операции в песочнице с помощью ipsw kernel sbopts.

Команда: ipsw kernel sbopts PATH_TO_KERNEL


ipsw_kernel_sbopts.png

Syscall

Мы можем просмотреть список syscall'ов (системных вызовов - system calls) с помощью ipsw kernel syscall.

Команда: ipsw kernel syscall PATH_TO_KERNEL

ipsw_kernel_syscall.png



Ota

ipsw ota позволяет нам анализировать файлы OTA (Over-The-Air), которые представляют собой формат файлов для обновления устройства с помощью беспроводной сети.

Info

ipsw ota info возвращает основную информацию о файле OTA, такую как версия, kernelcache, CPU и т.д.

Команда: ipsw ota info PATH_TO_OTA_FILE

ipsw_ota_info.png



Extract

Основываясь на шаблоне имени файла, мы можем извлечь файлы с помощью команды ipsw ota extract.

Команда: ipsw ota extract PATH_TO_OTA PATTERN

ipsw_ota_extract.png


Ls

Мы можем просмотреть все файлы внутри файла OTA с помощью команды ipsw ota ls.

Команда: ipsw ota ls PATH_TO_OTA_FILE


ipsw_ota_ls.png



Patch

Если мы хотим работать с версиями iOS 16.x и выше или macOS 13.x и выше, нам нужно патчить cryptex. cryptex (CRYPTographically-sealed EXtension) - это средство развертывания обновлений/патчей без обновления всей системы, которое является основным для Rapid Security Response.

Команда: ipsw ota patch PATH_TO_OTA_FILE --output OUTPUT_DIRECTORY

ipsw_ota_patch.png


ipsw ota patch также может быть использован для OTA Rapid Security Response, который мы можем использовать для дифференциации. Чтобы применить патч RSR OTA, сначала нужно извлечь патчи предыдущей версии, а затем загрузить патч RSR OTA, выполнив команду ниже. Файлы RSR OTA можно загрузить с помощью команды ipsw download ota.

Команда для применения патча: ipsw ota patch --input PATH_TO_PREVIOUS_PATCHES/BUILD_DEVICE --output PATH_TO_PREVIOUS_PATCH OTA_RSR


Ssh

Команда ipsw ssh позволяет нам настроить debugserver и сбросить shsh-blob'ы. debugserver позволяет нам удаленно отлаживать приложения, а shsh-blob'ы позволяют нам восстановить iPhone до более низкой версии.

Debugserver

Чтобы настроить b на устройстве, нам сначала нужно настроить прокси между нами и мобильным устройством. Для этого мы можем использовать ipsw idev proxy, а затем ввести ipsw ssh debugserver.

Команда: ipsw ssh debugserver

ipsw_idev_proxy.png


ipsw_ssh_debugserver.png






Мы подошли к концу статьи, состоящей из двух частей, в которой мы рассмотрели множество команд IPSW, доказав его функциональность. IPSW - это действительно "швейцарский нож" для исследования безопасности iOS/MacOS, поскольку он предоставляет огромный спектр разных возможностей. Для изучения большинства из них потребуется немало времени. Кроме того, этот инструмент также хорош и полезен для тех, кто хочет узнать больше о внутреннем устройстве различных компонентов iOS/MacOS.


Переведено PUG для weaver
Спасибо за прочтение статьи! Надеюсь, она была для Вас полезной =)


Оригинал статьи Вы сможете найти по ссылке:
 
Последнее редактирование модератором:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх