La fondation Rust rapporte que prs de 20 % des crates Rust utilisent le mot-cl unsafe , ce qui met en vidence un aspect critique de la gestion de la mmoire dans la programmation Rust. Alors que Rust est rput pour ses dispositifs de scurit robustes, les blocs de code unsafe offrent aux dveloppeurs une certaine flexibilit dans les situations o les garanties du compilateur sont trop restrictives. Malgr ces blocs, Rust maintient des protections strictes pour minimiser les vulnrabilits. La fondation Rust continue de mettre l’accent sur la scurit, en dveloppant des outils et des initiatives pour soutenir l’utilisation scurise de unsafe dans la programmation Rust.
Rust est un langage de programmation polyvalent multi-paradigme qui met l’accent sur les performances, la scurit des types et la concurrence. Il assure la scurit de la mmoire, c’est–dire que toutes les rfrences pointent vers une mmoire valide, sans ramasse-miettes. Afin d’assurer simultanment la scurit de la mmoire et d’viter les courses aux donnes, son vrificateur d’emprunts suit la dure de vie de toutes les rfrences d’un programme pendant la compilation.
Un billet de blog de la Fondation Rust commence par rappeler aux lecteurs que les programmes Rust ne peuvent pas tre compils si les rgles de gestion de la mmoire sont violes, ce qui limine essentiellement la possibilit d’un problme de mmoire au moment de l’excution . Mais le billet poursuit en explorant Unsafe Rust in the wild (utilis pour un petit ensemble d’actions telles que le drfrencement d’un pointeur brut, la modification d’une variable statique mutable ou l’appel des fonctions non sres).
premire vue, il peut sembler que Unsafe Rust compromette les avantages de scurit de la mmoire pour lesquels Rust est de plus en plus clbr. En ralit, le mot-cl unsafe est accompagn de garanties spciales et peut tre un moyen puissant de travailler avec moins de restrictions lorsqu’une fonction ncessite de la flexibilit, tant que les prcautions standard sont utilises.
La Fondation numre dans son billet les mesures de protection disponibles, qui rendent les exploits rares, mais pas impossibles . Mais elle analyse galement la quantit de code Rust qui utilise rellement le mot-cl unsafe.
Le contenu du billet de blog de la Fondation Rust est prsent ci-dessous :
Les programmes accdent la mmoire – ce concept est fondamental en informatique. Selon le langage de programmation utilis pour crire le code, il existe diffrentes manires de grer l’allocation et l’utilisation de cette mmoire. Chaque approche requiert prudence et prcaution.
Un accs involontaire et hors de porte aux zones de mmoire d’un programme peut exposer des donnes sensibles ou servir de point d’entre pour l’exploitation, ce qui reprsente un risque important et peut contribuer des attaques de type zero-day . En rsum, qu’un programmeur gre et alloue la mmoire manuellement ou qu’il compte sur le langage et le compilateur pour le faire sa place, des pratiques robustes de gestion de la mmoire sont une ncessit.
Les problmes de scurit de la mmoire reprsentent une part importante des vulnrabilits des logiciels. Les acteurs malveillants en sont bien conscients et utilisent un ensemble volutif de tactiques pour exploiter le code non scuris en mmoire dans certaines des attaques logicielles les plus reconnaissables et les plus dommageables de ces dernires annes, telles que Heartbleed.
Compte tenu du nombre d’exploits logiciels nuisibles qui hantent notre industrie et de l’importance des enjeux, les fondations de logiciels, les consortiums technologiques et les gouvernements du monde entier prennent conscience de la situation et plaident en faveur de l’amlioration des pratiques et des outils de programmation.
La puissance et la promesse de Rust
Le langage de programmation Rust est souvent cit par les dfenseurs de la scurit de la mmoire comme l’un des langages de programmation les plus srs sur le march aujourd’hui. Langage mmoire scurise par dfaut grce un concept appel ownership, Rust fournit des rgles et des garanties pour la gestion de la mmoire et considre la scurit comme un concept de premier ordre.
Les programmes utilisant Rust ne peuvent pas tre compils si les rgles de gestion de la mmoire sont violes, ce qui limine essentiellement la possibilit d’un problme de mmoire au moment de l’excution. Les dveloppeurs Rust et les utilisateurs d’applications crites en Rust ont ainsi la certitude que les vulnrabilits de la mmoire ne doivent pas tre un sujet de proccupation.
Safe Rust et Unsafe Rust
Bien que Rust soit un outil puissant pour la sret de la mmoire et la scurit, la puissance de ses contrles de scurit peut devenir limitante lorsque le programme ne peut pas rellement se tromper mais que le compilateur est incapable de le garantir lui-mme ; le programmeur peut prouver l’impossibilit d’un comportement indfini par des moyens qui ne sont pas la disposition du compilateur. Dans ces cas, les programmeurs Rust utiliseront le mot-cl unsafe pour indiquer une fonction ou un segment de code ayant a) des considrations de scurit supplmentaires ou b) des invariants qu’un programmeur doit suivre manuellement pour garantir la scurit et qui ne sont pas ncessairement exprims par Rust ou la fonction elle-mme. Le mot-cl unsafe permet aux dveloppeurs de drfrencer un pointeur brut, de modifier une variable statique mutable et, surtout, d’appeler des fonctions unsafe.
Bien que l’utilisation de Unsafe Rust puisse thoriquement produire des vulnrabilits similaires celles des langages non srs pour la mmoire, il existe quatre mesures de protection principales pour rduire ces risques prs de zro :
- L’utilisation du mot-cl unsafe en Rust est un acte explicite, exigeant du dveloppeur qu’il choisisse de le faire. Cela signifie que vous ne pourrez jamais entrer dans un contexte unsafe au sein de votre code Rust sans faire l’effort conscient de le faire ; d’autres langages peuvent vous permettre d’appeler directement du code unsafe ou non gr.
- Le code unsafe doit tre isol dans ses propres blocs de code. Si un problme survient lors de l’utilisation de Unsafe Rust, le code l’origine du problme est clairement identifi.
- Il y a un nombre limit de faons d’utiliser unsafe et tout le code safe Rust continue avoir ses contrles de scurit normaux mme l’intrieur d’un bloc unsafe.
- Le systme de types de Rust fournit toujours des contraintes de scurit pour les types srs de Rust, mme l’intrieur d’un bloc unsafe.
Ces mesures supplmentaires renforant Unsafe Rust rendent les exploits rares, mais pas impossibles. Pour dterminer le risque pos par Unsafe Rust, il faut examiner combien de code Rust utilise le mot-cl unsafe.
Unsafe Rust en milieu naturel
La faon canonique de distribuer du code Rust est par le biais d’un paquetage appel crate. En mai 2024, il existe environ 145 000 crates, dont environ 127 000 contiennent du code significatif. Sur ces 127 000 crates, 24 362 font usage du mot-cl unsafe, soit 19,11 % de tous les crates. Et 34,35 % font un appel direct une fonction dans une autre crate qui utilise le mot-cl unsafe. Prs de 20 % de tous les crates ont au moins une instance du mot-cl unsafe, ce qui n’est pas ngligeable.
La plupart de ces utilisations Unsafe Rust sont des appels du code ou des bibliothques de langages tiers non Rust, tels que C ou C++. En fait, la crate qui utilise le plus le mot-cl unsafe est la crate Windows, qui permet aux dveloppeurs Rust de faire appel diverses API Windows. Cela ne signifie pas que le code de ces blocs Unsafe Rust est exploitable en soi (la majorit ou la totalit de ce code ne l’est probablement pas), mais qu’une attention particulire doit tre porte l’utilisation de Unsafe Rust afin d’viter les vulnrabilits potentielles.
premire vue, il peut sembler que Unsafe Rust rduit les avantages de scurit de la mmoire pour lesquels Rust est de plus en plus clbr. En ralit, le mot-cl unsafe est assorti de garanties spciales et peut tre un moyen puissant de travailler avec moins de restrictions lorsqu’une fonction ncessite de la flexibilit, tant que les prcautions standard sont utilises.
Sret et scurit : une responsabilit partage
Comme cela a t dit, Rust est la hauteur de sa rputation d’outil excellent et transformateur pour une programmation sre et scurise, mme dans un contexte Unsafe. Mais cette rputation ncessite des ressources, une collaboration et un examen constant pour tre maintenue correctement. Par exemple, le projet Rust continue de dvelopper des outils comme Miri pour permettre la vrification du code Rust non scuris. La Rust Foundation s’est engage dans ce travail par le biais de son initiative de scurit : un programme visant soutenir et faire progresser l’tat de la scurit au sein de l’cosystme et de la communaut du langage de programmation Rust. Dans le cadre de l’initiative de scurit, l’quipe technologique de la Fondation Rust a dvelopp de nouveaux outils tels que Painter, TypoMania et Sandpit pour dtecter les vulnrabilits dans le code Rust, donnant aux utilisateurs un aperu des vulnrabilits avant qu’elles ne se produisent et permettant une rponse rapide en cas d’exploitation.
La sret est une responsabilit partage – ce concept est fondamental pour des communauts saines. Entre les dveloppeurs qui utilisent Unsafe Rust, les groupes qui prconisent l’utilisation d’outils d’amlioration de la scurit comme Rust, et les responsables du langage comme la Fondation Rust, nous avons tous un rle jouer dans les pratiques de programmation scurise. La collaboration et l’attention constante porte la scurit permettront au langage de rester aussi rsistant que possible aux vulnrabilits l’avenir.
Source : « Unsafe Rust in the Wild: Notes on the Current State of Unsafe Rust » (Fondation Rust)
Et vous ?
Quel est votre avis sur le sujet ?
Voir aussi :