Security by Design

DevSecOps – So gelingt sichere Softwareentwicklung

Bei der Entwicklung neuer Softwareanwendungen sollte der Sicherheitsaspekt bereits beim Design eine zentrale Rolle spielen. Bei der Transformation von DevOps zu DevSecOps kommt es auf folgende Prinzipien an.
Von 
CSO | 02. September 2022 15:25 Uhr
In DevSecOps-Umgebungen kommt speziell ausgebildeten „Software Security Champions“ eine zentrale Rolle zu. Sie unterstützen andere Entwickler im Team mit ihrem Wissen zu Security-Themen.
In DevSecOps-Umgebungen kommt speziell ausgebildeten „Software Security Champions“ eine zentrale Rolle zu. Sie unterstützen andere Entwickler im Team mit ihrem Wissen zu Security-Themen.
Foto: Jaiz Anuar - shutterstock.com

Unter dem Namen "DevSecOps" wird das Thema Sicherheit zum zentralen Prinzip des DevOps-Ansatzes. Dabei handelt es sich um einen ganzheitlichen Ansatz, der Security in allen Phasen des Software-Lebenszyklus berücksichtigt (SDLC) - das heißt von der Entwicklung bis zur Bereitstellung und dem Betrieb einer Software. Alle beteiligten Teams verantworten den Bereich Sicherheit gemeinsam.

Damit DevSecOps-Initiativen erfolgreich sind, sollte folgende drei Prinzipien beherzigt werden:

  • Den Code so schnell sichern, wie man ihn schreibt, und zwar mit Tools, die man leicht in die jeweilige IDE (Integrated Development Environment oder integrierte Entwicklungsumgebung) integrieren kann.

  • Die richtigen Tests zur richtigen Zeit im SDLC durchführen.

  • Die Fähigkeit, soviel Rauschen wie möglich herauszufiltern und sich auf die Daten zu fokussieren, die man durch intelligentes Testen gesammelt hat.

DevSecOps gelingt durch bessere Kommunikation zwischen Teams

Im Idealfall arbeiten die verschiedenen Entwicklerteams bei der Softwareentwicklung zusammen. In DevSecOps-Umgebungen kommt speziell ausgebildeten und für das Thema sensibilisierten "Software Security Champions" eine zentrale Rolle zu. Sie unterstützen andere Entwickler im Team mit ihrem Wissen zu Security-Themen - und das direkt im Rahmen der täglichen Entwicklung. "Software Security Champions" haben eine spezielle Sicherheitsschulung durchlaufen und analysieren den Code anderer Entwickler durchgängig darauf, wie er sich auf mehr Sicherheit optimieren lässt. Der große Vorteil eines Champions besteht darin, dass er selbst die Sprache der Entwickler spricht. Im besten Fall kann er so seine zusätzliche Sicherheitsexpertise eingängig vermitteln. Entwickler profitieren davon nicht nur im konkreten Einzelfall, sie lernen grundsätzlich sicherer zu entwickeln. Dieses Wissen reichert sich über die Zeit ganz selbstverständlich an und führt fast zwangsläufig zu qualitativ hochwertigem Code, der gleichzeitig sicher ist.

Entwickler befassen sich in der Regel ohnehin mit Informationen rund um das Thema Sicherheit. Was bei der Ausbildung jedoch vielfach zu kurz kommt, ist die Frage, wie man sicheren Code optimal programmiert. Damit Software insgesamt sicherer wird, braucht es die stetige Auseinandersetzung mit dem Thema, und zwar direkt und konkret auf den eigenen Code bezogen. Allgemein gehaltene Schulungen greifen zu kurz. Holistische Trainings hingegen unterstützen gezielt das eigene Fachwissen (die Entwicklung von qualitativ hochwertigem Code) und erweitern es um sicherheitsrelevante Aspekte. Dazu dient eine Grundausbildung der Entwickler im Bereich Sicherheit und parallel die Ausbildung spezieller "Software Security Champions".

Im Optimalfall sind Entwickler schon zu einem frühen Zeitpunkt im Lebenszyklus einer Software (Software-Entwicklungs-Lebenszyklus, SDLC) entsprechend geschult. Je mehr ein Entwickler über Qualität und Sicherheit weiß, desto besser kann er Security-Features und die Möglichkeiten innerhalb der betreffenden Entwicklungsumgebungen, Programmiersprachen und Infrastrukturen nutzen. Sicherheit steht dabei ganz oben und beginnt bereits beim Design und in der Planungsphase neuer Projekte.

Die Rolle von Software Security Champions

Software Security Champions bilden ihrerseits andere Entwickler aus und weiter, während sie mit ihnen zusammenarbeiten. Ganz wichtig ist dabei, dass es sich bei den Champions selbst um Vollzeit-Entwickler handelt - und gerade nicht um Sicherheitsexperten, welche die Entwicklung nur von außen kennen. Durch ihre Spezialisierung auf Sicherheitsthemen erkennen solche Champions üblicherweise sehr schnell, wo genau im Code Verbesserungen notwendig sind. Und sie sind in der Lage, ihren Kolleginnen und Kollegen dieses Wissen in ihrer Sprache zu vermitteln.

Idealerweise sollte man die Programmierer zum Software Security Champion ausbilden, die sich ohnehin intensiv mit dem Thema Sicherheit auseinandersetzen und ein starkes Interesse an sicherer Software haben. Gleichzeitig profitieren Entwicklerteams von dieser engen Integration, Reibungsverluste lassen sich weitgehend vermeiden.

Häufig arbeiten die Champions in den einzelnen Teams auch mit anderen Teams enger zusammen, um Sicherheitsprobleme gemeinsam (und schneller) zu lösen. So multipliziert sich das Sicherheitswissen im Unternehmen und zwischen den Entwicklern, eventuell bestehende Silos lassen sich aufbrechen.

Guter Code schützt vor Sicherheitslücken

Haben Entwickler beim Projektstart schon das nötige Wissen, um sicheren und qualitativ hochwertigen Code zu programmieren, lassen sich übliche Bugs und Schwachstellen vermeiden. Wer sich die Top 10 des Open-Web-Application-Security-Projects (OWASP) anschaut, wird feststellen, dass sich viele Sicherheitsprobleme bei Anwendungen vermeiden ließen. So lassen sich beispielsweise Schwachstellen wie Server-Side-Request-Forgery (SSRF), also die serverseitige Fälschung von Anforderungen, Injection-Probleme (einschließlich von XSS und SQLi) sowie Broken-Access-Control bereits beim Codieren angehen. Allerdings nur, wenn Entwickler sich dieser Probleme bewusst sind und wissen, wie man sie verhindert.

Lesetipps: Aqua-Security-Analyse - So schützen Sie Ihre Software-Lieferkette

Dynamic & Static Application Security Testing -Die besten DAST- & SAST-Tools

Ganzheitliche Schulungen und mehrstufiges Lernen führen zu Best Practices

Bei der Weiterbildung von Entwicklern spielt ganzheitliches Lernen eine zentrale Rolle. Durch kontinuierliche Weiterbildung bauen Entwickler ihre Fähigkeiten sukzessive aus und greifen dann grundsätzlich auf "Best Practices" zurück. Leider kommt häufig ein Sammelsurium von Schulungen zum Einsatz. Entwickler nutzen nicht selten verschiedene Plattformen und unterschiedliche Laborumgebungen, um sich in einzelnen Bereichen weiterzubilden. Meist sind diese Informationen zu nicht gezielt aufbereitet und zu allgemein gehalten.

Hier sollten zentrale Plattformen zum Einsatz kommen, bei denen der Entwickler-Code mit einbezogen werden kann. So erreicht man direkt aus der Praxis heraus eine Verbesserung des Codes. Das Training sollte integraler Bestandteil der Entwicklung sein, möglichst schon im Programmierstadium. Oft erkennt man dann, dass bei einer Software oder innerhalb eines Teams ganz ähnliche Sicherheitsprobleme häufiger auftreten. Dann kann es sinnvoll sein, dieses Problem direkt zu adressieren, um es in Zukunft möglichst ganz zu vermeiden. Bei dieser Herangehensweise lernen die Entwickler bereits während des Codierens, wo Schwachstellen üblicherweise auftreten, und wie sie ihren Code in dieser Hinsicht verbessern können.

Intelligente Trainingsmethoden für besseren Code

Interaktive Trainings dieser Art haben einige Vorteile. Wenn man den geschriebenen Code frühzeitig analysiert, führt das in den meisten Fällen zu gezielten Verbesserungsvorschlägen. Diese lassen sich sofort umsetzen, eventuell sogar in einer eigens dafür aufgebauten, virtuellen Testumgebung. Dadurch erkennt man nicht nur grundlegende Schwächen beim Programmieren, sondern kann auch die eigene Herangehensweise verbessern.

Läuft ein Training während ein Entwickler programmiert, ist das genau der richtige Zeitpunkt, um Verhalten zu verändern. Beim Programmieren gibt es zwei unterschiedliche Modi. Zum einen den schöpferisch künstlerischen Modus, in dem der Entwickler einen einzigartigen Code schreibt, Probleme löst und sich in neue Funktionen vertieft. Den zweiten Modus nennt man gerne den "Whack-a-mole"-Modus, wenn der Code nicht das tut, was er tun sollte und man sich damit herumschlägt, Fehler und Schwachstellen zu beheben.

In der Phase, in der ein Entwickler sich als Künstler versteht, ist er offen für neue Informationen. Damit ist es im "Whack-a-Mole"-Modus vorbei. Entwickler tendieren dann eher dazu, hektisch zu werden und die auftretenden Fehler möglichst rasch zu beseitigen. Wenn man dieses Verhalten dauerhaft verändern und Entwicklern beibringen will, wie man einen sicheren Code entwickelt, dann muss das im Künstlermodus passieren.

Ein Schulungssystem, das intelligent mit dem realen Entwicklungskontext und der integrierten Entwicklungsumgebung (IDE) zusammenarbeitet, ist der effektivste Weg, um die Anwendungssicherheit (AppSec, Applikationssicherheit) positiv zu beeinflussen.

Verstehen, wie Angreifer denken

Ein nicht zu unterschätzender Aspekt ist es, die Perspektive zu wechseln. Sich also in die Vorgehensweise eines Angreifers hineinzudenken. Wenn Entwickler verstehen, wie Hacker und Malware-Entwickler denken, fließt dieses Wissen unmittelbar in die Programmierung des eigenen Codes ein und macht ihn so sicherer.

In der Theorie sind viele Unternehmen auf Angriffe von Hackern und auf Malware- oder Ransomware-Attacken vorbereitet. Allerdings fehlen häufig praktische Vorgehensweisen, und nur in den seltensten Fällen wird das eigene Netzwerk aus Sicht eines potenziellen Angreifers betrachtet. Das gilt auch für Entwickler. Die meisten Angreifer nutzen Schwachstellen in einer Anwendung, um sich Zugang zu einem Netzwerk zu verschaffen. Sind Entwickler ihrerseits mit diesen Vorgehensweisen vertraut, hilft das, eigene Anwendungen so zu programmieren, dass Angreifer wenig bis gar keine Möglichkeiten haben, um Sicherheitslücken auszunutzen. (jm)

Drew Thompson, Practice Director, Synopsys Inc.