Sichere Softwareentwicklung: Schritt-für-Schritt-Anleitung
Anmerkung des Editors: Leider ist es gängige Praxis unter Anbietern der Softwareentwicklung Sicherheitsaspekte in den frühen Phasen des Software-Lebenszyklus (SDLC) zu vernachlässigen. Daraus ergibt sich, dass Schwachstellen aus den vorherigen Phasen in die nächsten Phasen der Softwareentwicklung übernommen werden und sich negativ auf das Endprodukt auswirken. Die langjährige Erfahrung in der individuellen Softwareentwicklung erlaubt unseren Experten, praxisnahe Tipps für die sichere Softwareentwicklung zu geben. Wenn Sie aber Unterstütung nicht nur auf der teorethischen, sondern auch auf der praktischen Ebene brauchen, schreiben Sie uns an.
Best Practices für die Entwicklung sicherer Software empfehlen Sicherheitsaspekte in jeder Phase der Softwareentwicklung zu berücksichtigen: angefangen von der Anforderungsanalyse bis hin zur Wartung. Wenn diese Empfehlungen vernachlässigt werden, muss sich Ihr Unternehmen nachfolgend darauf konzentrieren, nachträglich die Sicherheitslücken zu beheben und die Softwaresicherheit zu verbessern, was häufig sehr teuer und schwer realisierbar ist.
Die goldene Regel ist ganz einfach: je früher Sicherheitsaspekte in den Entwicklungsprozess integriert werden, desto weniger Geld wird später für die Behebung von Sicherheitslücken ausgegeben.
Um den Übergang zur sicheren Softwareentwicklung zu vereinfachen, haben wir eine Schritt-für-Schritt Anleitung erstellt, die beschreibt, in welcher Phase des Software-Lebenszyklus (SDLC) welche Sicherheitsmaßnahmen (ohne Anspruch auf Vollständigkeit) ergriffen werden können.
Planung und Anforderungsanalyse
Ganz am Anfang des Projektes muss geklärt werden, welche Erwartungen der Auftraggeber hat und was bei dem Entwicklungsprozess hinsichtlich der Sicherheit zu beachten ist. Dazu gehören auch die Festlegung von Sicherheitsrichtlinien und klare Definition von Sicherheitsanforderungen, die ermöglichen, die Sicherheitskontrolle so früh wie möglich zu beginnen. Um eine sichere Softwareentwicklung zu gewährleisten und gleichzeitig Kundenanforderungen gerecht zu werden, sind die folgenden Schritte empfehlenswert:
- Anwendungs- und Missbrauchsfälle in Kombination einzusetzen.
Missbrauchsfälle helfen, mögliche Bedrohungen für die Software vorherzusehen und sich auf diese vorzubereiten. Welche vorausschauenden Maßnahmen bei jedem potentiellen Missbrauch ergriffen werden müssen, wird in den Anwendungsfällen beschrieben.
Hier ein Beispiel:
Missbrauchsfall: Ein nicht autorisierter Benutzer versucht, auf die Software eines Kunden zuzugreifen.
Der entsprechende Anwendungsfall: Alle Versuche solcher Art sollten von einem SIEM-System protokolliert und analysiert werden.
- Sicherheitsrisiken zu bewerten und ein Risikoprofil zu erstellen
Es gibt unterschiedliche Sicherheitsrichtlinien und –standards (beispielweise HIPAA für den Gesundheitssektor oder SOX für die Finanzbranche), die dabei helfen, Sicherheitsrisiken zu bewerten und zu analysieren.
In der Phase der Anforderungsanalyse sollten Business Analysten in enger Zusammenarbeit mit Sicherheitsexperten das Risikoprofil einer Anwendung zur Verfügung stellen. Dieses Dokument beschreibt, welche Komponenten der Anwendung gegenüber böswilligen Angriffen und Sicherheitsrisiken empfindlich sind, die je nach Schwergrad priorisiert werden.
Design
In der Designphase sind sechs Sicherheitsprinzipien für sichere Software zu beachten:
- "Least Privilege" Prinzip (oder Minimalprinzip). Laut diesem Prinzip sollte nur jene Berechtigungen den Benutzern zugewiesen, die sie für die Erledigung ihrer Aufgaben wirklich benötigen – nicht mehr, und nicht weniger.
- Privilege Separation (oder Separierung von Berechtigungen). Dieses Designprinzip ermöglicht, dass nur eine begrenzte Anzahl von Benutzern auf bestimmte Funktionen in der Software (beispielsweise das Erstellen, Löschen) durch Zuordnung von Berechtigungen zugreifen kann.
- Vollständige Zugriffsüberwachung. Jeder Benutzerzugriff auf die Software sollte auf die Autorität geprüft werden. Das verhindert einem Benutzer mit eingeschränkten Rechten durch die Rechteerhöhung (Privilege Escalation) einen Zugang zu Ressourcen zu erhalten, für die er keine Rechte hat.
- Mehrere Sicherheitsebenen. Dieses Prinzip bietet eine Möglichkeit, die Gefahr von Single Point of Failure (SPoF) hinsichtlich Sicherheit zu beseitigen (mit SPoF kann der Ausfall von einzelnen Komponenten die gesamte Software beeinträchtigen oder zum Absturz bringen). Das Rezept ist ganz einfach: je mehr Sicherheitsebenen Ihre Software hat, desto weniger Chancen es gibt, dass ein Hacker ihre Schwachstellen ausnutzt.
- Sicherer Ausfall. Falls Ihre Software ausfällt, sollte sie einen sicheren Zustand aufweisen. Obwohl die Software nicht mehr verfügbar ist, sollte sie dennoch die anderen Grundwerte der Informationssicherheit wie Vertraulichkeit und Integrität gewährleisten. Das bedeutet, dass Software nur mit sicheren Standardeinstellungen ausgeliefert werden sollte, die ermöglichen, unsichere Komponenten zu deaktivieren.
- Benutzerfreundliche Sicherheit. Bei der Berücksichtigung von Sicherheitsaspekten sollten Sicherheitsmechanismen benutzerfreundlich gestaltet sein, um das Benutzererlebnis nicht beeinträchtigen. Wenn diese Mechanismen aufdringlich sind, ist es höchstwahrscheinlich, dass Benutzer sie deaktivieren.
Entwicklung
Die Unternehmen können etablierte Best Practices und Standards für eine sichere Entwicklung – beispielsweise OWASP (Open Web Application Security Project) Top 10 - in die Hand nehmen. Sie beschreiben, welche Sicherheitsrisiken es bei der Softwareentwicklung gibt, welche Maßnahmen ergriffen werden müssen und welche Tools zum Einsatz kommen, um verpflichtende Vorgaben an die Implementierung einzuhalten und derer Einhaltung zu überprüfen. Unabhängig davon, für welche Programmiersprachen Standards zur sicheren Codeerstellung erstellt sind, müssen diese unbedingt die folgenden Bereiche umfassen:
- Zugriffskontrolle
- Authentifizierung und Session Management
- Datenvalidierung (Ein- und Ausgabe)
- Fehlerbehandlung und Protokollierung
- Datensicherheit und Kryptographie.
Alle Practices und Standards sind vor allem darauf abgezielt, den Unternehmen dabei zu helfen, Sicherheitslücken zu vermeiden und/oder diese möglichst früh zu beseitigen.
Testen
Die Testphase konzentriert sich hauptsächlich darauf, die Einhaltung von festgelegten Anforderungen (sowohl funktionellen, als auch nicht-funktionellen) sowie derer Wirksamkeit zu überprüfen, Fehler zu identifizieren und zu beseitigen. Um die Überprüfung umzusetzen, kommen unterschiedliche Testverfahren zum Einsatz. Einige davon können schon während der Implementierung durchgeführt werden (beispielsweise Unit-Test, statische Codeanalyse, Code Reviews, Design Review und ähnliches).
Unmittelbar vor der Auslieferung des Produktes finden Penetrationstests statt. Sie helfen ermitteln, ob das entwickelte Produkt gegen mögliche Sicherheitsangriffe empfindlich ist, um Schwachstellen zu entdecken. Abschließend kommt ein ausführlicher Bericht, der Informationen über entdeckte Schwachstellen enthält sowie Vorschläge anbietet, wie diese beseitigt werden können.
Auslieferung der Software und Wartung
Um die Software sicher auszuliefern und auf Produktionsservern zu installieren, ist es empfehlenswert, die folgenden Schritte zu tun:
- Einen Incident Response Plan (IRP) zu erstellen, der Practices zur Reaktion auf ungeplante Sicherheitsvorfälle und/oder Störungen enthält und Anweisungen gibt, welche Maßnahmen beim Auftreten von Vorfällen ergriffen werden können. Solch ein zuverlässiger Plan ermöglicht, frühzeitig auf aufgetretene Vorfälle zu reagieren sowie diese effektiv zu verwalten und zu beheben.
- Eine abschließende Sicherheitsprüfung durchzuführen. Diese Prüfung muss sicherstellen, dass die Software aus Sicherheitssicht einsatzbereit ist. Nur nachdem sie erfolgreich abgeschlossen worden ist, erfolgt die Veröffentlichung des Produktes.
- Einen Plan für das Änderungsmanagement hinsichtlich Sicherheit zu erstellen, um alle Änderungen zu kontrollieren, damit sie keine negativen Auswirkungen auf die Funktionalität des erstellten Produktes haben.
- Das Endprodukt zertifizieren. Durch die Zertifizierung wird sichergestellt, dass alle Anforderungen an die Software erfüllt werden.
Nach der Auslieferung des Produktes an den Kunden beginnt die Wartungsphase. Wartungstätigkeiten sind darauf abgezielt, das Produkt regelmäßig zu überprüfen sowie seine Performance, Sicherheit, Benutzerfreundlichkeit usw. nach den Aktualisierungen zu überwachen und neu zu schätzen, um Sicherheitsprobleme zu vermeiden.
Sicherheitskosten
Die Entwicklung sicherer Software ist zweifellos mit zusätzlichen Kosten verbunden und erfordert eine intensive Einbindung von Sicherheitsspezialisten. Aber trotzdem ist es nicht so kompliziert, wenn sie Schritt für Schritt umgesetzt wird. Auf jeden Fall sind die Kosten, die für die Integration von Sicherheitsmaßnahmen in den Entwicklungsprozess schon von Beginn an benötigt sind, viel niedriger als die Kosten für potenzielle Schäden, die fehlhafte Software verursachen kann. Des Weiteren sind die Kosten für die Beseitigung von Fehlern in den früheren Phasen niedriger als in den späteren oder wenn das Produkt schon in Betrieb ist.