Sichere Softwareentwicklung nach dem "Security by Design"-Prinzip

Architektur/Methoden  –  Kommentare

Noch vor einigen Jahren war Sicherheit in der Softwareentwicklung eher ein Nischenthema. Die zunehmende Vernetzung mit dem Internet, die dadurch entstandene Gefährdung von Anwendungen und die steigende Komplexität in der IT haben jedoch zur Erkenntnis geführt, dass Sicherheit im Softwareentwicklungsprozess erheblich stärker zu beachten ist. Bis sich die Erkenntnis jedoch flächendeckend durchsetzt, vergehen wohl noch einige Jahre, obgleich es für das Vermeiden von Sicherheitslücken nachweislich effektive Methoden wie das in diesem Artikel vorgestellte "Security by Design"-Prinzip gibt.

Beobachtet man Mailinglisten wie Bugtraq oder Full Disclosure, fällt auf, dass Sicherheitsprobleme in der Softwareentwicklung weder in vollem Ausmaß erkannt noch effektiv bekämpft werden. Zu oft liest man zum Beispiel von SQL-Injection und Cross-Site Scripting (XSS), obgleich beide Angriffsarten seit langer Zeit bekannt sind und sie sich effektiv verhindern lassen.

Gerade bei stark verbreiteter Software haben solche Schwachstellen teilweise verheerende Auswirkungen, denn mit einer einzigen Sicherheitslücke lassen sich oft mehrere tausend Installationen angreifen. Bei weniger stark verbreiteter Software ist das Schadenpotenzial jedoch nicht unbedingt geringer. Bei Programmen zur Steuerung oder Überwachung von Geschäftsprozessen helfen beispielsweise Verwundbarkeiten, die Prozesse zu manipulieren. Für bösartig gesinnte Mitarbeiter oder externe Angreifer (Stichworte Wirtschaftsspionage oder organisiertes Verbrechen) sind solche Sicherheitslücken willkommene Gelegenheiten für Angriffe.

Betrachtet man die aktuelle Situation, liegt die Vermutung nahe, dass in der Softwareentwicklung keine oder nur ineffiziente Sicherheitsmaßnahmen einsetzt werden. Doch kommen schon seit langem Sicherheitsmaßnahmen zum Einsatz, die vom Ansatz her effektiv sein könnten. Das Problem liegt weniger im Anwenden der Maßnahmen, sondern in der Wahl des falschen Einsatzzeitpunkts. Führt man bei Software kurz vor der Inbetriebnahme einen Penetrationstest durch, der viele denkbare Angriffen durchführt, ohne dass man die Sicherheit bei der Entwicklung explizit berücksichtigt hat, ist es für einen erfahrenen Tester meist leicht, in die Anwendung einzudringen. Somit ist fraglich, ob ein Penetrationstest überhaupt sinnvoll ist, wenn man das Thema Sicherheit nicht während des Entwicklungsprozesses dezidiert berücksichtigt hat. Hinzu kommt, dass schwerwiegende Sicherheitslücken sich kurz vor einer geplanten Auslieferung nicht mehr oder nur noch mit hohem und kostenintensivem Aufwand beheben lassen.

Eine weitere gängige Maßnahme, die Code-Review, bei der ein Gutachter einen Programmabschnitt nach oder während der Entwicklung Korrektur liest, um Fehler oder Vereinfachungen zu finden, leidet darunter, dass nur qualifiziertes Personal die Review durchführen kann, was ebenfalls mit hohen Kosten verbunden ist. Komplexe Programme sind damit kaum umfassend zu überprüfen. Zudem hilft eine Code-Review nur bei der Identifizierung von Implementierungsfehlern, deckt aber weder Design- noch Konfigurationsfehler auf.

Die Hauptursache heutiger Sicherheitsprobleme liegt darin, dass Unternehmen Sicherheit nur selten als explizite Anforderung definieren. Auftraggeber spezifizieren nicht selten nur funktionale Anforderungen und verlassen sich auf Sicherungsmethoden wie Code-Review oder Penetrationstests, die zwar effektiv und empfohlen sind, deren Effizienz aber von ihrer Kombination und dem Einsatzzeitpunkt abhängt.

Firmen wie Microsoft, die früh mit den Auswirkungen unsicherer Software konfrontiert wurden, suchen seit Jahren nach Lösungen und haben sie für sich gefunden, umgesetzt und kontinuierlich überarbeitet. Microsofts Prinzip heißt "Security by Design" und steht für integrierte Softwaresicherheit beziehungsweise setzt voraus, Sicherheit als explizite Anforderung in den Entwicklungsprozess aufzunehmen sowie ganzheitliche Sicherheitsmaßnahmen von der Initialisierung an zu berücksichtigen, umzusetzen und zu testen. Konsequent realisiert, schiebt man sogar die Auslieferung von Software auf, bis Sicherheitsfehler, sofern sie einen definierten Schwellenwert überschreiten, behoben sind.

Security by Design ist keine Technik, sondern eine Sicherheitsmaßnahme, die den Entwicklungsprozess begleitet und oft als Security Development Lifecycle (SDL) bezeichnet wird. Die Maßnahmen sollen eine integrierte und nachhaltige Sicherheit der entwickelten Software zur Folge haben.

Das "Security by Design"-Prinzip praktizieren viele Unternehmen. Dazu gehören neben Microsoft Adobe, Apple, EMC, Google, Oracle/Sun und Symantec. Auch diverse Finanzdienstleister oder das Militär einiger Staaten bemühen sich um die Einführung eines SDL. Er ist im Grunde genommen eine Anleitung zum Bauen sicherer Systeme, die zugehörigen Maßnahmen sind nicht auf die IT beschränkt. Tatsächlich praktizieren andere Industriezweige die Vorgehensweise schon lange, aber erst in letzter Zeit hält sie verstärkt Einzug in die IT.

Generell umfasst SDL Sicherheitsmaßnahmen, die den herkömmlichen Softwareentwicklungsprozess ergänzen und gewährleisten, dass Sicherheit im notwendigen Umfang zu berücksichtigen und zu integrieren ist, unabhängig davon, ob man eine agile oder andere Entwicklungsvorgehensweise wählt. Die Sicherheitsmaßnahmen lassen sich immer parallel zu den Entwicklungsschritten ausführen.