Как стать автором
Обновить
56.25
Friflex
Мобильные приложения для миллионов пользователей🚀

7 вещей, которые больше всего волнуют аудиторов в модуле критических данных Flutter-приложения

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров805

Привет, Хабр! Меня зовут Анна Ахлестова, я Flutter Team Lead в компании Friflex. Сегодня расскажу про защиту критических данных в приложении на Flutter — это один из модулей, которые аудиторы проверяют очень часто. Утечка таких данных может привести к серьезным потерям, от материальных до репутационных (рассказывала об этом на CrossConf).

Здесь разберу семь основных аспектов, на которые обращают внимание аудиторы при проверке:

  1. Можно ли запустить приложение в небезопасной среде — на root/jailbreak устройствах и на эмуляторах?

  2. Какие библиотеки внедряются в проект?

  3. В каком виде и где хранятся критические данные?

  4. Какие разрешения запрашивает приложение?

  5. Доступно ли превью страницы с чувствительными данными в фоновом режиме?

  6. Доступен ли запуск приложения, установленного из недоверенного источника?

  7. Актуальна ли версия Flutter?

Важно: вопросы проверки будут отличаться в зависимости от специфики проекта и организации, которая проводит аудит.

1. Можно ли запустить приложение в небезопасной среде?

Аудиторы проверяют, можно ли запустить приложение на root и jailbreak устройствах, а также на эмуляторах. Root/Jailbreak предоставляют права суперпользователя на устройствах, тем самым открывая доступ к защищенным хранилищам устройства и делая его уязвимым для атак.

Почему это важно?

Рутованные устройства подвержены вредоносному ПО, которое может незаметно перехватывать данные. Например, если на обычном устройстве вы скачаете подозрительное приложение из интернета, антивирус с большой вероятностью сможет его обнаружить и предупредить вас. Но на root или jailbreak устройстве такие системы защиты ослаблены или вовсе отключены, поэтому вредоносное ПО может остаться незамеченным.

Эмуляторы обладают более широким спектром функций и настроек, чем реальные устройства. Этим часто пользуются злоумышленники, например, для подмены трафика, анализа запросов и получения доступа к API-ключам.

Здесь в примере у нас есть интегрированная в приложение Яндекс.Карта, и с помощью HTTP Toolkit мы легко получаем API-ключи этой Яндекс.Карты.
Здесь в примере у нас есть интегрированная в приложение Яндекс.Карта, и с помощью HTTP Toolkit мы легко получаем API-ключи этой Яндекс.Карты.

Понятно, что все мы используем эмуляторы. Они позволяют задавать какие-то дополнительные настройки, подменять IP-адреса, подменять геопозицию, делать очень много различных манипуляций. И этим же эмуляторы и опасны.

Решение:

  • Используйте библиотеки вроде Flutter Jailbreak Detection для проверки, запущено ли приложение на небезопасных устройствах.

  • Подключите SafeDevice для отслеживания эмуляторов, подмены геолокации и других угроз.

2. Какие библиотеки внедряются в проект?

Добавлять библиотеки из PubDev или Git-репозиториев, не особенно вникая, как они работают «под капотом» — опасная штука. Основная опасность кроется в плагинах. У них есть доступ к нативному коду и к платформе, поэтому могут выполнять действия, которые сложно отследить. 

@Override
 public void onAttachedToEngine(FlutterPluginBinding flutterPluginBinding) {
   binding.getFlutterEngine().getPlugins().removeAll();
 }
@Override
 public void onAttachedToEngine(FlutterPluginBinding flutterPluginBinding) {
   binding.getFlutterEngine().getPlugins().remove(CurrentPlugin);
 }
@Override
 public void onAttachedToEngine(FlutterPluginBinding flutterPluginBinding) {
   binding.getFlutterEngine().getPlugins().add(NewPLugin);
 }

Например, метод onAttachedToEngine, который вызывается при подключении плагина к Flutter Engine, позволяет плагину с помощью функции getPlugins получить список всех подключенных к проекту плагинов и, при желании, выполнить над ними операции: удалить их, изменить или добавить что-то новое.

Рекомендации:

  • Исследуйте исходный код библиотек перед их интеграцией.

  • Используйте только проверенные версии из надежных источников.

  • Храните доверенные версии плагинов во внутреннем репозитории компании.

3. Где и как хранятся критические данные?

Все мы прекрасно знаем библиотеку SharedPreferences, которая которая хранит данные на устройстве в формате ключ-значение. Отличная библиотека, но есть нюанс — данные хранятся в незащищенных хранилищах устройства. На iOS это NSUserDefaults, на Android — Shared Preferences.

SharedPreferences не предназначена для хранения критических данных вроде токенов доступа, пользовательских данных и паролей. 

Еще одна частая ошибка — хранение критических данных в оперативной памяти в явном, незашифрованном виде. Например, даже если ваше приложение требует аутентификации (нужно ввести пароль или войти с помощью биометрии), злоумышленник, получив физический доступ к устройству, может выгрузить оперативную память и извлечь данные.

Решение:

  • Для хранения данных используйте Flutter Secure Storage, которая сохраняет их в защищенных хранилищах устройств (Keychain на iOS и EncryptedSharedPreferences/Keystore на Android).

Избегайте хранения данных в оперативной памяти в явном виде. Зашифруйте данные с помощью библиотеки crypto и расшифровывайте их только перед отображением.

4. Какие разрешения запрашивает приложение?

Аудиторы проверяют, не запрашивает ли ваше приложение избыточные разрешения. Например, если диктофон требует доступ к геолокации или календарю — это явный красный флаг.

Рекомендации:

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

  • Будьте готовы объяснить, почему ваше приложение требует конкретное разрешение. Есть довольно сложные разрешения вроде запроса на геопозицию пользователя. Там есть геопозиции фоновые или стандартные в открытом приложении, есть геопозиции точные, есть геопозиции приблизительные. И вам необходимо понимать, какое конкретное разрешение вы запрашиваете и для каких целей. То есть вам это нужно уметь объяснить не только себе, но и аудиторам, если они будут задавать такой вопрос.

5. Доступно ли превью страниц с чувствительными данными в фоновом режиме?

Если приложение в фоновом режиме отображает данные, например, номер карты или персональные данные пользователя, это серьезная проблема. Особенно если это банковское приложение.

В фоновом режиме — значит, что вы открыли страницу, а затем свернули приложение, и занимаетесь другими делами. Если на устройстве включен режим предварительного просмотра, данные могут быть видны на экране задач (в миниатюре приложения).

Решение:

  • Используйте Secure Application, чтобы скрывать содержимое экрана, когда приложение находится в фоновом режиме. Эта библиотека также добавляет дополнительные меры аутентификации.

6. Можно ли запустить приложение, установленное из недоверенного источника?

Когда приложение устанавливается из неизвестных источников (например, с неофициальных сайтов), его сборка может быть модифицирована. Это несет несколько угроз:

  1. Модификация функций. Ключевые функции приложения могут быть удалены или изменены. Например, важные защитные механизмы.

  2. Вредоносный код. Сборка может быть дополнена вредоносными элементами, которые будут перенаправлять пользовательский трафик на сторонние серверы.

  3. Некорректные номера версии, которые затрудняют сбор аналитики. Ошибочные данные нарушают общую картину работы приложения, делают отчеты неясными и неточными.

  4. Ошибки, которые трудно отследить и устранить.

Решение:

  • Подключите FreeRASP для отслеживания запусков из недоверенных источников. Эта библиотека также позволяет настроить реакцию приложения, например, блокировку доступа или отправку отчета в аналитику.

7. Актуальна ли версия Flutter?

Кажется, что здесь ничего страшного нет, но каждое обновление Flutter содержит исправления багов, включая проблемы с безопасностью. Например, можно в их официальном репозитории посмотреть, что только crash было исправлено 4500. Это достаточно большое число.

Рекомендации:

  • Следите за последними выпусками Flutter SDK.

  • Следите, чтобы зависимости вашего приложения были обновлены.

  • Поддерживайте свою копию Flutter в актуальном состоянии.

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

Надеюсь, вам будет полезна эта статья. Если есть еще вопросы про аудит критических данных или вообще, давайте обсудим в комментариях!

Теги:
Хабы:
+4
Комментарии0

Публикации

Информация

Сайт
friflex.com
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
Friflex_dev

Истории