02.04.2013

Исследование iOS-приложений – настройка инструментария и демонстрация базовых методов

image

Данное руководство является введением для тех, кто желает разобраться с тестированием безопасности iOS-приложений.

Автор: Tom Neaves

Данное руководство является введением для тех, кто желает разобраться с тестированием безопасности iOS-приложений. Эта статья ни в коем случае не является всеобъемлющей, здесь я рассказываю лишь о базовых техниках. Граница между исследованием веб и мобильных приложений весьма размыта, поскольку и там и там, в основном, используется архитектура «клиент/сервер» и большинство приложений (если не все) используют протокол HTTP (и в некоторых случаях HTTPS). Вследствие этого, при поиске многих уязвимостей, потребуются светлые мозги специалиста по безопасности веб-приложений в комплекте с Burp proxy. Впрочем, у нас, в SpiderLabs, их много :).

Окей, начнем погружаться в тему.

Ингредиенты

Джейлбрейковый iPhone/iPad (с Cydia) – 1 штука.

Macbook Pro (для создания беспроводной сети) или беспроводная сеть – 1 штука.

Burp Proxy (или схожая утилита) – 1 штука.

Самоподписанный сертификат (для исследования HTTPS-трафика) – 1 штука.

Подготовка iPhone/iPad

Cydia должна быть уже установлена на джейлбрейковом устройстве. Откройте Cydia, выберите вкладку Sources и добавьте новый источник: "http://cydia.hackulo.us".


 

Установите OpenSSH, Installous 4 и Clutch.

Установка исследуемого приложения

Если приложение есть на iTunes тогда все просто. Находите его, скачиваете и синхронизируете устройство. Иначе нужно скачать .IPA файл, дважды кликнуть по нему (произойдет загрузка на iTunes), а затем, как и в предыдущем случае, синхронизировать устройство.

Предупреждение: iTunes может принудительно удалить данные в случае синхронизации с компьютером. Если такое происходит, есть еще один способ установки приложений без синхронизации. Не кликайте на файл .ipa и не открывайте iTunes. Вместо этого скопируйте через SSH файл .IPA в папку /User/Documents/Installous/Downloads/, а затем установите при помощи Installous.

Если вместо файла .IPA у вас пакет .XCArchive, не переживайте, еще не потеряно. Вначале вам нужно установить корректный путь Xcode (полагаю, что у вас запущена OS X), иначе возникнет следующая ошибка:

Error: No developer directory found at /Developer. Run /usr/bin/xcode-select to update the developer directory path.

Для разрешения этой проблемы выполните следующую команду:

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

Теперь щелкните правой кнопкой мыши на файле .XCArchive и выберите пункт «Show Package Contents» и запишите путь к .app файлу (он вам понадобится в следующем шаге).

Далее мы будем использовать утилиту xcrun (в нашем случае она сродни волшебной палочке) для создания .IPA файла/пакета. Используйте следующую команду:

/usr/bin/xcrun -sdk iphoneos PackageApplication "/absolute/path/to/MyApp.xcarchive/Products/Applications/MyApp.app" -o "/absolute/path/to/MyApp.ipa"

Примечание: путь нужно заменить на тот, который вы записали в предыдущем шаге (когда просматривали файл .XCArchive). Не забудьте указать параметр -sdk iphoneos даже если у вас iPad.

Теперь скопируйте файл .IPA (опять же через SSH) на iPad и используйте Installous (внутри Cydia) для установки приложения.

Местонахождение приложения

Подключитесь к устройству через SSH. Приложение будет установлено в папку /var/mobile/Applications/<ID>/.

Подсказка: При поиске приложения можно использовать дату.

Подключение к беспроводной сети

Подключите устройство к беспроводной сети – будь то сеть на Macbook Pro «Internet Sharing» или настоящая беспроводная сеть. Убедитесь, что Макбук, который будет перехватывать запросы/ответы (через Burp), находится той же сети.

Установка самоподписанного сертификата

На Макбуке мы экспортируем сертификат Burp (через Firefox). Установите Burp как прокси на 8080 порту TCP (прослушивающим ВСЕ интерфейсы). Откройте в Firefox любой сайт, который поддерживает соединение по протоколу HTTPS. На экране появится исключение, где вы увидите иерархию сертификатов. Выберите сертификат «PortSwigger CA» и экспортируйте его в формат .CER. Далее отправьте письмо с этим файлом, откройте почтовое сообщение и установите сертификат в мобильном устройстве.

Важно: Убедитесь в том, что вы выбрали строку «PortSwigger CA», а не случайный сайт (в нашем случае twitter.com).

Настройка прокси-сервера

Убедитесь, что Burp слушает ВСЕ интерфейсы, или как минимум те, которые доступны через сеть. В мобильном устройстве зайдите во вкладку Network, Wi-Fi, кликните на синюю стрелку в правой части экрана, прокрутите до секции «HTTP Proxy» и выберите вкладку Manual. Установите параметры Макбука, на котором запущен Burp (IP-адрес и TCP-порт 8080).


 

Тестирование прокси-сервера

Откройте браузер Safari (на устройстве) и проверьте, что Burp перехватывает HTTPS-трафик. Если все нормально, открыв iOS-приложение, вы сможете наблюдать передаваемый трафик.


 

Дешифровка приложений iTunes

Если вы загрузили клиентское приложение из iTunes, перед началом исследований (просмотр строк и прочее) вам необходимо расшифровать программу. Для решения этой задачи вы можете использовать gdb или Clutch (ранее установленное через Cydia). Clutch сохраняет взломанные приложения в папке /var/root/Documents/Cracked/. Скопируйте файл .IPA на Макбук, чтобы проанализировать его.

Поиск строк в бинарном файле

Распакуйте файл .IPA, сформированный в предыдущем шаге. Зайдите в директорию с распакованным архивом (например, /BAH.app/<BAH>) и выполните команду: strings BAH > stringsdump.txt. Теперь можно изучить файл stringsdump.txt на предмет чего-нибудь интересного. Подсказка: grep “password”, “secret”, “http://”, “encrypt” и так далее.


 

Просмотр классов, объектов и библиотек

Для просмотра информации о классах можно использовать утилиту class-dump: ./class-dump binary или otool: ./otool -ov binary. Эта информация (переменные, имена классов и т. д.) будет полезна для манипуляций во время выполнения приложения.


 

Файлы приложения

Приложения устанавливаются в папку /var/mobile/Applications/<ID>/. Внутри <APP>.app находятся ресурсные файлы (включая бинарные). Также здесь можно найти закешированные данные, базы данных и т. д. Типичная структура директории, в которую установлено приложение:

/var/mobile/Applications/<ID>/App.app/

/var/mobile/Applications/<ID>/Library/Caches/

/var/mobile/Applications/<ID>/Library/Cookies/

/var/mobile/Applications/<ID>/Library/Preferences/

/var/mobile/Applications/<ID>/tmp/

/var/mobile/Applications/<ID>/Documents/

various .plist files

various .sqlite files

Keychain

Keychain также является полезным ресурсом для исследования данных, относящихся к приложению: /var/Keychains/keychain-2.db. Используйте утилиту Keychain Dumper (она находится по адресу https://github.com/ptoomey3/Keychain-Dumper/blob/master/keychain_dumper) для выгрузки всех элементов (используя файл entitlements.xml с описанием условий отбора (wildcard)). Вы можете скомпилировать эту утилиту из исходных текстов (если не доверяете бинарному файлу).

В этой статье я описал лишь базовые методы исследования iOS-приложений. Применение других техник уже зависит от специфики программы, ее сложности и т. д. Огромную работу по тестированию можно сделать через Burp, поскольку во многих случаях происходит взаимодействие с веб-сервисами посредством протоколов HTTP(S) (JSON) и тестируются уязвимости из OWASP Top 10. Исследование работы других механизмов: переключение в фоновый режим (снапшоты), защита файлов, использование буфера хранения, управление вводом/выводом (UIWebView) – большая тема, которая относится к манипуляциям во время выполнения приложения. Это тема отдельного поста. 

comments powered by Disqus