Данное руководство является введением для тех, кто желает разобраться с тестированием безопасности 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) – большая тема, которая относится к манипуляциям во время выполнения приложения. Это тема отдельного поста.