05.06.2015

Безопасность IOS-приложений (часть 32) – Автоматизация задач при помощи iRET

image

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

Автор: Prateek Gianchandani

Существует такой класс задач, которые приходится выполнять во время каждого аудита iOS-приложений. Например, поиск информации о классах, проверку на предмет хранения важных сведений в plist-файла, анализ содержимого файлов с базами данных и т. д. Подобные задачи часто отнимают время и, следовательно, не имеет особого смысла каждый раз выполнять однотипные действия в ручном режиме. Инструменты наподобие Snoop-it и iNalyzer в чем-то облегчают нашу работу. В этой статье мы поговорим о новой утилите iRET (iOS Reverse Engineering Toolkit), автоматизирующей большинство задача во время пентеста iOS-приложения.

Инструмент разрабатывается и поддерживается @S3Jensen.

Со слов автора iRET обладает следующим функционалом:

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

Кроме того, обратите внимание, что в iRET используется статический анализ, вместо динамического.

Вначале скачайте и распакуйте утилиту на своем устройстве.


Рисунок 1: Скачиваем и распаковываем iRET

Внутри архива находится .deb файл, который можно установить при помощи команды dpkg. Кроме того, у вас должен быть установлен python, иначе iRET работать не будет.


Рисунок 2: Установка пакета iRET.deb

Затем сделайте респринг или перезагрузите устройство (я перезагружал), после чего появится новая иконка с именем iRET. Запустите iRET, кликнув на иконку. Как видно на рисунке ниже, мы должны запустить сервер.


Рисунок 3: Кнопка для запуска сервера

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


Рисунок 4: Адрес для подключения к серверу

После подключения появится рабочий интерфейс (при первоначальном подключении к серверу потребуется больше времени, чем обычно).


Рисунок 5: Интерфейс iRET

С левой стороны указаны инструменты, необходимые для корректной работы iRET (иначе будут доступны не все функции). В моем случае практически все утилиты присутствуют на устройстве за исключением file и dumpencrypted. Оставшиеся приложения устанавливаются через Cydia (пожалуй, кроме утилиты dumpencrypted, установка которой чуть более сложна, чем обычно).

Чтобы установить dumpencrypted, скачайте файлы на компьютер, скомпилируйте (при помощи команды make) и загрузите получившийся .dylib файл на устройство (я просто переместил файл внутрь папки /Library при помощи iExplorer).


Рисунок 6: Компиляция dumpencrypted

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


Рисунок 7: iRET полностью готов к работе

С правой стороны выбираем приложение для анализа. Я выбрал Damn Vulnerable iOS App (DVIA).


Рисунок 8: Выбор приложения для анализа

После того как приложение выбрано, iRET отобразит первичные результаты анализа во вкладке Binary Analysis. Бинарный файл приложения анализируется при помощи утилиты otool. Выводится информация относительно того, доступен ли PIE (position-independent executable; позиционно-независимый исполняемый файл), SSP (stack smashing protection; защита от переполнения стека) или ARC (automatic referencing counting; автоматический подсчет ссылок).


Рисунок 9: Первичная информация о бинарном файле, полученная при помощи утилиты otool

Во вкладке Keychain Analysis отображается информация (при помощи утилиты keychain_dumper) о том, что хранит приложение в keychain. Обычно я запускаю keychain_dumper из командной строки, но здесь все происходит в автоматическом режиме (на момент написания статьи, эта вкладка работала некорректно).

Во вкладке Database Analysis отображается вся информация из файлов с расширением .db или .sqlite, которые использует приложение. iRET автоматически ищет эти файлы в песочнице.


Рисунок 10: Содержимое всех баз данных, используемых приложением

Во вкладке Log Viewer отображается содержимое из всех доступных файлов с расширением .log и .txt. В моем случае iRET не смог найти даже файл системного лога.


Рисунок 11: Содержимое системного лога отсутствует

Во вкладке Plist Viewer отображается информация из всех plist-файлов из песочницы приложения. Функция позволяет быстро проанализировать как содержимое NSUserDEfaults (основной plist-файл, где, например, хранится информация о схеме url), так и любого другого plist-файла.


Рисунок 12: Перечень plist-файлов, доступных для анализа


Рисунок 13: Содержимое файла userinfo.plist

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


Рисунок 14: Перечень всех заголовочных файлов

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


Рисунок 15: Содержимое заголовочного файла

Вкладка Theos позволяет в течение нескольких минут создать и собрать твик для пакета theos под конкретное приложение. После того как вы введете информацию для твика, вы сможете отредактировать файлы Tweak.xm и Makefile, собрать твик и начать его использовать. Обратите внимание, что для сборки и использования твика необходимо установить как минимум один SDK в папку /var/theos/sdks на устройстве. Вы можете найти SDK, установленный на Маке (если установлен Xcode), в папке /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk.

В одной из следующих статей будет рассмотрено написание твиков для Theos.


Рисунок 16: Создание нового твика

Во вкладке Screenshot отображаются снимки, сделанные средствами iOS, когда приложение переходит в фоновый режим. Снимки хранятся в песочнице, не шифруются и могут содержать конфиденциальную информацию.


Рисунок 17: Закешированный снимок приложения

Заключение

iRET – очень удобная и полезная утилита для аудита iOS-приложений, которая поможет вам сэкономить массу времени. Этот инструмент выпущен недавно и немного сыроват, но я уверен, что в недалеком будущем iRET займет достойное место в арсенале каждого пентестера.

Вы можете ознакомиться со статьей автора, касающейся iRET.