
Le langage C est-il adapté à la création d’applications sécurisées ?
Le développement du système UNIX a débuté en 1969 et son code a fait l’objet de réécriture en langage C en 1972. Ça fait donc des années que ce langage fait ses preuves : c’est un niveau de performances proche de celui de l’assembleur, ce, tout offrant flexibilité et productivité. Pourtant, de plus en plus de gros acteurs de la filière technologique lui préfèrent le Rust. Motif : le langage de Mozilla offrirait en plus de meilleurs gages pour la sécurisation des logiciels. Qu’est-ce qu’il en est ?
Le tableau langage C délaissé pour le Rust en raison de ses gages de sécurisation des logiciels prend un coup de neuf avec des développements en lien au projet Tor. L’équipe de projet envisage de remplacer sa base de code C par du Rust dans le cadre du projet Arti – une implémentation de l’ensemble des protocoles Tor en Rust.
Elle explique à cet effet que : « Tor est disponible pour être utilisé, bien établi et bien analysé aujourd'hui et fonctionne avec la plupart des protocoles qui s’appuient sur TCP. Les performances et l'évolutivité de notre réseau se sont améliorées au fil du temps et nous disposons d'un écosystème d'outils pour contourner les différents régimes de censure dans le monde. Mais l'implémentation actuelle de Tor porte les signes de son âge. Tor est implémenté en C comme proxy réseau autonome. (Cela avait du sens en 2002, lorsque les langages multiplateformes performants étaient moins courants sur le terrain). Parce que Tor est un proxy autonome, il est difficile pour les tiers de l'intégrer : nous avons un "mode bibliothèque", mais le mode bibliothèque fait juste tourner le proxy dans un ensemble séparé de threads. Et parce que Tor est écrit en C, il est difficile d'avoir la même confiance dans la sécurité de sa mémoire que ce qui serait possible avec un langage qui offre de meilleurs gages de sécurisation de la mémoire. En outre, parce que le C est peu sûr et sujet aux erreurs, notre développement nécessite plus de temps et d'énergie qu'il ne le devrait. »
À date, Arti est un simple proxy SOCKS. L’équipe de développement du projet travaille à établir une parité avec l’implémentation C en termes de fonctionnalités. L’objectif devrait être atteint dans deux ans avec trois développeurs à temps plein.
Le langage C est-il adapté à la mise sur pied d’applications sécurisées ?
Ces dernières années, des chercheurs en sécurité ne cessent de mettre le doigt sur ce qui serait l’une des plus grosses tares que le langage C traîne : les problèmes liés à la gestion de la mémoire – dépassements de mémoire tampon, allocations non libérées, accès à des zones mémoire invalides ou libérées, etc. D’après les chiffres du dictionnaire Common Vulnerabilities and Exposure (CVE), 15,9 % des 2288 vulnérabilités qui ont affecté le noyau Linux en 20 ans sont liées à des dépassements de mémoire tampon. Ces chiffres prennent un coup de neuf avec un plus récent état des lieux des vulnérabilités de l’utilitaire ligne de commande Curl utile pour récupérer le contenu d'une ressource accessible par un réseau informatique. De récents décomptes font état de ce qu’un peu plus de la moitié des failles de sécurité de Curl sont la résultante d’erreurs de programmation en langage C. En fait, la part cumulée de toutes les vulnérabilités de sécurité dues aux erreurs C au fil du temps (ligne bleue) était sous la barre des 50 % en 2012 pour repasser au-dessus en 2018. Depuis lors, elle y est demeurée.
C’est la raison pour laquelle de plus en plus de grands acteurs de la filière technologique lui préfèrent le langage Rust de Mozilla. Dans le cadre d’une présentation de la conférence virtuelle AllThingsOpen à mi-parcours de l’année précédente, Ryan Levick – développeur qui travaille sur l’infrastructure cloud du géant technologique (Microsoft) – revient sur ces détails et coupe court : « Quels que soient les investissements que les entreprises de la filière du développement de logiciels peuvent mettre sur pied, le fait est que C++ [C] n’est pas par essence un langage fait pour la mise sur pied d’applications sécurisées. » En 2019, Alex Gaynor – un ex-contributeur de l’équipe sécurité du navigateur Firefox – émettait un avis similaire : « Le C++ moderne ne nous sauvera pas, car il est moins sécurisé que les nouveaux langages [Rust, Swift]). »
L’une des approches envisageables est de multiplier les formations des programmeurs à l’écriture d’applications sécurisées en langage C. Une autre est de faire recours à l’analyse statique. Enfin, la piste des vérifications lors de l’exécution reste valable. Mais l’ingénieur de Microsoft est d’avis qu’aucune de ces solutions n’apporte une solution entière à l’absence d’orientation des langages C et C++ vers la sécurité dans leur conception. C’est pour cet ensemble de raisons que ce dernier estime que le langage Rust est la meilleure chance offerte à l’industrie informatique pour la mise sur pied d’applications sécurisées.
Les initiatives allant dans le sens de faire un usage plus extensif du langage se multiplient donc chez la firme de Redmond. L’une des plus récentes et remarquées est Rust/WinRT – une projection du langage Rust pour les API Windows Runtime. De façon ramassée, l’annonce signifie que les développeurs peuvent créer des composants pour Windows en utilisant Rust. En parallèle, Microsoft pilote l’effort « Safe Systems Programming Languages » au travers duquel l’entreprise apporte plus d’éclaircissements sur son intérêt pour des langages de programmation comme Rust.
Les initiatives allant dans le sens de faire un usage plus extensif du langage se multiplient donc chez la firme de Redmond. L’une des plus récentes et remarquées est Rust/WinRT – une projection du langage Rust pour les API Windows Runtime. De façon ramassée, l’annonce signifie que les développeurs peuvent créer des composants pour Windows en utilisant Rust. En parallèle, Microsoft pilote l’effort « Safe Systems Programming Languages » au travers duquel l’entreprise apporte plus d’éclaircissements sur son intérêt pour des langages de programmation comme Rust.
Sur cinq années consécutives, Rust a...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.