24.03.2015

Выгрузка из памяти кучи IOS-приложения

image

Практически во время каждого пентеста специалисту приходится проводить анализ прямо во время работы приложения. В статье будет рассказано о выгрузке из памяти кучи IOS-приложения. Также будет представлен небольшой скрипт, используя который можно получить содержимое кучи определенного приложения, запущенного на устройстве.

Автор: Mark Beard

Практически во время каждого пентеста специалисту приходится проводить анализ прямо во время работы приложения. В статье будет рассказано о выгрузке из памяти кучи IOS-приложения. Также будет представлен небольшой скрипт, используя который можно получить содержимое кучи определенного приложения, запущенного на устройстве.

Вы можете загрузить скрипт из NetSPI Git Hub. По сути, скрипт представляет собой обертку для GDB и выгружает только те участки памяти, которые имеют «суб-участки» (sub-regions). В суб-участках обычно хранятся учетные записи, данные, используемые в интерфейсе или находящиеся в свойствах экземпляров классов. Техника выгрузки будет работать только в iOS 7 (и более ранних версиях) до тех пор, пока не выйдет рабочая версия GDB под iOS 8. Также вы не сможете использовать версию GDB из стандартных репозиториев в Cydia. Необходимо использовать исправленную версию, которую можно взять здесь http://cydia.radare.org (прямая ссылка на dep-пакет http://cydia.radare.org/debs/gdb_1708_iphoneos-arm.deb). Ниже показано несколько скриншотов процесса выгрузки и алгоритм работы скрипта.

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


Рисунок 1: Процесс авторизации в приложении

Затем сохраняем запущенное приложение на первом главном экране (в нашем случае это приложения для работы с Facebook).

Далее подключаемся к устройству через SSH, что позволит нам оставить приложение работающим на переднем плане.


Рисунок 2: Результат работы скрипта

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


Рисунок 3: Выгруженные участки памяти

После выгрузки памяти в файлах .dmp можно начать поиск учетных записей или любой другой ценной информации. Обычно можно найти ключи или пароли, используемые экземплярами класса, которые отвечают за шифрование или процесс авторизации. Лично я использую комбинацией инструментов, состоящей из команды «string» и шестнадцатеричного редактора «xxd» (или любым другим удобным для вас редактором).

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

В скрипте используются следующие команды для работы с GDB:

· gdb –pid=«<PID>»

· info mach-regions (поиск суб-участков)

· dump binary memory heap1.dmp <диапазон суб-участка, найденного предыдущей командой>