К Digital Security часто обращаются за аудитом iOS-приложений, поэтому мы решили сделать цикл статей про наш подход в этой области. И в первой из них расскажем о выборе и подготовке устройства для проведения тестирования приложений.
Какие вопросы рассмотрим:
- Выбор устройства: эмулятор VS симулятор VS реальный девайс, на что обращать внимание при выборе;
- Jailbreak: зачем нужен, разновидности, как сделать Jailbreak-устройство;
- Арсенал пентестера: что мы устанавливаем, и зачем это нужно.
Выбираем устройство
Эмуляторы | Симуляторы | Реальное устройство.
В чем разница, и что лучше подходит для наших целей
Начнем с определений эмулятора и симулятора и разберемся, чем они отличаются.
Эмулятор — ПО, имитирующее поведение iOS на вашем ПК именно с аппаратной точки зрения. То есть эмулируемая система будет вести себя точно так же, как и оригинальная.
Симулятор — ПО, имитирующее поведение iOS на вашем ПК без привязки к аппаратной составляющей. Проще говоря, визуально мы будем наблюдать то же поведение, что и на iOS, но под капотом там будут происходить совсем несвойственные iOS вещи.
Отталкиваясь от этих определений, делаем вывод, что симуляторы iOS нам не подходят. Из-за отличия во внутренних процессах мы не сможем, во-первых, сделать Jailbreak и, во-вторых, корректно протестировать интересующие нас приложения.
Выбор же эмуляторов ограничен лишь одним предложением от Corellium. Его приятной особенностью является то, что в нем можно эмулировать как устройство с Jailbreak'ом, так и без. Однако, у него есть ряд недостатков, свойственных всем эмуляторам, а именно отсутствие доступа к:
- Звонкам
- SMS
- NFC
- Bluetooth
- GPS
И самым главным минусом является то, что это SaaS-решение, доступное только по персональной лицензии, стоимость которой за пару месяцев сопоставима с ценой реального б/у устройства.
Руководствуясь всеми вышеперечисленными аргументами, приходим к выводу, что оптимальным вариантом будет физическое устройство. Нам остается лишь понять, на какие моменты обращать внимание при выборе.
Критерии выбора реального устройства
В первую очередь, нам нужно устройство, на котором можно будет сделать Jailbreak. Тут я немного забегу вперед и скажу, что для этой процедуры мы будем использовать checkra1n. Для Jailbreak'а с помощью checkra1n подходят следующие устройства:
При этом надо иметь в виду, что:
- Устройства на процессорах A11 имеют ограниченную поддержку: во время использования такого устройства с Jailbreak'ом придется отказаться от использования Touch/Face ID, в противном случае Jailbreak работать не будет
- Каждый iPhone актуален для наших целей в течение примерно 6 лет с момента выпуска модели (поддерживает новые версии iOS, не глючит, поддерживает заряд на приемлемом уровне)
- checkra1n пока что не поддерживает версии iOS 15+, пруф — pangu8.com/ios-15-1-jailbreak/#checkrain
Отталкиваясь от этих вводных, идем в онлайн/оффлайн магазин за б/у устройством.
Jailbreak
Зачем нужен Jailbreak
Jailbreak — операция, которая позволяет открыть доступ к файловой системе устройства и получить root-права. Осуществление Jailbreak'а основано на эксплуатации уязвимостей, найденных в iOS. Больше об используемых уязвимостях можно узнать тут.
Возможности, которые открывает Jailbreak, помимо доступа к ФС:
- установка сторонних программ и твиков не из App Store
- дополнительная настройка iOS под себя (оптимизация, работа с фоновыми процессами и т.д.)
- кастомизация интерфейса
- установка крякнутых приложений
В контексте пентеста нас интересует прежде всего возможность установки сторонних приложений и полный доступ к ФС.
Разновидности Jailbreak
Всего есть четыре вида Jailbreak'ов:
Однако, наиболее актуальными на данный момент являются полуотвязанный и полупривязанный Jailbreak'и.
checkra1n является полупривязанным Jailbreak'ом, его можно установить и с macOS, и с Windows, и с Linux. Кроме того, checkra1n поддерживает устройства на iOS до 14.8 включительно, в отличие от unc0ver (iOS 11.0 — 14.3) — поэтому выбор пал на него.
Делаем Jailbreak с помощью checkra1n
Если по каким-то причинам вы хотите сделать Jailbreak другим способом, то в спойлере есть небольшая инструкция по подбору тулзы.
Как подобрать тулзу для Jailbreak'а
Например, подберем альтернативный способ сделать Jailbreak для iPhone 6s с iOS 14.7.1.
- Идем на этот сайт
- Выбираем тип устройства, модель, версию iOS и кликаем «Find Jailbreak for me»:
- Получаем тул, с помощью которого можно сделать Jailbreak:
Мы рассмотрим процесс установки с macOS. Если у ваc под рукой ноутбук с Windows, то для установки checkra1n нужно будет создать загрузочную флешку (подробная инструкция находится тут). Если же у вас Linux, то процесс будет похожим (подробную инструкцию можно найти здесь).
В качестве устройства используется чистый iPhone 8 с iOS 14.6.
- Скачиваем checkra1n с официального сайта и устанавливаем:
- Соединяем iPhone и Mac через USB, запускаем Checkra1n, видим, что наш iPhone распознается, но не поддерживается для Jailbreak'а:
- Чтобы решить эту проблему, идем в Options и устанавливаем галочки для пунктов «Allow untested iOS/iPadOS/tvOS versions» и «Skip A11 BPR check»
- После этого Checkra1n позволит сделать Jailbreak, жмем Start, в окошке с предупреждением жмем OK:
- Получаем информацию о переводе в DFU для Jailbreak'а, жмем Next
- Видим инструкцию действий для перевода iPhone в DFU mode: Start → Удерживаем одновременно кнопку блокировки и уменьшения громкости (примерно 4 секунды) → Отпускаем кнопку блокировки и оставляем зажатой только кнопку уменьшения громкости (примерно 10 секунд)
На iPhone более ранних моделей (iPhone 6 — iPhone 7 Plus, где кнопка Home не сенсорная), комбинация клавиш будет другая, об этом написано в инструкции.
- Если все сделано правильно, то на экране iPhone мы увидим, как бутится Checkra1n, а на экране компьютера — процесс установки
- После завершения установки нажимаем Done, на экране запущенного айфона видим установленные Checkra1n и пакетный менеджер Cydia
* Иногда пакетный менеджер Cydia не устанавливается автоматически. Если иконка не появилась в течение 1-2 минут после Jailbreak'a, но значок checkra1n есть, нужно тапнуть по иконке checkra1n и оттуда установить Cydia вручную:
Итак, теперь у нас есть устройство с Jailbreak'ом, и самое время перейти к установке ПО, которое понадобится нам во время пентеста.
Арсенал пентестера
SSH
Зачем нужен: для возможности подключения к нашему iPhone по SSH.
Как установить:
Вариант №1:
- Устанавливаем через Cydia пакет «OpenSSH»
→ - Проверяем, что все работает: смотрим в Настройках локальный IP-адрес нашего устройства и пробуем подключиться по ssh со стандартными логином и паролем (root:alpine)*
Вариант №2:
- Устанавливаем через Cydia пакет «SSH Toggle and Port» → после установки перезагружаем SpringBoard.
→ - Теперь в Настройках iPhone в разделе с приложениями можно увидеть установленный твик и зайти в него для настройки и активации SSH.
- После настройки и активации проверяем работоспособность так же, как и в варианте №1.
* В обоих случаях стоит помнить о том, что сохранение дефолтных данных для входа далеко не лучшая практика и стоит поменять пароль для пользователя root.
Frida
Зачем нужен: динамический анализ тестируемого приложения, дает возможность инжектиться в процессы.
Как установить:
- Заходим в Cydia → Источники → Правка → Добавить → Вводим адрес репозитория Frida (https://build.frida.re)
→ →
→
- Если установка прошла успешно, то в доступных репозиториях увидим репозиторий Frida.
- Переходим в Поиск → набираем Frida → выбираем пакет (просто Frida, не 32-bit devices или A12+ devices) и устанавливаем.
→ →
- Проверяем, что все работает: на компьютере (удобнее всего создать отдельное виртуальное окружение для работы с iOS-устройствами, например, через mkvirtualenv) устанавливаем через pip следующие пакеты: frida, frida-tools. ВАЖНО: убеждаемся, что версия Frida-пакета совпадает с версией Frida на iPhone, в данном примере это версия 15.0.15. Если версии разные, то Frida работать не будет, также стоит иметь в виду, что обновляется Frida довольно часто.
- Соединяем iPhone и компьютер через Lightning, в консоли выполняем команду frida-ps -U, она выводит список запущенных процессов на устройстве. Если вывод примерно похож на тот, что показан ниже, Frida успешно установлена и готова к дальнейшей работе. В отличие от работы с Android-устройствами, на iOS Frida-server будет всегда запущен по умолчанию, включать руками его не нужно.
Grapefruit
Зачем нужен: осуществляет сбор базовой информации о тестируемом приложении, устанавливается на компьютер. Помогает составить Attack Surface приложения (базовая информация, диплинки, Environments и т.д.) в удобном GUI-формате.
Как установить:
- Репозиторий утилиты: github.com/ChiChou/grapefruit
- Для работы Grapefruit необходима установленная на iOS-устройстве Frida.
- Устанавливаем Grapefruit через npm: npm install -g igf
- Запускаем из командной строки: igf → переходим в браузер на localhost:31337 → выбираем тестируемое приложение
Liberty Lite
Зачем нужен: блокирует механизм обнаружения Jailbreak.
Как установить:
- По аналогии с репозиторием Frida добавляем репозиторий: ryleyangus.com/repo
→
- Находим пакет Liberty Lite → Изменить → Установить → перезапускаем SpringBoard
- Проверяем, что все работает: идем в Настройки → Liberty (будет в самом низу) → видим то же, что и на картинке ниже.
→
A-Bypass
Зачем нужен: еще один твик для блокировки обнаружения джейлбрейка (от приложения к приложению какие-то твики могут не работать, поэтому чем больше у нас вариантов в арсенале на устройстве, тем лучше).
Как установить:
- Добавляем репозиторий Merona: repo.co.kr
→
- Находим A-Bypass → Изменить → Установить → перезагружаем устройство*.
* После перезагрузки устройства Jailbreak слетит и нужно будет повторить процедуру по его установке. После повторной установки все твики вернутся на место и будут работать.
- Проверяем, что все установилось: идем в Настройки и видим иконку A-Bypass.
→
SSL Kill Switch 2
Зачем нужен: помогает обойти SSL-pinning и запрет на проксирование траффика тестируемого приложения.
Как установить:
- Переходим в репозиторий утилиты (https://github.com/nabla-c0d3/ssl-kill-switch2) → releases → забираем ссылку на .deb пакет (на момент написания статьи — github.com/nabla-c0d3/ssl-kill-switch2/releases/download/0.14/com.nablac0d3.sslkillswitch2_0.14.deb)
- Проверяем через Cydia следующие зависимости: Debian Packager, Cydia Substrate, PreferenceLoader. Если не установлены, то устанавливаем
- Подключаемся к устройству по ssh и скачиваем пакет через wget
- Устанавливаем пакет через dpkg
- Перезагружаем SpringBoard через командную строку: killall -HUP SpringBoard
- Проверяем, что все работает: идем в Настройки → SSL Kill Switch 2 (будет в самом низу) → видим то же, что и на картинке ниже
→
Filza File Manager
Зачем нужен: работа с файлами на устройстве.
Как установить:
- В Cydia находим пакет Filza File Manager → Установить
→ - Проверяем, что все установилось: на рабочем экране появится иконка Filza
Сертификат BurpSuite
Зачем нужен: для перехвата HTTP-траффика с целью последующего анализа.
Как установить:
- В BurpSuite добавляем новый Proxy Listener: Proxy → Options → Proxy Listeners → Add.
Указываем номер порта (в данном примере 9090) и отмечаем «All Interfaces»
- На iOS-устройстве идем в Настройки → выбираем Wi-Fi точку, к которой подключены наше устройство и компьютер с BurpSuite → Настройка прокси → Вручную → указываем локальный IP-адрес компьютера и порт Listener'а, который мы указали на предыдущем шаге
→
- Открываем Safari или любой другой веб-браузер и переходим по адресу http://burpsuite. Если пунктом ранее вы указали все правильно, то откроется страница с которой можно будет скачать сертификат по кнопке «CA Certificate»
→
- После скачивания профиля отправляемся в Настройки → Профиль загружен → Установить
→ →
В некоторых случаях после установки необходимо перейти в Настройки → Основные → Об этом устройстве → Доверие сертификатам и активировать полное доверие установленному сертификату
На этом подготовка устройства закончена. Надеемся, что эта информация будет полезна тем, кто хочет погрузиться в пентест приложений для iOS. В следующих статьях мы покажем, как пользоваться этими инструментами на реальных примерах.