Catégorie OWASP : MASVS-STORAGE : stockage
Présentation
Les applications stockent généralement des données à utiliser, que ce soit en local sur l'appareil, sur un stockage externe ou à distance sur un stockage cloud. Pour préserver l'état des applis, des sauvegardes sont effectuées de sorte que celles-ci puissent être restaurées en cas de défaillance critique ou suite à une erreur de la part de l'utilisateur entraînant une perte de données. Lorsque les données stockées concernent des informations sensibles, telles que les données personnelles, les clés d'authentification ou les mots de passe d'un utilisateur, des mesures de sécurité supplémentaires peuvent être appliquées pour éviter que ces données sensibles ne fuitent si quelqu'un d'autre accède à la sauvegarde.
Il est important de noter que l'une des méthodes les plus courantes pour récupérer des données de sauvegarde est d'utiliser la commande de sauvegarde ADB, qui nécessite l'activation des Options pour les développeurs sur l'appareil. Afin d'activer les Options pour les développeurs le code de l'utilisateur est requis. Tout pirate informatique potentiel doit d'abord casser le code de l'utilisateur afin de récupérer les données de sauvegarde.
Impact
Un pirate informatique ayant accès au fichier de sauvegarde d'une appli peut récupérer toutes les données non chiffrées sauvegardées par celle-ci. Par conséquent, toutes les données sensibles exposées peuvent être utilisées par le pirate informatique lors de futures attaques ou être facilement exploitées.
Risque : autorisation de la sauvegarde des applis
Tout pirate informatique disposant d'un accès physique à un appareil déverrouillé ou à un compte Google piraté peut effectuer une sauvegarde d'une appli et de ses données.
Il est important de noter qu'à partir d'Android 12, les données des applis ne sont plus incluses dans les données de sauvegarde, à condition que l'attribut android:debuggable
se trouvant dans le fichier manifeste Android soit défini sur false
. Par conséquent, toutes les données d'applis non chiffrées incluses dans la sauvegarde peuvent être exposées et utilisées de manière abusive par le pirate informatique.
Il est important de noter que si les modifications de configuration suivantes peuvent aider à éviter la fuite de données sensibles dans les fichiers de sauvegarde, tous les fabricants de téléphones ne respectent pas les règles en matière de sauvegarde des applis. Par conséquent, les données qui ne sont pas destinées à être sauvegardées peuvent tout de même être sauvegardées via une solution de sauvegarde OEM unique. Pour tenir compte de ces cas, envisagez de prendre des mesures supplémentaires afin de protéger vos données utilisateur : chiffrez, supprimez et évitez de stocker des données inutiles pouvant être considérées comme sensibles.
Stratégies d'atténuation
Désactiver la sauvegarde des applis
Si les données de sauvegarde d'une appli ne sont pas considérées comme nécessaires au bon fonctionnement de celle-ci, envisagez d'ajouter des règles pour empêcher l'exécution de sauvegardes. Pour limiter les sauvegardes d'une appli, définissez l'attribut android:allowBackup
se trouvant dans le fichier AndroidManifest.xml
sur false
. Notez qu'à partir d'Android 12 et pour les versions ultérieures, définir l'attribut allowBackup
sur false
permet de limiter les sauvegardes Cloud et ADB, tout en autorisant les migrations d'appareil à appareil.
<application android:name="com.example.foo" android:allowBackup="false">
...
</application>
Contrôler les éléments à sauvegarder
Si des sauvegardes sont nécessaires au bon fonctionnement de l'appli, vous pouvez définir des règles de sauvegarde pour indiquer les données à sauvegarder. Ces règles sont définies dans un fichier backup_rules.xml. La configuration de ces règles diffère selon la version d'Android utilisée :
Pour Android 12 et les versions ultérieures, ajoutez un attribut android:dataExtractionRules
à l'élément <application>
dans le fichier AndroidManifest.xml, comme dans l'exemple suivant :
<application android:name="com.example.foo"
android:dataExtractionRules="backup_rules.xml">
…
</application>
<application android:name="com.example.foo"
android:fullBackupContent="@xml/backup_rules">
…
</application>
Risque : stockage des données sensibles non chiffrées
En fonction de l'objectif d'une appli, certaines données sauvegardées sur l'appareil peuvent être considérées comme sensibles. Il peut notamment s'agir de données personnelles et financières. Un pirate informatique qui parvient à entrer dans l'appareil d'un utilisateur peut être en mesure de récupérer des données sur ce dernier. Toutes les données en texte clair auxquelles le pirate informatique est exposé peuvent alors être exploitées.
Atténuation
Chiffrer toutes les données sensibles
Pour assurer une meilleure sécurité des données, chiffrez toutes les données stockées pouvant être considérées comme sensibles en suivant les Consignes en matière de cryptographie d'Android, et utilisez le système Android Keystore pour protéger les clés de chiffrement.
Si la migration des données d'appli vers de nouveaux appareils doit être prise en charge, envisagez de mettre en œuvre un mode de transfert de données pour l'appli, dans lequel les données chiffrées sont brièvement stockées non chiffrées dans les fichiers internes de l'appli, ce qui permet de transférer les données de l'appli vers un nouvel appareil.
Lorsque vous implémentez un mode de transfert de données, tenez compte des bonnes pratiques suivantes :
- Assurez-vous que le mode de transfert de données ne peut être activé que par un utilisateur de l'appli authentifié.
- Stockez les données non chiffrées en local, dans les fichiers internes de l'appli, et non dans un stockage externe.
- N'autorisez les fichiers non chiffrés que pendant une courte période ; après quoi ces fichiers sont supprimés.
- Une fois les fichiers transférés, faites en sorte que l'appli chiffre les fichiers non chiffrés au démarrage.
Bien que ce mode permette également de sauvegarder des données non chiffrées, la fenêtre d'opportunités limitée disponible pour la sauvegarde non chiffrée réduit les risques qu'un pirate informatique non authentifié puisse accéder à des données en texte clair.
Ressources
- Description de l'attribut allowBackup
- Modifications du comportement des transferts D2D
- Contrôler la sauvegarde sous Android 12 ou version ultérieure
- Contrôler la sauvegarde sur Android 11 ou version antérieure
- Informations permettant d'identifier personnellement l'utilisateur dans les contrats et les règles de Google
- Cryptographie
- Système Android Keystore
- ADB
- Options pour les développeurs