
Вас приветствует Ян - старший пентестер из компании Xilant!
В этот раз научу вас искать, то что разрабы забывают прячут в приложениях iOS. Возможно мы найдем пароли, личные данные, а может даже и API-ключи от бэкенда, что позволит нам продолжать атаку на следующем уровне.
Для этого нам понадобятся знания из прошлой статьи. Напомню, что мы научились получать root-доступ к более-менее свежим iOS устройствам, а также пользовались аналогом adb через ssh и iproxy. Это дало нам полный доступ к системным ресурсам iOS и позволило не только устанавливать geek-твики, но и воздействовать на память и процессы.
Чтобы не выходить за рамки закона, мы будем использовать тестовое приложение DVIA-v2 для обучения себя этим навыкам.
Ведь тот кто знает как нападать, сможет себя защитить.
Дисклеймер: информация, представленная в данной статье, предназначена исключительно для образовательных целей и использования в рамках легальных тестов на проникновение.
Подготовка стенда: Установка DVIA
Damn Vulnerable iOS App v2 (рус.: Чертовски уязвимое приложение) - это приложение для iOS, написанное на Swift , которое имеет кучу специально встроенных уязвимостей для обучения пентесту данной платформы.
Дисклеймер: не вздумайте устанавливать DVIA на устройство, которое вы используете для личных нужд (банкинг, контакты и пр). Сохранность ваших данных в таком случае никак не гарантирована!
Однако, его нельзя просто так взять и скачать из Apple Store из-за крайней уязвимости. Поэтому вся установка происходит вр��чную.
Скачать локально IPA релиза DVIA
Установить с помощью Sideloadly (само подписывает и не требует платного аккаунта разработчика). Процесс установки приложения довольно прост, но в случае проблем - вот туториал.
Дать разрешения в настройках: После успешной установки приложения при запуске возникнет табличка от Apple, что разработчик (ваш серый аккаунт) - ненадежный. Для обхода необходимо зайти: Настройки - Основные - V** и управление устройством - [ your_user] at email - Доверять [...] - Подтвердить.
Приложение откроется и вы можете зайти в раздел: Local Data Storage.
Дисклеймер: НО есть одно НО! Необходимо будет ввести креды от AppleID в Sideloadly! Для этого необходимо завести серый AppleID, который вы нигде больше кроме как для тестирования использовать не будете. Хоть разрабы и клянутся, что эти данные используются только для генерации фейковой подписи потом затираются, но лучше не давать свой личный AppleID.

Теория: Почему локальное хранилище — это риск?
Как только вы установили и запустили приложение, время приступить к первому заданию: поиск уязвимости в локальном хранилище (Local Data Storage).
Дело в том, что обычно приложение должно общаться с бэкенд API (back-end API) для отсылки и приема запросов. Также на устройстве могут храниться конфиденциальные данные клиента, которые при плохой защите могут прочитать сторонние приложения или злоумышленники с локальным доступом к устройству (например, после кражи).
В идеале доступ к таким секретам должен быть ограничен, а данные защищены шифрованием. Однако, это часто игнорируется разработчиками и приводит к печальным последствиям.
Разведка: Находим пути к приложению
И вот нас уже есть рут доступ к устройству. Первым, делом надо подключиться по ssh и понять, в какой директории находится само приложение.
iproxy 2222 22 & ssh -p 2222 root@localhost
Для удобства выключаем все приложения оставляем активным только то, что нам нужно и фильтруем процессы:
root# ps aux | grep -i dvia /var/containers/Bundle/Application/097D[...]53/DVIA-v2.app/DVIA-v2
В этой директории содержится бинарник приложения, библиотеки и Info.plist.
Также если поискать, то можно найти директорию, где содержатся песочницы с данными от всех установленных приложений:
/var/mobile/Containers/Data/Application
В итоге, у нас две песочницы: одна с бинарниками и конфигами, а другая с данными. Давайте рассмотрим их. Для этого рекомендую скопировать их локально через scp, чтобы случайно не изменить их на устройстве:
scp -r -P 2222 root@localhost:/var/containers/Bundle/Application/097D44A4-5503-409F-81E6-E0ACE6EE3553 . scp -r -P 2222 root@localhost:/var/mobile/Containers/Data/Application/DD3F1424-3831-4FBA-8C8B-D9D1C3F3AA58 .
Заметим, что номера идентификации каталогов с бинарником и данными разные, но используются одним и тем же приложением. Поэтому будьте вниметельны.
Дисклеймер: этот метод не подходит для дампа бинарника приложения, так как он будет зашифрован злым Apple. Как скачать читаемый бинарник, расскажем в следующей статье!
Первый эшелон: Анализ Info.plist
Начнем поиски утечек с ранее найденного файла Info.plist, который является чем-то вроде аналога манифеста в Android. Поэтому всегда надо начинать знакомоство с приложением именно с этого файла.
После скачивания директорий с iOS-устройства на локалку, вбиваем следующую команду на MacOS для просмотра *.plist:
open ./097D44A4-5503-409F-81E6-E0ACE6EE3553/DVIA-v2.app/Info.plist
Наблюдаем как магически откроется xCode с данными приложения и его настройками.

Ничего криминального здесь не видим, поэтому ищем другие *.plist файлы (их много): find . | grep plist
Поиск секретов UserDefaults
Некоторые неопытные разрабы могут использовать метод UserDefaults для хранения данных в обычном plist-файле.
Этот файл:
не шифруется по умолчанию (даже в iOS 18/19 на 2026 год ситуация не изменилась кардинально)
легко извлекается
Вот так любой хакер с помощью самого простого grep найдет секреты, которые сохранены с помощью метода UserDefaults:
grep -ri 'key' . | grep user ./DD3F1424-3831-4FBA-8C8B-D9D1C3F3AA58/Documents/userInfo.plist: <key>password</key> ./DD3F1424-3831-4FBA-8C8B-D9D1C3F3AA58/Documents/userInfo.plist: <key>username</key>
И видим, что-то интересное скрыто в userInfo.plist. Если его открыть:

Это - небезопасное хранение данных, потому что креды не зашифрованы.
Также в данном тренажере секреты спрятаны после вызова UserDefaults в еще одном файле .plist:
cat Library/Preferences/com.highaltitudehacks.DVIAswiftv2.J8X7G4NN3H.plist
bplist00?YDemoValueYtoto12345
Хранить таким способом API-ключи и любые другие конфиденциальные вещи - не безопасно!
Поэтому, используя одну единственную команду - grep -, можно найти очень много интересного.
Ленивый вариант - использовать утилиту для автоматического сканирования: MobSF.
Итоги и рекомендации по защите
Находить утечки проще простого если есть root-доступ. Однако замечу, что кроме рута злоумышленник может воспользоваться бэкапом через iTunes или iMazing для дампа песочницы приложения. Не будьте наивны - не полагайтесь на защиту песочницы (iOS Sandbox)!
Главное правило — не хранить ничего секретного на девайсе, если без этого можно обойтись. А если надо, используй защиту, чтоб даже с рутом было сложно добраться. Вот топ-рекомендаций:
Используйте
Keychainдля всех секретов;используйте
kSecAttrAccessibleWhenUnlockedThisDeviceOnly;Включите
NSFileProtectionComplete;Для баз данных (SQLite, Realm) добавьте explicit encryption;
Интегрируйте MobSF или методы из OWASP MSTG в ваш CI/CD для сканирования на утечки секретов и ключей.
Будьте безопасны! И ждите следующую статью.
Дисклеймер: ни один чат-бот не пострадал при создании данной статьи!
