Действительно ли iPhone безопасен? Анализ Jailbreak, защиты Keychain и Face ID в ходе пентеста iOS-приложений

Большинство пользователей воспринимают iOS как одну из наиболее защищённых мобильных платформ. Действительно, многоуровневые механизмы защиты, созданные Apple — App Sandbox, Secure Enclave, Keychain, Code Signing и другие технологии — обеспечивают высокий уровень безопасности мобильных устройств. Однако практика показывает: как бы надёжно ни была защищена сама платформа, ошибки при разработке приложений и неправильная конфигурация могут привести к серьёзным проблемам с безопасностью.

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

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

Основные этапы пентеста iOS

Тестирование iOS-приложения, как правило, включает несколько взаимосвязанных этапов:

  1. Выполнение джейлбрейка устройства;
  2. Получение и анализ пакета приложения (IPA);
  3. Статический анализ;
  4. Динамический анализ;
  5. Перехват сетевого трафика;
  6. Проверка хранения конфиденциальных данных;
  7. Тестирование биометрической аутентификации;
  8. Анализ механизмов обнаружения джейлбрейка;
  9. Итоговая оценка безопасности и разработка рекомендаций.

Перечисленные этапы реализуются в соответствии с техниками MITRE ATT&CK для мобильных устройств, а также требованиями OWASP Mobile Application Security Verification Standard (MASVS).

Джейлбрейк — необходимый шаг для глубокого анализа

Apple, как правило, не предоставляет пользователям доступ к внутренним компонентам системы. Именно поэтому исследователи безопасности и пентестеры прибегают к джейлбрейку устройства.

В результате джейлбрейка:

  • получаются права root;
  • открывается полный доступ к файловой системе;
  • появляется возможность внедрять внешний код в процессы приложений;
  • становится доступным мониторинг данных в оперативной памяти;
  • упрощается использование инструментов Frida и Objection.

Для процессоров Apple предыдущего поколения (чипы A11 и более ранние) существуют методы джейлбрейка, основанные на аппаратной уязвимости checkm8, которую невозможно полностью устранить путём обновлений iOS.

Наиболее широко применяемые на сегодняшний день инструменты для изучения безопасности iOS:

  • palera1n;
  • checkra1n;
  • Frida;
  • Objection;
  • Пакетный менеджер Sileo.

Получение IPA-файла и статический анализ

iOS-приложения распространяются в формате IPA. По своей сути IPA — это ZIP-архив, содержащий все компоненты приложения.

В ходе статического анализа исследуются:

Файл Info.plist

Этот файл содержит конфигурацию приложения:

  • адреса серверов;
  • URL-схемы;
  • разрешения;
  • интеграции;
  • идентификаторы приложения.

Во многих случаях именно здесь обнаруживаются адреса тестовых сред или внутренних API.

Анализ бинарного файла

Основной исполняемый код приложения компилируется под архитектуру ARM64.

Пентестеры проверяют наличие:

  • ASLR (Address Space Layout Randomization — рандомизация адресного пространства);
  • PIE (Position Independent Executable — позиционно-независимый исполняемый файл);
  • защиты Stack Canary;
  • ARC (Automatic Reference Counting — автоматический подсчёт ссылок);
  • степени обфускации кода.

Если хотя бы один из перечисленных механизмов настроен неверно или вовсе не применяется — вероятность успешной эксплуатации уязвимости возрастает.

Жёстко закодированные (Hardcoded) данные

В ходе статического анализа ведётся поиск:

  • API-ключей;
  • JWT-токенов;
  • криптографических ключей;
  • конфигураций OAuth;
  • данных, относящихся к тестовой среде.

На практике во многих приложениях конфиденциальные ключи хранятся непосредственно в коде.

Динамический анализ и возможности Frida

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

Для этого широко применяется Frida.

С помощью Frida можно:

  • трассировать методы;
  • изменять возвращаемые значения функций;
  • получать данные из оперативной памяти;
  • исследовать механизмы аутентификации;
  • тестировать защиту SSL Pinning.

Динамический анализ позволяет выявить, какие решения принимает приложение непосредственно во время выполнения.

Защита SSL Pinning и её значение

SSL Pinning гарантирует, что приложение доверяет только определённому сертификату.

При отсутствии SSL Pinning становится возможным:

  • перехват трафика;
  • мониторинг HTTPS-соединений;
  • подмена API-запросов;
  • получение сессионных токенов.

Согласно стандартам OWASP MASVS, применение SSL Pinning рекомендуется для приложений, работающих с финансовыми и конфиденциальными данными.

В ходе пентеста данный механизм защиты тестируется с помощью Burp Suite и Frida.

Во многих приложениях SSL Pinning реализован с ошибками, из-за чего защиту удаётся обойти без особых усилий.

Безопасность Keychain

Механизм Apple Keychain предназначен для хранения конфиденциальных данных.

Как правило, в нём хранятся:

  • пароли;
  • токены аутентификации;
  • сертификаты;
  • API-ключи.

Однако ключевым фактором безопасности является не само место хранения данных, а способ их хранения.

В ходе пентеста могут быть выявлены следующие проблемы:

kSecAttrAccessibleAlways

При неправильном выборе данного параметра данные могут быть прочитаны даже при заблокированном устройстве. В результате злоумышленник может легко завладеть:

  • JWT-токенами;
  • сессиями аутентификации;
  • API-ключами.

Данные, не привязанные к биометрии

Если элемент Keychain не связан с Face ID или Touch ID, получить к нему доступ на устройстве с джейлбрейком значительно проще.

Наиболее защищённым подходом считается совместное использование:

  • Secure Enclave;
  • Face ID;
  • Keychain Access Control.

Тестирование биометрической аутентификации

Многие iOS-приложения используют технологии Face ID и Touch ID. Для этого, как правило, применяется объект LAContext из фреймворка LocalAuthentication.

Если приложение:

  • принимает результат аутентификации как простое логическое значение (true/false);
  • выполняет проверку важных операций только на стороне клиента —

такой результат можно изменить путём манипуляций во время выполнения (runtime manipulation).

В подобном случае приложение может засчитать успешную аутентификацию даже без прохождения пользователем биометрической проверки.

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

Механизмы обнаружения джейлбрейка

Грамотно разработанные приложения пытаются обнаружить устройства с джейлбрейком.

Для этого применяются следующие методы:

  • поиск файлов Cydia;
  • проверка наличия SSH-сервиса;
  • тестирование ограничений Sandbox;
  • обнаружение динамических библиотек;
  • проверка наличия сервера Frida;
  • обращение к специфическим URL-схемам.

Однако в большинстве случаев подобные проверки реализованы на уровне приложения и могут быть обойдены с помощью Frida.

Именно поэтому механизм обнаружения джейлбрейка следует рассматривать не как самостоятельный рубеж защиты, а лишь как дополнительный уровень безопасности.

Наиболее распространённые уязвимости, выявляемые в ходе пентеста

Практический опыт свидетельствует о том, что в iOS-приложениях регулярно встречаются следующие недостатки:

  • отсутствие SSL Pinning;
  • некорректное хранение токенов в Keychain;
  • хранение API-ключей непосредственно в коде;
  • чрезмерное доверие к результатам Face ID;
  • слабая реализация обнаружения джейлбрейка;
  • отсутствие дополнительных проверок на стороне сервера;
  • неправильное применение криптографических алгоритмов;
  • хранение данных в незащищённых базах SQLite.

iOS-платформа является одной из наиболее передовых экосистем в области мобильной безопасности. Тем не менее защищённость самой платформы не означает автоматической защищённости работающих на ней приложений.

Пентесты наглядно показывают: большинство уязвимостей возникает не из-за недостатков инфраструктуры Apple, а вследствие ошибочных решений, принятых в процессе разработки приложений, и недостаточного внимания к требованиям безопасности.

Ключевые принципы безопасности современных iOS-приложений включают:

  • защиту конфиденциальных данных с помощью Secure Enclave;
  • привязку элементов Keychain к биометрической аутентификации;
  • корректное использование SSL Pinning;
  • внедрение дополнительных проверок на стороне сервера;
  • соответствие требованиям OWASP MASVS;
  • проведение регулярных пентестов мобильных приложений.

Только такой комплексный подход позволяет поддерживать iOS-приложения в устойчивом и надёжном состоянии перед лицом современных киберугроз.