Découvrez comment la solution Parasoft Continuous Quality permet de contrôler et de gérer les environnements de test pour fournir des logiciels de haute qualité en toute confiance. Inscrivez-vous pour la démo >>

BLOG

Tirez parti des conteneurs pour atteindre rapidement la sécurité grâce aux tests continus

Tirez parti des conteneurs pour atteindre rapidement la sécurité grâce aux tests continus Temps de lecture : 7 minutes

Les tests continus fournissent un cadre pour décaler les tests plus tôt dans le cycle de vie. Ce is possible de rationaliser les tests et de les rendre moins inhibiteurs dans les processus Agiles et continus. Que faut-il? La bonne application de l'automatisation et se concentrer sur les domaines les plus à risque de l'application avec l'utilisation de conteneurs pour le développement de logiciels sécurisés.

Conteneurs pour le développement de logiciels sécurisés

Les conteneurs jouent un rôle important dans les tests de décalage à gauche. Et dans le succès des tests continus et de DevSecOps en général. Ils deviennent également utiles dans le développement car les environnements de développement et de test conteneurisés offrent des avantages similaires à ceux du déploiement. Voici quelques-uns:

  • Configurations d'outils de développement cohérentes et reproductibles
  • Déploiement «Travaillez de n'importe où»
  • Corriger la gestion des versions des outils

Les conteneurs ont un rôle important à jouer dans le développement DevSecOps moderne, car les conteneurs peuvent aider à déplacer les processus de sécurité vers la gauche dans le développement logiciel.

Le Accélérer DevSecOps avec des conteneurs et des tests continus détails du livre blanc tirant parti des conteneurs pour le développement de logiciels sécurisés pour atteindre la sécurité à la vitesse. Cet article examine les domaines clés suivants abordés dans le livre blanc pour mieux intégrer les conteneurs dans les phases de développement et de test du développement logiciel:

  • Conteneurisez les pratiques de sécurité.
  • Supprimez les contraintes dans le pipeline DevSecOps.
  • Conteneurisez le développement sécurisé sur le bureau de chaque développeur.

L'objectif est d'améliorer la sécurité tout en minimisant l'impact sur les flux de travail quotidiens.

Conteneuriser les pratiques de sécurité

En tirant parti de la cohérence et de la réutilisation des conteneurs, les tests de sécurité continus fonctionnent mieux lorsque chaque développeur et testeur de l'équipe travaille à partir de la même configuration. Le déplacement des outils et des configurations associées dans des conteneurs garantit une utilisation cohérente et tout changement se propage immédiatement. Un flux de travail DevSecOps plus intelligent signifie que la sécurité est «intégrée» dès le départ.

Les exigences de sécurité ajoutent une charge de travail supplémentaire pour les développeurs. La façon dont vous gérez fait la différence entre un produit ponctuel et sécurisé et un produit tardif et non sécurisé. Une exigence critique est d'intégrer la sécurité dans le processus de développement existant, ce qui en fait moins un fardeau et une partie de la qualité et du flux de travail global.

Tirer parti des conteneurs: flux de travail DevSecOps
Figure 1: Un flux de travail DevSecOps avec l'implémentation conteneurisée des contrôles et processus de sécurité.

Flux de travail

Le flux de travail commence par une politique de codage sécurisée. L'architecte ou le responsable crée une configuration (éventuellement basée sur des directives de codage telles que CERT, CWE, OWASP, pilotées par des normes telles que UL-2900 ou PCI DSS) que le reste de l'équipe pourra exploiter directement dans son IDE. Cela donne au développeur la possibilité de vérifier le code localement sur sa machine avant de s'engager dans le contrôle de code source. Ils peuvent détecter et corriger les violations de sécurité où et quand c'est moins cher et plus facile à faire.

configuration

La même configuration est répliquée via des images de conteneur, assurant la cohérence, puis exploitée par une analyse exécutée dans le cadre du processus de construction. Cette analyse complète va au-delà de la portée du code modifié localement par le développeur et fournit un filet de sécurité pour bloquer le pipeline de livraison afin de s'assurer que le code non sécurisé ne soit pas promu aux étapes ultérieures.

Analyses

Enfin, les résultats de l'analyse sont renvoyés à l'EDI du développeur via le tableau de bord centralisé de reporting et d'analyse. C'est là que vous pouvez suivre les progrès, apporter des corrections de cap et générer des rapports d'audit en temps réel.

Les responsables et les responsables de la sécurité peuvent évaluer les projets en fonction de normes de sécurité telles que CWE Top 25, OWASP Top 10 ou SEI CERT dans des tableaux de bord centraux. Ces tableaux de bord peuvent afficher des informations sur les tendances et répondre à des questions telles que:

  • Le projet s'améliore-t-il ou s'aggrave-t-il?
  • Quelles zones du code causent le plus de problèmes?
  • Quels problèmes présentent le plus de risques et d'impact?

Être capable de répondre à ces questions et à d'autres - et d'agir - transforme l'équipe de développement de DevOps avec une certaine sécurité en DevSecOps.

Supprimer les contraintes dans le pipeline DevSecOps

Malgré le désir d'accélérer la sécurité et la qualité, les processus Agiles et continus se heurtent à des obstacles lors de l'adoption précoce et dans les opérations quotidiennes. Le coupable du ralentissement des processus Agile est souvent le test. Le problème se pose parce que les équipes ne comprennent pas exactement ce qu'il faut tester à chaque itération. Soit ils essaient de tout tester, soit ils n'en testent pas assez, soit ils font simplement des suppositions. Les trois résultats sont inacceptables, en particulier du point de vue de la sécurité. L'exécution intelligente des tests aide en outre les équipes à concentrer leurs efforts de test, permettant véritablement des tests continus.

La pyramide de test

Le pyramide de test définit où il est préférable d'investir du temps et des efforts dans un projet. Dans la pyramide idéale, vous investissez votre temps et vos efforts précieux dans une suite complète de tests unitaires à la base de la pyramide, qui est soutenue par des tests d'API et de services. Un plus petit nombre de tests basés sur le système et l'interface graphique se trouve au sommet de la pyramide. Ce sont des tests qui nécessitent une intervention humaine, tels que les tests UX.

Tirer parti des conteneurs: pyramide de test idéale
Figure 2: La pyramide de test idéale est construite sur une base de tests unitaires sur up. La pyramide inversée superposée reflète ce que font actuellement de nombreuses organisations.

Cette pyramide est souvent inversée en forme de cornet de crème glacée. Les équipes consacrent trop de temps et d'efforts à des tests d'interface graphique fragiles et complexes au niveau du système qui nécessitent la mise en œuvre et l'intégration de toutes les fonctionnalités. Le résultat est un test que les équipes ne peuvent pas exécuter en continu pendant les premières étapes du SDLC.

Ceci est particulièrement problématique avec la sécurité. Il est coûteux et risqué de laisser les tests de sécurité à un stade de développement aussi avancé. La clé pour réaliser des tests continus réussis est de faire fondre le cornet de crème glacée. Concentrez-vous sur la création de tests unitaires et API automatisés pour la fonctionnalité et la sécurité qui peut être exécuté en continu pendant que les développeurs implémentent la nouvelle fonctionnalité.

Test des meilleures pratiques

La meilleure approche pour transformer la pyramide de test du bon côté - qui s'aligne parfaitement avec les meilleures pratiques nécessaires pour DevSecOps - consiste à adopter ces meilleures pratiques de test:

  • Utilisez SAST le plus tôt possible pour trouver des problèmes de fiabilité et de sécurité profonds cachés dans le code. Ces problèmes sont souvent négligés par l'inspection humaine ou les tests unitaires.
  • Introduire tôt les tests unitaires pour s'assurer que le code est fonctionnel, bien conçu et répond aux exigences, y compris les exigences de sécurité.
  • Concentrez-vous de manière critique sur les tests d'API déployé dans un environnement virtuel ou de production via des conteneurs selon le cas.

Les tests au niveau de l'API offrent la possibilité de tester les fonctionnalités du système avec plus de réutilisabilité et moins d'impact des modifications au niveau de l'interface utilisateur. Cela signifie que beaucoup de données sont générées par le processus automatisé. Pour soutenir la prise de décision, ces données doivent être agrégées dans une vue centralisée de de qualité. Les tableaux de bord graphiques fournissent une vue d'ensemble de la progression des tests. Vous pouvez créer des éléments de travail supplémentaires en fonction de l'examen des données, des défauts identifiés et d'autres problèmes.

Accélérez la sécurité grâce à l'exécution de tests intelligents

Il manque un moyen de cibler les tests dans les meilleures pratiques répertoriées ci-dessus. Cela demande une réponse à la question "Que tester?" Il est essentiel de concentrer les tests sur ce que les développeurs doivent examiner après chaque changement de code pour accélérer les tests, permettre des tests continus et accélérer le pipeline DevSecOps.

Pour accélérer les tests dans un pipeline Agile ou continu, les équipes ont besoin d'une exécution de test intelligente par build. Cela réduit les ensembles de tests requis que les équipes doivent exécuter pour faire face au risque que chaque nouvelle itération introduit. Les analyses fournies par l'analyse d'impact des tests sont essentielles pour concentrer les tests uniquement sur ce que vous devez absolument tester plutôt que sur l'approche du fusil de chasse.

Ce n'est que grâce à une prise de décision intelligente que la prise de décision basée sur les données peut permettre des tests continus. Centrer l'équipe de développement sur l'ensemble minimum de tests pour garantir une couverture adéquate à chaque itération est la clé pour ramener l'agilité aux méthodes de développement Agile.

Tirer parti des conteneurs: exemple de graphique Parasoft DTP
Figure 3: Un exemple de graphique de haut niveau fourni par Parasoft DTP montrant la répartition des tests qui ont réussi, échoué, sont incomplets et doivent être retestés. Les utilisateurs peuvent cliquer sur le graphique à secteurs pour afficher plus de détails.

Utilisation de l'exécution de test intelligente analyse d'impact de test pour suivre l'exécution des tests manuels par rapport aux applications et aux informations de couverture de code capturées associées à ces tests. Les tests automatisés utilisent une technologie similaire. Cette analyse détermine quels tests manuels doivent être exécutés pour accéder aux fonctionnalités modifiées fournies avec chaque nouvelle version. Ainsi, l'exécution de tests intelligents est essentielle au niveau des développeurs et des testeurs dans leurs IDE locaux. Cela leur permet de concentrer les tests et d'éliminer les conjectures et le travail supplémentaire «au cas où».

Containerize Secure Development sur le bureau de chaque développeur

Pour réaliser un pipeline DevSecOps efficace, les développeurs doivent avoir accès à une automatisation qui supprime les aspects fastidieux de leur travail quotidien. Un développement réussi de la sécurité - et de la qualité et de la sécurité - nécessite un retour rapide des tests unitaires, des tests d'API, des tests d'interface utilisateur et des résultats SAST. De plus, affiner les contrôles de sécurité en fonction des découvertes les plus récentes de l'équipe de sécurité.

L'avantage des conteneurs pour les équipes de développement s'étend au bureau du développeur. Les conteneurs fournissent une chaîne d'outils cohérente et réutilisable (y compris les tests / configuration SAST) dans les environnements de développement, de construction, d'intégration et de déploiement. Ils éliminent le besoin de mettre à jour les postes de travail locaux chaque fois que les configurations sont mises à jour. Dans le développement basé sur des conteneurs, seule l'image du conteneur doit être mise à jour. Toute l'équipe en profite.

Déploiements d'outils en équipe

Les déploiements d'outils en équipe peuvent utiliser des conteneurs pour héberger des référentiels, différentes chaînes d'outils (particulièrement importantes pour le développement de logiciels embarqués), SAST et des outils de test. Un exemple illustratif d'un possible environnement de développement conteneurisé est présenté ci-dessous.

Tirer parti des conteneurs: environnement de développement et de test cohérent

Figure 4: Les conteneurs offrent aux développeurs un moyen efficace de disposer d'un environnement de développement et de test cohérent.

Là où les développeurs commencent vraiment à accélérer le développement sécurisé, c'est avec l'adoption «poste de travail» local de l'exécution de tests intelligents. Renforcer les bonnes pratiques de sécurité et d'ingénierie (pour effectuer des analyses de sécurité et exécuter des tests localement et souvent) entre les modifications de code et avant de valider tout changement dans le système de contrôle de code source. Ce processus réduit considérablement la boucle de rétroaction sur la sécurité et la qualité du code modifié. Il accélère généralement le flux de travail «code, test, soumission».

Éliminez les tests inutiles

Les équipes de développement peuvent utiliser un flux de travail de test continu pour concentrer les efforts de test et s'assurer qu'elles n'effectuent que les tests nécessaires. En outre, une surveillance constante de la sécurité du code avec les outils SAST est essentielle pour garantir que les équipes respectent les normes de codage et que les vulnérabilités délicates n'échappent pas aux tests de sécurité.

Un retour rapide et une analyse des résultats du SAST et des tests réduisent la friction lors des tests continus. La cohérence fournie par les environnements de développement basés sur des conteneurs signifie que les résultats sont les mêmes dans toute l'équipe. Cela réduit le besoin de «déboguer» différents environnements de développement lorsque les résultats ne correspondent pas. Apporter la puissance de l'exécution de tests intelligents au bureau du développeur accélère véritablement le développement de logiciels sécurisés.

Résumé

Les conteneurs sont une approche d'exécution et de déploiement bien établie. Ils prennent également en charge le déploiement rapide et la portabilité dans différents environnements hôtes avec prise en charge de la gestion des versions et du contrôle centralisé. CI / CD sont également importants pour le développement sécurisé dans un pipeline DevSecOps car il est possible de fournir un environnement d'application reproductible avec des contrôles de sécurité intégrés.

Les tests continus fournissent un cadre pour déplacer les tests plus tôt dans le cycle de vie. Avec la bonne application de l'automatisation et la concentration sur les domaines les plus à risque de l'application, il est possible de rationaliser les tests pour être moins un inhibiteur dans les processus Agiles et continus. L'utilisation de conteneurs pour le développement de logiciels sécurisés étend les avantages de la gestion des versions et de la réutilisabilité au bureau du développeur en fournissant une chaîne d'outils cohérente, une configuration de test / SAST, un développement et un déploiement (local) et un environnement de test.

CTA-WP-Accelerating-DevSecOps-With-Containers-Continuous-Tests

Écrit par

Arthur Hicken

Arthur est impliqué dans la sécurité logicielle et l'automatisation des tests chez Parasoft depuis plus de 25 ans, aidant à la recherche de nouvelles méthodes et techniques (dont 5 brevets) tout en aidant les clients à améliorer leurs pratiques logicielles.

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