Selon Google, les défauts de sécurité de la mémoire menacent fréquemment la sécurité des appareils, en particulier pour les applications et les systèmes d'exploitation. Par exemple, sur le système d'exploitation mobile Android, Google dit avoir constaté que plus de la moitié des vulnérabilités de sécurité traitées en 2019 résultaient de bogues de sécurité de la mémoire. Et ce, malgré les efforts considérables déployés par l'entreprise et d'autres contributeurs au projet Open Source Android, pour investir ou inventer diverses technologies, notamment l'AddressSanitizer, des allocateurs de mémoire améliorés et de nombreux fuzzers et autres outils de vérification du code.
« Nous investissons beaucoup d'efforts et de ressources dans la détection, la correction et l'atténuation de cette catégorie de bogues, et ces efforts sont efficaces pour empêcher un grand nombre de bogues de se retrouver dans les différentes versions d'Android. Cependant, en dépit de ces efforts, les bogues de sécurité de la mémoire continuent d'être l'une des principales causes de problèmes de stabilité, et représentent systématiquement environ 70 % des vulnérabilités de sécurité de haute gravité d'Android », a déclaré Google.
L'approche globale de la sécurité d'Android est multiple et s'appuie sur plusieurs principes et techniques pour parvenir à des solutions guidées par les données afin de rendre difficile toute exploitation malveillante. En début d’année, Google a indiqué que l'équipe chargée de la plateforme Android abattait un gros travail pour sécuriser son système d’exploitation mobile.
« Outre les mises à jour de sécurité mensuelles visant à corriger les vulnérabilités qui nous sont signalées dans le cadre de notre programme de récompense des vulnérabilités (VRP), nous concevons également de manière proactive l'architecture d'Android afin de nous protéger contre les éventuelles vulnérabilités grâce à des mesures de renforcement telles que l'application de mesures d'atténuation basées sur le compilateur et l'amélioration du sandboxing ».
Google utilise diverses sources pour déterminer les zones de la plateforme qui bénéficieraient le plus des mesures d'atténuation de la sécurité. Le programme Android Vulnerability Rewards est une source très instructive : toutes les vulnérabilités soumises dans le cadre de ce programme sont analysées par des ingénieurs en sécurité afin de déterminer la cause profonde de chaque vulnérabilité et sa gravité.
Il existe d'autres sources de détections des vulnérabilités comme les rapports internes et externes de bogues, qui identifient les composants vulnérables et révèlent les pratiques de codage qui conduisent généralement à des erreurs. La connaissance des modèles de code problématiques, combinée à la prévalence et à la gravité des vulnérabilités qu'ils provoquent, peut aider à prendre des décisions éclairées sur les mesures d'atténuation qui seront probablement les plus bénéfiques.
Les niveaux inférieurs du système d'exploitation nécessitent des langages de programmation de systèmes comme C, C++ et Rust. Ces langages sont conçus avec pour objectifs le contrôle et la prévisibilité. Ils permettent d'accéder aux ressources système et au matériel de bas niveau. Ils sont peu gourmands en ressources et ont des caractéristiques de performance plus prévisibles. Avec C et C++, le développeur est responsable de la gestion de la durée de vie de la mémoire. Malheureusement, il est facile de faire des erreurs en faisant cela, surtout dans les bases de code complexes et multithreadées.
Selon Google, Rust fournit des garanties de sécurité de la mémoire en utilisant une combinaison de contrôles à la compilation pour faire respecter la durée de vie/la propriété des objets et des contrôles à l'exécution pour s'assurer que les accès à la mémoire sont valides. Cette sécurité est obtenue tout en offrant des performances équivalentes à celles du C et du C++. Google estime que les langages orientés sécurité mémoire, comme Rust, sont « le moyen le plus rentable de prévenir les bogues de mémoire » dans le bootloader, le fastboot, le noyau et d'autres parties de bas niveau du système d'exploitation.
Les langages comme Java et Kotlin constituent la meilleure option pour le développement d'applications Android. Ces langages sont conçus pour la facilité d'utilisation, la portabilité et la sécurité. L'Android Runtime (ART) gère la mémoire pour le compte du développeur. Le système d'exploitation Android utilise largement Java, ce qui protège efficacement de grandes parties de la plateforme Android contre les bogues de mémoire. Malheureusement, pour les couches inférieures de l'OS, Java et Kotlin ne sont pas adaptés.
Contrairement à C et C++, où les développeurs gèrent la durée de vie de la mémoire, Rust « fournit des garanties de sécurité de la mémoire en utilisant une combinaison de contrôles à la compilation pour faire respecter la durée de vie ou la propriété des objets et des contrôles à l'exécution pour s'assurer que les accès à la mémoire sont valides ». Les performances sont équivalentes à celles des langages existants, tout en augmentant l'efficacité du sandboxing et en réduisant son besoin global. Parmi les autres améliorations, citons la concurrence des données, un système de types plus expressif et une gestion plus sûre des entiers.
En ce qui concerne le code existant, Google se concentre davantage sur le développement d'un nouveau Rust que sur la réécriture d'un code mature. Selon Google, la plupart des « bogues de mémoire surviennent dans du code nouveau ou récemment modifié, dont environ 50 % ont moins d'un an ». « La rareté relative des anciens bogues de mémoire peut surprendre certains, mais nous avons constaté que ce n'est pas dans les vieux codes qu'il est le plus urgent d'apporter des améliorations. Les bogues de logiciels sont découverts et corrigés au fil du temps. On peut donc s'attendre à ce que le nombre de bogues dans le code qui est maintenu mais pas activement développé diminue avec le temps », ajoute l’entreprise.
Google a également annoncé en début de ce mois que la nouvelle version de Gabeldorsche, la pile Bluetooth utilisée dans Android depuis la version 11, a été réécrite avec Rust. Sur le référentiel Git comportant les codes sources de la plateforme Android, seules les instructions d'assemblage sont disponibles. « Actuellement, les composants Rust sont construits différemment sur Android et sur Linux. Il nous manque le support de Rust dans notre chaîne d'outils GN. Nous construisons donc actuellement les bibliothèques Rust en tant que staticlib et les lions en C++. Cela pourrait changer à l'avenir lorsque nous aurons un meilleur support », a déclaré l'équipe.
Même si le langage de programmation Rust se popularise davantage, une popularité grandement alimentée par les grandes entreprises technologiques et les solutions utilisées à grande échelle, Google reconnaît que l'introduction d'un nouveau langage de programmation ne résout en rien les bogues du code C/C++ existant. « Même si nous réorientons les efforts de chaque ingénieur logiciel de l'équipe Android, la réécriture de dizaines de millions de lignes de code est tout simplement impossible », souligne Google.
L'âge des bugs de sécurité de la mémoire dans Android
L'analyse ci-dessus de l'âge des bogues de sécurité de la mémoire dans Android (mesuré à partir du moment où ils ont été introduits pour la première fois) démontre pourquoi les efforts en matière de langage de sécurité de la mémoire sont mieux concentrés sur le nouveau développement et non sur la réécriture du code C/C++. La plupart des bogues de mémoire se produisent dans du code nouveau ou du code récemment modifié, environ 50 % ayant moins d'un an.
Dans une annonce faite sur son blog le 8 février, Google s’est dit ravie d’avoir rejoint la fondation Rust et se dispose pour travailler sur des questions comme l'interopérabilité avec C++. « S'appuyant sur les investissements de longue date de Google dans le C/C++ et les compilateurs et chaînes d'outils, nous sommes ravis d'annoncer notre adhésion à la fondation Rust », avait déclaré Google sur son blog. « Nous sommes impatients de participer davantage à la communauté Rust, en particulier de travailler dans l'ensemble sur des questions importantes, notamment l'interopérabilité avec C++, la coordination des examens de sécurité, la réduction des coûts des mises à jour et de continuer à accroître nos investissements dans les projets Rust existants », a ajouté l'entreprise.
En guise de rappel, AWS, Huawei, Google, Microsoft et Mozilla se sont associées pour lancer la fondation Rust et se sont également engagées à lui consacrer un budget de deux ans à hauteur d'un million de dollars. Ce budget permettra au projet de développer des services, des programmes et des événements qui aideront les responsables du projet Rust à développer le meilleur Rust possible.
Source : Google
Et vous ?
Quel est votre avis sur le sujet ?
Quels commentaires faites-vous de l'adoption massive de Rust par les grandes entreprises ?
Quelles peuvent être selon-vous les conséquences d'une telle adoption massive ?
Voir aussi :
Google Play Store abritait 56 applications installées dans plus de 1,7 million d'appareils et infectées par le malware Tekya, qui n'a pas pu être détecté par VirusTotal et Google Play Protect
Microsoft, Google, AWS, Huawei et Mozilla s'associent pour créer la Fondation Rust, une organisation à but non lucratif chargée de gérer le langage de programmation
La nouvelle réécriture de la pile Bluetooth d'Android est faite avec le langage Rust, Google devrait annoncer plus d'informations sur le code dans les prochaines semaines
Google avertit que des dizaines de millions de téléphones Android sont préchargés avec des logiciels malveillants dangereux, plus de 200 fabricants d'appareils ont été mis à rude épreuve