Table des matières
Points clés à retenir
- La Maison Blanche recommande l’utilisation de langages sécurisés en mémoire comme Rust pour réduire les vulnérabilités de sécurité du code.
- Les langages de niveau inférieur plus anciens comme C présentent des risques de code bogué conduisant à des incidents de sécurité.
- Les langages sécurisés en mémoire comme Rust offrent des fonctionnalités de gestion automatique de la mémoire et de prévention des erreurs.
Une agence gouvernementale américaine a décrété que les programmeurs devraient privilégier les langages sécurisés en mémoire comme Rust et Java. Mais pourquoi sont-ils meilleurs et est-ce vraiment important ?
Que dit la Maison Blanche ?
Dans une déclaration du 26 février, le bureau du National Cyber Director (ONCD) de la Maison Blanche a exhorté les développeurs de logiciels à adopter des langages de programmation sécurisés en mémoire, comme Rust.
En tant que nation, nous avons la capacité – et la responsabilité – de réduire la surface d’attaque dans le cyberespace et d’empêcher des classes entières de bugs de sécurité de pénétrer dans l’écosystème numérique, mais cela signifie que nous devons nous attaquer au problème difficile du passage à des langages de programmation sécurisés en mémoire. .
Pourquoi c’est important?
L’ONCD, créé en 2021, rend compte directement au Président, le conseillant sur la cybersécurité et les questions connexes. La politique américaine est susceptible d’avoir un effet d’entraînement dans le monde de la technologie.
Bon nombre des pires vulnérabilités de sécurité jamais enregistrées avaient pour cause première des problèmes de sécurité de la mémoire. Les langages de niveau inférieur plus anciens donnent beaucoup de pouvoir aux programmeurs, mais cela augmente le risque que du code bogué entraîne de graves répercussions.
Quoi qu’il en soit, l’utilisation de langages sécurisés en mémoire, comme Rust, Python et JavaScript, est depuis longtemps en augmentation. L’ONCD fait probablement cette annonce parce que les langages moins sûrs comme C existent depuis si longtemps que leur code existant est désormais ancré dans l’infrastructure et dans une grande partie des logiciels que nous utilisons quotidiennement.
À quoi ressemble un langage dangereux ?
Le code dangereux n’a pas toujours l’air effrayant ni même compliqué. Prenons cet exemple de programme C simple :
#include <stdio.h>int main (void) {
int arr[3] = { 0, 0, 0 };
printf("%d\n", arr[3]);
return 0;
}
Il s’agit d’un exemple classique de bug pouvant conduire à une attaque par débordement de tampon. Le programmeur a oublié que les tableaux en C (et dans la plupart des autres langages) sont indexés à zéro, ce qui signifie que le premier élément est à l’arr.[0]etc. Tentative d’accès à arr[3] est donc une erreur, mais que C permettra :
La valeur à l’arrivée[3] est une adresse mémoire valide, comme toute autre, elle n’appartient tout simplement pas au tableau. N’importe quelle valeur peut y être stockée, et les conséquences de l’accès ou de l’écriture peuvent aller d’un crash de programme à un incident de sécurité catastrophique. De nombreux pirates informatiques à travers l’histoire ont exploité de tels bugs.
Bien que le compilateur C génère toujours un avertissement, il génère également un exécutable. Un programmeur est libre d’ignorer les avertissements et même de les masquer à l’aide des indicateurs du compilateur. C vous permettra toujours de vous tirer une balle dans le pied tandis que des langages comme Rust ne vous proposeront pas du tout d’arme à feu.
À quoi ressemble le code de sécurité mémoire ?
Dans un langage sécurisé en mémoire comme Rust, le même problème n’existe tout simplement pas. Voici le même programme, dans Rust :
fn main() {
let arr: [u32; 5] = [0;3];
println!("{}", arr[3]);
}
Bien que ce code soit syntaxiquement valide, Rust ne parviendra pas à le compiler :
Le compilateur explique le problème et refuse de produire un exécutable. Rust ne vous laissera tout simplement pas exécuter ce code.
Rust possède de nombreuses autres fonctionnalités en plus de cela, pour vous aider à vous protéger. Il comprend des fonctionnalités telles que des pointeurs intelligents pour gérer automatiquement la gestion de la mémoire et empêcher le déréférencement du pointeur nul.
Dois-je changer de langue ?
Chaque langage de programmation a un but, il faut donc se méfier des conseils pour les éviter absolument, même s’ils viennent du Président. Même si vous pouvez choisir de vous spécialiser dans une langue particulière, il est toujours utile d’en apprendre une variété afin d’élargir vos options.
La sécurité de la mémoire est une caractéristique de tant de langues modernes que vous pourriez tout aussi bien en connaître au moins une. C a son utilité, mais il existe des options plus sûres qui provoqueront moins d’incidents. En particulier, si vous recherchez un langage efficace doté de bons filets de sécurité, Rust est un incontournable.