Безопасность нативных мобильных приложений¶
Требования применяются к iOS- и Android-приложениям. Уровни обязательности
определены в корневом README.md.
MOB-SEC-001. Системный OAuth flow¶
Уровень: MUST
Применяется к: интерактивной аутентификации
Приложение должно использовать OpenID Connect Authorization Code Flow с PKCE
через системную browser session: ASWebAuthenticationSession на iOS и
Custom Tabs на Android, в том числе через совместимую протокольную библиотеку.
Встроенный WebView и получение пароля пользователя приложением запрещены.
state, nonce, issuer, audience и redirect URI должны проверяться по
SEC-AUTHN-002.
Обоснование¶
Системная сессия не раскрывает credentials приложению и поддерживает SSO.
Проверка¶
- integration-тест полного flow;
- тест неверных
state,nonceи redirect; - статический поиск WebView login.
Исключения¶
Не допускаются для пользовательской аутентификации.
MOB-SEC-002. Хранение токенов и ключей¶
Уровень: MUST
Применяется к: access token, refresh token и приватному ключевому материалу
iOS должна хранить credentials в Keychain с минимальной доступностью и без синхронизации iCloud, если она явно не требуется. Android должна использовать Android Keystore и зашифрованное хранилище, ключ которого не экспортируется. Credentials не должны попадать в backup, clipboard, лог, screenshot или нешифрованную базу.
Обоснование¶
Обычное файловое хранилище не предоставляет границу для credentials.
Проверка¶
- security review access controls;
- backup extraction test;
- тест логов, clipboard и screenshots.
Исключения¶
Не допускаются.
MOB-SEC-003. TLS и сетевое доверие¶
Уровень: MUST
Применяется к: каждому сетевому соединению
Соединение должно соблюдать SEC-TLS-001–SEC-TLS-003. iOS App Transport
Security и Android Network Security Configuration не должны разрешать cleartext
или глобально ослаблять certificate validation. Certificate pinning и mTLS не
обязательны и применяются только по модели угроз.
Обоснование¶
Платформенное исключение способно отключить TLS для всего приложения.
Проверка¶
- тест HTTP и недоверенного сертификата;
- review plist и network security config;
- proxy security test.
Исключения¶
Не допускаются для cleartext и отключения certificate validation.
MOB-SEC-004. Авторизация и недоверенность клиента¶
Уровень: MUST
Применяется к: каждой защищённой операции
UI может скрывать действие, но backend должен проверять авторизацию. Приложение, device identifier, attestation result и локальный флаг не должны считаться самостоятельным доказательством права. App Attest, DeviceCheck и Play Integrity не обязательны; при использовании они являются дополнительным сигналом, а не заменой аутентификации и авторизации.
Обоснование¶
Клиент контролируется владельцем устройства и может быть модифицирован.
Проверка¶
- прямой вызов API в обход UI;
- тест подмены локального состояния;
- review серверной проверки.
Исключения¶
Не допускаются для защищённой операции.
MOB-SEC-005. Защита отображаемых данных¶
Уровень: MUST
Применяется к: чувствительным данным на экране и в системных представлениях
Приложение должно скрывать чувствительное состояние в app switcher snapshot, не передавать его в notifications и widgets без явного контракта и очищать UI после logout или отзыва доступа. Android screenshots и screen recording должны ограничиваться для экранов, где это требует классификация; iOS должна применять доступные защитные меры и не считать их абсолютной защитой.
Обоснование¶
Данные копируются системой за пределы активного экрана.
Проверка¶
- тест app switcher, screenshot, notification и logout;
- review классификации экранов;
- тест background transition.
Исключения¶
Публичные данные не требуют маскирования.
MOB-SEC-006. Privacy permissions¶
Уровень: MUST
Применяется к: camera, microphone, location, Bluetooth, nearby devices, contacts, photos и tracking
Разрешение должно запрашиваться непосредственно перед необходимым действием, иметь пользовательское объяснение и минимальную область. Отказ не должен блокировать независимые сценарии. Объявления iOS privacy manifest, usage descriptions и Android permissions/data safety должны совпадать с фактическим поведением SDK и приложения.
Обоснование¶
Избыточное разрешение расширяет доступ приложения и сторонних SDK.
Проверка¶
- тест allow, deny и revoke;
- статический анализ permissions;
- сверка store privacy declarations.
Исключения¶
Не допускаются для необъявленного доступа.
MOB-SEC-007. Серверный отзыв активной сессии¶
Уровень: MUST
Применяется к: подтверждённому backend сигналу отзыва текущей сессии
Приложение должно отличать отзыв сессии от временного 401, истечения access
token и ошибки сети по версионируемому API-контракту. После подтверждённого
отзыва оно должно прекратить новые account-bound запросы и синхронизацию,
отменить безопасно отменяемые операции, удалить credentials и защищённое
состояние по MOB-DATA-002 и перевести UI в неаутентифицированное состояние.
Локальный черновик, не содержащий защищаемых account-bound данных, MAY сохраниться по явной классификации, но не должен автоматически отправляться после входа другим аккаунтом. Неопределённый результат уже отправленной мутации должен показываться отдельно от локально отменённой операции.
Обоснование¶
Отозванная сервером сессия не должна продолжать фоновую работу, а очистка не должна молча уничтожать независимые пользовательские данные.
Проверка¶
- integration-тест revocation во время foreground и background операции;
- тест временного
401, refresh и подтверждённого отзыва; - проверка credentials, UI, очереди синхронизации и локального черновика.
Исключения¶
Push-logout MAY ускорять реакцию, но не заменяет обработку авторитетного ответа backend при следующем обращении.
MOB-SEC-008. Назначение сбора данных сторонним SDK¶
Уровень: MUST
Применяется к: стороннему SDK, способному собирать или передавать данные с устройства
Проект должен инвентаризировать версию SDK, собираемые поля, endpoint, назначение, правовое основание или consent, retention и способ отключения. Фактический сбор должен совпадать с privacy manifest, store declarations и пользовательским объяснением.
SDK не должен инициализировать необязательный сбор до получения требуемого consent и не должен продолжать его после отзыва. Отключение прикладного события не должно считаться отключением автоматического device, network или diagnostic collection без проверенного поведения SDK.
Обоснование¶
Сторонний SDK может передавать данные до первого явного вызова приложения и обходить ожидаемую границу purpose или consent.
Проверка¶
- review inventory и privacy declarations для точной версии SDK;
- network test до consent, после allow, deny и revoke;
- проверка отключения automatic collection и удаления накопленного queue.
Исключения¶
Строго необходимый security- или transport-SDK MAY работать без optional consent только для закрытого набора данных и назначения, разрешённых политикой.