Rust est devenu l'un des principaux langages pour le développement de la plateforme Android

La société Google a annoncé l'inclusion du langage de programmation Rust parmi les langages autorisés pour le développement de la plateforme Android. Le compilateur du langage Rust a été intégré dans l'arbre des sources d'Android dès 2019, mais le support de ce langage est resté expérimental. Parmi les premiers composants en Rust qui seront fournis dans Android, on trouve de nouvelles implémentations du mécanisme de communication interprocessus Binder et du stack Bluetooth.

L'intégration de Rust a été réalisée dans le cadre d'un projet visant à renforcer la sécurité, à promouvoir des pratiques de programmation sûres et à améliorer l'efficacité de la détection des problèmes de gestion de la mémoire dans Android. Il est noté qu'environ 70 % de toutes les vulnérabilités critiques identifiées dans Android sont causées par des erreurs de gestion de la mémoire. L'utilisation du langage Rust, qui se concentre sur une gestion sûre de la mémoire et offre une gestion automatique de la mémoire, permettra de réduire le risque d'apparition de vulnérabilités causées par des erreurs de gestion de la mémoire, telles que l'accès à une zone de mémoire après sa libération et le dépassement de tampon.

La gestion sûre de la mémoire est assurée dans Rust lors de la compilation grâce à la vérification des références, au suivi de la propriété des objets et à la prise en compte de la durée de vie des objets (portée), ainsi qu'à l'évaluation de la validité de l'accès à la mémoire lors de l'exécution du code. Rust offre également des moyens de se protéger contre les débordements d'entiers, exige une initialisation obligatoire des valeurs des variables avant leur utilisation, gère mieux les erreurs dans la bibliothèque standard, applique le concept d'immuabilité (immutable) des références et des variables par défaut, et propose une forte typage statique pour minimiser les erreurs logiques.

Dans Android, la gestion sûre de la mémoire est assurée dans les langages déjà pris en charge comme Kotlin et Java, mais ils ne conviennent pas pour le développement de composants système en raison de leur surcharge importante. Rust permet d'atteindre des performances proches des langages C et C++, ce qui le rend adapté pour le développement des parties basses de la plateforme et des composants d'interaction avec le matériel.

Pour garantir la sécurité du code en C et C++ sur Android, une isolation sandbox, une analyse statique et des tests de fuzzing sont appliquées. Les capacités d'isolement sandbox sont limitées et ont atteint leurs limites (il n'est pas judicieux de fragmenter davantage en processus en raison de la consommation de ressources). Parmi les limitations de l'utilisation de sandbox, on mentionne les frais généraux élevés et la croissance de la consommation de mémoire causée par la nécessité de créer de nouveaux processus, ainsi que les délais supplémentaires liés à l'utilisation de l'IPC.

Cela dit, la sandbox ne supprime pas les vulnérabilités dans le code, mais réduit simplement les risques et complique la réalisation d'attaques, car pour exploiter une vulnérabilité, il faut en identifier plusieurs. Les méthodes basées sur les tests de code sont limitées par le fait que pour détecter des erreurs, il faut créer des conditions pour que le problème se manifeste. Couvrir toutes les variations possibles n'est pas réalisable, donc de nombreuses erreurs restent inaperçues.

Pour les processus système sur Android, Google suit la « règle des deux », selon laquelle tout code ajouté ne doit pas se soumettre à plus de deux des trois conditions suivantes : travailler avec des données d'entrée non vérifiées, utiliser un langage de programmation non sécurisé (C/C++) et s'exécuter sans isolation sandbox stricte (présence de privilèges élevés). De cette règle, il découle que le code pour traiter des données externes doit soit être réduit à des privilèges minimaux (isolés), soit être écrit dans un langage de programmation sécurisé.

Google n'a pas l'intention de réécrire le code C/C++ existant en Rust, mais prévoit d'utiliser ce langage pour le développement de nouveau code. Utiliser Rust pour le nouveau code est judicieux, car les statistiques montrent que la majorité des erreurs apparaissent dans le nouveau code ou celui récemment modifié. En particulier, environ 50 % des erreurs de gestion de la mémoire sur Android sont détectées dans le code écrit depuis moins d'un an.

Rust est devenu l'un des principaux langages pour le développement de la plateforme Android


Source : opennet.ru
Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster