Les développeurs LLVM proposent une gestion sécurisée des tampons en C++

Logo LLVM

LLVM est un cadre pour développer des compilateurs ainsi que pour aider à créer de nouveaux langages de programmation et à améliorer les langages existants.

Les les développeurs du projet LLVM ont proposé un certain nombre de changements visant à renforcer la sécurité des projets C + + critique et fournir un moyen d'éliminer les erreurs causées par les dépassements de mémoire tampon.

En tant que telle, la proposition qu'ils ont publiée se concentre sur le travail dans deux domaines en particulier : fournir un modèle de développement qui permet de travailler en toute sécurité avec des tampons et travailler pour renforcer la sécurité de la bibliothèque de fonctions standard libc++.

Il est mentionné que le modèle de programmation sécurisé proposé pour C++ «est d'utiliser les classes fournies par la bibliothèque standard lorsque vous travaillez avec des tampons au lieu de manipuler des pointeurs bruts». Par exemple, il est proposé d'utiliser les classes std::array, std::vector et std::span, qui seront ajoutées avec une vérification à l'exécution de la mémoire allouée hors limites.

Notre objectif est d'améliorer la sécurité des bases de code C++ critiques. Pour cela nous prévoyons de travailler sur deux idées.

Bibliothèque standard C++ renforcée
Modèle de programmation C++ Safe Buffer et outils d'adoption
La libc++ renforcée est destinée à rendre les interfaces de la bibliothèque standard C++ plus sûres en général.

Le modèle de programmation de tampon sécurisé de C++ ainsi que la libc++ renforcée fournissent une atténuation de l'exécution des accès mémoire hors limites. Les outils d'adoption automatiseront la migration du code vers ce nouveau modèle de programmation.

En plus de cela, il mentionne également que pour lutter contre les pratiques de programmation "dangereuses" en clang, si propose d'émettre des avertissements du compilateur pour toutes les opérations arithmétiques de pointeur, similaire aux avertissements de linter clang-tidy lors de l'utilisation de l'indicateur "cppcoreguidelines-pro-bounds-pointer-arithmetic", dont la prise en charge apparaîtra dans LLVM 16. Pour activer de tels avertissements, un indicateur distinct sera ajouté à clang, inactif par défaut .

Il est prévu d'implémenter un mode de protection optionnel dans libc++, qui, lorsqu'il est activé, détectera certaines situations qui conduisent à un comportement indéfini lors de l'exécution. Par exemple, dans les classes std :: span et std :: vector, un accès hors limites sera surveillé, auquel cas le programme échouera.

Ces contrôles d'exécution supplémentaires seront regroupés en plusieurs catégories pouvant être contrôlées séparément. L'intention est qu'un fournisseur expédiant libc++ sur sa plate-forme puisse décider quelles vérifications activer dans la bibliothèque d'expédition (le cas échéant), en fonction du niveau de sécurité souhaité.

Les développeurs pensent que l'ajout de tels changements maintiendra la conformité de la libc++ avec les standards C++, puisque le choix de la façon de gérer les cas de comportement indéfini appartient aux développeurs de la bibliothèque, qui peuvent, entre autres choses, traiter le comportement indéfini comme un verrou qui oblige le programme à sortir.

Les les vérifications d'exécution dans libc++ sont prévues pour être divisées en catégories qui peuvent être inclus individuellement. Certaines des vérifications suggérées qui n'entraînent pas d'opérations plus complexes ou de modifications de l'ABI sont déjà implémentées dans le mode sans échec de libc++ (mode sans échec).

Pour réitérer, le but ultime est que la bibliothèque livrée permette ces vérifications en production ; ce n'est pas une fonctionnalité de "débogage uniquement", bien qu'elle remplacera éventuellement le "mode de débogage" interrompu depuis longtemps.

En outre, il est prévu de préparer un ensemble d'outils de correction de code qui permettra de remplacer les variables par des pointeurs bruts dans les conteneurs et d'appliquer des gestionnaires alternatifs dans les situations où le conteneur ne peut pas remplacer directement le pointeur (par exemple, la construction "if(array_pointer)" peut être convertie en "if(span.data ( )»).Les paramètres peuvent être appliqués non seulement aux variables locales, mais également aux paramètres de type avec des pointeurs.

Il est aussi mentionné que envisagent un "vérificateur d'analyseur statique clang" route sensible qui avertit si std :: durée est construit à partir d'un conteneur plus petit que la taille spécifiée dans le constructeur de la plage. Ledit vérificateur est autonome et utile par lui-même, si tout se passe bien, il sera activé par défaut pour tous les utilisateurs

Enfin si vous souhaitez en savoir plus, vous pouvez vérifier les détails dans le lien suivant


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données : AB Internet Networks 2008 SL
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.