Recommandations de sécurité pour les sauvegardes

Catégorie OWASP : MASVS-CODE : qualité du code

Présentation

Les sauvegardes d'applications visent à préserver les données des utilisateurs afin qu'elles puissent être restaurées ultérieurement sur un nouvel appareil ou en cas de perte de données. Les recommandations de sécurité existantes concernant les sauvegardes d'applications sont nuancées et varient selon les versions d'Android et les fabricants d'appareils. Le thème commun est que ces recommandations visent à s'assurer qu'aucune donnée sensible n'est divulguée.

Le système de sauvegarde Android standard fournit la solution la plus sécurisée, la plus robuste et la plus simple pour les applications afin de sauvegarder leurs données dans le cloud ou de transférer des données sur un nouvel appareil via la sauvegarde automatique (activée par défaut, qui ne nécessite aucune mise en œuvre et qui peut également être étendue) et la sauvegarde clé-valeur. Nous vous recommandons d'utiliser cette solution, car elle stocke les données de sauvegarde résultantes dans des répertoires inaccessibles par d'autres applications tierces, et facilite le chiffrement au repos et en transit, ainsi que les configurations permettant d'exclure les données sensibles des sauvegardes.

Si une application implémente une solution de sauvegarde qui ne dépend pas du système de sauvegarde Android standard, cela peut augmenter la probabilité d'erreurs entraînant des fuites de données sensibles. Les applications proposant une fonctionnalité d'exportation ou de sauvegarde qui crée une copie des données de l'application dans des répertoires lisibles par d'autres applications sont des exemples de solutions de sauvegarde non standards qui exposent les données utilisateur à des fuites. Elles sont donc sujettes à des fuites (directement ou via d'autres failles).

Impact

Suivre les recommandations de sécurité lors de la configuration des sauvegardes d'applications permet d'éviter les fuites potentielles de données sensibles que les sauvegardes peuvent inclure. En fonction des données réelles et des intentions de l'attaquant, une fuite de données sensibles peut entraîner la divulgation d'informations, l'usurpation d'identité d'utilisateur et des pertes financières.

Stratégies d'atténuation

Utiliser le système de sauvegarde Android standard

Le système de sauvegarde Android standard chiffre toujours les données de sauvegarde en transit et au repos. Ce chiffrement est appliqué quelle que soit la version d'Android utilisée et que votre appareil dispose ou non d'un écran de verrouillage. À partir d'Android 9, si un écran de verrouillage est défini sur l'appareil, les données de sauvegarde sont non seulement chiffrées, mais aussi chiffrées avec une clé inconnue de Google (le secret de l'écran de verrouillage protège la clé de chiffrement, ce qui permet le chiffrement de bout en bout).

En général, n'oubliez pas de respecter les consignes de stockage des données et de sécurité.

Si votre sauvegarde inclut des données particulièrement sensibles, nous vous recommandons de les exclure ou, si vous ne pouvez pas les exclure, d'exiger le chiffrement de bout en bout, comme décrit dans la section suivante.

Exclure les données de la sauvegarde

Vous pouvez spécifier les données à exclure d'une sauvegarde à l'aide d'un fichier de règles, généralement appelé backup_rules.xml et placé dans le dossier de l'application res/xml. La configuration des règles de sauvegarde diffère selon la version d'Android utilisée:

Ensuite, configurez le fichier backup_rules.xml en fonction des exigences de persistance et de sécurité des données de l'application, en suivant le format de configuration mis à jour.

Le format requis pour la configuration du fichier backup_rules.xml permet aux développeurs de définir des règles de sauvegarde personnalisées à la fois pour le cloud et les transferts d'appareil à appareil (D2D). Si l'attribut <device-transfer> n'est pas défini, toutes les données de l'application seront transférées lors d'une migration D2D. Il est important de souligner que même si l'application cible cible Android 12 ou une version ultérieure, un fichier distinct avec un ensemble supplémentaire de règles de sauvegarde doit toujours être spécifié pour les appareils exécutant Android 11 (niveau d'API 30) ou version antérieure.

  • Pour Android 11 et les versions antérieures, ajoutez un attribut android:fullBackupContent à l'élément <application> dans AndroidManifest.xml:
  • xml xml <application android:name="com.example.foo" android:fullBackupContent="@xml/backup_rules_full"> … </application>

Configurez ensuite le fichier backup_rules.xml conformément aux exigences de sécurité et de persistance des données de l'application à l'aide de la syntaxe indiquée dans l'article Sauvegarder les données utilisateur.

Exiger le chiffrement de bout en bout

Si vous ne pouvez pas exclure les données sensibles de votre sauvegarde, nous vous recommandons d'exiger le chiffrement de bout en bout, ce qui signifie que les sauvegardes ne sont autorisées que sur Android 9 ou version ultérieure, et uniquement lorsque l'écran de verrouillage est défini. Pour ce faire, utilisez l'indicateur requireFlags="clientSideEncryption", qui doit être renommé disableIfNoEncryptionCapabilities et défini sur true à partir d'Android 12.

Si vous ne pouvez pas utiliser le système de sauvegarde Android standard

Si vous ne pouvez pas utiliser le système de sauvegarde Android standard, le stockage sécurisé de vos données de sauvegarde et la spécification des données à exclure de votre sauvegarde sont plus complexes. Cela doit être spécifié au niveau du code et est par conséquent sujet à des erreurs, ce qui risque de provoquer des fuites de données. Dans ce scénario, nous vous recommandons également de tester régulièrement votre mise en œuvre pour vous assurer que le comportement de sauvegarde attendu n'a pas changé.

Ressources