Рекомендации по безопасности для резервных копий

Категория OWASP: MASVS-CODE: качество кода

Обзор

Резервные копии приложений предназначены для сохранения пользовательских данных, чтобы их можно было восстановить на новом устройстве или в случае потери данных. Существующие рекомендации по безопасности, касающиеся резервного копирования приложений, имеют свои нюансы и различаются в зависимости от версии Android и производителя устройства. Общая тема заключается в том, что эти рекомендации направлены на обеспечение чтобы не было утечки конфиденциальных данных.

Стандартная система резервного копирования Android – это самое надежное, безопасное и простое решение для сохранения данных приложений в облаке или их переноса на новое устройство. Она включает автоматическое резервное копирование (включено по умолчанию, не требует настройки и может быть расширено) и резервное копирование пар "ключ-значение". Мы рекомендуем использовать это решение, поскольку оно хранит полученные резервные копии данных в каталогах, к которым не могут получить доступ другие сторонние приложения, а также упрощает шифрование при хранении, шифрование при передаче и конфигурации, позволяющие исключать конфиденциальные данные из резервных копий.

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

Влияние

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

Предотвращение атак

Используйте стандартную систему резервного копирования Android

Стандартная система резервного копирования Android всегда шифрует данные при передаче и хранении. Шифрование применяется независимо от версии Android и наличия заблокированного экрана на устройстве. Начиная с Android 9, если на устройстве настроен заблокированный экран, резервные копии не только шифруются, но и шифруются с помощью ключа, который неизвестен Google. Ключ шифрования защищен секретом заблокированного экрана, что обеспечивает сквозное шифрование.

В целом не забывайте следовать рекомендациям по хранению данных и руководству по безопасности.

Если в резервной копии есть конфиденциальные данные, рекомендуем исключить их или, если это невозможно, включить сквозное шифрование, как описано в следующем разделе.

Исключение данных из резервной копии

Вы можете указать, какие данные нужно исключить из резервной копии, с помощью файла правил, который обычно называется backup_rules.xml и находится в папке приложения res/xml. Правила резервного копирования настраиваются по-разному в зависимости от версии Android:

Затем настройте файл backup_rules.xml в соответствии с требованиями приложения к хранению данных и безопасности, следуя обновленному формату конфигурации.

Формат, необходимый для конфигурации файла backup_rules.xml, позволяет разработчикам определять специальные правила резервного копирования как для облака, так и для переноса данных с устройства на устройство. Если атрибут <device-transfer> не задан, при переносе с устройства на устройство будут переданы все данные приложения. Важно отметить, что даже если целевое приложение предназначено для Android 12 или более поздней версии, для устройств с Android 11 (уровень API 30) или более ранней версией всегда должен быть указан отдельный файл с дополнительным набором правил резервного копирования.

  • Для Android 11 и более ранних версий добавьте атрибут android:fullBackupContent в элемент <application> в файле AndroidManifest.xml:
  • XML xml <application android:name="com.example.foo" android:fullBackupContent="@xml/backup_rules_full"> … </application>

Затем настройте файл backup_rules.xml в соответствии с требованиями к хранению и безопасности данных приложения, используя синтаксис, описанный в статье Резервное копирование пользовательских данных.

Требование сквозного шифрования

Если вы не можете исключить конфиденциальные данные из резервной копии, рекомендуем требовать сквозное шифрование. Это означает, что резервное копирование будет разрешено только на устройствах с Android 9 или более поздней версии и только при настроенном заблокированном экране. Для этого используется флаг requireFlags="clientSideEncryption", который начиная с Android 12 нужно переименовать в disableIfNoEncryptionCapabilities и задать для него значение true.

Если вы не можете использовать стандартную систему резервного копирования Android

Если вы не можете использовать стандартную систему резервного копирования Android, то вам будет сложнее обеспечить безопасное хранение резервных копий и указать, какие данные не нужно в них включать. Это нужно указывать на уровне кода, что может привести к ошибкам и утечке данных. В этом случае также рекомендуется регулярно тестировать реализацию, чтобы убедиться, что ожидаемое поведение резервного копирования не изменилось.

Ресурсы