C’est dans un bulletin du 20 novembre 2022 sur la sécurité de la mémoire des logiciels, que l’agence de renseignement américaine (NSA), a recommandé de ne pas utiliser le C++, conseillant aux entreprises d’opter plutôt pour des langages protégeant mieux les mémoires. Mais Bjarne Stroustrup défend le vénérable langage de programmation qu’il a conçu en 1979. Pour commencer, le créateur du C++ a rappelé les efforts déployés depuis des décennies pour améliorer le langage et le rendre plus sûr et plus efficace. « Notamment, le travail sur les instructions de base du C++ vise spécifiquement à fournir un C++ statiquement garanti, sûr au niveau des types et des ressources, pour les personnes qui en ont besoin, sans perturber les bases de code qui peuvent se débrouiller sans ces garanties solides ou introduire des chaînes d'outils supplémentaires », constate-t-il.
Le document de la NSA déconseille l'utilisation du C/C++ car, même si les programmeurs effectuent souvent des tests rigoureux pour s'assurer que le code est sûr, les problèmes de mémoire dans les logiciels sont toujours très impliqués dans l’exploitation des vulnérabilités. « La NSA conseille aux entreprises de laisser de côté les langages qui offrent peu ou pas de protection inhérente de la mémoire, comme le C/C++, et de leur préférer un langage sûr pour la mémoire quand c’est possible », a fait valoir l'agence. En guise d’exemple, la NSA cite des langages comme le C#, Go, Java, Ruby, Rust et Swift. Selon l’agence, si des langages couramment utilisés, comme le C et le C++, offrent une liberté et une flexibilité dans la gestion de la mémoire, ils s’appuient fortement sur le programmeur pour effectuer des contrôles sur les références mémoire.
Un mélange C et C++ dommageable
Mais Bjarne Stroustrup insiste sur les améliorations apportées à la sécurité. « Si je considérais que l'un de ces langages « sûrs » était supérieur au C++ pour les nombreux cas d’usage qui m'intéressent, je m’accommoderais du déclin du C/C++, mais ce n'est pas le cas ». Il ajoute « tel qu'il est décrit, le terme « sûr » se limite à la sécurité de la mémoire, laissant de côté une douzaine d'autres façons dont un langage pourrait (et sera) utilisé pour violer une certaine forme de sûreté et de sécurité « .
Il déplore également le mémo de la NSA associant le C++ à l'ancien langage C. Le C++, qui s'appelait à l'origine C avec classes, est une extension du C. « Comme c'est trop souvent le cas, l’agence regroupe le C et le C++ dans la seule catégorie C/C++, ignorant plus de 30 ans de progrès », a ajouté le créateur du C++. Dans un courriel envoyé la semaine dernière, M. Stroustrup a ajouté : « Oui, beaucoup trop de gens parlent du mythique langage C/C++, mais trop souvent, ils se concentrent ensuite sur les faiblesses de la partie C. Ces faiblesses peuvent être évitées en grande partie grâce à l'utilisation de la technologie C avec classes. Beaucoup de ces faiblesses peuvent être évitées en C++, essentiellement en écrivant un code plus efficace qui exprime plus directement l'intention du programmeur », a ajouté Bjarne Stroustrup.
Une sécurité des langages à géométrie variable
Dans ce courriel, Bjarne Stroustrup a également partagé sa définition de la sécurité. Telle qu’il l’entend, la sécurité du C++ vise les types et des ressources, dans laquelle chaque objet est utilisé conformément à son type et aucune ressource ne fuit. Pour le C++, cela implique une certaine vérification de l’étendue des fonctions au moment de l'exécution, l'élimination de l'accès par le biais de pointeurs pendants et une utilisation non abusive des casts et unions. « Le C++ offre des facilités de haut niveau, comme les conteneurs, l'étendue de fonction, les boucles range-for et les variantes qui peuvent offrir des garanties sans nuire à la productivité ou à l'efficacité ». En ce qui concerne les langages dits sûrs cités par la NSA, M. Stroustrup a déclaré que tous ces langages sont vulnérables parce que leur code n'est pas vérifié de manière statique. « En outre, chaque système doit utiliser un hardware, et l'accès effectif au matériel est rarement sûr », a-t-il ajouté.
Voici la stratégie préconisée par Bjarne Stroustrup pour utiliser le C++ en toute sécurité :
- L'analyse statique pour vérifier qu'aucun code non sûr n'est exécuté.
- Des règles de codage pour simplifier le code afin de rendre l'analyse statique possible à l'échelle industrielle.
- Des bibliothèques pour que ce code simplifié soit raisonnablement facile à écrire et pour assurer les contrôles d'exécution nécessaires.
Selon Bjarne Stroustrup, il existe des millions de développeurs C++ et des milliards de lignes de code C++. Le langage est actuellement utilisé dans des domaines comme l'aérospatiale, l'instrumentation médicale, l'IA/ML, les graphiques, la biomédecine, la physique des hautes énergies, etc. La NSA a reconnu que la gestion de la mémoire n'est pas entièrement sûre, même dans un langage « sûr pour la mémoire », et que des mécanismes comme les tests de sécurité des applications statiques (SAST) et les tests de sécurité des applications dynamiques (DAST) peuvent être utilisés pour améliorer la sécurité de la mémoire dans les langages dits « non sûrs pour la mémoire ». « Mais ni les SAST ni les DAST ne peuvent rendre un code non sécurisé par la mémoire, totalement sûr », a encore déclaré la NSA.