Dev
La Maison Blanche ne veut plus des langages C et C++
Par Laurent Delattre, publié le 01 mars 2024
Dans son dernier rapport pour des logiciels mieux sécurisés, la Maison Blanche exhorte les développeurs à s’éloigner du C, du C++ et autres langages non « memory safe » au profit de langages plus jugés plus sûrs comme Rust…
La Maison Blanche, autrement dit l’administration Biden, vient de publier un nouveau rapport sur la nécessaire amélioration de la cybersécurité des logiciels, du système d’exploitation aux apps Cloud en passant par toute autre forme de codes informatiques y comprix ceux qui animent les sondes spatiales.
Intitulé « Back to the Building Blocks : A Path Toward Secure and Measurable Software », le rapport s’inscrit dans la stratégie du gouvernement américain pour rééquilibrer la responsabilité de la défense du cyberespace et réaligner les incitations afin de favoriser les investissements à long terme dans la cybersécurité. Il explique que cette stratégie ne peut se faire sans les communautés techniques et notamment celle des développeurs.
Le rapport constate que « pour réduire la charge qui pèse actuellement sur les utilisateurs finaux pour se protéger des menaces de cybersécurité, des efforts doivent être faits pour éliminer de manière proactive des catégories entières de vulnérabilités logicielles ». Et parmi ces vulnérabilités, l’une d’elles attire toute l’attention : les bugs causés par l’absence de sécurité dans la gestion mémoire.
« Les vulnérabilités liées à la sécurité de la mémoire sont une catégorie de vulnérabilités affectant la façon dont la mémoire peut être accédée, écrite, allouée ou désallouée de manière non intentionnelle » explique le rapport, avant d’ajouter : « Les experts ont identifié quelques langages de programmation qui ne présentent pas les caractéristiques associées à la sécurité de la mémoire et qui sont également très répandus dans les systèmes critiques, tels que C et C++. Choisir d’utiliser des langages de programmation sans risque pour la mémoire dès le départ, comme le recommande la feuille de route sur la sécurité des logiciels libres de la Cybersecurity and Infrastructure Security Agency (CISA), est un exemple de développement de logiciels de manière sécurisée dès la conception ».
Clairement, s’il faut retenir quelque chose de ce rapport, c’est que le C et le C++ doivent aujourd’hui être bannis des développements car leur utilisation ne permet pas d’élever suffisamment l’assurance d’un développement sans bug et engendre des vulnérabilités de sécurité aisément exploitables par les cyberattaquants. Mieux vaut leur préférer des langages plus « safe memory » mais à la syntaxe proche du C à l’instar de Go, Python ou C#.
Le rapport en rajoute une couche un peu plus loin pour expliquer que C et C++ sont utilisés pour créer les systèmes d’exploitation et notamment les systèmes embarqués comme ceux des engins spatiaux qui doivent adopter des approches « secure by design ». Les rapporteurs reconnaissent que ces systèmes ont des contraintes particulières : le langage pour les programmer doit être proche du Kernel pour interagir avec les logiciels et le hardware, il doit supporter un déterminisme permettant de s’assurer que les temps de sorties sont consistants, et il ne doit pas perdre du temps à gérer une « garbage collection » (pour optimiser la mémoire collectée puis libérée une fois plus utile). Ce sont principalement ces 3 raisons qui plaident aujourd’hui en faveur du C et C++. Mais le rapport rappelle qu’il existe d’autres langages qui répondent à ces contraintes sans souffrir de l’ « unsafe memory » des C et C++. Il n’en cite cependant qu’un seul… RUST !
Rust à la rescousse
Depuis plusieurs années, les grands éditeurs ont fait la même analyse. Chez Microsoft et Google, des initiatives se multiplient pour favoriser l’adoption de Rust dans leurs équipes devs. Google l’a largement adopté dans le développement d’Android (réduisant au passage considérablement le nombre de vulnérabilités du système). Microsoft a débuté en 2020 une réécriture en Rust de parties de Windows (dont l’API DirectWrite) et depuis 2023 insuffle du code Rust dans le noyau. L’éditeur a aussi monté une équipe pour réécrire certains services fondation d’Azure en Rust. La communauté Linux pousse également dans ce sens.
Car Rust est un langage « Memory Safe » de bas niveau qui répond néanmoins aux trois contraintes évoquées plus haut. Toutefois, il n’est pas envisageable de remplacer tous les codes C et C++ par du Rust rappelle notamment IBM dans une réponse à la publication du rapport Biden. Cela serait bien trop coûteux. Mais deux autres freins s’y ajoutent :
– D’abord, parce qu’il faut renforcer l’interopérabilité entre Rust et C++ (Google vient d’offrir 1 million de dollars à la Rust Fondation pour justement améliorer cette interopérabilité dans les années à venir).
– Ensuite, parce que comme le montre le dernier rapport « 2023 State of Rust », bien des développeurs trouvent le langage trop complexe et sans grands débouchés. Avec une telle réputation, le vivier de talents « Rust » n’est pas près d’exploser. Même si l’enthousiasme des rapporteurs de la Maison Blanche vient une nouvelle fois donner un coup de pouce à sa popularité naissante.
Le groupe ISO C++ Directions n’est pas d’accord
L’une des réactions les plus épidermiques aux conclusions du rapport publié par la Maison Blanche vient de membres du groupe de direction de l’ISO C++. Selon eux, le C++ est injustement pointé du doigt : « Une grande partie des critiques à l’encontre du C++ est basée sur du code écrit dans des styles plus anciens, ou même en C, qui n’utilisent pas les facilités modernes visant à accroître la sécurité des types et des ressources ». Selon eux, « le C++ bénéficie d’une spécification formelle, d’un modèle de mémoire entièrement spécifié et d’une communauté active d’utilisateurs et d’implémenteurs » auxquels d’autres langages comme Rust ne peuvent prétendre.
Par ailleurs, ils affirment que le document de la Maison Blanche se focalise bien trop sur les vulnérabilités nées des corruptions mémoire. Selon eux, bien d’autres bugs de programmation conduisent à des vulnérabilités logicielles en commençant par les erreurs de logique, les fuites mémoires, les erreurs de parallélisation de code, les erreurs de types, les erreurs de timing, etc. Selon eux, la vraie réponse n’est pas dans l’abandon du C++ mais plutôt dans la formation des développeurs C++ qui devrait aborder les questions de sécurité dès le départ. Le rapport de la Maison Blanche ne cache pas cependant que « l’élimination de classes entières de vulnérabilités logicielles est un problème urgent et complexe. À l’avenir, de nouvelles approches doivent être adoptées pour atténuer ce risque ». Le rapport évoque brièvement ces autres approches comme les méthodes formelles, les hardwares « memory safe », ou encore l’usage de l’IA pour repérer les erreurs de code, prodiguer de bonnes pratiques, générer du code sans bug. Il compte aussi sur la communauté de chercheurs informatiques pour mettre au point de meilleures mesures de la qualité des logiciels et de la qualité de la cybersécurité… Il va falloir sérieusement retrousser les manches, la bataille s’annonce longue et difficile.
À LIRE AUSSI :