Перейти к основному содержимому

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

Защита пользовательских данных и системы, которая их хранит, — на клиенте, который вам не подконтролен, в сети, которая вам не принадлежит, и на сервере, до которого дотянется кто угодно.

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

Что нужно понимать

  • Что здесь на самом деле стоит защищать и от кого
  • Что видит и что может изменить атакующий, у которого установлено приложение, — а видит и может он всё
  • Где именно применяется каждое правило и способен ли клиент его обойти
  • Что хранится на устройстве и чем это обернётся, если устройство потеряют
  • Что вы будете делать в первый час после утечки

Основные темы

Клиенту нельзя доверять

  • Всё, что попало в сборку, можно прочитать: строки, ключи, адреса, логику
  • Устройства с root и jailbreak, эмуляторы, модифицированные сборки
  • Обфускация как помеха, а не как защита
  • Валидация на клиенте — ради удобства, на сервере — ради безопасности

Хранение на устройстве

  • Keychain и Keystore для секретов, а не shared preferences
  • Что переживает удаление приложения, а что уезжает в облачную резервную копию
  • Кеши и скриншоты как канал утечки
  • Биометрическая защита и то, что она в действительности подтверждает

Передача по сети

  • TLS везде, проверка сертификата не отключена
  • Pinning: что он даёт и во что обходится в эксплуатации, когда сертификат меняется
  • Токены — не в URL, не в логах, не в отчётах о падениях

На сервере

  • Авторизация на каждом запросе, по умолчанию — запрет
  • Инъекции, и параметризованные запросы как исчерпывающий ответ
  • Ограничение частоты запросов и защита от злоупотреблений
  • Зависимости с известными уязвимостями, проверяемые автоматически
  • Секреты — в менеджере секретов, с ротацией, и никогда в репозитории

Приватность и обязательства

  • Собирать меньше — самая надёжная защита
  • Согласие, сроки хранения и удаление как продуктовые требования
  • Декларации приватности в сторах, соответствующие тому, что делает приложение
  • Реакция на инцидент: кого извещаем и как быстро

Уровни

УровеньКак это выглядит
JuniorИспользует HTTPS, хранит токены в защищённом хранилище, не коммитит секреты.
MiddleПроверяет авторизацию на сервере, разводит секреты по окружениям, вовремя обновляет зависимости, не допускает утечки данных в логи.
SeniorСтроит модель угроз для функциональности, проектирует в расчёте на враждебный клиент, минимизирует сбор данных и имеет план реакции на инцидент, который люди отрабатывали на практике.

Практика

Для начала

  • Прочитайте собственную сборку Извлеките строки из release-сборки и найдите то, чего там быть не должно.

  • Перенесите секрет Найдите в shared preferences что-нибудь чувствительное и перенесите в защищённое хранилище.

  • Просканируйте зависимости Запустите проверку на уязвимости и разберитесь с тем, что она нашла.

Глубже

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

  • Постройте модель угроз Возьмите одну функцию, перечислите, что стал бы пробовать атакующий, и закройте дыры.

  • Собирайте меньше Найдите данные, которые вы собираете и не используете, и перестаньте их собирать.

Проверьте себя

  • Что можно узнать, декомпилировав ваше приложение?
  • Какие правила проверяются только в интерфейсе?
  • Какие чувствительные данные лежат на устройстве и как они защищены?
  • Где хранятся ваши секреты в каждом окружении и кто может их прочитать?
  • Когда вы в последний раз обновляли зависимость ради исправления уязвимости?
  • Что вы будете делать в первый час после того, как обнаружите утечку?

Ресурсы

  • OWASP Mobile Top 10 — ранжированный список того, что в мобильных приложениях ломается на практике. Правильное место для старта, потому что порядок в нём отражает реальную частоту.
  • OWASP Mobile Application Security Testing Guide — версия для погружения: конкретные проверки хранения, криптографии, сети и взаимодействия с платформой — для обеих платформ.
  • OWASP Cheat Sheet Series — короткие и предметные рекомендации по каждой теме. Первыми стоит прочитать про аутентификацию, хранение паролей и загрузку файлов.
  • Obfuscating Dart code — что обфускация во Flutter делает, чего не делает и как она уживается с расшифровкой стектрейсов после падений.
  • Android and iOS security documentation — рекомендации по хранению и передаче данных для каждой платформы; именно с ними сверяются при аудите безопасности.