Rust fait partie des principaux langages de développement de la plateforme Android

Google a annoncé l'inclusion du langage de programmation Rust parmi les langages autorisés pour développer la plateforme Android. Le compilateur du langage Rust a été inclus dans l’arborescence des sources d’Android en 2019, mais la prise en charge de ce langage est restée expérimentale. Certains des premiers composants Rust prévus pour Android incluent de nouvelles implémentations du mécanisme de communication interprocessus Binder et de la pile Bluetooth.

L'introduction de Rust a été réalisée dans le cadre d'un projet visant à renforcer la sécurité, à promouvoir des techniques de programmation sûres et à augmenter l'efficacité de l'identification des problèmes lors de l'utilisation de la mémoire sous Android. Il est à noter qu'environ 70 % de toutes les vulnérabilités dangereuses identifiées dans Android sont causées par des erreurs lors du travail avec la mémoire. L'utilisation de Rust, qui se concentre sur la sécurité de la mémoire et la gestion automatique de la mémoire, réduira le risque de vulnérabilités causées par des erreurs de mémoire telles que l'accès après libération et les dépassements de mémoire tampon.

Rust assure la sécurité de la mémoire au moment de la compilation grâce à la vérification des références, à la propriété des objets et au suivi de la durée de vie des objets (portées), et en évaluant l'exactitude des accès à la mémoire au moment de l'exécution. Rust offre également une protection contre les débordements d'entiers, nécessite que les valeurs des variables soient initialisées avant utilisation, offre une meilleure gestion des erreurs dans la bibliothèque standard, utilise le concept de références et de variables immuables par défaut et propose un typage statique fort pour minimiser les erreurs logiques.

Sous Android, la sécurité de la mémoire est assurée dans les langages Kotlin et Java déjà pris en charge, mais ils ne conviennent pas au développement de composants système en raison de la surcharge élevée. Rust permet d'atteindre des performances proches des langages C et C++, ce qui lui permet d'être utilisé pour développer des parties de bas niveau de la plateforme et des composants pour interagir avec le matériel.

Pour garantir la sécurité du code C et C++, Android utilise l'isolation sandbox, l'analyse statique et les tests de fuzzing. Les capacités d'isolation du bac à sable sont limitées et ont atteint la limite de leurs capacités (une fragmentation supplémentaire en processus n'est pas pratique du point de vue de la consommation des ressources). Les limites de l'utilisation du bac à sable incluent des frais généraux importants et une consommation de mémoire accrue causée par la nécessité de générer de nouveaux processus, ainsi que des retards supplémentaires associés à l'utilisation d'IPC.

Dans le même temps, le bac à sable n'élimine pas les vulnérabilités du code, mais réduit seulement les risques et complique l'attaque, puisque l'exploitation nécessite l'identification non pas d'une, mais de plusieurs vulnérabilités. Les méthodes basées sur les tests de code sont limitées dans la mesure où pour identifier les erreurs, il est nécessaire de créer les conditions pour que le problème se manifeste. Il n’est pas possible de couvrir toutes les options possibles, c’est pourquoi de nombreuses erreurs passent inaperçues.

Pour les processus système sous Android, Google adhère à la « règle de deux », selon laquelle tout code ajouté ne doit remplir que deux des trois conditions : travailler avec des données d'entrée non validées, utiliser un langage de programmation non sécurisé (C/C++) et fonctionnant sans isolation stricte du bac à sable (ayant des privilèges élevés). Cette règle implique que le code de traitement des données externes doit être soit réduit à des privilèges minimaux (isolé), soit écrit dans un langage de programmation sécurisé.

Google n'a pas pour objectif de réécrire le code C/C++ existant dans Rust, mais prévoit d'utiliser ce langage pour développer du nouveau code. Il est logique d'utiliser Rust pour le nouveau code car, statistiquement, la plupart des bogues apparaissent dans du code nouveau ou récemment modifié. En particulier, environ 50 % des erreurs de mémoire détectées dans Android sont détectées dans du code écrit il y a moins d'un an.

Rust fait partie des principaux langages de développement de la plateforme Android


Source: opennet.ru

Ajouter un commentaire