One open source tool to rule them all…

Die unbegrenzte Vielfalt im Cloud-Native-Umfeld bietet jede Menge Möglichkeiten, führt jedoch auch schnell zu hoher Komplexität und vielen Abhängigkeiten.  Security spielt in diesem Zusammenhang eine zentrale Rolle. Wie wir mit Lagoon den Security-Aspekt bezüglich Vulnerabilities im Griff haben, erzählt euch Stephan Girod in diesem Blogpost.

 

DevSecOps in der Cloud

Befasst man sich mit „DevSecOps“ in einem cloud-basierten Umfeld, begegnet man zwangsläufig Fragen wie diesen:

  • Weiss ich genau, was ich wo einsetze?

  • Gibt es bekannte Vulnerablities, die mich in irgendeiner Form betreffen?

  • Habe ich alte Versionen von Dependencies im Projekt?

All diese Fragen drehen sich hauptsächlich um folgende Komponenten, die wir gerne im Griff haben:

  • Dependencies

    Eine externe Bibliothek – eine sogenannte Abhängigkeit („Dependency“) – die wir mit all ihren Fehlern und weiteren Dependencies in unsere Software einbinden.

  • Basis-Images

    Ein Image bestehend aus System-Bibliotheken, Werkzeugen und Plattformeinstellungen, die unsere Software zum Erstellen oder Betreiben benötigt. Es ist entspricht einem Mini-Betriebssystem.

  • Runtime-Images (Container-Image)

    Das gebaute Image, das am Ende der CI/CD-Pipeline bspw. in die Produktion deployed wird. Es beinhaltet das Basis-Image, unsere Anwendung und die externen Dependencies.

Auf unserer Digitalisierungsplattform Lagoon arbeiten wir mit einer stattliche Anzahl von Images, Libraries und Frameworks. Dies ohne Unterstützung einer Software zu bewältigen, grenzt an Leichtsinn.

DependencyTrack

Mit dem Open Source-Tool DependencyTrack der OWASP Foundation haben wir das richtige Instrument gefunden. Das Tool bietet alle nötigen Features und unterstützt jegliche Ökosysteme. Folgende Vorteile sind für uns am wertvollsten:

Visualisierung

Alle Projekte und Vulnerablilities werden einfach und verständlich visualisiert. Pro Projekt (Build) ist ersichtlich, welche Version, zu welchem Zeitpunkt, mit welchen Vulnerabilities gebaut wurde.

Vulnerabilities direkt im Tool auditieren

Bei uns sieht diese Vorgehen folgendermassen aus:

  1. Die Vulnerability wird beim Scan des Artefakts in der CI/CD-Pipeline entdeckt

  2. In DependencyTrack wird ersichtlich, welche Libraries betroffen sind

  3. Pro Library wird evaluiert, ob das Projekt effektiv betroffen ist und aktualisiert werden muss

  4. In DependencyTrack wird der Audit-Status pro Library gesetzt und der Scan neugestartet

Mit den Stati „FALSE_POSITIVE“ oder „NOT_AFFECTED“ können Vulnerabilitis bewusst unterdrückt werden.

Integration in CI/CD-Pipelines

In der CI/CD-Pipeline wird nach dem Prinzip „fail fast“ zweimal ein Scan durchgeführt. Im ersten Scan werden nur Dependencies betrachtet. Im zweiten Scan das komplette Container-Image berücksichtigt.

Schritt 1 – Dependency Check

Mit CycloneDX erstellen wir von unserem Build-Candidate ein CycloneDX BOM und übergeben dieses an DependencyTrack. Von dort aus geht das Resultat zurück. Wenn ein projektspezifischer Threshold von Vunerabilites überschritten wird, brechen wir die CI/CD-Pipeline ab.

Schritt 2 – Image-Scanning

Mit dem CLI-Tool Syft erstellen wir aus dem gebauten Image ein Software Bill of Material (SBOM) und suchen mit Hilfe von DependencyTrack mögliche Vulnerabilities auf Container-Ebene.

Ausblick

In Zukunft wollen wir mit Hilfe des Notification-Features von DependencyTrack alle bestehenden Images überwachen. Heute wird dies mit automatischen Weekly-Builds sichergestellt. Mit den Notifications werden neue Vulnerabilities in existierenden Images schneller entdeckt und Risiken noch früher eliminiert.

Fazit

Mit DependencyTrack haben wir für die Plattform Lagoon ein Instrument gefunden, das unserem hochen Anspruch an Sicherheit gerecht wird. DependencyTrack ist ein mächtiges Open Source-Tool, welches einfach zu betreiben, bedienen und integrieren ist. Für uns lässt es keine Wünsche offen und falls doch – we contribute!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.