Internet peut avoir de graves problèmes en raison de langages comme C et C ++ qui contribuent aux vulnérabilités

Bonjour, Habr! Je vous présente la traduction de l'article " Internet aurait de sérieux problèmes à causer des langues comme C et C ++ favorisant la survenue de failles " (français).

Mais peu de développeurs s'en soucient.


Un bogue affecte l'iPhone, un autre - Windows et le troisième - des serveurs fonctionnant sous Linux. À première vue, ces bugs n'ont rien de commun, car ils concernent différentes plateformes: Android, iOS, macOS, Windows, Linux. Cependant, en réalité, tout est différent, selon Alex Gaynor, ingénieur en sécurité logicielle chez Mozilla, qui travaillait auparavant pour USDS (United States Digital Service).

[1]
Plus de détails - https://www.usds.gov , ci-après env. traducteur.

Lors du troisième maillon le plus faible, un événement annuel organisé par Motherboard Vice,


Au sujet du piratage informatique et de la cybersécurité à l'avenir, Alex Gaynor a soulevé un problème grave qui, à son avis, pourrait menacer Internet, mais, paradoxalement, cela laisse les développeurs complètement indifférents.

Gaynor a expliqué que les trois erreurs mentionnées précédemment existent, car le logiciel qu'elles affectent sur différentes plates-formes a été écrit à l'aide de langages de programmation, qui ont une tendance désagréable à provoquer des erreurs telles que «l'insécurité de la mémoire», permettant l'accès aux zones de mémoire non affectées.

[3]
Très probablement, cela signifiait que la référence au 6ème élément d'un tableau composé de 5 éléments est autorisée, bien que dans d'autres langages de programmation qui sont plus «sûrs», au moins un message d'erreur sera affiché.

Cette catégorie d'erreurs peut entraîner des bogues et des failles de sécurité lors de l'accès à la mémoire.

En permettant à des erreurs telles que «l'insécurité de la mémoire» de se produire, les langages de programmation tels que C et C ++ peuvent propager un flux presque infini de vulnérabilités de sécurité critiques au fil des ans. Un exemple de ces vulnérabilités est:

  • incompatibilité de type
  • débordement de tampon
  • débordement de variable entière
  • utiliser après une vulnérabilité gratuite

Une incompatibilité de type peut se produire lorsqu'un morceau de code ne vérifie pas le type d'objet qui lui est transmis et l'utilise à l'aveugle. Cette situation peut être dangereuse. De plus, en plus des différences de type, des pointeurs de fonction incorrects ou des données incorrectes sont associés à la mauvaise partie du code, ce qui peut dans certains cas conduire à son exécution.

Le débordement de tampon (ou «débordement de tampon» en anglais) est une vulnérabilité de sécurité critique qui se produit lorsqu'un utilisateur entre une chaîne qui sera dans un tableau de caractères de taille insuffisante. Cela entraîne l'écriture des données en dehors de la zone de mémoire allouée à la baie. HeartBleed, par exemple, qui a affecté 17% des serveurs sécurisés sur Internet, était une vulnérabilité de dépassement de tampon qui lui permettait de lire 60 Ko après la fin de la liste, y compris les mots de passe et autres données utilisateur.

Le dépassement d'entier est une vulnérabilité difficile à détecter qui exploite le fait que les nombres ne peuvent pas dépasser une certaine valeur, qui dépend du nombre de bits utilisés pour les représenter et de la méthode de codage.

La vulnérabilité «utiliser après la libération» se produit généralement lors de l'utilisation d'un pointeur ou de données en mémoire lorsque le pointeur (ou bloc de mémoire) est déjà libéré.

Ensemble, ces vulnérabilités sont les exploits les plus courants dans les logiciels populaires, tels que Firefox, Chrome, Windows, Android ou iOS. Gaynor en a déjà dénombré au moins 400 et déclare: «Je surveille la sécurité de ces projets depuis plus d'un an, et dans presque toutes les versions de ces produits, plus de la moitié des vulnérabilités ne sont pas sécurisées en mémoire. Et encore plus alarmant, les vulnérabilités graves et critiques [...] ont presque toujours ce type. »

Malgré les risques de sécurité importants des logiciels qu'ils prennent en charge, les langages de programmation conviviaux pour la mémoire tels que C ou C ++ sont toujours utilisés par les développeurs, tandis que des alternatives éprouvées telles que Rust et Swift peuvent être envisagées. car les langues «sans danger pour la mémoire» sont rares.

Cela peut être dû au fait que pour un nouveau projet, les développeurs choisissent généralement un langage de programmation basé sur les langages que leur équipe connaît, les performances et les systèmes de bibliothèque pouvant découler de ce choix. Dans la prise de décisions, la composante de sécurité associée à cela n'est presque jamais prise en compte, ou du moins pas suffisamment considérée, a déclaré Gaynor.

De plus, la plupart des projets logiciels, même les plus importants pour la sécurité Internet, ne sont pas nouveaux. Ils ont été lancés il y a dix ans, sinon plus. Linux, OpenSSL et le serveur Web Apache, par exemple, ont plus de vingt ans. Pour des projets à grande échelle comme ceux-ci, la réécriture de tout le code dans une nouvelle langue n'est pas une option. Ils doivent être transformés progressivement, ce qui signifie que les projets doivent être écrits et enregistrés dans deux langues différentes au lieu d'une. Cela implique également la nécessité de former une grande équipe, ce qui prend beaucoup de temps et nécessite plus d'argent.

Le plus gros problème, enfin, est que de nombreux développeurs ne croient pas du tout que le problème existe. Ils croient que le problème n'est pas que des langages comme C ou C ++ contribuent aux vulnérabilités, mais d'autres programmeurs qui écrivent du code avec des erreurs. Ils croient qu'il n'y a aucun problème avec ces langages soi-disant «respectueux de la sécurité», car aucun code n'est parfait, juste les gens ne savent pas comment les utiliser.

Qu'en pensez-vous?



Je note que de bonnes critiques de la traduction sont également les bienvenues.

Merci de votre attention!

Source: https://habr.com/ru/post/fr432502/


All Articles