Перейти к содержанию

Безопасность нативных мобильных приложений

Требования применяются к 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-001SEC-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 только для закрытого набора данных и назначения, разрешённых политикой.