Microsoft publie un kit open source qui vise à permettre le développement de pilotes pour Windows en Rust
afin de prévenir les bogues liés à la mauvaise gestion de la mémoire

Microsoft fait un nouveau pas vers une intégration plus étroite du langage de programmation Rust dans Windows. La firme de Redmond a lancé la semaine dernière un kit open source visant à permettre aux développeurs et aux entreprises de créer des pilotes pour Windows en utilisant Rust. Baptisé "windows-drivers-rs", le projet est hébergé sur GitHub et publié sous les licences MIT et Apache. Microsoft a laissé entendre qu'il s'agit d'une étape clé vers une programmation sans risque pour la mémoire du système d'exploitation. Microsoft travaille sur d'autres projets basés sur Rust, dont Rust for Windows et la réécriture de la bibliothèque Win32k GDI de Windows en Rust.

La nouvelle a été annoncée dimanche par Mark Russinovich, directeur technique de Microsoft Azure, dans un message sur X.com avec le commentaire : « travailler pour permettre le développement de pilotes Windows en Rust ». Le référentiel comprend des crates Rust qui permettent aux développeurs de créer des pilotes Windows en utilisant les modèles de développement de pilotes WDM et WDF. (Une crate est un binaire ou une bibliothèque.) La version actuelle contient les crates, bibliothèques et ensembles de macros suivants : wdk-build, wdk-sys, wdk, wdk-panic, wdk-alloc, wdk-macros. Un exemple de code est fourni dans la section Rust Driver Samples.

Le projet "windows-drivers-rs" semble être l'aboutissement de plusieurs années de travail de Microsoft visant à mettre un terme définitif aux bogues liés à la sécurité de la mémoire. En 2019, l'équipe Microsoft Security Response Center (MSRC) a annoncé que plus de 70 % des vulnérabilités que l'entreprise a corrigées dans Windows depuis 2006 sont des bogues liés à la sécurité de la mémoire, et la plupart des vulnérabilités dans les programmes sont des bogues liés à la sécurité de la mémoire. Google a également constaté qu'environ 70 % des vulnérabilités de sécurité dans le projet Chromium sont dues à ces mêmes problèmes de gestion de la mémoire.


Ces types de bogues constituent la plus grande surface d'attaque pour leur application et les pirates l'utilisent. Ces erreurs affectent le C, le C ++ et d'autres langages depuis des décennies. Et Windows est largement écrit en C/C++. « La plupart du code du mode utilisateur est maintenant en C++, mais la plupart du code du noyau est toujours en C, pour diverses raisons techniques et historiques », a déclaré Raymond Chen, ingénieur logiciel de Microsoft de longue date. En outre, le kit de pilotes Windows, utilisé par les fabricants de matériels pour permettre à leurs appareils de fonctionner sous Windows, reste une boîte à outils largement écrite en C/C++.

Ces bogues empiètent sur la qualité, la sécurité et la fiabilité du code, et constituent une grande surface d'attaque. Toutefois, il a été prouvé que Rust permet d'éviter d'introduire ces vulnérabilités dans le code. Rust veut éliminer toute une catégorie de vulnérabilités avant qu'elles ne se produisent. Dans son rapport de 2019 sur les bogues dans Windows, l'équipe MSRC recommande l'utilisation de Rust comme approche proactive pour un code plus sécurisé. L'année dernière, Russinovich a déclaré qu'il est temps d'arrêter de commencer tout nouveau projet en C/C++ et d'utiliser Rust pour les scénarios où un langage sans ramasse-miettes est nécessaire.

Rust est un langage statiquement typé initialement conçu par Graydon Hoare en 2006 dont le développement est désormais soutenu par Mozilla Research. Ses maîtres mots sont : sécurité, concurrence et rapidité. Rust vise à fournir aux développeurs des outils pour écrire des programmes dont l’intégrité sera beaucoup plus difficile à mettre en péril qu’avec un autre langage qui n'a pas pris en compte ces problématiques dans sa conception. Son compilateur est capable de détecter des bogues et/ou une mauvaise gestion des ressources avant que le programme ne s’exécute. Le compilateur est également capable de détecter les situations de course aux données.

L'entreprise admire Rust non seulement pour la sécurité de sa mémoire, mais aussi pour la sécurité de la course aux données, en s'assurant qu'il n'y a pas d'accès non synchronisé à une partie de la mémoire par deux ou plusieurs threads. Le dépôt du nouveau kit de pilotes basé sur Rust indique que le projet vise à prendre en charge les pilotes WDM (Windows Driver Model) et WDF (Windows Driver Framework). Les pilotes WDM sont de niveau inférieur et étroitement liés au système d'exploitation Windows, tandis que les pilotes WDF interagissent avec le système par l'intermédiaire d'une bibliothèque. Le dépôt initial se concentre sur les pilotes WDK.

Nom : memoire.png
Affichages : 3573
Taille : 17,5 Ko
Environ 70 % des vulnérabilités de Windows sont liées à la sécurité de la mémoire

Bien que le projet en soit encore à ses débuts et qu'il ne soit pas recommandé pour un usage commercial, Microsoft encourage les expériences, les suggestions et les discussions de la communauté sur le projet. L'entreprise utilisera le forum de discussion GitHub comme principale forme d'interaction avec la communauté pendant le développement du projet. Les vulnérabilités liées à une mauvaise gestion de la mémoire représentent une grande partie des problèmes de sécurité et de stabilité dans Windows et le passage à Rust est une solution probable. Les premières réactions de la communauté à l'annonce du projet semblent pour la plupart positives.

« Cela me semble être une très bonne nouvelle pour Windows. L'utilisation de Rust pour les pilotes dans l'espace du noyau semble être une mesure d'atténuation très raisonnable. Après avoir passé ces dernières années à travailler principalement sur l'aspect visuel de Windows, Microsoft s'intéresse finalement aux choses concrètes qui auront une plus grande incidence sur le système d'exploitation », a écrit un développeur d'application pour Windows. Notons qu'il existe un projet similaire, et bien plus avancé, dans la communauté Linux qui vise à intégrer Rust dans le développement du noyau pour remédier à un certain nombre de problèmes liés au C/C++.

Avec l'annonce de Microsoft, certains développeurs de pilotes nourrissent le rêve de pouvoir écrire un jour des pilotes pour Windows et Linux partageant la même base de code. « Avec cela et l'incorporation de Rust dans le noyau Linux, je suis impatient de voir le jour où les pilotes Linux et Windows écrits en Rust pourront partager leur code », peut-on lire dans les commentaires. Il s'agit d'une nouvelle initiative visant à intégrer Rust dans Windows. Au début de l'année, Microsoft avait annoncé que ses équipes travaillent sur le portage de la bibliothèque Win32k GDI (graphics device interface), responsable de la gestion des fenêtres, en langage Rust.

Source : référentiel GitHub du projet

Et vous ?

Quel est votre avis sur le sujet ?
Que pensez-vous de l'écriture de pilotes pour Windows en Rust ?
Rust est-il plus adapté à l'écriture de pilotes que les langages C et C++ ?
Les langages C et C++ offrent-ils peu de sécurité ou le problème vient-il des développeurs ?

Voir aussi

Microsoft travaille à réécrire le code du kernel de Windows responsable de la gestion des fenêtres en langage Rust considéré comme candidat idéal à l'abandon des langages C et C++

L'équipe Microsoft Security Response Center recommande l'utilisation de Rust, comme approche proactive pour un code plus sécurisé

Il est urgent de renforcer la sécurité de la mémoire dans les produits logiciels, selon la CISA. L'utilisation d'un langage de programmation à sécurité mémoire comme Rust serait une solution