Android a toujours pris en charge les accessoires de stockage externes (tels que les cartes SD), mais ces accessoires étaient historiquement limités au simple stockage de fichiers, en raison de leur impermanence attendue et de la protection minimale des données offerte au stockage externe traditionnel . Android 6.0 a introduit la possibilité d' adopter des supports de stockage externes pour agir comme un stockage interne.
Lorsque le support de stockage externe est adopté, il est formaté et crypté pour ne fonctionner qu'avec un seul appareil Android à la fois. Étant donné que le média est fortement lié à l'appareil Android qui l'a adopté, il peut stocker en toute sécurité les applications et les données privées de tous les utilisateurs.
Lorsque les utilisateurs insèrent un nouveau support de stockage (comme une carte SD) dans un emplacement adoptable, Android leur demande comment ils souhaitent utiliser le support. Ils peuvent choisir d'adopter le support, qui le formate et le crypte, ou ils peuvent continuer à l'utiliser tel quel pour un simple stockage de fichiers. S'ils choisissent d'adopter, la plate-forme propose de migrer le contenu du stockage partagé principal (généralement monté sur /sdcard
) vers le support nouvellement adopté, libérant ainsi un espace précieux sur le stockage interne. Contrairement au stockage traditionnel, qui est limité à 2 To en raison de son utilisation du MBR , le stockage adoptable utilise GPT et a donc une limite de stockage de fichiers de ~ 9Zo.
Les applications peuvent être placées sur les supports de stockage adoptés uniquement lorsque le développeur a indiqué la prise en charge via l'attribut android:installLocation
. Les nouvelles installations d'applications prises en charge sont automatiquement placées sur le périphérique de stockage avec le plus d'espace libre, et les utilisateurs peuvent déplacer les applications prises en charge entre les périphériques de stockage dans l'application Paramètres . Les applications déplacées vers les médias adoptés sont mémorisées pendant que le média est éjecté et reviennent lorsque le média est réinséré.
Sécurité
La plate-forme génère de manière aléatoire des clés de cryptage pour chaque appareil adopté et les stocke sur le stockage interne de l'appareil Android. Cela rend effectivement le média adopté aussi sûr que le stockage interne. Les clés sont associées aux périphériques adoptés en fonction du GUID de partition adopté.
Si l'appareil est configuré pour utiliser le chiffrement basé sur fichier (FBE) sur son stockage interne, le stockage adoptable utilise à la fois le chiffrement FBE et le chiffrement des métadonnées . Sinon, le stockage adoptable utilise le chiffrement intégral du disque (FDE).
La disposition sur disque du périphérique adopté reflète étroitement la partition de données interne, y compris les étiquettes SELinux, etc. Lorsque le multi-utilisateur est pris en charge sur le périphérique Android, le périphérique de stockage adopté prend également en charge le multi-utilisateur avec le même niveau d'isolement que interne. stockage.
Étant donné que le contenu d'un périphérique de stockage adopté est fortement lié à l'appareil Android qui l'a adopté, les clés de chiffrement ne doivent pas pouvoir être extraites du périphérique parent et, par conséquent, le périphérique de stockage ne peut pas être monté ailleurs.
Si votre appareil utilise FBE, consultez la documentation FBE et la documentation sur le chiffrement des métadonnées pour savoir comment configurer FBE et le chiffrement des métadonnées sur un stockage adoptable.
Performances et stabilité
Seuls les supports de stockage externes dans des emplacements stables, tels qu'une fente à l'intérieur d'un compartiment de batterie ou derrière un couvercle de protection, doivent être envisagés pour l'adoption afin d'éviter la perte ou la corruption accidentelle de données. En particulier, les périphériques USB connectés à un téléphone ou à une tablette ne doivent jamais être envisagés pour adoption. Une exception courante serait un lecteur USB externe connecté à un appareil de type téléviseur, car l'ensemble du téléviseur est généralement installé dans un emplacement stable.
Lorsqu'un utilisateur adopte un nouveau périphérique de stockage, la plate-forme exécute un benchmark et compare ses performances au stockage interne. Si l'appareil adopté est nettement plus lent que le stockage interne, la plateforme avertit l'utilisateur d'une expérience éventuellement dégradée. Cette référence a été dérivée du comportement d'E/S réel des applications Android populaires. Actuellement, la mise en œuvre de l'AOSP n'avertit les utilisateurs qu'au-delà d'un seul seuil, mais les fabricants d'appareils peuvent l'adapter davantage, par exemple en rejetant complètement l'adoption si la carte est extrêmement lente.
Les appareils adoptés doivent être formatés avec un système de fichiers prenant en charge les autorisations POSIX et les attributs étendus, tels que ext4
ou f2fs
. Pour des performances optimales, le système de fichiers f2fs
est recommandé pour les périphériques de stockage flash.
Lors de l'exécution d'une maintenance périodique en cas d'inactivité, la plate-forme émet FI_TRIM
sur les supports adoptés, tout comme elle le fait pour le stockage interne. La spécification actuelle de la carte SD ne prend pas en charge la commande DISCARD
; mais le noyau revient à la place à la commande ERASE
, que le micrologiciel de la carte SD peut choisir d'utiliser à des fins d'optimisation.
Essai
Pour vérifier que le stockage adoptable fonctionne, exécutez ce test CTS :
cts-tradefed run commandAndExit cts-dev \ -m CtsAppSecurityHostTestCases \ -t android.appsecurity.cts.AdoptableHostTest
Pour vérifier le comportement des clés USB et des cartes SD lorsqu'un périphérique n'a pas de slot intégré ou lorsque le connecteur USB est utilisé pour une connexion adb active, utilisez :
adb shell sm set-virtual-disk true