Sécurité de la mémoire

Cette page décrit les bugs et les outils liés à la sécurité de la mémoire.

Insécurité de la mémoire

Les bugs de sécurité au niveau de la mémoire, qui sont des 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 failles de sécurité de gravité élevéeet des millions de plantages visibles par les utilisateurs.

 Les bugs liés à la 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é au niveau de la mémoire et leur impact négatif sur la qualité, la sécurité et les coûts

Les bugs de sécurité au niveau 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 bugs de sécurité au niveau 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 au niveau de la mémoire tels que 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 Google Play Store.
Compte tenu de la complexité croissante du code, si rien n'est fait, les bugs de sécurité au niveau de la mémoire vont augmenter au fil du temps. Par conséquent, il est essentiel pour notre succès à long terme de fournir à notre écosystème les outils et les technologies permettant de détecter et d'atténuer ces bugs.
Au cours des dernières années, nous avons collaboré étroitement avec nos partenaires matériels pour développer des technologies matérielles telles que le balisage de la mémoire Arm et avons introduit Rust dans la base de code Android.
Ces technologies vont accélérer notre transition vers la sécurité de la mémoire et aider l'ensemble du secteur des logiciels à résoudre un problème clé.

Les bugs de sécurité au niveau de la mémoire ont un impact négatif sur la qualité

Les bugs de sécurité au niveau de la mémoire latents 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 constaté que la majorité d'entre eux étaient dus à des bugs de sécurité au niveau de la mémoire.
Ce point de données valide la corrélation entre la qualité et la densité des bugs de sécurité au niveau de la mémoire, et correspond à ce que nos collègues de Chrome observent (voir la liste des bugs les plus importants de Chrome GWP-ASan).

Les bugs de sécurité au niveau de la mémoire ont un impact négatif sur la sécurité

Les bugs de sécurité au niveau de la mémoire ont toujours été la principale cause des failles de sécurité Android, depuis la première version d'Android.

Les bugs de sécurité de la mémoire ont un impact négatif sur la sécurité.

Figure 2. Contribution des bugs de sécurité au niveau de la mémoire aux failles Android

Bien qu'il soit encourageant de savoir qu'il ne s'agit pas uniquement d'un problème Android (voir les statistiques de Chrome et de Microsoft ), nous devons faire plus pour la sécurité de nos utilisateurs.
L'équipe Project Zero de Google suit les exploits zero day qui ont été utilisés dans des attaques réelles contre des utilisateurs en tant que failles zero day vulnerabilities. Il ne s'agit pas de bugs hypothétiques, mais d'exploits activement utilisés dans des attaques contre des utilisateurs. Les bugs de sécurité au niveau de la mémoire (corruption de la mémoire et utilisation après libération) représentent une majorité écrasante.

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

Maintenir les appareils à jour avec des correctifs de sécurité protège nos utilisateurs, mais cela a un coût monétaire pour notre écosystème.

La forte densité de bugs de sécurité au niveau de la mémoire dans le code fournisseur de bas niveau, qui comporte souvent des modifications personnalisées, augmente considérablement les coûts de correction et de test. Toutefois, la détection précoce de ces bugs au cours du cycle de développement peut réduire ces coûts.

Les recherches montrent que la détection précoce des bugs peut réduire les coûts jusqu'à six fois. Toutefois, 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é croissante des logiciels, les économies pourraient être plus importantes.

Sécurité de la mémoire

Android 12 et versions ultérieures incluent des modifications systémiques visant à réduire la densité des bugs de sécurité au niveau 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. À terme, cela devrait se traduire par une qualité et une sécurité accrues pour nos utilisateurs ainsi que par des coûts réduits pour nos fournisseurs.

La sécurité de la mémoire devrait devenir un facteur de différenciation en termes de qualité et de sécurité dans les années à venir, et Android prévoit d'ouvrir 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 lors du développement.

Nous collaborons étroitement avec notre écosystème pour accroître l'utilisation des outils de sécurité de la mémoire et les intégrer aux processus d'intégration et de test continus.

À terme, nous souhaiterions nous assurer que chaque appareil réussit une exécution complète de la Compatibility Test Suite (CTS) à l'aide d'outils de sécurité de la mémoire, ce qui démontre qu'aucun bug de ce type n'a été détecté. Par exemple, les plates-formes Arm v9 devront fournir une exécution CTS avec le balisage de la mémoire activé, tandis que les plates-formes Arm v8 devront fournir une exécution CTS à l'aide de HWASAN et de KASAN.

Rust comme nouveau langage de programmation pour le code de la plate-forme

Android 12 a introduit Rust comme langage de plate-forme. Rust protège la mémoire et les threads avec des niveaux de performances similaires à ceux de C/C++. Nous nous attendons à ce que Rust soit le choix privilégié pour la plupart des nouveaux projets natifs. Toutefois, il n'est pas possible de réécrire en Rust tout le code non sécurisé au niveau de la mémoire, qui représente actuellement plus de 70% de du code de la plate-forme Android. À l'avenir, Rust sera complémentaire des outils de sécurité de la mémoire.

Outils de sécurité de la mémoire

Android est compatible avec une grande variété d'outils permettant de détecter les bugs de sécurité au niveau 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 ont un impact négatif sur la sécurité.

Figure 3. Panorama des outils de sécurité de la mémoire Android

Nos outils couvrent un large éventail de scénarios et de cibles de déploiement. La documentation de cette section décrit chaque outil et fournit une référence pour les utiliser dans vos produits.