Безопасность IOS-приложений (часть 9) – анализ приложений при помощи Snoop-it

Безопасность IOS-приложений (часть 9) – анализ приложений при помощи Snoop-it

В предыдущих статьях мы рассматривали выгрузку информации о классах IOS-приложений при помощи class-dump-z, подцеплялись к запущенным процессам при помощи Cycript, выполняли манипуляции с кодом (в том числе method swizzling) во время выполнения приложения, анализировали поток выполнения кода, используя gdb, и тому подобные вещи.

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

В предыдущих статьях мы рассматривали выгрузку информации о классах IOS-приложений при помощи class-dump-z, подцеплялись к запущенным процессам при помощи Cycript, выполняли манипуляции с кодом (в том числе method swizzling) во время выполнения приложения, анализировали поток выполнения кода, используя gdb, и тому подобные вещи. Однако все вышеупомянутые задачи выполнялись разрозненно, посредством различных утилит, и было бы неплохо иметь в своем арсенале одно приложение, позволяющее выполнять все основные задачи по анализу IOS-приложений.

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

Ниже приводится список всех возможностей Snoop-it, взятый с официальной страницы.

Мониторинг

  • Мониторинг доступа к файловой системе (отображение классов защиты данных)
  • Мониторинг доступа к keychain
  • Мониторинг HTTP(S) соединений (через NSURLConnection)
  • Мониторинг доступа к критичному API (адресная книга, фотографии и т. д.)
  • Вывод отладочной информации (NSLog)
  • Трассировка вызываемых методов и системных вызовов (objc_msgSend)

Анализ и манипуляции с кодом

  • Подделка аппаратных признаков (UDID, Wireless Mac и т. д.)
  • Подделка местонахождения и GPS-данных
  • Исследование и принудительное отображение доступного контроллера представления
  • Отображение списка нестандартных URL-схем
  • Отображение списка классов, объектов и методов Objective-C
  • Вызов произвольных методов во время выполнения приложения
  • Обход стандартных механизмов детектирования джейлбрейка

Другие возможности

  • Простая установка и настройка
  • Интуитивно понятный графический пользовательский интерфейс
  • Множество фильтров и параметров поиска
  • Детальное описание интерфейса XML-RPC

Установка Snoop-it

Чтобы установить Snoop-it, вам необходимо скачать dep-пакет, а затем загрузить его на устройство при помощи sftp. После этого используйте команду dpkg -i [packageName] для того, чтобы установить Snoop-it на устройство. Как только Snoop-it установлен, перезагрузите или сделайте респринг вашего устройства.

Рисунок 1: Процедура установки Snoop-it

После перезагрузки устройства вы увидите иконку Snoop-it. Ниже показано изображение пользовательского интерфейса Snoop-it.

Рисунок 2: Пользовательский интерфейс Snoop-it

Откройте вкладку Settings и сконфигурируйте приложение по вашему усмотрению. Я установил номер порта 12345 и заблокировал аутентификацию. Хотя аутентификация будет полезна в тех случаях, если вы проводите тестирование в сети с множеством пользователей или в сети, где обитают всякие шалуны :).

Рисунок 3: Страница с настройками Snoop-it

Теперь зайдите в веб-интерфейс Snoop-it, используя адрес из страницы с настройками (в моем случае это адрес http://10.0.1.79:12345).

Рисунок 4: Веб-интерфейс Snoop-it

Если вы увидели веб-интерфейс с текстом, показанным на Рисунке 4, то вам необходимо вернуться в Snoop-it, выбрать приложение для анализа, а затем обновить веб-интерфейс. Я выбрал приложение MethodSwizzlingDemo, то же самое приложение, которое мы анализировали в предыдущей статье.

Рисунок 5: Выбор приложения для анализа в Snoop-it

Теперь запустите приложение и, убедившись в том, что оно работает на переднем плане, обновите веб-интерфейс Snoop-it.

Рисунок 6: Обновленный веб-интерфейс Snoop-it

Теперь у вас есть все возможности для анализа безопасности приложения.

Анализ приложения

С левой стороны в разделе Analysis выберите пункт Objective-C classes. С правой стороны появится информация обо всех классах и именах свойств и методов.

Рисунок 7: Информация о классах, свойства и методах приложения MethodSwizzlingDemo

Элементы дерева, отмеченные зеленым кружком, - классы, у которых уже созданы экземпляры. Например, если вы наведете мышью на класс View Controller, то увидите, что у него есть текущий экземпляр.

Рисунок 8: Информация об экземплярах класса ViewController

Схожим образом можно посмотреть свойства класса AppDelegate.

Рисунок 9: Информация о свойства класса AppDelegate

Но вернемся обратно к классу ViewController. При помощи Snoop-it мы можем запустить любой метод. Просто отметьте определенный метод, кликните на Setup and Invoke в правом верхнем углу. Из предыдущей статьи мы уже знаем, что такая техника позволяет обходить проверку во время аутентификации.

Рисунок 10: Выбора метода для запуска в Snoop-it

Перед запуском выберите необходимый экземпляр класса (на данный момент экземпляр только одни, но их может быть несколько) и кликните на Invoke Method.

Рисунок 11: Выбор экземпляра и запуск метода

Как видно из рисунка ниже, наш метод успешно запустился, и появилась страница администратора.

Рисунок 12: Страница администратора

Еще одна прекрасная возможность Snoop-it – возможность переключения на любой контроллер представления. К примеру, в самой левой части веб-интерфейса в разделе Analysis, выберите View Controller, затем выберите класс ViewController (посередине веб-интерфейса), а затем кликните на кнопку Display Controller. После этого произойдет переключение на выбранный контроллер представления. Кнопка Close/Hide View Controller позволяет скрыть текущий контроллер представления.

Рисунок 13: Отображение выбранного контроллера представления

Затем вы можете нажать на кнопку Reset display, чтобы вернуть все назад. Как вы уже могли догадаться, эта возможность позволяет нам соотнести текущий контроллер представления и его внешний вид в приложении. Мне очень нравится эта возможность в Snoop-it.

Манипуляции во время выполнения приложения

Snoop-it предоставляет много возможностей для манипуляций во время выполнения приложения. К примеру, вы можете изменять аппаратные признаки (Mac-адрес, UDID, номер модели устройства и т. д.).

Рисунок 14: Возможности Snoop-it по изменению аппаратных признаков устройства

Вы также можете подделать ваше местонахождение. Это может быть особенно полезно в приложениях, использующих техники GeoEncryption для защиты данных.

Рисунок 15: Установка фиктивного местоположения

Еще вы можете трассировать методы и системные вызовы во время выполнения кода. Пожалуйста, обратите внимание, что вам необходимо кликать на кнопку Refresh, находящейся в верхней части интерфейса, чтобы увидеть обновленную информацию о только что выполненных вызовах. Однако возможно в финальной версии авторы приложения сделают так, чтобы кликать на кнопку Refresh каждый раз не было необходимости. Неискушенных пользователей может смутить столь большой объем информации по вызовам методов, однако для опытных разработчиков (к которым я себя тоже причисляю) все предельно понятно.

Рисунок 16: Информация о вызываемых методах и системных вызовах

Мониторинг работы приложения

Snoop-it также позволяет получить информацию о файлах и директориях, с которыми работает приложение. Для этого в разделе Monitoring (в левой части экрана) выберите пункт Filesystem. Эта возможность особенно полезна, когда необходимо выяснить файл базы данных, используемый приложением. К тому же, вы можете загрузить эти файлы, дважды кликнув на них, а затем провести анализ на своей машине.

Рисунок 17: Информация о файлах и директориях, с которыми работает приложение

Вы также можете получить информацию о критически важном API, которое использует приложение (поиск в адресной книге, доступ к камере или поиск UDID). Ниже показана информация о критически важном API, которое использует предустановленное приложение App Store.

Рисунок 18: Информация об использовании критически важного API

Еще можно увидеть все данные, которые приложение хранит в keychain и HTTP запросы, посылаемые при помощи NSURLConnection. Все это можно проделать, если воспользоваться соответствующими возможностями из раздела Monitoring. Далее, в отдельной статье, мы рассмотрим способы выгрузки информации из keychain.

Кроме того, Snoop-it предоставляет открытые API-функции, при помощи которых вы можете автоматизировать тесты или создать свой графический интерфейс пользователя. Более подробно с этим можно ознакомиться в документации на XML-RPC.

Заключение

В этой статье мы узнали о новой и очень полезной утилите под названием Snoop-it, позволяющей выполнять динамический анализ и производить оценку безопасности IOS-приложений по методу черного ящика. К тому же, у Snoop-it интуитивно понятный интерфейс, который заметно упрощает анализ. На момент написания статьи финальной версии Snoop-it еще не было, однако вы можете написать разработчикам и получить бета версию, как это сделал я. Я бы хотел, чтобы в Snoop-it была добавлена возможность выполнять Method Swizzling. Я глубоко убежден, что это очень полезная утилита для всех, кто интересуется анализом безопасности IOS-приложений, и со временем функционал этого инструмента будет только расширяться и улучшаться :).

Большой брат следит за вами, но мы знаем, как остановить его

Подпишитесь на наш канал!