Neue Arten der Softwareentwicklung erfordern auch eine neue Art des Testens. Die Zeiten, in denen ein Softwareprojekt von der Einleitung bis zu Bereitstellung nach einem manuellen Sicherheitscheck ein Jahr dauerte, sind vorbei. Da häufig mehrmals pro Woche neue Software ausgerollt wird, können manuelle Sicherheitstests nicht mehr Schritt halten. Daher müssen Tests automatisiert und in den täglichen Arbeitsablauf der Entwickler integriert werden. Das Open Web Application Security Project (OWASP) nennt diese Form von Tests continuous security (testing) [DVrie].
-65 Prozent der Softwareentwickler verwenden agile Entwicklungstechniken [StackO]
-Agile Softwareentwicklung benötigt agile Sicherheitstests
-Continuous security garantiert sichere Software nach jedem Release
Qualitätsmanagement und -probleme sind gut erforscht. Die Zehnerregel besagt, dass ein in einer bestimmten Phase der Produktentwicklung erkannter Fehler das 10-fache des Geldes kostet, um ihn zu beheben, als wenn dieser Fehler eine Stufe früher gefunden worden wäre [Ro10]. Im Vergleich zu einem Fehler in der Planungsphase kann ein Fehler in der Produktionsphase daher bis zu 1000-mal höhere Kosten verursachen. Diese Zahlen sind ähnlich für Sicherheitsfehler (d. h. Schwachstellen) in Softwareprodukten.
In der agilen Softwareentwicklung, in der ein zweiwöchiger Entwicklungssprint alle Phasen von der Planung über die Entwicklung bis zur Kundenpräsentation umfasst, steigt der Wert des Testens radikal an. Continuous Security garantiert, dass alle Softwareversionen bereits in der Entwicklungsphase getestet werden. Im Gegensatz zu manuellen Sicherheitstests, die oft nur für größere Releases durchgeführt werden, können so alle Versionen, die veröffentlicht werden sollen, getestet werden. Diese Art des Testens ermöglicht eine frühzeitige Fehlererkennung im Entwicklungslebenszyklus, was zu Zeit- und Kosteneinsparungen führt und gleichzeitig das Sicherheitsniveau des entwickelten Produkts erhöht.
Sicherheitsherausforderungen bei der agilen Softwareentwicklung
In der heutigen Geschäftswelt stehen Unternehmen vor mehreren Sicherheitsherausforderungen, wenn sie auf agile Softwareentwicklung umsteigen oder diese nutzen. Im Folgenden werden die wichtigsten Herausforderungen skizziert.
-Bedeutung der Time-to-Market
-Breites Spektrum an Sicherheitstools
-Fehlende Sicherheitsexpertise
-Ausschließliches Verlassen auf Frameworks
Funktionalität und Time-to-Market sind wichtiger als Sicherheit
Einer der Hauptgründe für die Implementierung von CI/CD ist es, besser auf die Bedürfnisse der Kunden einzugehen und die Entwicklungszyklen der Software zu verkürzen. In der Regel führt der erhöhte Druck, immer mehr Features zu entwickeln, zu Nachlässigkeit im Bereich der Sicherheitstests.
Befragungen auf Fachveranstaltungen (ICOM 2016, Internet World 2017, CeBIT 2017) zeigen, dass Sicherheit oft nicht als geschäftskritisches Thema angesehen wird. Sicherheitstests werden nur auf ausdrücklichen Wunsch eines Kunden durchgeführt oder das potenzielle Risiko bei der Freigabe der nächsten großen Versionen einer Software scheint einen solchen zu erfordern. Das bedeutet, dass Version 1.0 einen (manuellen) Penetrationstest (Pentest) durchlaufen muss und die nächste Version, die auf Schwachstellen getestet wird, oftmals erst Version 2.0 ist. Alle kleineren Versionen durchlaufen keinen zusätzlichen Sicherheitstest und werden ungetestet veröffentlicht. Das Sicherheitsniveau basiert daher ausschließlich auf den Fähigkeiten der Softwareentwickler. Dies hat zwei Gründe:
- Sicherheitstests und die Korrektur von Ergebnissen brauchen Zeit;
- Sicherheitstests, insbesondere manuelle Tests, sind sehr teuer.
Um die Software rechtzeitig auf den Markt zu bringen und das Budget einzuhalten, liegt der Fokus der Entwickler auf der Erstellung von Features und nicht auf der Erhöhung der Sicherheit der Software.
Breites Spektrum an Sicherheitstools, die nur einzelne Schwachstellen abdecken
Eine zweite Herausforderung für Softwareentwickler ist die Vielzahl der verschiedenen Tools, die auf dem Markt verfügbar sind. Für fast jede Sicherheitsschwachstelle gibt es einen speziellen Test, der diese eine Schwachstelle sehr gut testet, aber eben nur eine Art von Schwachstellen abdeckt. Zum Beispiel ist SQLMap ein großartiges Werkzeug, um SQL-Injection-Schwachstellen zu finden, aber das ist nur einer der Angriffsvektoren, die Hacker verwenden.
Wenn ein Entwickler mehrere dieser Scanner verwendet, steht er vor der nächsten Herausforderung. Jeder Scanner muss individuell konfiguriert und an die Bedürfnisse des Unternehmens angepasst werden. Die Scanner basieren auf verschiedenen Programmiersprachen und bringen oft weitere Voraussetzungen wie Systembibliotheken mit sich, sodass der Entwickler viel Zeit benötigt, um die internen Sicherheitsscans einzurichten.
Wenn es mehrere verschiedene Sicherheitstools gibt, müssen die Entwickler entscheiden, welches sie verwenden wollen. Da sie oft keine spezifische Sicherheitsausbildung haben, ist die Bewertung der Werkzeuge kompliziert. Darüber hinaus unterscheiden sich die Ausgabeformate von Tool zu Tool, sodass auch eine Schwachstellenmanagement-Lösung ins Spiel kommt, die konfiguriert und eingerichtet werden muss. Wenn der Entwickler einen Sicherheitsscan durchführen möchte, muss er dann jeden Scanner einzeln starten und die Ergebnisse von Hand konsolidieren und standardisieren. Außerdem muss er sicherstellen, dass jeder Scanner immer auf dem neuesten Stand ist, um die neuesten Schwachstellen zu erkennen.
Sicherheits-Expertise ist für kleinere Unternehmen nicht einfach zu bekommen
Ein weiteres Problem, das vor allem das Management beschäftigt, ist der Mangel an qualifizierten Softwareentwicklern – insbesondere im Bereich Sicherheit. Gerade für kleine und mittelständische Unternehmen ist es sehr schwierig, die benötigten Experten im Bereich der Sicherheit zu gewinnen. Dies ist ein weiterer Grund dafür, dass Sicherheitstests oft nicht in dem erforderlichen Umfang durchgeführt werden. Selbst wenn Entwickler den dringenden Bedarf an Sicherheitsprodukten sehen, fehlt es ihnen oftmals an den Fähigkeiten, die breite Palette von Sicherheitstools zu bedienen und die Ergebnisse zu interpretieren. Diese Fähigkeiten zu erlernen, hindert Entwickler wiederum daran, neue Features für ihre Software zu erstellen.
Manager und Entwickler müssen sich aufeinander verlassen können
Manager haben oft nicht die Zeit und das Fachwissen, um die Sicherheit der entwickelten Software zu überprüfen und zu bewerten, daher müssen sie sich darauf verlassen, dass ihre Softwareentwickler eine sichere Anwendung erstellen. Dabei stehen die Entwickler jedoch zusätzlich unter dem Druck, ein Feature nach dem anderen zu entwickeln. Daher müssen sie sich bezüglich der Sicherheit ihres Codes auf die verwendeten Frameworks verlassen und haben selbst keine Absicherung. Dies führt lediglich zur Illusion einer sicheren Anwendung, die jedoch nicht durch einen kontinuierlichen Prozess geprüft wird.
Wichtige Punkte, die Sie behalten sollten
- Agile Softwareentwicklung erfordert continuous security.
- Continuous Security muss anwendbar sein.
- Durch die Verwendung von continuous security frameworks stehen den Entwicklern wieder Ressourcen zur Verfügung, um sich auf ihre Schlüsselaufgaben zu konzentrieren.
Beispiele für integrierte Sicherheit
Es ist besonders wichtig, dass Sicherheit in bestehende Systeme und Strukturen eingebettet wird, sodass die User nicht durch die Sicherheitsschicht behindert werden. Ein Beispiel aus der Praxis ist die Drehtür, die nur eine Person gleichzeitig passieren lässt. Dadurch hat das Sicherheitspersonal ein klares Bild von diesem Teil der Gebäudesicherheit, während die Türen von ihren Nutzern nicht als Sicherheitsmaßnahmen wahrgenommen werden.
Die einfache Integration der Maßnahmen ist eine der Voraussetzungen dafür, dass Sicherheitsmaßnahmen in modernen Entwicklungspraktiken erfolgreich umgesetzt werden. Als WhatsApp über Nacht eine End-to-End-Chatverschlüsselung einführte, ohne dass es die Benutzer merkten, erhöhte sich die Sicherheit der Kommunikation von Millionen von Menschen [WhatsA], ohne dass diese davon etwas bemerkten. Als breit akzeptierte Kommunikationsform gab es keine Verzögerungen oder zusätzliche Installationen, um das Sicherheitsmerkmal zu aktivieren, sodass die User in ihrer Anwendung nichts ändern mussten.
Die Implementierung einer solchen integrierten Sicherheit in der Softwareentwicklung ermöglicht die Einhaltung von Fristen (Software-Releases werden nicht durch Sicherheitsprobleme verzögert), verbessert die Beziehungen zwischen den Abteilungen, da Konflikte zwischen der Softwareentwicklungsabteilung und der Sicherheitsabteilung auf ein konstruktiveres Niveau gebracht werden können, und stärkt die Softwareentwickler.
Implementierung von Sicherheit in den Prozess der CI
Eine Möglichkeit, die oben genannten Probleme zu lösen, besteht darin, Sicherheitstests in den CI/CD-Prozess zu integrieren (s. Abb. 1). Um solche Scans erfolgreich in den Tagesablauf einzubinden, muss eine Reihe von Aspekten berücksichtigt werden:
- Sicherheitstests ergänzen andere Formen von Tests.
- Die Integration in den CI/CD-Prozess ist für continuous security unerlässlich.
Abb. 1: Sicherheit in der agilen Entwicklungsumgebung
Die Sicherheitstests müssen sich nahtlos in die aktuelle Entwicklungsumgebung integrieren lassen, sodass die Softwareentwickler ihre vertraute Umgebung nicht verlassen müssen. Ein normaler CI/CD-Prozess beinhaltet einen Build-Server, der bestimmte Funktionstests auslöst, wenn spezifische Aktionen auftreten (z. B. die Software wird bereitgestellt). Dies kann bedeuten, dass bei jedem Push in ein Repository bestimmte Unittests durchgeführt werden. Wenn ein Pull-Request erstellt oder zusammengeführt wird, können einige zusätzliche Tests, wie Integrationstests, ausgeführt werden. Die Ergebnisse werden normalerweise gesammelt, in der Benutzeroberfläche des Build-Servers präsentiert und können auf zusätzliche Kommunikationsmedien wie einen Slack-Channel übertragen werden.
Integrierte Sicherheitstests zu implementieren, bedeutet, dass die Sicherheitstests automatisch vom Build-Server basierend auf der Konfiguration der Entwickler ausgelöst werden. Automatisierte Tests können zusätzlich in bestimmten Zeitabständen (z. B. täglich oder wöchentlich) ausgelöst werden, um eine kontinuierliche Sicherheit zu gewährleisten. Eine Möglichkeit der Implementierung besteht darin, dass alle nächtlichen Builds mit dem automatisierten Sicherheitsscanner gescannt werden.
So wie Unit- und Integrationstests zu Standardwerkzeugen für moderne Softwareentwickler geworden sind, müssen Sicherheitstests vollständig in ihren täglichen Arbeitsablauf integriert werden. Der Sicherheitsscanner muss die Sicherheitsscans für den Entwickler bündeln und identifizierte Schwachstellen sinnvoll darstellen. Dadurch wird sichergestellt, dass Entwickler, deren Kernkompetenz nicht das Security Engineering ist, nicht durch die Notwendigkeit behindert werden, mehrere Tools zu integrieren oder Befehlszeilenausgaben von Sicherheitsscans zu interpretieren.
Abb. 2: Wie die Crashtest Security Suite für Continuous Security sorgt
Automatisierte Sicherheitsscans stärken Entwickler
Anstatt ein Hindernis für Entwickler zu sein, werden diese durch ordnungsgemäß integrierte Sicherheitsscans unterstützt. Sie geben ein sofortiges Feedback. Zum Beispiel, nachdem ein Pull-Request erstellt und der Code in einer Test- oder Stagingumgebung bereitgestellt wurde. Daher wissen sie immer noch, an welchem Code sie in den Stunden oder Tagen zuvor gearbeitet haben, und müssen nicht erneut in frühere Arbeiten eintauchen.
Richtige Tests geben nicht nur Feedback zu bestehenden Schwachstellen, sondern bieten auch Links zu Ressourcen oder Anleitungen zur Lösung eines Problems. Diese Ebene der Qualitätskontrolle gibt Entwicklern die Souveränität über die Sicherheit ihres Codes zurück. Anstatt manuelle Sicherheitstests zu erstellen, können sie sich auf ihre umsatzfördernde Arbeit wie die Entwicklung neuer Funktionen konzentrieren. Darüber hinaus können diese Tests kognitive Ressourcen freisetzen, die durch den Druck der Vorgesetzten gebunden sind. Da ein Job als Softwareentwickler oft nur als Feature-Produzent angesehen wird, sehen es (Non-Tech) Manager oft als Zeitverschwendung, wenn zu viel Arbeit in Dinge wie Codequalität oder Sicherheit investiert wird. Im Falle eines Sicherheitsnotfalls liegt die unmittelbare Verantwortung für dessen Behebung jedoch bei dem Entwickler, der den Code implementiert hat, der die Schwachstellen enthält. Ein automatisierter Sicherheitsscan gibt dem Entwickler ein hervorragendes Werkzeug an die Hand, um den Sicherheitsstatus der Software kontinuierlich zu überprüfen, während er sich gleichzeitig auf seine Kernaufgaben konzentriert.
Sobald eine Art automatisierte Sicherheit in den täglichen Arbeitsablauf integriert ist, können Entwickler eigenständig überprüfen, ob ihr Code bei jeder veröffentlichten Produktversion einen Sicherheitsscan bestanden hat. Eine Lösung, die immer die neuesten Sicherheitschecks enthält – wie ein SaaS-Sicherheitsscanner –, stellt sicher, dass alle neu entdeckten Schwachstellen (sogenannte Zero-Day-Angriffe) ebenfalls in den Scan einbezogen werden.
-Continuous security steht im Einklang mit anwendbarer Sicherheit
-Entwickler können sich auf ihre Hauptaufgaben konzentrieren, ohne Sicherheitsprobleme zu ignorieren
Fazit
Durch die Einbindung in den Entwicklungsprozess, ähnlich wie es Entwickler gewohnt sind, bieten continuous security suites Sicherheit für Software, die es Programmierern ermöglicht, Software in Bezug auf Sicherheit so früh wie möglich zu verbessern. Auf diese Weise können Entwickler ihren Kunden bessere Software zur Verfügung stellen. Die Zeitersparnis, die sie dadurch erzielen, dass sie Sicherheitsprobleme gezielt angehen, sobald sie auftreten (und nicht nach Wochen oder Monaten produktiver Nutzung), ermöglicht es ihnen, sich auf die Entwicklung neuer Funktionen zu konzentrieren.
Links
[DVrie] St. de Vries, Continuous Security Testing in a DevOps World, https://www.owasp.org/images/e/e1/OWASP-Continuous_Security_Testing.pdf
[Ro10] https://www.sixsigmablackbelt.de/fehlerkosten-10er-regel-zehnerregel-rule-of-ten/
[StackO] Developer Survey Results, 2017, https://stackoverflow.com/insights/survey/2017
[WhatsA] www.whatsapp.com