22.02.2014

Безопасность IOS-приложений (часть 15) – статический анализ IOS-приложений при помощи iNalyzer

image

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

Автор: Пратик Джианчандани (Prateek Gianchandani)

В двух предыдущих статьях мы рассматривали утилиты от компании Sogeti, при помощи которых подключали устройство, используя собственный ram-диск и bootrom-эксплоит, а затем собирали информацию с этого устройства. В этой статье мы рассмотрим утилиту iNalyzer, которую будем использовать для анализа IOS-приложений по методу черного ящика. iNalyzer позволяет просматривать информацию о классах, выполнять динамический анализ и много других интересных вещей. По сути, она автоматизирует процесс дешифровки приложения, выгружает информацию о классах и показывает эту информацию в наглядном виде. iNalyzer также может цепляться к запущенному процессу (как и Cycript) и вызывать методы во время выполнения приложения. iNalyzer разработана компанией AppSec Labs (более подробную информацию об этой утилите можно найти здесь). Также доступны и исходные тексты iNalyzer.

Перед использованием iNalyzer необходимо установить на компьютер приложения Graphviz и Doxygen, без которых iNalyzer работать не будет. Также во время тестов на машине с Mac OS X Mountain Lion 10.8.4 у меня возникли проблемы с последней версией Graphviz (приложение подвисало). Я решил эту проблему путем установки более ранней версии Graphviz (v 2.30.1). Более ранние версии Graphviz для Mac OS можно найти здесь.

Первым делом (после установки вышеупомянутых приложений) вам необходимо установить iNalyzer на джейлбрейковое устройство. Откройте Cydia, зайдите в раздел Manage и убедитесь в том, что добавлен источник http://appsec-labs.com/cydia/, как показано на рисунке ниже.

Рисунок 1: Список источников в Cydia

Теперь зайдите в раздел Search и введите в поисковую строку iNalyzer. В зависимости от версии вашей операционной системы, вам необходимо скачать соответствующую версию iNalyzer.

Рисунок 2: Список версий iNalyzer

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

Рисунок 3: Более подробная информация о соответствующей версии iNalyzer

Подключитесь к устройству через ssh и зайдите в директорию, где установлено приложение iNalyzer (оно установлено в папке /Applications, поскольку требует привилегий root). Если вы не знакомы с этой концепцией, обратитесь к предыдущим статьям этой серии.

Рисунок 4: Подключаемся к устройству через ssh и заходим в директорию с iNalyzer

Запускаем iNalyzer (для этого нужно ввести команду ./iNalyzer).

Рисунок 5: Вывод содержимого директории и запуск iNalyzer

После запуска если вы посмотрите на рабочий стол, то у иконки iNalyzer увидите число (см. рисунок ниже). Это число означает, что к приложению можно получить удаленный доступ через веб-интерфейс, подключившись к порту, номер которого показан на иконке. Если вы еще раз выполните команду ./iNalyzer, то iNalyzer прекратит свою работу (обратите на это особое внимание: команда ./iNalyzer и запускает и останавливает приложение).

Рисунок 6: Иконка iNalyzer с номером порта, подключившись к которому можно получить доступ к приложению

Теперь найдите ip-адрес вашего устройства и введите в браузере строку формата ip-адрес:порт. В моем случае номер порта – 5544, а ip-адрес устройства – 10.0.1.23. Таким образом, в браузере вводим строку http://10.0.1.23:5544/. После этого появится веб-интерфейс, показанный на рисунке ниже. Здесь вы можете выбрать приложение, которое iNalyzer упакует в zip-архив. Затем загрузите архив для анализа в вашей системе.

Рисунок 7: Веб-интерфейс iNalyzer

Однако во время всех этих манипуляций у меня возникли некоторые трудности, и мы рассмотрим альтернативный способ загрузки упакованного приложения в нашу систему. Для начала убедитесь в том, что iNalyzer работает. Зайдите в директорию iNalyzer и запустите файл iNalyzer5 без аргументов.

Рисунок 8: Запуск iNalyzer5

На рисунке выше показан список приложений, доступных для анализа. Я выбрал приложение Defcon.

Рисунок 9: Процедура анализа приложения Defcon

На рисунке выше видно, что iNalyzer начал анализировать приложение (дешифровал его, получил информацию о классах и другие вещи). Как видно на рисунке ниже, после окончания все работ iNalyzer создал ipa-файл и сохранил его в директории, отмеченной красным цветом.

Рисунок 10: Окончание анализа и сохранение ipa-файла в соответствующей директории (отмечена красным цветом)

Теперь загрузим ipa-файл в нашу систему при помощи sftp.

Рисунок 11: Подключение и загрузка ipa-файла при помощи sftp

После загрузки ipa-файла, меняем его расширение на zip и распаковываем архив.

Рисунок 12: Содержимое распакованного архива

Теперь в терминале зайдем в папку Payload–>Doxygen.

Рисунок 13: Содержимое папки Doxygen

В папке Doxygen находится shell-скрипт с именем doxMe.sh. Если вы заглянете внутрь скрипта, то увидите, что там прописана команда для запуска Doxygen. Doxygen также запускает приложение Graphviz для генерирования графов, а результаты работы хранятся в папке с именем html. По сути, iNalyzer уже сохранил всю информацию о классах в папке с именем Reversing Files, а приложения Doxygen и Graphviz используются для отображения этой информации в наглядном виде. Shell-скрипт также открывает файл index.html, который находится внутри папки html.

Рисунок 14: Содержимое скрипта doxMe.sh

Запускаем скрипт doxMe.sh.

Рисунок 15: Запуск скрипта doxMe.sh и начало работы Doxygen

Рисунок 16: Окончание работы скрипта

Как только работа скрипта завершена, iNalyzer автоматически откроет файл index.html, сохраненный внутри папки html. Я использую браузер crome, хотя разработчик рекомендовал мне использовать firefox для выполнения динамического анализа, поскольку в других браузерах могут возникать ошибки. Как видно из рисунка ниже, на первой странице показан анализ строк приложения (на странице показаны SQL и URL-строки).

Рисунок 17: Анализ строк приложения

Вы также можете увидеть все классы контроллеров представлений, используемых в приложении.

Рисунок 18: Перечень всех классов контроллеров представлений, используемых в приложении

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

Рисунок 19: Перечень методов и свойств контроллера представления

Вы также можете просмотреть содержимое файла Info.plist.

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

Во вкладке Classes в разделе Class Index находится список всех классов, используемых в приложении. Некоторые из этих классов созданы компанией Apple, другие – разработчиком приложения.

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

Если вы зайдете во вкладку Class Hierarchy, то увидите информацию о классах и отношениях в графическом формате, что позволяет нам значительно ускорить изучение логики работы приложения. Графы генерируются приложением Graphviz.

Рисунок 22: Информация о классах и отношениях в графическом формате

Если вы зайдете во вкладку Files, то увидите все файлы интерфейсов, сгенерированные iNalyzer.

Рисунок 23: Перечень файлов интерфейсов

Заключение

В этой статье мы рассматривали статический анализ IOS-приложений, используя iNalyzer, и убедились в том, как просто и быстро выполняется вся эта работа. В следующей статье мы рассмотрим динамический анализ IOS-приложения при помощи iNalyzer.

Ссылки

или введите имя

CAPTCHA