Как тестировать безопасность хранения данных
Что проверяют
Знаете ли вы, куда на самом деле утекают данные iOS-приложения, и умеете ли проверить это руками, а не только сказать «храним в Keychain». Следом обычно спрашивают, какой атрибут доступности вы бы выбрали для токена и почему.
Как отвечать
Опирайтесь на OWASP MASVS (раздел MASVS-STORAGE) и методичку MASTG. Каркас: сначала инвентаризация всех мест, куда приложение пишет, потом проверка каждого.
- UserDefaults: обычный plist в контейнере приложения. Токены, пароли и персональные данные ищут там в первую очередь;
- Keychain: правильное место для секретов, но решает атрибут
kSecAttrAccessible. Для токена обычноkSecAttrAccessibleWhenUnlockedThisDeviceOnly, а если нужен доступ в фоне,kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly. Записи сThisDeviceOnlyне переезжают на другое устройство через резервную копию; - файлы и базы: Core Data, SQLite, Realm. Для чувствительного нужен класс
NSFileProtectionComplete, по умолчанию файлы получаютNSFileProtectionCompleteUntilFirstUserAuthentication; - неочевидные утечки:
URLCache(файлCache.db), снимок экрана в переключателе приложений, логи черезNSLogилиLoggerсо значениямиprivacy: .public, буфер обмена, словарь автоисправления в полях безisSecureTextEntry.
Как проверять: скачать контейнер отладочной сборки через Xcode (Devices and Simulators, Download Container) и просмотреть файлы после сценариев входа и выхода; изучить незашифрованную резервную копию; на тестовом устройстве с джейлбрейком посмотреть Keychain через objection или Frida; прогнать сборку через MobSF. Отдельный кейс: после логаута секреты стёрты, а записи Keychain могут пережить удаление приложения, это важно при переустановке.
Где спотыкаются
Отвечают «шифруем AES» и держат ключ прямо в коде. Такой ключ достают из бинарника за минуты, и шифрование превращается в декорацию.
Проверяют только UserDefaults и забывают про кеш сетевых ответов, снимки экрана и логи, где токен лежит открытым текстом.
Делают финальную проверку на симуляторе. Там нет Secure Enclave и полноценной защиты файлов, поэтому выводы о защищённости делают на реальном устройстве.