DevSecOps – sichere Softwareentwicklung und Betrieb

DevSecOps

In einem agilen Umfeld nach DevOps-Ansatz wird kurz vor dem Release festgestellt: jeder und jede darf alles: Zugriffe auf alle Daten sind allen möglich ohne jegliche Einschränkungen und/oder Zugriffskontrolle. Was ist schiefgelaufen?

Die Sicherheit der Anwendung war von Anfang an außer Acht gelassen worden und es wurde keine Zugriffskontrolle bei der Implementierung umgesetzt.

Da kommt die Anwendungssicherheit (Security) ins Spiel: DevSecOps ist ein Kunstwort, welches sich aus den englischen Begriffen für Softwareentwicklung (Development), (Cyber-)Sicherheit (Security) und IT-Betrieb (Operations) zusammensetzt. Es handelt sich um einen Ansatz für Unternehmenskultur, Automatisierung und Plattformdesign, bei dem die Sicherheit eine zentrale Rolle spielt und als gemeinsame Verantwortung im gesamten IT-Lebenszyklus integriert ist. DevSecOps zielt darauf ab, IT-Sicherheitsmaßnahmen direkt in den Prozess der Anwendungsentwicklung zu integrieren.

Vergleich zwischen DevSecOps und DevOps

DevSecOps ist eine Weiterentwicklung des DevOps-Ansatzes und beschreibt einen kulturellen Wandel in der Software-Entwicklung. Ziel ist der Einsatz interdisziplinärer Teams und die konsequente Integration automatisierter Sicherheitsverfahren in alle Phasen des rasanten Entwicklungszyklus – vom Entwurf bis zur Implementierung und Betrieb [2].

Bei DevOps geht es nicht nur um die Entwicklungs- und Operations-Teams. In einem ausgesonderten Blogartikel ist das Thema ‘DevOps’ ausführlich behandelt worden. Wenn Sie die Agilität und Reaktionsfähigkeit des DevOps-Ansatzes vollständig ausschöpfen möchten, muss die IT-Sicherheit ebenfalls in den gesamten Lifecycle der App integriert werden [1].

Warum ist dies wichtig? In der Vergangenheit war die Sicherheit zumeist Aufgabe eines speziellen Teams in der Endphase der Entwicklung. Das war auch kein größeres Problem, als die Entwicklungszyklen noch mehrere Monate oder gar Jahre in Anspruch nahmen. Diese Zeiten sind aber vorbei. Aufgrund beschleunigter Entwicklungsphasen gelten diese Praktiken als veraltet: die vorhandene Zeit vor dem nächsten Release reicht meist nicht aus, um den Code effektiv auf Fehler zu überprüfen. Dies führt dazu, dass die Entwicklung unnötig ausgebremst wird oder dass essenzielle Sicherheitsmaßnahmen übergangen werden, wodurch das Gefahrenrisiko steigt [2].

Als notwendige Antwort auf diese Problematik wurde der unternehmenskulturelle DevSecOps-Ansatz entworfen. DevSecOps stellt die Evolution des DevOps-Gedankens dar und ergänzt die kollaborative Entwicklungsorganisation um das Thema Sicherheit. Dabei werden Security-Maßnahmen direkt in den Entwicklungsablauf integriert und alle Beteiligten tragen gemeinsam die Verantwortung zur Gewährleistung von Sicherheitsstandards. Durch die Berücksichtigung des Sicherheitsaspekts im Entwicklungsprozess selbst werden agile Verfahren nicht eingeschränkt und es besteht durchgängig die Möglichkeit, schnell auf Sicherheitsrisiken zu reagieren [2].

Eine effiziente DevOps-Strategie sorgt für schnelle und häufige Entwicklungszyklen (Wochen oder manchmal gar nur Tage), aber veraltete Sicherheitspraktiken können selbst die effektivsten Prozesse ausbremsen [1].

Beim kollaborativen DevOps-Ansatz von heute aber wird die Sicherheit zur gemeinsamen Verantwortung, die vom Anfang an in dem Ablauf integriert ist [1].

DevSecops

DevSecOps bedeutet, dass die Sicherheit der Anwendungen und der Infrastruktur von Anfang an beachtet werden muss. Es bedeutet ebenfalls, dass einige Sicherheits-Gates automatisiert werden müssen, damit der DevOps-Workflow nicht zu langsam wird. Wenn Sie die richtigen Tools zur kontinuierlichen Integration von Sicherheitsfunktionen verwenden und sich auf eine IDE (Integrated Development Environment) mit Sicherheits-Features einigen, können diese Ziele leichter erreicht werden. Allerdings ist für eine effiziente DevOps-Sicherheit mehr erforderlich als nur ein paar neue Tools. Sie basiert auf den veränderten kulturellen Anforderungen von DevOps, die Arbeiten der Sicherheits-Teams lieber früher als später zu integrieren [1].

Beim DevSecOps-Ansatz müssen Sicherheitsfunktionen von Anfang an integriert sein und dürfen nicht erst später um die Apps und Daten herumgebaut werden. Dies bedeutet auch, dass die Entwickler bereits bei der Programmierung an die Sicherheit denken müssen. Damit dieser Prozess erfolgreich ist, müssen die Sicherheits-Teams transparent arbeiten, einander Feedback geben und einander mitteilen, wenn Bedrohungen vorliegen [1].

DevSecOps muss als Bestandteil des Entwicklungsprozesses betrachtet werden. Ihre Praktiken erfordern Sicherheit als Teil des gesamten Software-Entwicklungszyklus und nicht erst vor der Freigabe der Software für die Produktion. Dies bedeutet, dass Entwickler die Überprüfung auf Sicherheitslücken sowohl in den Build-Prozess als auch in ihre IDE-Umgebung integrieren, um anfällige Abhängigkeiten ausfindig zu machen [5].

DevSecOps-Kultur

Im Rahmen einer DevSecOps-Kultur übernimmt jeder Einzelne die Verantwortung und das Eigentum an der Sicherheit. In Verbindung mit den Best Practices von DevOps sollte jedes Entwickler-Team einen Sicherheitsbeauftragten benennen, der die Prozesse für die Sicherheit und die Einhaltung von Lizenzbestimmungen und diesbezügliche Aktionen im Team leitet, um die Sicherheit der gelieferten Software zu maximieren.

Das Wesen von DevOps besteht darin, so viel wie möglich zu automatisieren, um menschliche Fehler zu vermeiden und automatisierte Gates zu schaffen, die verhindern, dass instabiler Code in die Produktion gelangt. Im Grunde ist Code, der Sicherheitslücken oder nicht eingehaltene Lizenzen beinhaltet, instabil [5].

DevSecOps-Prinzipien

Die Einführung und Umsetzung von DevSecOps in einer Organisation erfordert ein Umdenken in der Unternehmenskultur und im Betriebsablauf. Dies umfasst Tools, Ressourcen und Training bezüglich der Sicherheit. Im Folgenden finden Sie einige nützliche Konzepte für die Veränderung Ihrer Unternehmenskultur [5].

Wie kann die Sicherheit im DevSecOps-Ansatz umgesetzt werden?

Benötigt wird der Einsatz von modernen, innovativen Technologien (z.B. Container, Microservices…), kurze und häufige Entwicklungszyklen, Integration von Sicherheitsmaßnahmen schon bei der Programmierung sowie Begünstigung von enger Zusammenarbeit zwischen den sonst isolierten Teams.

Vor allen technischen Ansätzen kommt aber der menschliche Faktor ins Spiel: alles fängt auf der Personalebene an und mit der Art und Weise der Zusammenarbeit. Das wichtigste technische Instrument ist aber die Automatisierung.

Die Automatisierung umfasst im Großen und Ganzen folgende Aspekte: Quellkontroll-Repositories, Container-Registries, die CI/CD-Pipeline (Continuous Integration/Continuous Deployment), API-Management, die Orchestrierung und Release-Automatisierung sowie die operative Verwaltung und Überwachung [1].

DevOps-Sicherheit wurde für Container und Microservices entwickelt. DevSecOps bedeutet nichts anderes, als dass Sicherheit zum festen Bestandteil der kompletten Entwicklungs-Pipeline (von Anfang bis Ende) wird. Dieser Umstand aber erfordert sowohl eine neue Unternehmensphilosophie als auch neue Tools. Vor diesem Hintergrund sollten DevOps-Teams daher die Sicherheit automatisieren, um die gesamte Umgebung inklusive aller Daten und des CI/CD-Bereitstellungsprozesses zu schützen. Dieses Vorhaben aber betrifft höchstwahrscheinlich auch die Sicherheit von Microservices in Containern [1].

Automatisierung und moderne cloudnative Technologien wie Container und Microservices unterstützen Anwendungsentwickler und erlauben die Aufteilung der Entwicklungsschritte in viele unabhängig voneinander ablaufende Prozesse. Zusätzlich sorgen DevOps-Strategien dafür, dass Entwicklungszyklen beschleunigt werden, wodurch die Zeit zwischen Releases verkürzt wird und neue Anwendungsversionen innerhalb von Wochen oder sogar Tagen verfügbar sind [2].

Merkmale von DevSecOps

  • Anti-Silos: erst wenn alle am Entwicklungsprozess Beteiligten gemeinsam Verantwortung für die Integration von Sicherheitsmaßnahmen übernehmen, können diese durchgängig und so früh wie möglich in die CI/CD-Pipelines eingebunden werden.
  • Shift-Left: dies bedeutet, dass Sicherheitsmaßnahmen früher (also Richtung “links”) in den Entwicklungszyklus eingebunden werden. Dies steht im Kontrast zu traditionellen Praktiken, bei denen QS- und Security-Checks erst am Ende durchgeführt wurden.
  • Automatisierung: Automatisierte Sicherheitstests während des Entwicklungsprozesses dienen dazu, Sicherheitslücken schon vor Implementierung der Software aufzudecken, damit Gefahrenpotenziale leichter ausgeschaltet werden können. Mithilfe automatischer Tests können Sicherheitsmaßnahmen außerdem an den Einsatz cloudnativer Technologien angepasst werden. Konkrete Sicherheitsmaßnahmen können bspw. ein zentrales Identity- und Access-Management, integrierte Security Scans für Container oder die Isolierung von Microservices sein. [2].
  • Cloudnative Technologien: Cloudnative Technologien wie Microservices und Container ermöglichen die Entwicklung von Anwendungen in kleinen, inkrementellen Schritten. Container und Microservices sind mittlerweile fester Bestandteil vieler DevOps- bzw. DevSecOps-Prozesse und müssen bei der Umsetzung von Sicherheitsmaßnahmen beachtet werden. DevSecOps-Maßnahmen können bspw. dafür sorgen, dass Übertragungen zwischen den verschiedenen Services sicher und verschlüsselt ablaufen oder dass integrierte Sicherheitsfunktionen von Container- und Orchestrierungsplattformen in Entwicklungsprozesse eingebunden werden. Zugangskontrollen und Authentifizierungsverfahren zählen ebenfalls zu integralen Aufgabenbereichen von DevSecOps [2].
    DevSecOps Tools

    Heutzutage existieren eine Reihe von Tools, die in unterschiedlichen Phasen der Softwareentwicklung dabei helfen sollen, DevSecOps-Ansatz ganzheitlich umzusetzen [2]:

    Build Phase:

    • Quellcodeanalyse
    • Automatic Security Testing (AST)
    • Web Application Firewall (WAF)

    Test Phase:

    • Static Application Security Testing (SAST), um Sicherheitsfehler im Code zu finden [5]
    • Interactive Application Security Testing (IAST)
    • Web Application Firewall (WAF)

    Run Phase:

    • Web Application Firewall (WAF)
    • Dynamic Application Security Testing (DAST), als Teil eines automatisierten Ablaufs für die Qualitätssicherung [5]
    • Bug Bounty
    • Bedrohungsanalyse
    Vor- und Nachteile

    Vorteile:

    Erfolgt die Software-Entwicklung in kleinen, inkrementellen Schritten, lassen sich Sicherheitsmaßnahmen in jede Entwicklungsphase integrieren und sind stets überprüfbar. Somit wird der Code bis zur Auslieferung der Anwendung kontinuierlich analysiert, getestet und freigegeben. Werden dabei Probleme oder Risiken identifiziert, können diese umgehend behoben werden, wodurch doppelte Überprüfungen und unnötige Neuerstellungen vermieden werden. Moderne Werkzeuge für die Analyse und den Schutz von Anwendungen übernehmen wiederkehrende Sicherheitsaufgaben und entlasten so die Entwicklungsteams, die sich somit auf höherwertige Aufgaben konzentrieren können [2].

    Nachteile:

    Der DevSecOps-Ansatz ist besonders zu Beginn mit großen Herausforderungen verbunden. Soll die Umsetzung gelingen, sind Zeit und konsequentes Handeln erforderlich. Prozesse und Mitarbeiter müssen gleichermaßen auf die neuen Abläufe und Anforderungen vorbereitet werden. Es bedarf eine Bestandsaufnahme bisheriger Sicherheitsmaßnahmen und der Überprüfung, ob diese weiterhin einsetzbar sind. Alternativ muss nach neuen Lösungen Ausschau gehalten werden, in die sich Mitarbeiter dann einarbeiten müssen. Generell müssen sich Entwickler zusätzliche Kompetenzen im Security-Bereich aneignen, um DevSecOps-Maßnahmen umsetzen zu können [2].

    Fazit

    Der Hauptunterschied zwischen DevOps und DevSecOps ist klar: das letzte setzt die Sicherheit in einer Anwendung im Fokus. Wie anfangs im Szenario kurz beschrieben wurde, ist die Sicherheit in der Softwareentwicklung keine Nebensache und sollte im gesamten Entwicklungszyklus berücksichtigt werden. Mit Einsatz von DevSecOps können Entwicklungsteams dafür sorgen, dass Sicherheitsschwächen in der Anwendung früh genug entdeckt und behoben werden können. Außerdem wird die agile Softwareentwicklung dadurch beschleunigt, das Wissen und die Sensibilisierung über die Sicherheit bei allen Teammitgliedern wird verteilt und gestärkt.