Sécurité de la mémoire

Risque de mémoire

Les bugs de sécurité de la mémoire, les erreurs de gestion de la mémoire dans les langages de programmation natifs, sont le problème le plus courant dans les bases de code Android. Ils représentent plus de 60 % des vulnérabilités de sécurité de grande gravité et des millions de plantages visibles par les utilisateurs.

Les bogues de sécurité de la mémoire ont un impact sur l'expérience utilisateur, les coûts et la sécurité.
Figure 1 : Bugs de sécurité mémoire et leur impact négatif sur la qualité, la sécurité et les coûts

Les bugs de sécurité de la mémoire ont un impact négatif sur la qualité et la stabilité et représentent une part importante des plantages observés sur les appareils des utilisateurs finaux. Par conséquent, une forte densité de bogues de sécurité de la mémoire est directement corrélée à une mauvaise expérience utilisateur.
Le code natif, écrit dans des langages non sécurisés en mémoire comme C, C++ et Assembly, représente plus de 70 % du code de la plate-forme Android et est présent dans environ 50 % des applications du Play Store.
Compte tenu de la complexité toujours croissante du code, s’il est laissé sans surveillance, les bogues de sécurité de la mémoire vont augmenter avec le temps. Par conséquent, fournir à notre écosystème les outils et les technologies capables de détecter et d’atténuer ces bugs est essentiel à notre succès à long terme.
Au cours des dernières années, nous avons travaillé en étroite collaboration avec nos partenaires matériels pour développer des technologies matérielles telles que Arm Memory Tagging et avons introduit Rust dans la base de code Android.
Ces technologies vont accélérer notre chemin vers la sécurité de la mémoire et vont aider l’industrie du logiciel au sens large à résoudre un problème clé.

Les bugs de sécurité de la mémoire affectent négativement la qualité

Des bogues latents de sécurité de la mémoire peuvent entraîner des résultats non déterministes, en fonction de l'état du système. Ce comportement imprévisible entraîne des plantages et des désagréments pour nos utilisateurs.

Chaque jour, nous observons des millions de plantages natifs sur les appareils des utilisateurs finaux et avec l'introduction de GWP-ASan , nous avons attribué la majorité d'entre eux à des bogues de sécurité de la mémoire.
Ce point de données valide la corrélation entre la qualité et la densité des bogues de sécurité de la mémoire et est conforme à ce que nos collègues Chrome observent (voir la hotlist des bogues Chrome GWP-ASan ).

Les bugs de sécurité de la mémoire affectent négativement la sécurité

Les bogues de sécurité de la mémoire ont toujours été le principal contributeur aux vulnérabilités de sécurité d'Android, remontant dès la première version d'Android.

Les bugs de sécurité de la mémoire affectent négativement la sécurité.
Figure 2 : Contribution des bugs de sécurité mémoire aux vulnérabilités Android

S'il est encourageant de savoir qu'il ne s'agit pas uniquement d'un problème Android (voir les statistiques Chrome et Microsoft ), nous devons faire davantage pour la sécurité de nos utilisateurs.
L' équipe Project Zero de Google suit les exploits Zero Day qui ont été utilisés dans de véritables attaques contre les utilisateurs en tant que vulnérabilités Zero Day. Ce ne sont pas des bugs hypothétiques mais des exploits activement utilisés dans les attaques contre les utilisateurs. Les bogues de sécurité de la mémoire (corruption de la mémoire et utilisation après libération) constituent une écrasante majorité.

Les bugs de sécurité de la mémoire augmentent les coûts

Garder les appareils à jour avec les correctifs de sécurité assure la sécurité de nos utilisateurs, mais entraîne un coût monétaire pour notre écosystème.

La haute densité de bogues de sécurité mémoire dans le code des fournisseurs de bas niveau, qui comporte souvent des modifications personnalisées, augmente considérablement les coûts de correction et de tests. Cependant, la détection de ces bogues au début du cycle de développement peut réduire ces coûts.

La recherche montre que la détection précoce des bugs peut réduire les coûts jusqu'à six fois. Cependant, compte tenu de la complexité de notre écosystème, du nombre moyen de bases de code gérées par un fournisseur et de la complexité toujours croissante des logiciels, les économies pourraient être plus importantes.

Sécurité de la mémoire

À partir d'Android 12, nous avons apporté des modifications systémiques pour réduire la densité des bogues de sécurité de la mémoire dans les bases de code Android. Nous étendons les outils de sécurité de la mémoire Android et introduisons de nouvelles exigences qui encouragent notre écosystème à résoudre cette catégorie de bugs. Au fil du temps, cela devrait se traduire par une meilleure qualité et une meilleure sécurité pour nos utilisateurs et une réduction des coûts pour nos fournisseurs.

La sécurité de la mémoire deviendra probablement un facteur de différenciation en matière de qualité et de sécurité dans les années à venir, et Android prévoit de montrer la voie.

Exigences en faveur de la sécurité de la mémoire

Le document de définition de compatibilité Android (CDD) recommande fortement l'utilisation d'outils de sécurité de la mémoire pendant le développement.
Nous travaillons en étroite collaboration avec notre écosystème pour accroître l'utilisation d'outils de sécurité de la mémoire et les intégrer dans les processus d'intégration et de test continus.
Au fil du temps, nous souhaitons nous assurer que chaque appareil réussit une exécution complète de la suite de tests de compatibilité ( CTS ), à l'aide d'outils de sécurité de la mémoire, ce qui démontre qu'aucun bogue de ce type n'a été trouvé. Par exemple, les plates-formes Arm v9 devront fournir une exécution CTS avec le marquage de la mémoire activé, tandis que les plates-formes Arm v8 devront fournir une exécution CTS utilisant HWASAN et KASAN.

Rust comme nouveau langage de programmation pour le code de plateforme

Android 12 a introduit Rust comme langage de plateforme . Rust offre une sécurité de la mémoire et des threads à des niveaux de performances similaires à ceux du C/C++. Nous nous attendons à ce que Rust soit le choix préféré pour la plupart des nouveaux projets natifs. Cependant, réécrire tout le code non sécurisé en mémoire, représentant actuellement plus de 70 % du code de la plate-forme Android, dans Rust n'est pas réalisable. À l’avenir, Rust sera complémentaire aux outils de sécurité de la mémoire.

Outils de sécurité de la mémoire

Android prend en charge une grande variété d'outils permettant de détecter les bogues de sécurité de la mémoire. La figure ci-dessous présente une taxonomie des outils de sécurité de la mémoire Android disponibles.

Les bugs de sécurité de la mémoire affectent négativement la sécurité.
Figure 3 : paysage des outils de sécurité de la mémoire Android

Nos outils couvrent une vaste gamme de scénarios et de cibles de déploiement. La documentation suivante décrit chaque outil et fournit une référence pour leur utilisation dans vos produits.