Il n'y a aucune bonne raison d'ignorer CERT C ++

Portrait de Miroslaw Zielinski, chef de produit chez Parasoft

Par Miroslaw Zielinski

20 décembre 2018

4  min lire

Il est vraiment difficile de trouver une justification pour ne pas suivre une norme de codage de sécurité telle que CERT C ++. Ici, découvrez de quoi il s'agit.

La sécurité est en train de devenir un nouveau mantra des équipes de développement de logiciels, en particulier celles qui sont responsables de la sécurité ou des logiciels critiques. Dans le passé, la sécurité était souvent une «fonctionnalité» que les équipes essayaient d'ajouter à des systèmes déjà construits, à la toute fin du cycle de développement (souvent en tournant dans des cercles vicieux de test et de correction), mais aujourd'hui nous savons que la sécurité est une solide discipline d'ingénierie appuyée par de multiples programmes et normes de recherche.

Si vous souhaitez que votre système soit sécurisé de par sa conception, vous devez commencer au tout début du processus de développement et vous assurer que chaque ligne de code créée respecte les meilleures pratiques de sécurité. Pour les équipes qui développent en C ++, l'une des meilleures options sur lesquelles s'appuyer est le standard SEI CERT C ++. Parasoft C / C ++test  est le seul outil qui prend en charge cette norme de manière exhaustive et constitue la solution de test et de conformité de sécurité la plus complète du marché pour le code C et C ++.

Directives de codage CERT C ++ en chiffres

La norme SEI CERT C ++ introduit un ensemble de règles pour appliquer des pratiques de codage sécurisées et éliminer les constructions de code vulnérables. La norme est organisée en 11 chapitres qui contiennent des règles dans des domaines spécifiques. Contrairement à CERT C, la norme de codage CERT C ++ ne contient que des règles et aucune recommandation (elles sont en attente de révision et de développement). SEI CERT C ++ s'appuie sur la norme CERT C et englobe le sous-ensemble de règles CERT C qui s'appliquent à C ++. À l'heure actuelle (gardez à l'esprit que les CERT sont des normes de vie), il existe 83 règles CERT C ++ et 80 règles héritées du CERT C.

À partir de la version 10.4.1, le test Parasoft C / C ++ prend entièrement en charge les directives de codage CERT C ++. La configuration de test («Règles SEI CERT C ++») active tous les vérificateurs du jeu de règles CERT C ++ d'origine et ceux de CERT C qui sont applicables pour C ++, ce qui est précisément tel que CERT le définit pour assurer la sécurité de votre base de code C ++. Les organisations qui développent avec C et C ++, y compris les équipes prévoyant de passer au C ++, peuvent désormais s'appuyer sur un seul outil avec des rapports cohérents.

Les équipes bénéficient également de rapports de conformité dédiés pour CERT C et C ++, pour construire un processus de conformité durable. Avec les extensions de rapport, les utilisateurs peuvent obtenir une vue dynamique du processus de conformité et examiner les violations classées par ordre de priorité selon le cadre d'évaluation des risques CERT.

Le CERT attribue à chaque violation un score pour les trois facteurs suivants:

  • Gravité
  • Probabilité
  • Coût de la correction

La priorité est calculée comme un produit de ces trois facteurs et divisée en niveaux: L1, L2 et L3. L1 représente des violations de gravité élevée, avec une probabilité élevée et un faible coût de correction. Ce sont ceux que nous sommes le plus intéressés à résoudre, car ils indiquent des problèmes graves qui ne sont pas compliqués à résoudre. L'utilisation du cadre de notation du CERT permet de concentrer les efforts et de permettre aux équipes de tirer le meilleur parti de leur budget temps.

Outre des widgets, des explorateurs de violations et un cadre de notation des risques qui vous aide à vous orienter rapidement dans l'avancement du processus de conformité, le cadre de reporting de Parasoft vous fait également gagner du temps en générant automatiquement des rapports de conformité adaptés aux audits de code. Il s'agit d'une fonctionnalité intéressante si votre organisation est plus formelle avec le processus de développement. En savoir plus sur le Cadre de reporting de conformité CERT chez Arthur blog connexe.

Comment pouvez-vous bénéficier de CERT C ++?

C ++ est un excellent langage, et bien qu'il possède de nombreuses fonctionnalités du langage OO moderne, lui permettant de concevoir des systèmes complexes avec des modèles de conception OO avancés, il offre également une grande efficacité car il vous permet d'accéder directement à la mémoire via des pointeurs sans vérifier si cet accès est correct.

Bien entendu, ces avantages ont un prix. Avec C ++, même les développeurs de logiciels très expérimentés peuvent créer du code vulnérable, le plus souvent en raison de problèmes d'accès à la mémoire et de gestion. Les débordements de tampon, l'utilisation de références pendantes et les débordements d'entiers peuvent tous conduire à un comportement indéfini, qui peut être exploité de plusieurs manières. Un attaquant peut essayer injection d'arc (transfert malveillant de contrôle sur le code existant dans la mémoire de processus, autre que prévu) ou injection de code (injecter du code dans la mémoire du système en cours d'exécution) pour prendre le contrôle d'un système avec les privilèges du programme compromis, ou pire encore, avec un niveau d'accès au noyau. Une fois ce contrôle pris, les pertes peuvent être dévastatrices.

Alors, comment pouvons-nous empêcher les attaquants de pénétrer dans notre système? Il n'est pas possible de prendre une base de code existante et d'essayer de deviner toutes les failles de sécurité possibles. La meilleure option actuellement disponible pour les programmeurs C / C ++ est de créer en premier lieu du code exempt de certaines constructions qui se sont avérées être une source de failles de sécurité.

Alors, regardons une illustration simple. L'extrait de code source ci-dessous est tiré directement du standard CERT C ++ (règle EXP61-CPP).

auto g () {

  int i = 12; retourne [&] {i = 100; // Retour du problème i; }; } void f () {

  int j = g () (); }

Dans cet exemple, la fonction g () renvoie un lambda, qui capture implicitement la variable locale automatique «i» par référence. Ce code mal écrit a au moins une faille de sécurité lorsque lambda est renvoyé de l'appel g () - la référence capturée fera référence à une variable dont la durée de vie est terminée (la fonction g a disparu). Par conséquent, lorsque le lambda est exécuté dans f (), l'utilisation de la référence pendante dans les effets lambda dans un comportement indéfini. Ce comportement indéfini peut être exploité pour prendre le contrôle du programme. La mémoire qui était occupée par «i» pendant la durée de vie de la fonction g est déjà libérée, et ce morceau de pile est probablement déjà réutilisé à d'autres fins, éventuellement une adresse de retour de l'appel de fonction, qui, une fois écrasée, peut être utilisée pour exécuter code arbitraire.

Cette vulnérabilité spécifique est détectable par la règle, EXP61-CPP Un objet lambda ne doit survivre à aucun de ses objets de référence capturés. Ainsi, le code source conforme à CERT C ++ ne doit contenir aucune occurrence de ce problème.

CERT C ++ comprend de nombreuses autres règles qui peuvent détecter des problèmes potentiels et vous aideront à promouvoir des pratiques de codage sécurisées. Les directives de codage de sécurité, lorsqu'elles sont utilisées de manière cohérente, peuvent aider à renforcer votre code source et constituent la stratégie la plus efficace pour assurer la sécurité globale du système. Et de nos jours, il est vraiment difficile de trouver une justification pour ne pas suivre une norme de codage de sécurité telle que CERT C ++.

Test de développement unifié pour les applications C et C ++

Portrait de Miroslaw Zielinski, chef de produit chez Parasoft

Par Miroslaw Zielinski

Chef de produit pour les solutions de test embarquées de Parasoft, les spécialités de Miroslaw comprennent le C / C ++, les RTOS, l'analyse de code statique, les tests unitaires, la gestion de la qualité des logiciels pour les applications critiques pour la sécurité et la conformité des logiciels aux normes de sécurité.

Recevez les dernières nouvelles et ressources sur les tests de logiciels dans votre boîte de réception.