Lorsque Microsoft a voulu réécrire un agent de traitement réseau critique pour éliminer les vulnérabilités de sécurité de la mémoire causant des maux de tête récurrents pour le Microsoft Security Response Center (MSRC), la société a chargé un stagiaire et lui a dit de réécrire le code dans Rust.
Rust, un langage de programmation qui a revendiqué le titre de « plus aimé » parmi les développeurs pendant cinq années consécutives, pourrait changer le paysage des vulnérabilités en éliminant pratiquement certains types d’erreurs de sécurité de la mémoire. La renommée du langage est qu’il fournit la vitesse et le contrôle du C et du C ++, tout en offrant des garanties de sécurité et de sûreté d’autres langages, tels que Go et Python. Près de 70% des vulnérabilités que les processus MSRC sont classés comme problèmes de sécurité de la mémoire, il est donc essentiel d’éliminer la classe de vulnérabilités.
Discutant de sa nouvelle préférence pour Rust, Alexander Clarke, le stagiaire logiciel MSRC, déclaré dans un article de blog que, bien qu’il puisse être plus facile d’écrire un programme qui se compilera en C ++, le programme résultant est plus susceptible d’avoir des erreurs et des vulnérabilités.
« Le [Rust] Les messages d’erreur du compilateur sont à juste titre réputés pour leur utilité », dit-il.« Grâce aux messages d’erreur, Rust applique des concepts de programmation sécurisés en vous indiquant exactement pourquoi le code n’est pas correct, tout en fournissant des suggestions possibles sur la façon de le corriger.
Plus d’une décennie après que Mozilla a adopté et commencé à réécrire le code de son navigateur Firefox en utilisant Rust, le langage peut être prêt à décoller. Alors que l’adoption continue d’être anémique – seulement 5,1% des développeurs utilisent le langage Rust, selon le « Sondage des développeurs StackOverflow 2020« – un certain nombre de grandes entreprises se sont engagées à utiliser Rust dans des projets de développement spécifiques.
La Fondation Mozilla a expédié du code développé en utilisant le langage de son navigateur Firefox à partir de 2016. En 2019, Microsoft a déclaré son intention adopter Rust plus largement pour écrire un logiciel système sous Windows. Et en février, Mozilla a lancé le projet pour être géré par le nouvelle Fondation Rust, avec les sponsors fondateurs Microsoft, Google, Amazon et Huawei.
Pourquoi la popularité croissante? Ce n’est pas seulement une question de vitesse et de sécurité, du moins pas pour les développeurs, déclare Ashley Williams, directrice exécutive par intérim de la Rust Foundation.
«Ma réponse à la blague est que nous avons une mascotte animale», dit-elle en riant. « En réalité, quand les gens parlent d’aimer Rust, il y a le langage et le compilateur, mais aussi la notion que la communauté doit être accueillante et la gestion des paquets doit être de première classe. Il y a toutes ces valeurs que les gens apprécient. »
Pour les entreprises, la décision se résume aux capacités que Rust ne permet pas. Lorsque le langage est correctement utilisé, le compilateur alerte sur – et refuse de compiler – certains modèles de codage qui conduisent à des débordements de tampon, des vulnérabilités d’utilisation après la libération, des problèmes de mémoire double libre et des déférences de pointeur nul.
«Vous faites un pacte de sang avec le compilateur», dit Williams. « Vous écrivez votre code d’une manière spécifique pour que le compilateur sache que votre code est correct. »
Pour Microsoft, les erreurs que Rust peut empêcher représentent la majorité des vulnérabilités pour lesquelles l’entreprise attribue des identifiants CVE (Common Vulnerability and Exposures). L’utilisation du langage de programmation pour construire ses composants système de base peut aider à réduire une source majeure de vulnérabilités, a déclaré Ryan Levick, principal développeur cloud chez Microsoft, dans un article de blog.
«Nous pensons que Rust change la donne lorsqu’il s’agit d’écrire des logiciels de systèmes sûrs», a-t-il déclaré. « Rust fournit les performances et le contrôle nécessaires pour écrire des systèmes de bas niveau, tout en permettant aux développeurs de logiciels d’écrire des programmes robustes et sécurisés. »
Pourtant, les langages de programmation promettant une sécurité supplémentaire ne l’ont pas toujours fait.
En janvier 1996, Sun Microsystems a annoncé Java 1.0. Le langage se vantait d’un code portable – comme dans «écrire une fois, exécuter n’importe où» – mais Sun a également vanté un certain nombre de attributs de sécurité, comme la gestion automatisée de la mémoire – c’est-à-dire le «garbage collection» – ainsi que la sécurité des types et la capacité d’isoler les applets de la modification des ressources système.
Avance rapide jusqu’à aujourd’hui. Avec une adoption d’environ 40%, Java est le cinquième langage le plus utilisé – derrière JavaScript, HTML / CSS, SQL et Python, selon StackOverflow sondage. Cependant, les programmes Java représentaient 15% des plus de 6000 vulnérabilités trouvées dans les composants open source en 2019, derrière C, qui représentait 30%, et PHP, qui représentait 27%, selon « L’état 2020 de la sécurité Open Source« rapport publié par la société de sécurité logicielle WhiteSource.
Java montre que les développeurs, au nom de l’efficacité, n’utilisent souvent pas les fonctionnalités de sécurité et continuent à créer du code non sécurisé.
Rust est plus avisé dans son approche que Java, mais le langage n’évitera probablement pas le risque de voir la sécurité compromise par les développeurs. Bien que Rust assure la sécurité de la mémoire, il permet également de contourner ce problème – le mot-clé « UNSAFE ». L’utilisation du mot-clé est un moyen pour un développeur de remplacer le compilateur et d’empêcher le compilateur de vérifier un bloc de code – apparemment parce que le développeur affirme que le code est sûr.
De nombreux amateurs de Rust – «Rustaceans», comme on les appelle – affirment que la surutilisation du mot-clé mine le modèle Rust. Bien que le débat soit nuancé, Williams comprend le point.
«Il y a des gens qui utilisent le bloc UNSAFE d’une manière qui n’est pas sûre», dit-elle. « Si vous mettez quelque chose dans le bloc unsafe, le compilateur ne le vérifiera pas, et si vous vous trompez, vous pourriez introduire une erreur de mémoire. »
Pourtant, souligne-t-elle, même si vous utilisez la capacité de ne remplacer que le compilateur correctement, les vulnérabilités se glisseront probablement dans les programmes des développeurs et – parce que les chercheurs en sécurité et les pirates informatiques ont tendance à trouver les problèmes que les développeurs laissent derrière eux – ces vulnérabilités seront trouvées. Exemple concret: le site de sécurité axé sur Rust RustSec répertorie plus de 250 vulnérabilités dans les packages Rust – ou « crates » – et la langue.
«Le paysage de la vulnérabilité n’est pas absolu, il y a donc toujours de nouvelles zones de vulnérabilité», déclare Williams. « Certaines langues peuvent être plus sûres que d’autres, mais … il n’existe pas de système entièrement sécurisé, surtout si votre langue cible est examinée par de nombreux pirates. »
Journaliste expérimenté en technologie depuis plus de 20 ans. Ancien ingénieur de recherche. Rédigé pour plus de deux douzaines de publications, y compris CNET News.com, Dark Reading, MIT’s Technology Review, Popular Science et Wired News. Cinq prix pour le journalisme, dont celui de la meilleure date limite … Voir la biographie complète
Lecture recommandée:
Plus d’informations
&appId;
— to www.darkreading.com