Points Clés Essentiels
- La Maison Blanche préconise l’adoption de langages à sécurité mémoire comme Rust pour amoindrir les failles de sécurité dans les codes.
- Les langages de bas niveau, tels que C, présentent des risques de bogues qui peuvent mener à des incidents de sécurité.
- Les langages sécurisés en mémoire, tels que Rust, offrent des mécanismes de gestion automatique de la mémoire et de prévention des erreurs.
Une instance gouvernementale américaine a recommandé aux développeurs de privilégier les langages à sécurité mémoire, tels que Rust et Java. Mais, qu’est-ce qui les rend supérieurs et pourquoi est-ce crucial ?
Que stipule la Maison Blanche ?
Dans une communication du 26 février, le bureau du National Cyber Director (ONCD) de la Maison Blanche a incité les créateurs de logiciels à adopter des langages de programmation assurant une gestion sécurisée de la mémoire, à l’instar de Rust.
En tant que nation, nous possédons la capacité – et l’obligation – de réduire les zones d’attaque dans le cyberespace et de neutraliser des catégories entières de failles de sécurité qui pourraient s’introduire dans l’écosystème numérique. Pour cela, il est indispensable de résoudre le défi complexe de la transition vers des langages de programmation à sécurité mémoire.
Pourquoi cette démarche est-elle capitale ?
L’ONCD, établi en 2021, est directement rattaché au Président, le conseillant sur la cybersécurité et les problématiques associées. Cette politique américaine est susceptible d’engendrer des répercussions significatives dans l’univers technologique.
Un grand nombre des vulnérabilités de sécurité les plus graves enregistrées étaient principalement dues à des problématiques de sécurité de la mémoire. Les langages de niveau inférieur plus anciens confèrent beaucoup de contrôle aux développeurs, mais cela accroit le risque qu’un code défectueux puisse entrainer de sérieuses conséquences.
L’utilisation de langages à sécurité mémoire, tels que Rust, Python et JavaScript, est en progression depuis longtemps. Il est probable que l’ONCD ait fait cette annonce parce que les langages moins sûrs comme le C existent depuis si longtemps que leur code existant est désormais ancré dans l’infrastructure et dans une part importante des logiciels que nous utilisons au quotidien.
À quoi ressemble un langage non sécurisé ?
Un code non sécurisé n’est pas toujours alarmant ou même complexe en apparence. Voici un exemple de programme C simpliste :
#include <stdio.h> int main (void) { int arr[3] = { 0, 0, 0 }; printf("%d\n", arr[3]); return 0; }
Ceci est un cas typique de bogue pouvant occasionner une attaque par débordement de tampon. Le programmeur a omis le fait que les tableaux en C (et dans la majorité des langages) sont indexés à partir de zéro, ce qui signifie que le premier élément est à arr[0]. L’accès à arr[3] est donc une erreur, que le langage C autorise :
La valeur à l’emplacement arr[3] est une adresse mémoire valide, comme toute autre, qui ne fait tout simplement pas partie du tableau. N’importe quelle valeur peut y être mémorisée, et les conséquences de l’accès ou de l’écriture peuvent aller d’un plantage du programme à un incident de sécurité désastreux. De nombreux pirates informatiques ont tiré profit de tels défauts à travers l’histoire.
Bien que le compilateur C génère un avertissement, il produit également un exécutable. Un développeur peut ignorer les alertes, voire les masquer grâce à des indicateurs de compilateur. Le langage C vous laisse toujours vous blesser, alors que des langages tels que Rust ne vous offrent pas cette possibilité.
À quoi ressemble un code à sécurité mémoire ?
Dans un langage sécurisé en mémoire comme Rust, ce problème n’existe pas. Voici le même programme, en Rust :
fn main() { let arr: [u32; 5] = [0;3]; println!("{}", arr[3]); }
Bien que ce code soit syntaxiquement correct, Rust ne parvient pas à le compiler :
Le compilateur explique le problème et refuse de générer un exécutable. Rust vous empêche d’exécuter ce code.
Rust possède de nombreuses autres fonctionnalités pour assurer votre protection. Il intègre notamment des pointeurs intelligents pour automatiser la gestion de la mémoire et empêcher le déréférencement de pointeurs nuls.
Faut-il changer de langage ?
Chaque langage de programmation a un usage spécifique, il faut donc se méfier des conseils qui incitent à les rejeter totalement, même s’ils émanent du Président. Même si vous choisissez de vous spécialiser dans un langage particulier, il est pertinent d’en apprendre une variété pour élargir vos perspectives.
La sécurité de la mémoire est une caractéristique de nombreux langages modernes, il serait donc judicieux de s’en familiariser avec au moins un. Le langage C a son utilité, mais des alternatives plus sûres sont disponibles et engendreront moins d’incidents. Si vous recherchez un langage efficace avec des mécanismes de sécurité solides, Rust est un choix incontournable.