Suchen

Expertenbeitrag

 Mark Hermeling

Mark Hermeling

Senior Director Product Marketing, GrammaTech, Inc., GrammaTech, Inc.

So lässt sich sich ein sicherer Entwicklungsprozess gestalten

Sichere Entwicklung braucht statistische Analyse

| Autor/ Redakteur: Mark Hermeling / Redaktion IoT

Die Antwort auf die Frage, wann die statische Analyse zum Einsatz kommen sollte, ist relativ einfach: „Immer dann, wenn Code entwickelt wird.“ Eigentlich müsste es aber heißen: „Als Bestandteil eines strukturierten, sicheren Entwicklungsprozesses.“

Firmen zum Thema

Um die Sicherheit einer Software zu bewerkstelligen, sind statistische Analysen im Vorfeld zwingende Voraussetzung.
Um die Sicherheit einer Software zu bewerkstelligen, sind statistische Analysen im Vorfeld zwingende Voraussetzung.
(GrammaTech)

Die statische Analyse ist ein wichtiger Teil einer modernen Tool Suite für die Softwareentwicklung und kann sich entscheidend auf die Qualität und Sicherheit (im Sinne von Safety und Security) des Codes auswirken, wenn sie korrekt und hinreichend früh zum Einsatz kommt. Am wichtigsten ist wohl ihre Rolle in einem Softwaredesign, in dem der Security-Aspekt an erster Stelle steht (‚Security-First‘-Design). Auf alle Fälle ist sie für die heutigen, vernetzten und komplexen Einsatzumgebungen von entscheidender Bedeutung.

Das Konzept des ‚Security-First‘-Designs

Das ‚Security-First‘-Design bindet das Thema Security mit höchster Priorität in den Software Development Lifecycle (SDLC) ein. Um dieses Konzept umzusetzen, sollten Entwickler und Projektleiter als Minimum die folgenden Aktivitäten beim Durchlaufen der fünf entscheidenden Phasen dieses Zyklus erwarten:

Bild 1. Die Security-Prozesse sind hier über den Software Development Lifecycle gelegt (Quelle: GrammaTech)

Definition der Anforderungen: In der Anforderungsphase können Security-spezifische Anforderungen eingebracht werden, gemeinsam mit ‚Missbrauchsfällen‘ (die von Angreifern genutzt werden dürften) und einer Risikoanalyse.

Design und Architektur: Bei der Beurteilung in Frage kommender Architekturen müssen zuvor möglicherweise nicht berücksichtigte Security-Aspekte einbezogen werden. In dieser Phase sollte man Prüfpläne erstellen, welche die Security-Analysen auf Basis der erwarteten ‚Missbrauchsfälle‘ beinhalten.

 

 

 

 

 

 

 

 

 

 

 

 

 

Codeentwicklung: Während der Programmierphase kommt es ganz entscheidend auf die Einhaltung der Security-Richtlinien und Programmierstandards an. Die Anwendung von Automatisierungs-Tools wie der statischen Analyse trägt hier entscheidend zur Sicherstellung bei, dass sich keine Schwachstellen in das Produkt einschleichen.

Integration und Test: Nimmt das System als Ganzes Form an, können mit Tests sowohl der Subsysteme als auch des gesamten Systems Schwachstellen noch vor der Integration und Markteinführung des Produkts aufgedeckt werden.

Einsatz und Wartung: Ist ein Produkt auf den Markt gekommen und hat große Verbreitung erlangt, steigen die Kosten zur Beseitigung von Schwachstellen exponentiell an. Trotz Wartung und Überarbeitung eines Produkts bleibt das Thema Security stets relevant, denn neue Schwachstellen und Bedrohungen müssen auf iterative Weise in das System zurückgeführt werden.

Die Rolle statischer Analysetools zur Steigerung der Sicherheit

Statische Analysetools wie CodeSonar von GrammaTech bieten entscheidende Unterstützung in der Codierungs- und Integrationsphase der Entwicklung. Die Gewährleistung der Codequalität während der Entwicklungs- und Wartungsphase reduziert

die Kosten und Risiken enorm, die aus Security- und Zuverlässigkeitsproblemen in der Software resultieren. Zu den Vorteilen zählen:

  • Kontinuierliche Gewährleistung der Qualität und Sicherheit des Quellcodes: Die statische Analyse spielt ihre Stärken erst richtig aus, nachdem eine anfängliche Ausgangsbasis für die Qualität und Sicherheit des Codes geschaffen ist. Jeder neu geschriebene Programmteil (Datei oder Funktion) kann vom statischen Analysetool gescannt werden, sodass die Entwickler sofort - also noch bevor der Code in das Build-System übertragen wird - etwaige Fehler oder Warnmeldungen bearbeiten können. Werden Fehler und Schwachstellen im Quellcode gleich bei ihrem Entstehen (nämlich bei den Entwicklern selbst) aufgedeckt, sind die Tools am wirkungsvollsten.
  • Erkennung und Analyse von Tainted Data (‚Verunreinigte Daten‘): Das Analysieren der Datenflüsse von den Quellen (den Schnittstellen) zu den Senken (Verwendung der Daten im Programm) ist von entscheidender Bedeutung für das Detektieren potenzieller Anfälligkeiten gegenüber Tainted Data. Jeglicher Input, ob er nun von der Benutzeroberfläche oder von einer Netzwerkverbindung kommt, stellt eine potenzielle Sicherheitslücke dar, solange er nicht geprüft wird. Das Einschleusen von Code oder das Ausschleusen von Daten als mögliche Folgen von Attacken kann ernste Konsequenzen haben.
  • Überprüfung von externem Code: Die meisten Projekte werden nicht von Grund auf neu entwickelt, sondern greifen auf bestehenden Code aus dem eigenen Unternehmen oder von Dritten zurück. Tests und dynamische Analysen eines großen existierenden Codebestands sind enorm zeitaufwändig und können das vorgegebene Zeit- und Finanzbudget sprengen. Die statische Analyse eignet sich besonders für die Analyse großer Codebestände und kann mit aussagefähigen Fehler- und Warnmeldungen auf Sicherheits- und Qualitätsprobleme hinweisen. Die Binäranalyse von GrammaTech CodeSonar kann reine Binärcode-Bibliotheken analysieren und ähnliche Reports wie bei Quellcode generieren, wenn kein Quellcode verfügbar ist. Weil sie in einem gemischten Quell- und Binärmodus arbeitet, kann sie auch Fehler bei der Nutzung externer Binärbibliotheken durch den Quellcode aufdecken.
  • Einhaltung von Normen für sicheres Programmieren: Statische Analysetools analysieren die Syntax des Quellcodes und können zur Durchsetzung von Programmierstandards genutzt werden. Zu den verschiedenen Codesicherheits-Richtlinien gehören SEI CERT C und die Secure Coding Guidelines von Microsoft. Programmierstandards sind sinnvoll, denn sie verhindern, dass aus riskantem Code später Schwachstellen erwachsen. Die Integration dieser Checks in das Build- und Konfigurationsmanagement-System erhöht die Qualität und Sicherheit des Codes im späteren Produkt.

Vergleich zwischen dynamischer und statischer Analyse im Kontext des SDLC

Dynamic Application Security Testing (DAST): Dynamische Testwerkzeuge produzieren nur über das Ausführen des Programms aussagefähige Ergebnisse. Beispiele sind Tools für Modultests, Test-Coverage-Tools, Speicher-Analyzer und Penetration-Test-Tools. Testautomatisierungs-Tools sind wichtig, um das mit Tests einhergehende Arbeitsaufkommen der Entwicklungsteams zu verringern und – was noch wichtiger ist – Schwachstellen zu detektieren, die von manuellen Tests übersehen werden könnten.

Static Application Security Testing (SAST): Statische Analysetools analysieren Quellcode, Bytecode (z. B. kompilierten Java-Code) und ausführbaren Binärcode. Bei der statischen Analyse wird der Code nicht ausgeführt, sondern die Analyse erfolgt, indem Schlussfolgerungen über das potenzielle Verhalten des Codes gezogen werden. Anders als die dynamische Analyse kann die statische Analyse einen Codebestand sehr effizient auswerten. Statische Analysetools untersuchen auch Codepfade, die mit anderen Methoden ungeprüft bleiben, und können Verarbeitungs- und Datenpfade durch den Code verfolgen. Weil sie sich frühzeitig in die Entwicklungsphase einbinden lassen, ermöglichen sie die Analyse von bestehendem, älterem und von Dritten zugeliefertem Quell- und Binärcode, bevor dieser Eingang in das Produkt findet. Beim Hinzufügen von weiterem Quellcode kann die inkrementelle Analyse zusammen mit dem Konfigurationsmanagement die Qualität und Sicherheit umfassend gewährleisten. Bild 2 zeigt, welche Arten von Test-Tools über die Produktentwicklung hinaus bis in die Wartung hinein zur Anwendung kommen.

Bild 2: Anwendung verschiedener Toolklassen im Kontext des Software Development Lifecycle (Quelle: GrammaTech)

Obwohl der Einsatz jeder Art von Tools zur Produktivität, Sicherheit und Qualität beiträgt, ist die Kombination aus mehreren Tools ratsam, denn keine Tool-Kategorie allein ist eine Wunderwaffe. Der beste Ansatz ist eine Kombination aus mehreren Werkzeugen aus allen Kategorien, die auf einem risikobasierten Grundprinzip aufsetzt, um ein hohes Sicherheitsniveau ohne Budgetüberschreitung zu erzielen.

Über den Autor

 Mark Hermeling

Mark Hermeling

Senior Director Product Marketing, GrammaTech, Inc., GrammaTech, Inc.