Entdecken Sie das TÜV-zertifizierte GoogleTest mit Agentic AI für C/C++-Tests!
Details ansehen »
Zum Abschnitt springen
Parasoft-Blog
Es gibt viele Möglichkeiten und Techniken, um Schwachstellen in Ihrer Software zu erkennen. Eine der besten Möglichkeiten ist das Static Analysis Security Testing (SAST). So können Sie SAST beim Testen der Softwaresicherheit einsetzen.
Zum Abschnitt springen
Es gibt verschiedene Techniken, um Schwachstellen in Software und Systemen zu identifizieren. Kluge Unternehmen haben diese in ihrem „Sicherheits-Werkzeugkasten“ und nutzen eine Kombination aus Testtools, darunter:
Die Motivation zur Verbesserung der Sicherheit durch automatisierte Tools besteht darin, im Software Development Life Cycle (SDLC) die Identifizierung und Behebung von Schwachstellen so früh wie möglich nach links zu verschieben. Korrekturen und Korrekturen werden komplizierter, wenn die Anwendung kurz vor der Veröffentlichung steht. Abbildung 1 zeigt, wie sich die Kosten für die Behebung von Sicherheitslücken im Verlauf des SDLC dramatisch erhöhen.
Die Kosten für die Behebung von Schwachstellen steigen mit fortschreitendem SDLC.
Für eine detaillierte Auseinandersetzung mit den wirtschaftlichen Aspekten der Softwaresicherheit empfehlen wir das Whitepaper „Der Geschäftswert sicherer Software“ . Dieser Beitrag konzentriert sich auf den Einsatz statischer Sicherheitsanalysen als Teil der Sicherheitspraxis eines Unternehmens.
Wie der Name schon sagt, bedeutet statisches Testen, dass es statisch angewendet wird. Mit anderen Worten: Die Analyse wird für Quellcode, Binärdateien und/oder Konfigurationsdateien durchgeführt. Statische Tools nutzen ihr Verständnis der Semantik der Quelle, um Fehler und Schwachstellen abzuleiten.
Diese „Fehlerdetektoren“ werden als Checker oder Regeln bezeichnet. Bei einem Regelverstoß wird eine Warnung ausgegeben, die Informationen darüber enthält, an welcher Stelle im Code der Verstoß aufgetreten ist. In der Regel werden außerdem Trace-Informationen zur Ermittlung der Grundursache bereitgestellt.
Dynamische Tests gelten für laufende Anwendungen. Diese Tools erkennen Probleme bei der Ausführung von Anwendungen und führen Tests durch, indem sie kleine Codeteile namens Instrumentierung hinzufügen, um die Codeabdeckung zu bestimmen und die Frage zu beantworten: Habe ich genug Tests durchgeführt?
Fehler werden während der Ausführung der Anwendung gemeldet und stellen normalerweise Kontextinformationen bereit, damit Entwickler die erkannten Schwachstellen finden und beheben können.
Zu den Hauptunterschieden zwischen statischen und dynamischen Sicherheitstesttools gehören die folgenden.
Dynamische Tools wie DAST-Tools können nur auf laufende Anwendungen angewendet werden und kommen daher später in die Entwicklung. Mit modernen CI/CD-Pipelines sind laufende Anwendungen jedoch früher und häufiger verfügbar als zuvor, was DAST-Tools nützlicher macht.
Dynamische Tools hingegen können Test-Frameworks integrieren, um die Testfallgenerierung, Stubbing und Mocking zu automatisieren, die Instrumentierung zu nutzen und spezielle Laufzeitbibliotheken zu verwenden, um Schwachstellen zu erkennen, während die Anwendung ausgeführt wird. Sie umfassen auch Funktionen zur Erfassung und Berichterstattung dieser Ergebnisse. In der Regel sind Trace-Informationen enthalten, was eine schnelle Behebung ermöglicht. Da diese Fehler tatsächlich in einer laufenden Anwendung auftreten, gibt es in der Regel keine Fehlalarme.
DAST-Tools hingegen erkennen Schwachstellen bei der Ausführung von Code. Es besteht ein hohes Maß an Vertrauen in diese Ergebnisse. Darüber hinaus führen Laufzeitbedingungen, wie z. B. kompliziertes Multithread-Verhalten, zu neuen Arten von Fehlern und Schwachstellen, die SAST-Tools übersehen.
SAST-Tools müssen falsch-positive Ergebnisse mit potenziell fehlenden echten Schwachstellen, sogenannten falsch-negativen Ergebnissen, abwägen, um den besten ROI für die Sicherung des Quellcodes zu erzielen. Bei der SAST-Tool-Analyse sind zwar immer Fehlalarme möglich, aber der Vorteil liegt in der frühzeitigen Erkennung von Schwachstellen, die bei späteren Tests möglicherweise übersehen werden.
Sowohl SAST- als auch DAST-Tools können echte Fehler übersehen. Um Fehler zu reduzieren, empfiehlt es sich jedoch, beide Tools gemeinsam zu verwenden.
SAST-Tools benötigen keine laufende Anwendung und können daher früh im Entwicklungszyklus eingesetzt werden, wenn die Kosten für die Behebung von Schwachstellen gering sind. Im Kern analysiert SAST den Quellcode und prüft ihn anhand eines Regelsatzes. SAST-Tools werden üblicherweise zur Identifizierung von Sicherheitslücken eingesetzt und warnen Entwickler frühzeitig vor fehlerhaften Codierungsmustern, die zu Exploits, Verstößen gegen Sicherheitsrichtlinien oder Nichteinhaltung von Entwicklungsstandards führen und somit instabile oder unzuverlässige Funktionalität zur Folge haben.
Es gibt zwei Hauptanalysetypen, mit denen Sicherheitsprobleme identifiziert werden.
Bei der Flussanalyse analysieren die Tools den Quellcode, um den zugrunde liegenden Kontrollfluss und Datenfluss des Codes zu verstehen.
Statische Analysesicherheitstests – Flussanalyse
Das Ergebnis ist eine Zwischendarstellung oder ein Modell der Anwendung. Die Tools führen Regeln oder Prüfer für dieses Modell aus, um Codierungsfehler zu identifizieren, die zu Sicherheitslücken führen. In einer C- oder C ++ - Anwendung kann eine Regel beispielsweise Zeichenfolgenkopien identifizieren und dann das Modell durchlaufen, um festzustellen, ob der Quellpuffer jemals größer als der Zielpuffer sein kann. Wenn dies der Fall ist, kann dies zu einer Sicherheitsanfälligkeit durch Pufferüberlauf führen.
Die Vermeidung bestimmter Konstrukte in sicherheitskritischem Code ist die Grundlage moderner Softwareentwicklungsstandards wie AUTOSAR C++14, MISRA C 2023 und Joint Strike Fighter (JSF) . Diese Standards verhindern, dass unzuverlässiger Code falsch interpretiert, missverstanden oder fehlerhaft implementiert wird.
Die Musteranalyse hilft Entwicklern, eine sicherere Teilmenge der Entwicklungssprache im Kontext der Sicherheit zu verwenden, und verbietet die Verwendung von Codekonstrukten, mit denen Schwachstellen überhaupt erst auftreten können. Einige Regeln können Fehler durch Überprüfen der Syntax identifizieren, z. B. eine Rechtschreibprüfung in einem Textverarbeitungsprogramm. Einige moderne Werkzeuge können subtile Muster erkennen, die mit einer schlechten Codierungskonstruktion verbunden sind.
Jede Testmethode hat Stärken. Viele Unternehmen konzentrieren sich zu sehr auf DAST- und Penetrationstests. Die Verwendung von SAST bietet jedoch mehrere Vorteile gegenüber anderen Testtechniken.
Die Menge des getesteten Codes ist eine wichtige Messgröße für die Software-Sicherheit. Sicherheitslücken können in jedem Abschnitt der Codebasis vorhanden sein, und nicht getestete Teile können eine Anwendung Angriffen aussetzen.
SAST-Tools, insbesondere solche, die Musteranalyseregeln verwenden, können eine viel höhere Codeabdeckung bieten als dynamische Techniken oder manuelle Prozesse. Sie haben Zugriff auf den Anwendungsquellcode und die Anwendungseingaben, einschließlich versteckter Eingaben, die nicht in der Benutzeroberfläche verfügbar sind.
SAST-Tools fördern die effiziente Behebung von Sicherheitslücken. Durch Sicherheitstests für statische Analysen wird die genaue Codezeile, die den Fehler verursacht, leicht identifiziert. Durch die Integration in die Entwickler-IDE können Fehler behoben werden, die von SAST-Tools gefunden wurden.
Entwickler erhalten sofortiges Feedback zu ihrem Code, wenn sie SAST-Tools von der IDE verwenden. Die Daten stärken und schulen sie in sicheren Codierungspraktiken.
Entwickler nutzen statische Analysen früh im Entwicklungslebenszyklus, auch für einzelne Dateien direkt aus ihrer IDE. Das frühzeitige Auffinden von Fehlern im SDLC reduziert die Kosten für die Behebung erheblich. Es verhindert Fehler von vornherein, sodass Entwickler sie später nicht suchen und beheben müssen.
SAST ist eine umfassende Testmethode, die einige anfängliche Anstrengungen und Motivation erfordert, um sie erfolgreich anzuwenden.
Teams können SAST-Tools zwar früh im Softwareentwicklungszyklus (SDLC) einsetzen , manche Organisationen verschieben die Analyse jedoch bis zur Testphase. Obwohl die Analyse einer umfassenderen Anwendung die Analyse des Datenflusses zwischen den Prozeduren ermöglicht, lassen sich durch die frühzeitige Anwendung von SAST („Shift-Left“) und die direkte Codeanalyse in der IDE Schwachstellen wie Eingabevalidierungsfehler aufdecken. Entwickler können so außerdem einfache Korrekturen vornehmen, bevor der Code zum Build eingereicht wird. Dies hilft, späte Sicherheitsänderungen zu vermeiden.
Die SAST-Analyse wird missverstanden. Viele Teams halten es aufgrund der gründlichen Analyse des gesamten Projektquellcodes für zeitaufwändig. Dies kann Unternehmen zu der Annahme veranlassen, dass SAST nicht mit Methoden zur schnellen Entwicklung kompatibel ist, was unbegründet ist. In der IDE des Entwicklers sind nahezu sofortige Ergebnisse von Sicherheitstests für statische Analysen verfügbar, die sofortiges Feedback geben und die Vermeidung von Sicherheitslücken sicherstellen. Moderne SAST-Tools führen eine inkrementelle Analyse durch, um nur die Ergebnisse des Codes anzuzeigen, der zwischen zwei verschiedenen Builds geändert wurde.
Herkömmliche Tools für statische Sicherheitsanalysen liefern oft viele „informative“ Ergebnisse und weisen auf Probleme mit geringem Schweregrad im Zusammenhang mit den richtigen Codierungsstandards hin. Moderne Tools, wie sie beispielsweise von Parasoft angeboten werden, ermöglichen es Benutzern, die zu verwendenden Regeln/Prüfer auszuwählen und die Ergebnisse nach der Schwere des Fehlers zu filtern. Dabei werden diejenigen ausgeblendet, die keine Untersuchung erfordern.
Viele Sicherheitsstandards von OWASP, CWE, CERT und dergleichen verfügen über Risikomodelle, die dabei helfen, die wichtigsten Schwachstellen zu identifizieren. Ihr SAST-Tool sollte diese Informationen nutzen, damit Sie sich auf das Wesentliche konzentrieren können. Benutzer können Ergebnisse stärker auf der Grundlage anderer Kontextinformationen wie Metadaten zum Projekt, dem Alter des Codes und dem für den Code verantwortlichen Entwickler oder Team filtern. Tools wie Parasoft nutzen diese Informationen mit künstlicher Intelligenz (KI) und maschinellem Lernen (ML), um die kritischsten Probleme weiter zu ermitteln.
Erfolgreiche Bereitstellungen sind häufig auf Entwickler ausgerichtet. Sie bieten die Tools und Anleitungen, die Entwickler benötigen, um Sicherheit in die Software zu integrieren. Dies ist wichtig in agilen und DevOps / DevSecOps-Umgebungen, in denen eine schnelle Rückmeldung für die Aufrechterhaltung der Geschwindigkeit von entscheidender Bedeutung ist. IDE-Integrationen ermöglichen Sicherheitstests direkt aus der Arbeitsumgebung des Entwicklers - auf Dateiebene, Projektebene oder einfach zum Auswerten des geänderten Codes.
Bei der Analyse von Software auf Sicherheitsprobleme passt eine Größe nicht für alle Organisationen. Es ist wichtig, dass die Regeln / Prüfer die spezifischen Probleme ansprechen, die für diese spezifische Anwendung kritisch sind. Unternehmen, die gerade erst mit dem Testen auf Sicherheit beginnen, möchten die Regeln möglicherweise auf die häufigsten Sicherheitsprobleme wie Cross-Site-Scripting und SQL-Injection beschränken. Andere Organisationen haben spezielle Sicherheitsanforderungen, die auf Vorschriften wie PCI DSS basieren. Suchen Sie nach Lösungen, die eine kontrollierte Regel- / Prüferkonfiguration ermöglichen, die Ihren spezifischen Anforderungen entspricht, und keine generische Konfiguration.
Bei Software-Sicherheitstools ist das Ganze besser als die Summe seiner Teile. Dies gilt für das Testen der Anwendungssicherheit, da die verschiedenen Tools in unterschiedlichen Bereichen Stärken und Schwächen haben, die durch die Kombination gemildert werden.
Die Kombination von SAST und DAST ist aufgrund des grundlegenden Unterschieds in der Technologie, die bei statischen Werkzeugen und dynamischen Werkzeugen verwendet wird, eine natürliche Ergänzung. Hier sind einige der Vorteile der Integration beider in Ihre Sicherheitstests.
Die Integration von Tools kann im Allgemeinen eine Herausforderung sein. Tools verschiedener Anbieter funktionieren möglicherweise nicht gut zusammen und die Berichte der einzelnen Tools können widersprüchlich sein und unterschiedliche Formate aufweisen. Dies führt zu folgenden Herausforderungen.
Die Integration Ihrer Anwendungssicherheits-Toolbox bietet einen hervorragenden ROI, daher sollte diese Liste Sie nicht von der Mühe entmutigen. Hier sind einige Best Practices, die die Integration erleichtern:
Neben SAST und DAST gibt es noch weitere Arten von Anwendungssicherheitstests.
Es ist wichtig zu beachten, dass es sich hierbei um Testtechniken für die Anwendungssicherheit handelt, die in ein Ökosystem von Sicherheitstechniken passen. Beispielsweise verwenden Teams häufig Tools zur Orchestrierung der Anwendungssicherheit, um die Informationen aus all diesen Techniken zu organisieren, zu analysieren und darüber zu berichten.
Technologien für künstliche Intelligenz (KI) und maschinelles Lernen (ML) verbessern die statischen Analyselösungen von Parasoft, um Hotspots und Schnittpunkte zwischen allen gefundenen Verstößen zu identifizieren. Dies ermöglicht Teams, ihre Bemühungen auf den Teil der Codebasis zu konzentrieren, der die Hauptursache für viele andere Probleme ist. Darüber hinaus überwacht ML das Verhalten Ihrer Entwicklungsteams und lernt daraus, um zu unterscheiden, was wichtig ist und was nicht.
Das Training Ihres KI-Modells basierend auf dem historischen Verhalten des Entwicklungsteams bietet eine mehrdimensionale Analyse der Ergebnisse, während ML Daten gruppiert, um korrelierte, verwandte oder ähnliche Verstöße zu identifizieren.
Noch besser ist die Kombination der beiden Technologien. Die Kombination lernt, welche falsch-positiven Ergebnisse ignoriert und welche richtig-positiven Ergebnisse hervorgehoben werden sollen. Es schrumpft einen Berg an Informationen auf wenige, höchst wertvolle Diamanten.
Beispielsweise kann eine statische Analyse Tausende von Verstößen in einer typischen Codebasis aufdecken. Auch wenn Sie möglicherweise Hunderte von Fehlern identifizieren können, die behoben werden müssen, werden Sie nicht in der Lage sein, alles in der verfügbaren Zeit zu beheben. Wenn KI und ML Hotspots von Verstößen finden, können Sie mehrere Fehler gleichzeitig beheben, indem Sie den einzelnen Codeabschnitt identifizieren, der sie alle verursacht.
Bauen Sie Sicherheit in Ihre Anwendung ein. Es ist viel effektiver und effizienter als der Versuch, eine Anwendung zu sichern, indem die Sicherheit am Ende des SDLC auf eine fertige Anwendung gelegt wird. So wie Sie die Qualität einer Anwendung nicht testen können, gilt dies auch für die Sicherheit. SAST ist der Schlüssel zur Früherkennung und verhindert Sicherheitslücken, indem von Anfang an sicherer Code geschrieben wird.
Mit SAST-Tools können Unternehmen die Softwaresicherheit bereits in den frühen Entwicklungsphasen nutzen und ihren Softwareentwicklern die Tools und Anleitungen zur Verfügung stellen, die sie zum Erstellen sicherer Software benötigen.
„MISRA“, „MISRA C“ und das Dreieckslogo sind eingetragene Marken von The MISRA Consortium Limited. ©The MISRA Consortium Limited, 2021. Alle Rechte vorbehalten.