Angst und Hass in DevSecOps

Wir hatten 2 Code-Analyzer, 4 Werkzeuge fĂŒr dynamisches Testen, eigene Bastelarbeiten und 250 Skripte. Nicht dass all dies im aktuellen Prozess notwendig war, aber wenn man einmal mit der Implementierung von DevSecOps begonnen hat, sollte man es auch zu Ende bringen.

Angst und Hass in DevSecOps

Quelle. Die Charaktere wurden von Justin Roiland und Dan Harmon kreiert.

Was ist SecDevOps? Und DevSecOps? Wo liegen die Unterschiede? Was ist Application Security? Warum funktioniert der klassische Ansatz nicht mehr? Auf all diese Fragen hat er Antworten. Juri Schabalin von Swordfish Security. Juri wird ausfĂŒhrlich auf alles eingehen und die Probleme des Übergangs vom klassischen Modell der Application Security zum DevSecOps-Prozess erlĂ€utern: wie man den Prozess der sicheren Softwareentwicklung korrekt in den DevOps-Prozess integriert, ohne dabei etwas kaputt zu machen, welche grundlegenden Phasen der Sicherheitstests durchlaufen werden sollten, welche Werkzeuge verwendet werden können, wie sie sich unterscheiden und wie sie richtig konfiguriert werden, um Fallstricke zu vermeiden.

Video abspielen

Über den Sprecher: Juri Schabalin ist Chief Security Architect bei der Swordfish Security. Ist verantwortlich fĂŒr die Implementierung von SSDL und fĂŒr die gesamte Integration von Analysetools in ein einheitliches Entwicklungs- und Test-Ökosystem. 7 Jahre Erfahrung in der Informationssicherheit. Hat bei Alfa-Bank, Sberbank und Positive Technologies gearbeitet, einem Unternehmen, das Software entwickelt und Dienstleistungen anbietet. Sprecher auf internationalen Konferenzen wie ZerONights, PHDays, RISSPA, OWASP.

Anwendungssicherheit: Worum geht es?

Anwendungssicherheit ist ein Bereich der Sicherheit, der sich mit der Sicherheit von Anwendungen befasst. Er umfasst nicht die Infrastruktur oder Netzwerksicherheit, sondern konzentriert sich darauf, was wir schreiben und woran die Entwickler arbeiten – das sind die Schwachstellen und Verwundbarkeiten der Anwendungen selbst.

Bereich SDL oder SDLC — Sicherheitsentwicklungslebenszyklus wurde von Microsoft entwickelt. In der Abbildung sehen Sie das kanonische Modell des SDLC, dessen Hauptaufgabe es ist, die Sicherheit in jedem Schritt der Entwicklung zu berĂŒcksichtigen, von den Anforderungen bis zur Veröffentlichung und dem Produktionsstart. Microsoft erkannte, dass es in der Industrie zu viele Bugs gibt, deren Anzahl steigt und dass man etwas dagegen unternehmen muss. Daher wurde dieser Ansatz vorgeschlagen, der zum kanonischen Modell wurde.

Angst und Hass in DevSecOps

Application Security und SSDL zielen nicht darauf ab, Schwachstellen zu entdecken, wie hÀufig angenommen, sondern darauf, deren Entstehung zu verhindern. Im Laufe der Zeit wurde der klassische Ansatz von Microsoft verbessert und vertieft, um ein detaillierteres VerstÀndnis zu ermöglichen.

Angst und Hass in DevSecOps

Der klassische SDLC ist stark in verschiedenen Methoden detailliert — OpenSAMM, BSIMM, OWASP. Die Methoden unterscheiden sich, sind jedoch im Großen und Ganzen Ă€hnlich.

Building Security In Maturity Model

Es liegt mir am meisten am Herzen BSIMM — Building Security In Maturity Model. Die Grundlage der Methodik ist die Aufteilung des Application Security Prozesses in 4 DomĂ€nen: Governance, Intelligence, SSDL Touchpoints und Deployment. Jede DomĂ€ne umfasst 12 Praktiken, die in Form von 112 AktivitĂ€ten dargestellt werden.

Angst und Hass in DevSecOps

Jede der 112 AktivitĂ€ten hat 3 Reifegrade: initial, mittel und fortgeschritten. Alle 12 Praktiken können modular studiert werden, um wichtige Aspekte auszuwĂ€hlen, zu verstehen, wie sie implementiert werden können, und schrittweise Elemente wie statische und dynamische Codeanalyse oder Code-Reviews hinzuzufĂŒgen. Erstellen Sie einen Plan und arbeiten Sie ruhig im Rahmen der Umsetzung der gewĂ€hlten AktivitĂ€ten.

Warum DevSecOps

DevOps ist ein umfassender Prozess, der die Sicherheitsaspekte mit einbezieht.

UrsprĂŒnglich DevOps Die SicherheitsĂŒberprĂŒfungen waren anfĂ€nglich nicht optimal organisiert. In der Praxis war die GrĂ¶ĂŸe der Sicherheitsgruppen deutlich geringer als heute, und sie agierten eher als Kontroll- und Aufsichtsinstanz, die Anforderungen stellt und die QualitĂ€t des Produkts nach der Veröffentlichung ĂŒberprĂŒft. Dies ist der klassische Ansatz, bei dem Sicherheitsgruppen von der Entwicklung getrennt waren und nicht am Prozess teilnahmen.

Angst und Hass in DevSecOps

Das Hauptproblem besteht darin, dass die Informationssicherheit getrennt von der Entwicklung ist. Üblicherweise gibt es einen Sicherheitsrahmen, der aus 2-3 großen und teuren Werkzeugen besteht. Alle sechs Monate wird der Quellcode oder die Anwendung geliefert, die geprĂŒft werden mĂŒssen, und einmal im Jahr finden Pentestsstatt. Das alles fĂŒhrt dazu, dass sich die MarkteinfĂŒhrungsfristen verzögern und Entwickler mit einer riesigen Anzahl von Schwachstellen aus automatisierten Tools konfrontiert werden. All das lĂ€sst sich nicht bewĂ€ltigen und beheben, da die Ergebnisse aus den letzten sechs Monaten noch nicht ausgewertet wurden und bereits eine neue Charge ansteht.

Im Verlauf unserer TĂ€tigkeit haben wir festgestellt, dass die Sicherheitsanforderungen in allen Bereichen und Branchen verstanden haben, dass es an der Zeit ist, sich anzupassen und gemeinsam mit der Entwicklung aktiv zu werden – in Agile. Das DevSecOps-Paradigma passt hervorragend zu agilen Entwicklungsmethoden, zur Implementierung, zum Support und zur Beteiligung an jedem Release und jeder Iteration.

Angst und Hass in DevSecOps

Der Übergang zu DevSecOps

Das wichtigste Wort im Security Development Lifecycle ist „Prozess“. Sie sollten das verstehen, bevor Sie darĂŒber nachdenken, Werkzeuge zu kaufen.

Es reicht nicht aus, Werkzeuge einfach in den DevOps-Prozess einzufĂŒgen – wichtig ist die Interaktion und das VerstĂ€ndnis zwischen den Beteiligten.

Menschen sind wichtiger als Werkzeuge

HĂ€ufig beginnt die Planung eines sicheren Entwicklungsprozesses mit der Auswahl und dem Kauf eines Werkzeugs, und endet mit dem Versuch, das Werkzeug in den bestehenden Prozess zu integrieren, was hĂ€ufig nicht gelingt. Das fĂŒhrt zu unerfreulichen Ergebnissen, da jedes Werkzeug seine eigenen Besonderheiten und EinschrĂ€nkungen hat.

Ein hĂ€ufiges Szenario ist, dass die Sicherheitsabteilung ein gutes, teures Tool mit umfangreichen Funktionen auswĂ€hlt und dann zu den Entwicklern kommt, um es im Prozess zu integrieren. Doch das funktioniert nicht – der Prozess ist so gestaltet, dass die EinschrĂ€nkungen des bereits gekauften Tools nicht in das aktuelle Paradigma passen.

Beginnen Sie damit, das gewĂŒnschte Ergebnis und den Ablauf des Prozesses zu beschreiben. Dies hilft, die Rollen des Tools und der Sicherheit im Prozess klarzustellen.

Starten Sie mit dem, was bereits verwendet wird.

Bevor Sie teure Tools kaufen, schauen Sie sich an, was Sie bereits haben. Jedes Unternehmen hat Sicherheitsanforderungen, die an die Entwicklung gestellt werden, sowie PrĂŒfungen und Penetrationstests – warum nicht alles in eine verstĂ€ndliche und fĂŒr alle nĂŒtzliche Form bringen?

In der Regel sind Anforderungen ein Papierdokument, das im Regal steht. Es gab einen Fall, in dem wir in ein Unternehmen kamen, um die Prozesse zu betrachten, und nach den Sicherheitsanforderungen fĂŒr die Software fragten. Der zustĂ€ndige Spezialist suchte lange:

— Moment, irgendwo in meinen Notizen war der Weg, wo dieses Dokument aufbewahrt wird.

Letztendlich erhielten wir das Dokument nach einer Woche.

FĂŒr Anforderungen, PrĂŒfungen und Ähnliches erstellen Sie beispielsweise eine Seite auf Confluence — das ist fĂŒr alle praktisch.

Es ist einfacher, das Vorhandene umzustrukturieren und als Ausgangspunkt zu nutzen.

Nutzen Sie Security Champions

In der Regel gibt es in einem durchschnittlichen Unternehmen mit 100-200 Entwicklern einen Sicherheitsexperten, der mehrere Funktionen ausĂŒbt und physisch nicht in der Lage ist, alles zu ĂŒberprĂŒfen. Selbst wenn er sein Bestes gibt, kann er nicht den gesamten Code ĂŒberprĂŒfen, den die Entwickler generieren. FĂŒr solche FĂ€lle wurde das Konzept entwickelt — Security Champions.

Security Champions sind Personen innerhalb des Entwicklungsteams, die sich fĂŒr die Sicherheit Ihres Produkts einsetzen.

Angst und Hass in DevSecOps

Ein Security Champion ist der Ansprechpartner im Entwicklungsteam und ein Sicherheitsevangelist in einer Person.

Normalerweise, wenn ein Sicherheitsexperte in ein Entwicklungsteam kommt und auf einen Fehler im Code hinweist, erhÀlt er erstaunte Antworten:

— Und wer sind Sie? Ich sehe Sie zum ersten Mal. Bei mir ist alles in Ordnung — mein Mentor hat bei der Code-ÜberprĂŒfung "apply" gesetzt, wir machen weiter!

Das ist eine typische Situation, denn die Entwickler haben viel mehr Vertrauen in ihre unmittelbaren Kollegen oder Vorgesetzten, mit denen sie stĂ€ndig in Kontakt stehen und Code-Reviews durchfĂŒhren. Wenn anstelle des Sicherheitsexperten ein Security Champion auf einen Fehler und seine Konsequenzen hinweist, hat dessen Wort mehr Gewicht.

Zudem kennen Entwickler ihren Code besser als jeder Sicherheitsexperte. FĂŒr jemanden, der in der Regel an mindestens fĂŒnf Projekten in einem statischen Analysewerkzeug arbeitet, ist es oft schwierig, sich an alle Details zu erinnern. Security Champions hingegen kennen ihr Produkt: Sie wissen, wie die verschiedenen Komponenten interagieren und worauf sie zuerst achten mĂŒssen – sie sind effizienter.

Denken Sie darĂŒber nach, Security Champions einzufĂŒhren und den Einfluss Ihres Sicherheitsteams zu erweitern. Es ist auch fĂŒr den Champion selbst von Vorteil: berufliche Weiterentwicklung in einem neuen Bereich, Erweiterung des technischen Horizonts, Verbesserung technischer, organisatorischer und FĂŒhrungsfĂ€higkeiten sowie Steigerung des Marktwerts. Es ist eine Art soziale Ingenieurskunst, Ihre 'Augen' im Entwicklungsteam.

Testphasen

Paradigma 20 zu 80 sagt, dass 20% des Aufwands 80% des Ergebnisses bringen. Diese 20% sind Praktiken der Analyse von Anwendungen, die automatisiert werden können und sollten. Beispiele fĂŒr solche AktivitĂ€ten sind statische Analyse — SAST, dynamische Analyse — DAST, und Kontrolle von Open Source. Ich werde nĂ€her auf die AktivitĂ€ten eingehen und auch auf die Werkzeuge, welche Besonderheiten wir normalerweise bei deren Implementierung im Prozess berĂŒcksichtigen und wie man dies richtig umsetzt.

Angst und Hass in DevSecOps

Wesentliche Probleme der Werkzeuge

Ich werde die fĂŒr alle Werkzeuge relevanten Probleme herausstellen, die Aufmerksamkeit erfordern. Ich werde sie im Detail erlĂ€utern, um Wiederholungen zu vermeiden.

Lange Analysezeiten. Wenn von der Commits bis zur Production 30 Minuten fĂŒr alle Tests und den Build benötigt werden, wird die ÜberprĂŒfung der Informationssicherheit einen Tag in Anspruch nehmen. Niemand möchte den Prozess dadurch verlangsamen. BerĂŒcksichtigen Sie dieses Merkmal und ziehen Sie Ihre SchlĂŒsse.

Hoher Anteil an False Negatives oder False Positives. Alle Produkte sind unterschiedlich, alle verwenden unterschiedliche Frameworks und ihren eigenen Schreibstil. Je nach Codebasis und Technologien können die Werkzeuge unterschiedliche Werte fĂŒr False Negatives und False Positives anzeigen. Daher sollten Sie darauf achten, was genau in Ihrem Unternehmen und fĂŒr Ihre Anwendungen werden gute und zuverlĂ€ssige Ergebnisse zeigen.

Keine Integrationen mit bestehenden Tools.. Betrachten Sie Tools aus der Perspektive der Integrationen mit dem, was Sie bereits verwenden. Wenn Sie beispielsweise Jenkins oder TeamCity haben, ĂŒberprĂŒfen Sie die Integration der Tools genau mit dieser Software und nicht mit GitLab CI, das Sie nicht verwenden.

Fehlende oder ĂŒbermĂ€ĂŸig komplexe Anpassungsmöglichkeiten. Wenn das Tool keine API hat, wozu ist es dann gut? Alles, was im Interface möglich ist, sollte auch ĂŒber die API zugĂ€nglich sein. Idealerweise sollte das Tool die Möglichkeit zur Anpassung von PrĂŒfungen bieten.

Kein Entwicklungs-Roadmap fĂŒr das Produkt. Die Entwicklung steht nicht still; wir nutzen stĂ€ndig neue Frameworks und Funktionen, ĂŒberarbeiten alten Code in neue Programmiersprachen. Wir möchten sicherstellen, dass das Tool, das wir kaufen, neue Frameworks und Technologien unterstĂŒtzt. Daher ist es wichtig zu wissen, dass das Produkt einen echten und klaren Roadmap der Entwicklung hat.

Besonderheiten des Prozesses.

BerĂŒcksichtigen Sie neben den Funktionen der Werkzeuge auch die Besonderheiten des Entwicklungsprozesses. Ein typischer Fehler ist, die Entwicklung zu stören. Lassen Sie uns betrachten, welche weiteren Besonderheiten zu beachten sind und worauf das Sicherheitsteam achten sollte.

Um Termine fĂŒr Entwicklung und Release nicht zu gefĂ€hrden, erstellen Sie verschiedene Regeln und verschiedene Showstoppers — Kriterien, die den Prozess der Zusammenstellung bei Vorhandensein von Schwachstellen stoppen — fĂŒr verschiedene Umgebungen.Zum Beispiel verstehen wir, dass der aktuelle Branch in die Entwicklungsumgebung oder UAT geht, daher stoppen wir nicht und sagen nicht:

— Sie haben hier Schwachstellen, Sie kommen nicht weiter!

An dieser Stelle ist es wichtig, den Entwicklern zu sagen, dass es Sicherheitsprobleme gibt, auf die sie achten sollten.

Das Vorhandensein von Schwachstellen ist kein Hindernis fĂŒr weitere Tests: ob manuelle, Integration oder manuelle Tests. Auf der anderen Seite mĂŒssen wir die Sicherheit des Produkts irgendwie erhöhen, und wir möchten nicht, dass die Entwickler ignorieren, was die Sicherheitsteams finden. Daher gehen wir manchmal folgendermaßen vor: Wenn auf dem Stand, wenn wir in die Entwicklungsumgebung ausrollen, benachrichtigen wir einfach die Entwicklung:

— Bitte, falls Sie Probleme haben, achten Sie darauf.

In der UAT-Phase zeigen wir wieder Warnungen zu SicherheitsanfÀlligkeiten, und in der Produktionsphase sagen wir:

— Wir haben Sie bereits mehrmals gewarnt, Sie haben nichts unternommen – damit werden wir Sie nicht freigeben.

Wenn es um Code und Dynamik geht, sollten wir nur ĂŒber SicherheitsanfĂ€lligkeiten der Funktionen und des Codes informieren, die gerade in dieser Funktion geschrieben wurden. Wenn ein Entwickler einen Button um 3 Pixel verschoben hat und wir ihm mitteilen, dass er eine SQL-Injektion hat, die dringend behoben werden muss – das ist nicht richtig. Schauen Sie sich nur an, was jetzt geschrieben wurde, und die Änderungen, die in die Anwendung kommen.

Nehmen wir an, wir haben einen funktionalen Defekt – etwas, das die Anwendung nicht korrekt macht: Geld wird nicht ĂŒberwiesen, beim Klicken auf einen Button wird nicht zur nĂ€chsten Seite navigiert oder das Produkt wird nicht geladen. Sicherheitsdefekte – sind ebenso Defekte, jedoch nicht im Hinblick auf die Funktion der Anwendung, sondern auf die Sicherheit.

Nicht alle Probleme der SoftwarequalitÀt sind Sicherheitsprobleme. Aber alle Sicherheitsprobleme hÀngen mit der SoftwarequalitÀt zusammen. Sherif Mansour, Expedia.

Da alle SicherheitslĂŒcken ebenso wie andere Fehler betrachtet werden, sollten sie dort sein, wo auch alle Entwicklungsfehler zu finden sind. Vergessen Sie also Berichte und gruselige PDFs, die niemand liest.

Angst und Hass in DevSecOps

Als ich fĂŒr ein Softwareentwicklungsunternehmen tĂ€tig war, erhielt ich einen Bericht von den statischen Analysetools. Ich öffnete ihn, war entsetzt, machte mir einen Kaffee, blĂ€tterte durch 350 Seiten, schloss ihn und machte mit meiner Arbeit weiter. Umfangreiche Berichte sind tote Berichte.Normalerweise verschwinden sie irgendwo, E-Mails werden gelöscht, vergessen, verlieren sich oder das Unternehmen sagt, es akzeptiere die Risiken.

Was tun? Die bestĂ€tigten Fehler, die gefunden wurden, wandeln wir einfach in ein entwicklerfreundliches Format um, indem wir sie zum Beispiel in den Backlog in Jira einfĂŒgen. Wir priorisieren die Fehler und beheben sie der Rangfolge nach, ebenso wie funktionale Fehler und Testfehler.

Statische Analyse – SAST

Dies ist eine Analyse des Codes auf SicherheitsanfĂ€lligkeiten, aber es ist nicht dasselbe wie SonarQube. Wir ĂŒberprĂŒfen nicht nur anhand von Mustern oder Stilen. Bei der Analyse kommen verschiedene AnsĂ€tze zur Anwendung: anhand des Schwachstellenschemas, basierend auf DataFlow, sowie durch die Analyse von Konfigurationsdateien. Dies betrifft alles, was direkt mit dem Code zu tun hat.

Vorteile des Ansatzes: Identifikation von Schwachstellen im Code in einer frĂŒhen Entwicklungsphase, wenn es noch keine StĂ€nde und kein fertiges Tool gibt, und die Möglichkeit des inkrementellen Scannens: Scannen des Codeabschnitts, der sich geĂ€ndert hat, und nur der Funktion, an der wir gerade arbeiten, was die Scandauer verkĂŒrzt.

Nachteile — es fehlt die UnterstĂŒtzung fĂŒr die erforderlichen Programmiersprachen.

Notwendige Integrationen, die meiner subjektiven Meinung nach in den Tools vorhanden sein sollten:

  • Integrationswerkzeuge: Jenkins, TeamCity und Gitlab CI.
  • Entwicklungsumgebung: IntelliJ IDEA, Visual Studio. Es ist fĂŒr den Entwickler bequemer, nicht in eine unverstĂ€ndliche OberflĂ€che, die zusĂ€tzlich zu merken ist, zu navigieren, sondern direkt an seinem Arbeitsplatz in seiner eigenen Entwicklungsumgebung alle notwendigen Integrationen und die gefundenen Schwachstellen zu sehen.
  • Code-Review: SonarQube und manuelle ÜberprĂŒfung.
  • Fehlerverfolgungssysteme: Jira und Bugzilla.

Auf dem Bild sind einige der besten Vertreter der statischen Analyse zu sehen.

Angst und Hass in DevSecOps

Wichtig sind nicht die Werkzeuge, sondern der Prozess, daher gibt es Open-Source-Lösungen, die ebenfalls gut geeignet sind, um den Prozess zu erproben.

Angst und Hass in DevSecOps

SAST Open Source wird zwar nicht eine Vielzahl von Schwachstellen oder komplexe DatenflĂŒsse finden, aber bei der Entwicklung des Prozesses können sie sinnvoll eingesetzt werden. Sie helfen zu verstehen, wie der Prozess aufgebaut wird, wer fĂŒr Bugs verantwortlich ist, wer sie meldet und wer darĂŒber Bericht erstattet. Wenn Sie den ersten Schritt zur Sicherstellung der Sicherheit Ihres Codes gehen möchten, nutzen Sie Open Source Lösungen.

Wie lÀsst sich das integrieren, wenn Sie am Anfang stehen und nichts haben: kein CI, keinen Jenkins, kein TeamCity? Lassen Sie uns die Integrationen in den Prozess betrachten.

Integration auf CVS-Ebene

Wenn Sie Bitbucket oder GitLab haben, kann eine Integration auf dieser Ebene erfolgen. Concurrent Versions System.

Nach Ereignis – Pull-Request, Commit. Sie scannen den Code und zeigen im Build-Status an, ob der Sicherheitstest bestanden wurde oder nicht.

Feedback. NatĂŒrlich ist Feedback immer notwendig. Wenn Sie lediglich etwas im Bereich Sicherheit durchgefĂŒhrt haben, es in eine Box gelegt und niemandem davon erzĂ€hlt haben, und dann am Ende des Monats eine Menge Bugs auftauchen, ist das nicht richtig und auch nicht gut.

Integration mit dem Code-Review-System

Einmal haben wir in einer Reihe wichtiger Projekte den technischen Benutzer AppSec als standardmĂ€ĂŸigen Reviewer eingesetzt. Je nachdem, ob Fehler im neuen Code entdeckt werden oder nicht, setzt der Reviewer im Pull-Request den Status auf "akzeptiert" oder "muss ĂŒberarbeitet werden" – entweder alles in Ordnung oder es muss nachgebessert werden mit Hinweisen, was genau verbessert werden sollte. FĂŒr die Integration mit der Version, die in Produktion geht, haben wir das Merge-Verbot aktiviert, wenn der Sicherheitstest nicht bestanden ist. Dies haben wir in das manuelle Code-Review eingebaut, und die anderen Teilnehmer des Prozesses konnten die Sicherheitsstatus fĂŒr diesen spezifischen Prozess einsehen.

Integration mit SonarQube

Viele haben QualitĂ€tsschwellen fĂŒr die QualitĂ€t des Codes. Hier ist es dasselbe – man kann die gleichen Schwellen nur fĂŒr SAST-Tools erstellen. Es wird die gleiche Schnittstelle sein, die gleiche QualitĂ€tsschwelle, nur wird sie Sicherheitsschwellegenannt. Und wenn Sie einen Prozess mit SonarQube eingerichtet haben, können Sie alles ganz einfach integrieren.

Integration auf CI-Ebene

Hier ist auch alles recht einfach:

  • Auf derselben Ebene wie die automatisierten Tests, Unit-Tests.
  • Aufteilung nach Entwicklungsphasen: dev, test, prod. Verschiedene Regelsets oder unterschiedliche Fehlermeldungen können aktiviert werden: Wir stoppen den Build oder wir stoppen ihn nicht.
  • Synchroner/Asynchroner Start. Wir warten auf den Abschluss der SicherheitsĂŒberprĂŒfungen oder wir warten nicht. Das heißt, wir haben sie einfach gestartet und machen weiter, und spĂ€ter erhalten wir den Status, dass alles gut oder schlecht ist.

Das alles ist in einer idealen, rosaroten Welt. In der realen Welt gibt es das nicht, aber wir streben danach. Das Ergebnis der SicherheitsĂŒberprĂŒfungen sollte mit den Ergebnissen der Unit-Tests vergleichbar sein.

Zum Beispiel haben wir ein großes Projekt genommen und entschieden, dass wir es jetzt mit SAST scannen werden – in Ordnung. Wir haben dieses Projekt in SAST geladen und es hat uns 20.000 Schwachstellen ausgegeben, und durch eine willentliche Entscheidung haben wir angenommen, dass alles gut ist. 20.000 Schwachstellen sind unsere technische Schuld. Diese Schuld stecken wir in eine Box, und wir werden sie nach und nach abarbeiten und Bugs in die Fehlerverfolgung einpflegen. Wir stellen eine Firma ein, machen alles selbst oder bekommen UnterstĂŒtzung von Security Champions – und die technische Schuld wird abnehmen.

Alle neu auftretenden Schwachstellen im neuen Code mĂŒssen ebenso behoben werden wie Fehler in Unit- oder Autotests. Wenn die Build lĂ€uft, werden zwei Tests und zwei Sicherheitstests durchgefĂŒhrt. In Ordnung – wir schauen uns an, was passiert ist, korrigieren das eine und das andere, beim nĂ€chsten Mal lĂ€uft alles gut, keine neuen Schwachstellen und alle Tests bestehen. Wenn die Aufgabe komplexer ist und eine tiefere Analyse erfordert, oder wenn die Behebung von Schwachstellen große Teile des zugrundeliegenden Systems betrifft, wird ein Bug im Fehlertracker erstellt, priorisiert und behoben. Leider ist die Welt nicht perfekt und Tests fallen manchmal aus.

Beispiel fĂŒr ein Security Gate – analog zum Quality Gate, basierend auf der Anzahl und Art der Schwachstellen im Code.

Angst und Hass in DevSecOpsIntegration mit SonarQube – das Plugin wird installiert, alles ist sehr praktisch und funktioniert hervorragend.

Integration mit der Entwicklungsumgebung

Integrationsmöglichkeiten:

  • Start des Scanvorgangs aus der Entwicklungsumgebung noch vor dem Commit.
  • ÜberprĂŒfung der Ergebnisse.
  • Analyse der Ergebnisse.
  • Synchronisation mit dem Server.

So sieht die Ergebniserfassung vom Server aus.

Angst und Hass in DevSecOps

In unserer Entwicklungsumgebung Intellij IDEA Es wird einfach ein zusĂ€tzlicher Punkt angezeigt, der mitteilt, dass wĂ€hrend des Scannens bestimmte Schwachstellen gefunden wurden. Man kann sofort den Code korrigieren, Empfehlungen einsehen und Flow Graph. All dies ist am Arbeitsplatz des Entwicklers angeordnet, was sehr praktisch ist – man muss nicht durch andere Links navigieren und etwas zusĂ€tzlich ĂŒberprĂŒfen.

Open Source

Das ist mein Lieblingsthema. Alle nutzen Open-Source-Bibliotheken – warum sollte man eine Menge von Hacks und selbstgebauten Lösungen schreiben, wenn man eine fertige Bibliothek verwenden kann, in der alles bereits umgesetzt ist?

Angst und Hass in DevSecOps

NatĂŒrlich ist das so, aber Bibliotheken werden auch von Menschen geschrieben, enthalten bestimmte Risiken und haben ebenfalls Schwachstellen, ĂŒber die gelegentlich oder stĂ€ndig berichtet wird. Daher gibt es den nĂ€chsten Schritt in der Anwendungssicherheit – die Analyse von Open-Source-Komponenten.

Open Source Analyse – OSA

Das Tool umfasst drei große Phasen.

Suche nach Schwachstellen in den Bibliotheken. Zum Beispiel weiß das Tool, dass wir eine bestimmte Bibliothek verwenden und dass in CVE Oder es gibt in Bugtrackern irgendwelche Schwachstellen, die zu dieser Version der Bibliothek gehören. Bei dem Versuch, sie zu verwenden, gibt das Tool eine Warnung aus, dass die Bibliothek anfĂ€llig ist, und empfiehlt, eine andere Version zu verwenden, in der keine Schwachstellen vorhanden sind.

Analyse der LizenzkonformitĂ€t. Bei uns ist das bisher nicht besonders populĂ€r, aber wenn Sie mit dem Ausland arbeiten, kann es dort gelegentlich zu Problemen kommen, wenn Sie Komponenten mit offenem Quellcode verwenden, die Sie nicht nutzen oder modifizieren dĂŒrfen. GemĂ€ĂŸ der Lizenzpolitik der Bibliothek dĂŒrfen wir das nicht tun. Oder, wenn wir sie modifiziert haben und verwenden, mĂŒssen wir unseren Code veröffentlichen. NatĂŒrlich möchte niemand den Code seiner Produkte veröffentlichen, aber es gibt Möglichkeiten, sich auch davor zu schĂŒtzen.

Analyse von Komponenten, die in der Industrie genutzt werden. Stellen Sie sich vor, wir haben endlich die Entwicklung abgeschlossen und die letzte Version unseres Mikrodienstes produktiv veröffentlicht. Er lĂ€uft dort hervorragend – eine Woche, einen Monat, ein Jahr. Wir fĂŒhren keine ZusammenfĂŒhrungen durch, keine SicherheitsprĂŒfungen, scheinbar ist alles gut. Doch plötzlich, zwei Wochen nach der Veröffentlichung, tritt eine kritische Schwachstelle in der Open-Source-Komponente auf, die wir genau in dieser Version in der Produktionsumgebung verwenden. Wenn wir nicht dokumentieren, was und wo wir verwenden, werden wir diese Schwachstelle einfach nicht bemerken. Einige Tools bieten die Möglichkeit, Schwachstellen in den Bibliotheken zu ĂŒberwachen, die derzeit in der Produktion genutzt werden. Das ist sehr nĂŒtzlich.

Möglichkeiten:

  • Verschiedene Richtlinien fĂŒr verschiedene Entwicklungsphasen.
  • Überwachung von Komponenten in der Produktionsumgebung.
  • Kontrolle von Bibliotheken im Unternehmensnetzwerk.
  • UnterstĂŒtzung verschiedener Build-Systeme und Programmiersprachen.
  • Analyse von Docker-Images.

Einige Beispiele fĂŒr fĂŒhrende Unternehmen, die Open-Source-Analyse betreiben.

Angst und Hass in DevSecOps
Der einzige kostenlose unter ihnen ist Dependency-Check von OWASP. Es kann in den frĂŒhen Phasen aktiviert werden, um zu sehen, wie es funktioniert und was es unterstĂŒtzt. GrundsĂ€tzlich handelt es sich um Cloud-Produkte oder On-Premise-Lösungen, aber selbst mit ihrer Basis werden sie dennoch ins Internet gesendet. Sie senden nicht Ihre Bibliotheken, sondern Hashes oder eigene Werte, die berechnet werden, sowie FingerabdrĂŒcke an ihren Server, um Informationen ĂŒber vorhandene SicherheitslĂŒcken zu erhalten.

Integration in den Prozess

Kontrolle der Bibliotheken im Perimeter, die aus externen Quellen heruntergeladen werden. Wir haben externe und interne Repositories. Zum Beispiel lĂ€uft innerhalb von Event Central Nexus, und wir möchten sicherstellen, dass innerhalb unseres Repositories keine SicherheitslĂŒcken mit dem Status 'kritisch' oder 'hoch' vorhanden sind. Es ist möglich, das Proxieren mithilfe des Nexus Firewall Lifecycle-Tools so einzurichten, dass solche SicherheitslĂŒcken blockiert und nicht ins interne Repository gelangen.

Integration in CI. Auf der gleichen Ebene wie Auto-Tests, Unit-Tests und Phasentrennung: dev, test, prod. In jeder Phase können beliebige Bibliotheken heruntergeladen und verwendet werden. Wenn jedoch etwas Kritisches mit dem Status „critical“ vorhanden ist, sollten die Entwickler möglicherweise darauf achten, bevor es in die Produktion geht.

Integration mit Artefakt-Repositorys: Nexus und JFrog.

Integration in die Entwicklungsumgebung. Die Tools, die Sie wĂ€hlen, sollten eine Integration mit Entwicklungsumgebungen haben. Der Entwickler sollte von seinem Arbeitsplatz aus Zugriff auf die Scannergebnisse haben oder die Möglichkeit, den Code selbst auf Schwachstellen zu ĂŒberprĂŒfen, bevor er ihn in das CVS committet.

Integration in CD. Das ist eine tolle Funktion, die ich sehr mag und ĂŒber die ich bereits gesprochen habe – die Überwachung neuer Schwachstellen in der Produktionsumgebung. So funktioniert es.

Angst und Hass in DevSecOps

Wir haben Öffentliche Komponenten-Repositorys — einige Werkzeuge von außen und unser internes Repository. Wir möchten, dass dort nur vertrauenswĂŒrdige Komponenten vorhanden sind. Bei der Proxy-Anfrage ĂŒberprĂŒfen wir, dass die heruntergeladene Bibliothek keine SicherheitsanfĂ€lligkeiten aufweist. Wenn sie unter bestimmte von uns festgelegte Richtlinien fĂ€llt, die wir unbedingt mit der Entwicklung abstimmen, wird sie nicht heruntergeladen und es erfolgt eine RĂŒckmeldung zur Verwendung einer anderen Version. Wenn die Bibliothek also tatsĂ€chlich etwas Kritisches und Schlechtes enthĂ€lt, erhĂ€lt der Entwickler bereits beim Installationsschritt nicht die Bibliothek – er muss eine höhere oder niedrigere Version verwenden.

  • Bei jedem Build ĂŒberprĂŒfen wir, dass niemand etwas Schlechtes geschmuggelt hat, dass alle Komponenten sicher sind und niemand etwas GefĂ€hrliches auf einem USB-Stick mitgebracht hat.
  • In unserem Repository befinden sich nur vertrauenswĂŒrdige Komponenten.
  • Bei der Bereitstellung prĂŒfen wir erneut das Paket: war, jar, DL oder das Docker-Image, ob es den Richtlinien entspricht.
  • Bei der MarkteinfĂŒhrung ĂŒberwachen wir, was in der Produktionsumgebung passiert: ob kritische SicherheitsanfĂ€lligkeiten auftauchen oder nicht.

Dynamische Analyse – DAST

Dynamische Analysetools unterscheiden sich grundlegend von allem, was zuvor gesagt wurde. Sie simulieren die Benutzerinteraktion mit der Anwendung. Bei einer Webanwendung senden wir Anfragen, die das Handeln eines Nutzers nachahmen, klicken auf Buttons und ĂŒbermitteln fiktive Daten aus einem Formular: AnfĂŒhrungszeichen, Klammern, Zeichen in verschiedenen Kodierungen, um zu beobachten, wie die Anwendung funktioniert und externe Daten verarbeitet.

Das gleiche System ermöglicht es, gĂ€ngige SicherheitsanfĂ€lligkeiten in Open Source zu ĂŒberprĂŒfen. Da DAST nicht weiß, welche Open Source Software wir verwenden, schickt es einfach 'schadhafte' Muster und analysiert die Antworten des Servers:

— Aha, hier gibt es ein Deserialisierungsproblem, hier nicht.

Das birgt erhebliche Risiken, denn wenn Sie diesen Sicherheitstest auf demselben Stand durchfĂŒhren, mit dem die Tester arbeiten, können unangenehme Dinge passieren.

  • Hohe Belastung der Netzwerkserveranwendung.
  • Keine Integrationen.
  • Möglichkeit zur Anpassung der Einstellungen der zu analysierenden Anwendung.
  • Keine UnterstĂŒtzung der erforderlichen Technologien.
  • KomplexitĂ€t der Konfiguration.

Wir hatten eine Situation, in der wir endlich AppScan gestartet haben: Wir haben lange um den Zugang zur Anwendung gekĂ€mpft, drei Konten erhalten und waren begeistert – endlich konnten wir alles ĂŒberprĂŒfen! Wir haben den Scan gestartet und das Erste, was AppScan tat, war, in das AdministrationsmenĂŒ zu gehen, alle SchaltflĂ€chen zu drĂŒcken, die hĂ€lften der Daten zu Ă€ndern und schließlich den Server mit seinen-mailform-Anfragen zu killen. mailform-Anfragen. Die Entwicklung mit dem Testing sagte:

– Leute, macht ihr Witze?! Wir haben euch die Konten gegeben, und ihr habt die Testumgebung kaputtgemacht!

BerĂŒcksichtigen Sie mögliche Risiken. Idealerweise sollte eine separate Testumgebung fĂŒr die IT-Sicherheit vorbereitet werden, die zumindest irgendwie vom restlichen Umfeld isoliert ist, und das ÜberprĂŒfen des Administrators sollte idealerweise manuell erfolgen. Dies ist ein Pen-Test – die verbleibenden ProzentsĂ€tze an Aufwand, die wir jetzt nicht betrachten.

Es ist zu beachten, dass man dies als eine Art Lasttest verwenden kann. In der ersten Phase kann man den dynamischen Scanner mit 10-15 Threads aktivieren und schauen, was passiert, aber normalerweise, wie die Praxis zeigt, kommt nichts Gutes dabei heraus.

Einige Ressourcen, die wir normalerweise verwenden.

Angst und Hass in DevSecOps

Es ist erwĂ€hnenswert Burp Suite — ist das „Schweizer Taschenmesser“ fĂŒr jeden Sicherheitsspezialisten. Es wird von allen verwendet und ist sehr benutzerfreundlich. Jetzt ist eine neue Demoversion der Enterprise Edition erschienen. FrĂŒher war es nur ein Standalone-Tool mit Plugins, jetzt entwickeln die Entwickler endlich einen großen Server, von dem aus mehrere Agenten verwaltet werden können. Das ist großartig, ich empfehle es auszuprobieren.

Integration in den Prozess

Die Integration funktioniert ausreichend gut und einfach: Start des Scans nach erfolgreicher Installation der Anwendung auf dem Stand und Scan nach erfolgreichem Abschluss der Integrationstests.

Wenn die Integrationen nicht funktionieren oder Platzhalter und Mock-Funktionen vorhanden sind, ist es sinnlos und nutzlos – egal welches Muster wir senden, der Server wird trotzdem identisch antworten.

  • Idealerweise ist ein separater Stand fĂŒr Tests erforderlich.
  • Notieren Sie sich die Anmeldereihenfolge vor Beginn der Tests.
  • Das Testen des Administrationssystems erfolgt ausschließlich manuell.

Prozess

Ein allgemeiner Überblick ĂŒber den Prozess und die Funktionsweise jedes einzelnen Werkzeugs. Jedes Tool ist unterschiedlich – bei dem einen funktioniert die dynamische Analyse besser, beim anderen die statische, bei einem dritten die Open-Source-Analyse, Penetrationstests oder etwas ganz anderes, wie zum Beispiel Ereignisse. WAF.

Jeder Prozess benötigt Kontrolle.

Um zu verstehen, wie der Prozess funktioniert und wo Verbesserungen möglich sind, mĂŒssen Metriken aus allen erreichbaren Bereichen gesammelt werden, einschließlich Produktionsmetriken, Metriken aus den Werkzeugen und aus Defekt-Trackern.

Jede Art von Daten ist nĂŒtzlich. Man sollte die verschiedenen Perspektiven betrachten, um zu sehen, wo ein bestimmtes Werkzeug am besten eingesetzt wird und wo der Prozess konkret schwĂ€chelt. Vielleicht sollte man auch die Reaktionszeit der Entwicklung betrachten, um herauszufinden, wo der Prozess zeitlich optimiert werden kann. Je mehr Daten vorhanden sind, desto mehr Perspektiven können von oberen Ebenen bis zu den Details jedes Prozesses aufgebaut werden.

Angst und Hass in DevSecOps

Da alle statischen und dynamischen Analysatoren ihre eigenen APIs, ihre eigenen AusfĂŒhrungsarten und Prinzipien haben – einige haben Scheduler, andere nicht – erstellen wir ein Tool. AppSec Orchestrator, die einen einheitlichen Zugang zu allen Prozessen ermöglicht und die Verwaltung von einem einzigen Punkt aus erlaubt.

FĂŒr Manager, Entwickler und Sicherheitsingenieure gibt es einen zentralen Zugang, von dem aus sie sehen können, was lĂ€uft, Einstellungen vornehmen und Scans starten, die Scan-Ergebnisse abrufen und Anforderungen einreichen können. Wir versuchen, von Papierkram wegzukommen und alles in ein verstĂ€ndliches Format zu ĂŒbertragen, das die Entwicklung nutzt – Seiten auf Confluence mit Status und Metriken, Defekte in Jira oder in verschiedenen Fehlerverfolgungssystemen, oder durch Integration in den synchronen/asynchronen Prozess im CI/CD.

Wichtige Erkenntnisse

Werkzeuge sind nicht alles. Zuerst den Prozess durchdenken – dann die Werkzeuge implementieren. Werkzeuge sind nĂŒtzlich, aber teuer, daher kann man mit dem Prozess beginnen und die Interaktion und das VerstĂ€ndnis zwischen Entwicklung und Sicherheit einrichten. Aus Sicht der Sicherheit ist es nicht notwendig, alles zu stoppen; aus Sicht der Entwicklung muss, wenn etwas hochgradig kritisch ist, es behoben werden, anstatt die Augen vor dem Problem zu schließen.

ProduktqualitÀt ist das gemeinsame Ziel. Wir konzentrieren uns sowohl auf Sicherheit als auch auf Entwicklung. Wir setzen alles daran, dass alles reibungslos funktioniert und es keine Reputationsrisiken oder finanziellen Verluste gibt. Deshalb fördern wir den Ansatz von DevSecOps und SecDevOps, um die Kommunikation zu verbessern und das Produkt qualitativ hochwertiger zu gestalten.

Starten Sie mit dem, was bereits vorhanden ist: Anforderungen, Architektur, TeilprĂŒfungen, Schulungen, Richtlinien. Es ist nicht notwendig, sofort alle Praktiken auf alle Projekte anzuwenden – bewegen Sie sich iterativ. Es gibt keinen einheitlichen Standard – experimentieren Sie und probieren Sie verschiedene AnsĂ€tze und Lösungen aus.

Zwischen Sicherheitsdefekten und funktionalen Defekten besteht ein Gleichheitszeichen..

Automatisieren Sie alles, was sich bewegt. Alles, was sich nicht bewegt – machen Sie es beweglich und automatisieren Sie es. Wenn etwas manuell erledigt wird, ist das kein guter Abschnitt des Prozesses. Vielleicht sollten Sie es ĂŒberdenken und auch automatisieren.

Wenn die GrĂ¶ĂŸe des Sicherheitsteams klein ist – nutzen Sie Security Champions..

Vielleicht ist das, was ich beschrieben habe, nicht fĂŒr Sie geeignet und Sie erfinden etwas Eigenes – und das ist gut. Aber wĂ€hlen Sie die Werkzeuge basierend auf den Anforderungen Ihres Prozesses.. Lassen Sie sich nicht von der Community beeinflussen, die sagt, dass dieses Tool schlecht und jenes gut ist. Möglicherweise sehen Sie in Ihrem Produkt alles anders herum.

Anforderungen an Tools.

  • Niedriges Niveau von False Positives.
  • Angemessene Analysezeit.
  • Benutzerfreundlichkeit.
  • VerfĂŒgbarkeit von Integrationen.
  • VerstĂ€ndnis des Produktentwicklungs-Roadmaps.
  • Möglichkeiten zur Anpassung von Tools.

Yuri's Vortrag wurde als einer der besten auf der DevOpsConf 2018 ausgewĂ€hlt. Um noch mehr interessante Ideen und praktische Fallstudien kennenzulernen, kommen Sie am 27. und 28. Mai nach Skolkovo zu DevOpsConf im Rahmen von dem RIT++ Festival. Noch besser, wenn Sie bereit sind, Ihre Erfahrungen zu teilen, dann reichen Sie Ihre Anmeldung ein fĂŒr den Vortrag bis zum 21. April.

Quelle: habr.com

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster