Parasoft C/C++test 2022.2 unterstützt das neue MISRA C:2012 Amendment 3 und eine Entwurfsversion von MISRA C++ 202x. Erfahren Sie mehr >>

Nutzen Sie Container, um durch kontinuierliche Tests schnell Sicherheit zu erreichen

Von Arthur Hicken

20. August 2020

7  min lesen

Kontinuierliche Tests, kontinuierliche Integration und kontinuierliche Bereitstellungen sind wichtige Elemente im SDLC. Sie sollten jedoch Container nutzen, um kontinuierliche Tests mit hoher Geschwindigkeit zu erreichen. Lernen Sie von Parasoft-Experten, wie Sie containerisierte Sicherheitspraktiken bereitstellen können.

Kontinuierliches Testen bietet einen Rahmen, um das Testen früher im Lebenszyklus zu verlagern. Es is Es ist möglich, Tests zu rationalisieren und sie in agilen und kontinuierlichen Prozessen weniger hemmend zu machen. Was braucht es? Die richtige Anwendung der Automatisierung und Konzentration auf die Bereiche mit dem höchsten Risiko der Anwendung unter Verwendung von Containern für die sichere Softwareentwicklung.

Container für die sichere Softwareentwicklung

Container spielen eine wichtige Rolle beim Testen nach links. Und für den Erfolg von kontinuierlichen Tests und DevSecOps im Allgemeinen. Sie werden auch bei der Entwicklung hilfreich, da containerisierte Entwicklungs- und Testumgebungen Vorteile bieten, wie sie bei der Bereitstellung auftreten. Hier sind ein paar:

  • Konsistente, wiederholbare Konfigurationen von Entwicklungstools
  • Bereitstellung „Von überall aus arbeiten“
  • Korrekte Werkzeugversionierung

Container spielen in der modernen DevSecOps-Entwicklung eine wichtige Rolle, da Container dazu beitragen können, Sicherheitsprozesse bei der Softwareentwicklung nach links zu verschieben.

Die Beschleunigung von DevSecOps mit Containern und kontinuierlichen Tests Whitepaper-Details, die Container für eine sichere Softwareentwicklung nutzen, um schnell Sicherheit zu erreichen. Dieser Beitrag befasst sich mit den folgenden Schlüsselbereichen, die im Whitepaper erörtert wurden, um Container besser in die Entwicklungs- und Testphase der Softwareentwicklung zu integrieren:

  • Containerisieren Sie Sicherheitspraktiken.
  • Entfernen Sie Einschränkungen in der DevSecOps-Pipeline.
  • Containerisieren Sie die sichere Entwicklung auf dem Desktop jedes Entwicklers.

Ziel ist es, eine bessere Sicherheit zu erreichen und gleichzeitig die Auswirkungen auf die täglichen Arbeitsabläufe zu minimieren.

Containerisieren Sie Sicherheitspraktiken

Durch die Nutzung der Konsistenz und Wiederverwendbarkeit, die Container bieten, funktionieren kontinuierliche Sicherheitstests am besten, wenn jeder Entwickler und Tester im Team mit derselben Konfiguration arbeitet. Durch das Verschieben von Tools und zugehörigen Konfigurationen in Container wird eine konsistente Verwendung sichergestellt, und alle Änderungen werden sofort weitergegeben. Ein intelligenterer DevSecOps-Workflow bedeutet, dass die Sicherheit von Anfang an „eingebunden“ ist.

Sicherheitsanforderungen erhöhen die Arbeitslast für Entwickler. Wie Sie es verwalten, macht den Unterschied zwischen einem pünktlichen, sicheren und einem späten, unsicheren Produkt. Eine wichtige Anforderung besteht darin, die Sicherheit in den vorhandenen Entwicklungsprozess zu integrieren, um sie weniger zu belasten und Teil der Qualität und des gesamten Workflows zu werden.

Nutzung von Containern: DevSecOps-Workflow
Abbildung 1: Ein DevSecOps-Workflow mit der containerisierten Implementierung von Sicherheitskontrollen und -prozessen.

Arbeitsablauf

Der Workflow beginnt mit einer sicheren Codierungsrichtlinie. Der Architekt oder Lead erstellt eine Konfiguration (möglicherweise basierend auf Codierungsrichtlinien wie CERT, CWE, OWASP, die von Standards wie UL-2900 oder PCI DSS gesteuert werden), die der Rest des Teams direkt in seiner IDE nutzen kann. Dies gibt dem Entwickler die Möglichkeit, den Code lokal auf seinem Computer zu überprüfen, bevor er sich zur Quellcodeverwaltung verpflichtet. Sie können Sicherheitsverletzungen erkennen und beheben, wo und wann dies billiger und einfacher ist.

Konfiguration

Dieselbe Konfiguration wird durch Containerbilder repliziert, um Konsistenz zu gewährleisten, und dann durch eine Analyse genutzt, die im Rahmen des Erstellungsprozesses ausgeführt wird. Diese umfassende Analyse geht über den Umfang des lokal geänderten Codes des Entwicklers hinaus und bietet ein Sicherheitsnetz, um die Bereitstellungspipeline zu steuern und sicherzustellen, dass unsicherer Code nicht in spätere Phasen befördert wird.

Analyse

Zuletzt werden die Ergebnisse der Analyse über das zentralisierte Berichts- und Analyse-Dashboard an die IDE des Entwicklers zurückgesendet. Hier können Sie den Fortschritt verfolgen, Kurskorrekturen vornehmen und Auditberichte in Echtzeit erstellen.

Manager und Sicherheitsleiter können Projekte basierend auf Sicherheitsstandards wie CWE Top 25, OWASP Top 10 oder SEI CERT in zentralen Dashboards bewerten. Diese Dashboards können Trendinformationen anzeigen und Fragen beantworten wie:

  • Verbessert oder verschlechtert sich das Projekt?
  • Welche Bereiche des Codes verursachen die meisten Probleme?
  • Welche Probleme haben das größte Risiko und die größten Auswirkungen?

In der Lage zu sein, diese und andere Fragen zu beantworten - und zu handeln - verwandelt das Entwicklungsteam von DevOps mit etwas Sicherheit zu DevSecOps.

Entfernen Sie Einschränkungen in der DevSecOps-Pipeline

Trotz des Wunsches, Sicherheit und Qualität zu beschleunigen, stoßen agile und kontinuierliche Prozesse bei der frühzeitigen Einführung und im täglichen Betrieb auf Hindernisse. Der Schuldige an der Verlangsamung agiler Prozesse sind häufig Tests. Das Problem tritt auf, weil die Teams nicht genau verstehen, was sie bei jeder Iteration testen sollen. Sie versuchen entweder alles zu testen, testen nicht annähernd genug oder raten einfach. Alle drei Ergebnisse sind insbesondere aus Sicherheitsgründen nicht akzeptabel. Die intelligente Testausführung hilft den Teams außerdem dabei, ihre Testbemühungen zu konzentrieren, und ermöglicht so kontinuierliche Tests.

Die Testpyramide

Die Testpyramide definiert, wo es am besten ist, Zeit und Mühe in ein Projekt zu investieren. In der idealen Pyramide investieren Sie Ihre wertvolle Zeit und Mühe in eine umfassende Reihe von Komponententests auf der Grundlage der Pyramide, die durch API- und Servicetests unterstützt werden. Eine kleinere Anzahl von System- und GUI-basierten Tests befindet sich oben in der Pyramide. Hierbei handelt es sich um Tests, bei denen ein menschliches Eingreifen erforderlich ist, z. B. UX-Tests.

Nutzung von Containern: Ideale Testpyramide
Abbildung 2: Die ideale Testpyramide basiert auf Unit-Tests. Die überlagerte umgekehrte Pyramide spiegelt wider, was viele Organisationen derzeit tun.

Diese Pyramide wird oft in eine Eistütenform umgewandelt. Die Teams verbringen zu viel Zeit und Mühe mit spröden und komplexen GUI-Tests auf Systemebene, bei denen die volle Funktionalität implementiert und integriert werden muss. Das Ergebnis ist ein Test, den Teams in früheren Phasen des SDLC nicht kontinuierlich ausführen können.

Dies ist insbesondere bei der Sicherheit problematisch. Es ist kostspielig und riskant, Sicherheitstests einem so späten Entwicklungsstadium zu überlassen. Der Schlüssel zu erfolgreiches kontinuierliches Testen zu erreichen ist, die Eistüte zu schmelzen. Konzentrieren Sie sich auf die Erstellung automatisierter Unit- und API-Tests für Funktionalität und Sicherheit Dies kann kontinuierlich ausgeführt werden, wenn Entwickler die neue Funktionalität implementieren.

Best Practices testen

Der beste Ansatz, um die Testpyramide auf den Kopf zu stellen - was gut mit den für DevSecOps erforderlichen Best Practices übereinstimmt - besteht darin, die folgenden Best Practices für Tests anzuwenden:

  • Verwenden Sie SAST so früh wie möglich um tiefgreifende Zuverlässigkeits- und Sicherheitsprobleme zu finden, die im Code verborgen sind. Diese Probleme werden häufig durch menschliche Inspektionen oder Unit-Tests übersehen.
  • Führen Sie Unit-Tests frühzeitig ein um sicherzustellen, dass der Code funktionsfähig und gut gestaltet ist und die Anforderungen, einschließlich der Sicherheitsanforderungen, erfüllt.
  • Konzentrieren Sie sich kritisch auf API-Tests Bereitstellung in einer virtuellen oder Produktionsumgebung über Container nach Bedarf.

Das Testen auf API-Ebene bietet die Möglichkeit, die Systemfunktionalität mit mehr Wiederverwendbarkeit und weniger Auswirkungen von Änderungen auf der Benutzeroberfläche zu testen. Dies bedeutet, dass durch den automatisierten Prozess viele Daten generiert werden. Um die Entscheidungsfindung zu unterstützen, müssen diese Daten zu einer zentralen Ansicht von zusammengefasst werden qualitativ hochwertiges. Grafische Dashboards bieten eine Übersicht über den Testfortschritt auf oberster Ebene. Sie können zusätzliche Arbeitselemente basierend auf der Überprüfung der Daten, identifizierten Fehlern und anderen Problemen erstellen.

Beschleunigen Sie die Sicherheit mit Smart Test Execution

In den oben aufgeführten Best Practices fehlt eine Möglichkeit, das Testen zu fokussieren. Es bittet um eine Antwort auf die Frage: "Was soll getestet werden?" Das Fokussieren des Testens auf genau das, was Entwickler nach jeder Codeänderung überprüfen müssen, ist entscheidend, um das Testen zu beschleunigen, kontinuierliche Tests zu ermöglichen und die DevSecOps-Pipeline zu beschleunigen.

Um das Testen in einer agilen oder kontinuierlichen Pipeline zu beschleunigen, benötigen Teams eine intelligente Testausführung pro Build. Es reduziert die erforderlichen Testsätze, die Teams ausführen müssen, um das Risiko zu bewältigen, dass jede neue Iteration eingeführt wird. Die Analyse, die die Test-Auswirkungsanalyse bietet, ist der Schlüssel, um das Testen nur auf das zu konzentrieren, was Sie unbedingt testen müssen, und nicht auf den Shotgun-Ansatz.

Nur durch intelligente, datenbasierte Entscheidungsfindung können kontinuierliche Tests ermöglicht werden. Der Schlüssel dazu liegt darin, das Entwicklungsteam auf die Mindestanzahl von Tests zu konzentrieren, um bei jeder Iteration eine ordnungsgemäße Abdeckung sicherzustellen Bringen Sie die Agilität zurück zu den agilen Entwicklungsmethoden.

Nutzung von Containern: Parasoft DTP-Beispieldiagramm
Abbildung 3: Ein von Parasoft DTP bereitgestelltes Beispieldiagramm auf hoher Ebene, das die Verteilung der Tests zeigt, die bestanden wurden, fehlgeschlagen sind, unvollständig sind und erneut getestet werden müssen. Benutzer können auf das Kreisdiagramm klicken, um weitere Details anzuzeigen.

Intelligente Testausführung verwendet Test Impact Analysis Verfolgen der Ausführung manueller Tests für Anwendungen und der damit verbundenen, erfassten Informationen zur Codeabdeckung mit diesen Tests. Automatisierte Tests verwenden eine ähnliche Technologie. Diese Analyse ermittelt, welche manuellen Tests ausgeführt werden müssen, um auf geänderte Funktionen zuzugreifen, die bei jedem neuen Build bereitgestellt werden. Daher ist die intelligente Testausführung auf Entwickler- und Testerebene in ihren lokalen IDEs von entscheidender Bedeutung. Es ermöglicht ihnen, sich auf die Tests zu konzentrieren und das Rätselraten und zusätzliche „Nur für den Fall“ -Arbeiten zu beseitigen.

Containerisieren Sie die sichere Entwicklung auf dem Desktop jedes Entwicklers

Um eine effiziente DevSecOps-Pipeline zu erreichen, benötigen Entwickler Zugriff auf eine Automatisierung, die die mühsamen Aspekte ihrer täglichen Arbeit beseitigt. Eine erfolgreiche Entwicklung von Sicherheit sowie Qualität und Sicherheit erfordert ein schnelles Feedback von Unit-Tests, API-Tests, UI-Tests und SAST-Ergebnissen. Feinabstimmung der Sicherheitskontrollen auf der Grundlage der neuesten Erkenntnisse des Sicherheitsteams.

Der Vorteil von Containern für Entwicklungsteams erstreckt sich auf den Desktop des Entwicklers. Container bieten eine konsistente und wiederverwendbare Toolchain (einschließlich Test- / SAST-Konfiguration) für Entwickler-, Build-, Integrations- und Bereitstellungsumgebungen. Sie machen es nicht mehr erforderlich, lokale Arbeitsstationen jedes Mal zu aktualisieren, wenn Konfigurationen aktualisiert werden. In der containergestützten Entwicklung muss nur das Container-Image aktualisiert werden. Das gesamte Team profitiert.

Teambasierte Tool-Bereitstellungen

Teambasierte Toolbereitstellungen können mithilfe von Containern Repositorys, verschiedene Toolchains (besonders wichtig für die Entwicklung eingebetteter Software), SAST und Testtools hosten. Ein anschauliches Beispiel für eine mögliche containerisierte Entwicklungsumgebung ist unten dargestellt.

Nutzung von Containern: Konsequente Entwicklung und Testumgebung

Abbildung 4: Container bieten Entwicklern eine effiziente Möglichkeit, eine konsistente Entwicklungs- und Testumgebung zu haben.

Entwickler beginnen wirklich damit, die sichere Entwicklung zu beschleunigen, indem die lokale Teststation die Ausführung intelligenter Tests übernimmt. Stärkung der guten Sicherheits- und Konstruktionspraktiken (um lokal und häufig Sicherheitsanalysen und Testausführungen durchzuführen) zwischen Codeänderungen und bevor Änderungen am Quellcodeverwaltungssystem vorgenommen werden. Dieser Prozess reduziert die Rückkopplungsschleife zur Sicherheit und Qualität des geänderten Codes erheblich. Dies beschleunigt im Allgemeinen den Workflow „Code, Test, Submit“.

Beseitigen Sie unnötige Tests

Entwicklungsteams können einen kontinuierlichen Testworkflow verwenden, um die Testbemühungen zu konzentrieren und sicherzustellen, dass nur die erforderlichen Tests durchgeführt werden. Darüber hinaus ist eine ständige Überwachung der Codesicherheit mit SAST-Tools von entscheidender Bedeutung, um sicherzustellen, dass die Teams die Codierungsstandards einhalten und dass sich knifflige Sicherheitslücken nicht den Sicherheitstests entziehen.

Schnelles Feedback und Analyse von SAST- und Testergebnissen reduzieren die Reibung im kontinuierlichen Testen. Die Konsistenz, die containerbasierte Entwicklungsumgebungen bieten, bedeutet, dass die Ergebnisse im gesamten Team gleich sind. Es reduziert die Notwendigkeit, verschiedene Entwicklungsumgebungen zu „debuggen“, wenn die Ergebnisse nicht übereinstimmen. Die Leistungsfähigkeit der intelligenten Testausführung auf den Desktop des Entwicklers zu bringen, beschleunigt die sichere Softwareentwicklung wirklich.

Zusammenfassung

Container sind ein etablierter Ausführungs- und Bereitstellungsansatz. Sie unterstützen auch die schnelle Bereitstellung und Portabilität in verschiedenen Hostumgebungen mit Unterstützung für die Versionierung und die zentrale Steuerung. CI / CD sind auch wichtig für die sichere Entwicklung in einer DevSecOps-Pipeline, da es möglich ist, eine reproduzierbare Anwendungsumgebung mit integrierten Sicherheitskontrollen bereitzustellen.

Kontinuierliche Tests bieten einen Rahmen, um Tests früher im Lebenszyklus zu verschieben. Mit der richtigen Anwendung der Automatisierung und der Konzentration auf die Bereiche mit dem höchsten Risiko der Anwendung ist es möglich, Tests so zu rationalisieren, dass sie in agilen und kontinuierlichen Prozessen weniger hemmend wirken. Die Verwendung von Containern für die sichere Softwareentwicklung erweitert die Vorteile der Versionierung und Wiederverwendbarkeit auf den Entwicklerdesktop, indem eine konsistente Toolchain, Test- / SAST-Konfiguration, Entwicklung und (lokale) Bereitstellung sowie Testumgebung bereitgestellt werden.

Beschleunigung von DevSecOps mit Containern und kontinuierlichen Tests

Von Arthur Hicken

Arthur ist seit über 25 Jahren bei Parasoft im Bereich Software-Sicherheit und Testautomatisierung tätig. Er hilft bei der Erforschung neuer Methoden und Techniken (einschließlich 5 Patente) und hilft Kunden dabei, ihre Software-Praktiken zu verbessern.

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.