Wir hatten 2 Code-Analyzer, 4 Werkzeuge fĂŒr dynamisches Testen, eigene Bastelarbeiten und 250 Skripte. Es ist nicht so, dass das alles im aktuellen Prozess erforderlich war, aber wenn man erst einmal angefangen hat, DevSecOps einzufĂŒhren, muss man bis zum Ende gehen.

. Die Schöpfer der Charaktere: Justin Roiland und Dan Harmon.
Was ist SecDevOps? Und DevSecOps? Was sind die Unterschiede? Application Security â worum geht es dabei? Warum funktioniert der klassische Ansatz nicht mehr? Auf all diese Fragen weiĂ Yuri Shabalin aus Swordfish Security. Yuri wird ausfĂŒhrlich auf alles eingehen und die Herausforderungen des Ăbergangs von einem klassischen Modell der Application Security zu dem Prozess DevSecOps untersuchen: Wie man den Prozess der sicheren Softwareentwicklung richtig in den DevOps-Prozess integriert, ohne dabei etwas zu kaputtzumachen, wie man die Hauptphasen der Sicherheitstestung durchlĂ€uft, welche Werkzeuge anwendbar sind, wie sie sich unterscheiden und wie man sie richtig konfiguriert, um Fallstricke zu vermeiden.

Ăber den Sprecher: Yuri Shabalin ist Chief Security Architect bei der Swordfish Security. Er ist verantwortlich fĂŒr die EinfĂŒhrung von SSDL und die allgemeine Integration von Analysetools fĂŒr Anwendungen in ein einheitliches Entwicklungs- und Testökosystem. 7 Jahre Erfahrung in der Informationssicherheit. Er hat bei Alfa-Bank, Sberbank und bei Positive Technologies gearbeitet, die Software entwickelt und Dienstleistungen anbietet. Sprecher auf internationalen Konferenzen wie ZerONights, PHDays, RISSPA, OWASP.
Application Security: worum geht es dabei?
Application Security ist ein Bereich der Sicherheit, der fĂŒr die Sicherheit von Anwendungen verantwortlich ist. Es bezieht sich nicht auf Infrastruktur oder Netzwerksicherheit, sondern speziell auf das, was wir schreiben und woran Entwickler arbeiten â es geht um die Schwachstellen und Verwundbarkeiten der Anwendung selbst.
Richtung  â Security Development Lifecycle â wurde von Microsoft entwickelt. In der Abbildung ist das kanonische Modell des SDLC dargestellt, dessen Hauptziel es ist, die Sicherheit in jeder Phase der Entwicklung zu berĂŒcksichtigen, von Anforderungen bis hin zur Veröffentlichung und dem Produktionsstart. Microsoft hat erkannt, dass es im Produkt zu viele Bugs gibt, die Anzahl zunimmt und dagegen etwas unternommen werden muss, und hat diesen Ansatz vorgeschlagen, der kanonisch geworden ist.

Application Security und SSDL sind nicht darauf ausgerichtet, Schwachstellen zu entdecken, wie allgemein angenommen wird, sondern darauf, deren Auftreten zu verhindern. Mit der Zeit wurde der kanonische Ansatz von Microsoft verbessert und weiterentwickelt, und es entstand eine tiefere, detaillierte Auseinandersetzung damit.

Der kanonische SDLC ist in verschiedenen Methodologien stark detailliert â OpenSAMM, BSIMM, OWASP. Die Methodologien unterscheiden sich, sind jedoch insgesamt Ă€hnlich.
Building Security In Maturity Model
Am meisten liegt es mir am Herzen BSIMM â . Die Grundlage der Methodologie ist die Aufteilung des Prozesses der Anwendungssicherheit in 4 Bereiche: Governance, Intelligence, SSDL Touchpoints und Deployment. In jedem Bereich gibt es 12 Praktiken, die als 112 AktivitĂ€ten dargestellt werden.

Jede der 112 AktivitĂ€ten hat 3 Reifegrade: Einstieg, Mittelstufe und Fortgeschritten. Alle 12 Praktiken können nach Kapiteln studiert werden, um wichtige Aspekte fĂŒr Sie auszuwĂ€hlen, zu verstehen, wie sie implementiert werden, und schrittweise Elemente hinzuzufĂŒgen, wie statische und dynamische Codeanalyse oder Code-Review. Sie erstellen einen Plan und arbeiten ruhig im Rahmen der Implementierung der gewĂ€hlten AktivitĂ€ten.
Warum DevSecOps
DevOps ist ein umfassender Prozess, der auch Sicherheitsaspekte berĂŒcksichtigt.
UrsprĂŒnglich waren SicherheitsĂŒberprĂŒfungen vorgesehen. In der Praxis war die Anzahl der Sicherheitsteams jedoch viel geringer als heute, und sie traten nicht als Teilnehmer des Prozesses auf, sondern als Kontroll- und Aufsichtsbehörde, die Anforderungen stellt und die ProduktqualitĂ€t am Ende des Releases ĂŒberprĂŒft. Dies ist ein klassischer Ansatz, bei dem Sicherheitsteams von der Entwicklung abgeschottet waren und nicht am Prozess teilnahmen.

Das Hauptproblem besteht darin, dass die Informationssicherheit separat von der Entwicklung steht. Normalerweise handelt es sich um einen Sicherheitsrahmen mit 2â3 groĂen und teuren Werkzeugen. Alle sechs Monate wird der Quellcode oder die Anwendung zur ĂberprĂŒfung geliefert, und einmal im Jahr werden . Dies fĂŒhrt dazu, dass sich die Produktionsfristen verlĂ€ngern, wĂ€hrend auf die Entwickler eine enorme Anzahl von Schwachstellen aus automatisierten Mitteln hereinbricht. All dies ist nicht zu reparieren, weil die Ergebnisse der vorhergehenden sechs Monate noch nicht ausgearbeitet wurden und nun eine neue Charge kommt.
Im Laufe der Arbeit unseres Unternehmens sehen wir, dass Sicherheit in allen Bereichen und Branchen erkennt, dass es an der Zeit ist, aufzuholen und sich mit der Entwicklung im selben Rhythmus zu bewegen â in . Das Paradigma DevSecOps passt hervorragend zur Methodologie der agilen Entwicklung, zur Implementierung, UnterstĂŒtzung und Teilnahme an jedem Release und jeder Iteration.

Ăbergang zu DevSecOps
Das wichtigste Wort im Security Development Lifecycle ist âProzessâ. Sie mĂŒssen dies verstehen, bevor Sie an den Kauf von Werkzeugen denken.
Es reicht nicht aus, Werkzeuge in den DevOps-Prozess einzubeziehen â wichtig ist die Interaktion und das VerstĂ€ndnis zwischen den Beteiligten.
Wichtiger sind die Menschen, nicht die Werkzeuge.
Oft beginnt die Planung eines sicheren Entwicklungsprozesses mit der Auswahl und dem Kauf eines Werkzeugs und endet mit dem Versuch, das Werkzeug in den aktuellen Prozess zu integrieren, der oft nur ein Versuch bleibt. Das fĂŒhrt zu traurigen Konsequenzen, da jedes Werkzeug seine eigenen Besonderheiten und EinschrĂ€nkungen hat.
Ein hĂ€ufiger Fall ist, dass die Sicherheitsabteilung ein gutes, teures Werkzeug mit umfassenden Funktionen auswĂ€hlt und zu den Entwicklern kommt â um es in den Prozess einzubinden. Aber das klappt nicht â der Prozess ist so gestaltet, dass die EinschrĂ€nkungen des bereits gekauften Werkzeugs nicht in die aktuelle Paradigmen passen.
Beschreiben Sie zuerst, welches Ergebnis Sie wollen und wie der Prozess aussehen soll. Das hilft dabei, die Rollen des Werkzeugs und der Sicherheit im Prozess zu verstehen.
Beginnen Sie mit dem, was bereits verwendet wird.
Bevor Sie teure Werkzeuge kaufen, schauen Sie sich an, was Sie bereits haben. In jedem Unternehmen gibt es Sicherheitsanforderungen, die an die Entwicklung gestellt werden, es gibt PrĂŒfungen, Penetrationstests â warum nicht all dies in eine verstĂ€ndliche und fĂŒr alle nĂŒtzliche Form umwandeln?
In der Regel sind Anforderungen ein Papierdokument, das im Regal liegt. Es gab einen Fall, als wir in ein Unternehmen kamen, um die Prozesse zu betrachten, und baten, die Sicherheitsanforderungen fĂŒr die Software zu zeigen. Der Spezialist, der sich damit beschĂ€ftigte, suchte lange:
â Moment, irgendwo in meinen Notizen war ein Weg, wo dieses Dokument liegt.
Am Ende haben wir das Dokument nach einer Woche erhalten.
FĂŒr Anforderungen, PrĂŒfungen und anderes erstellen Sie eine Seite, zum Beispiel auf Confluence â das ist fĂŒr alle praktisch.
Es ist einfacher, das, was bereits existiert, umzuformatieren und fĂŒr den Start zu verwenden.
Nutzen Sie Security Champions.
In einem durchschnittlichen Unternehmen mit 100-200 Entwicklern arbeitet normalerweise ein Sicherheitsexperte, der mehrere Funktionen erfĂŒllt und physisch nicht alles prĂŒfen kann. Selbst wenn er sich groĂe MĂŒhe gibt â allein wird er nicht allen Code prĂŒfen können, den die Entwicklung generiert. FĂŒr solche FĂ€lle wurde das Konzept â .
Security Champions sind Personen im Entwicklungsteam, die an der Sicherheit Ihres Produkts interessiert sind.

Der Security Champion ist der Zugangspunkt zum Entwicklungsteam und ein Sicherheitsevangelist in einer Person.
Normalerweise, wenn ein Sicherheitsbeauftragter ins Entwicklungsteam kommt und auf einen Fehler im Code hinweist, erhÀlt er eine verwunderte Antwort:
â Wer sind Sie? Ich sehe Sie zum ersten Mal. Bei mir ist alles in Ordnung â mein Kollege hat bei der Code-ĂberprĂŒfung "apply" gegeben, wir machen weiter!
Das ist eine typische Situation, da Ă€ltere oder einfach nur Kollegen des Entwicklers, mit denen er stĂ€ndig bei der Arbeit und in der Code-ĂberprĂŒfung interagiert, viel mehr Vertrauen genieĂen. Wenn anstelle des Sicherheitsbeauftragten der Security Champion auf den Fehler und die Folgen hinweist, hat sein Wort mehr Gewicht.
Auch verstehen die Entwickler ihren Code besser als jeder Sicherheitsbeauftragte. FĂŒr jemanden, der mindestens 5 Projekte im statischen Analysetool hat, ist es normalerweise schwierig, sich an alle Nuancen zu erinnern. Security Champions kennen ihr Produkt: was mit was interagiert und worauf man zuerst achten sollte â sie sind effizienter.
Ăberlegen Sie also, Security Champions einzufĂŒhren und den Einfluss des Sicherheitsteams zu erweitern. Das ist auch fĂŒr den Champion selbst von Nutzen: berufliche Entwicklung in einem neuen Bereich, Erweiterung des technischen Horizonts, StĂ€rkung technischer, organisatorischer und FĂŒhrungsfĂ€higkeiten sowie Erhöhung des Marktwerts. Es ist eine Art soziale Ingenieurkunst, Ihre "Augen" im Entwicklungsteam.
Testphasen
 besagt, dass 20% der Anstrengungen 80% des Ergebnisses liefern. Diese 20% sind die Praktiken der Anwendung Analyse, die automatisiert werden können und sollten. Beispiele fĂŒr solche AktivitĂ€ten sind statische Analyse â SAST, dynamische Analyse â DAST, und Open Source Kontrolle. Ich werde nĂ€her auf die AktivitĂ€ten eingehen, sowie auf die Werkzeuge und die Besonderheiten, mit denen wir normalerweise bei ihrer Implementierung im Prozess konfrontiert sind, und wie man dies richtig macht.

Hauptprobleme der Werkzeuge
Ich werde die aktuellen Probleme aller Werkzeuge hervorheben, die Aufmerksamkeit erfordern. Ich werde diese detaillierter analysieren, um mich nicht weiter zu wiederholen.
Lange Analysezeit. Wenn es 30 Minuten von dem Commit bis zum Produktionsrelease fĂŒr alle Tests und den Build dauert, werden die ĂberprĂŒfungen auf Informationssicherheit einen Tag in Anspruch nehmen. Niemand wird den Prozess so aufhalten. BerĂŒcksichtigen Sie dieses Merkmal und ziehen Sie Ihre Schlussfolgerungen.
Hohe Rate von False Negatives oder False Positives. Alle Produkte sind unterschiedlich, sie verwenden verschiedene Frameworks und ihren eigenen Stil beim Schreiben von Code. Bei unterschiedlichen Codebasen und Technologien können die Werkzeuge unterschiedliche Raten von False Negatives und False Positives zeigen. Daher schauen Sie, was genau in Ihrem Unternehmen und fĂŒr Ihre Anwendungen gute und verlĂ€ssliche Ergebnisse liefert.
Keine Integrationen mit bestehenden Werkzeugen. Betrachten Sie die Werkzeuge aus der Perspektive der Integrationen, basierend auf dem, was Sie bereits verwenden. Wenn Sie beispielsweise Jenkins oder TeamCity haben, ĂŒberprĂŒfen Sie die Integration der Werkzeuge speziell mit dieser Software, nicht mit GitLab CI, das Sie nicht verwenden.
Fehlende oder ĂŒbermĂ€Ăige KomplexitĂ€t der Anpassung. Wenn ein Werkzeug keine API hat, wozu braucht man es dann? Alles, was im Interface möglich ist, sollte auch ĂŒber die API zugĂ€nglich sein. Ideal wĂ€re es, wenn das Werkzeug die Möglichkeit zur Anpassung der PrĂŒfungen bietet.
Kein Entwicklungsroadmap des Produkts. Die Entwicklung steht niemals still; wir nutzen stĂ€ndig neue Frameworks und Funktionen, und schreiben alten Code in neuen Sprachen um. Wir möchten sicher sein, dass das Werkzeug, das wir kaufen, neue Frameworks und Technologien unterstĂŒtzt. Daher ist es wichtig zu wissen, dass das Produkt eine reale und korrekte Entwicklung hat.
Besonderheiten des Prozesses
Neben den Eigenschaften der Werkzeuge sollten Sie auch die Besonderheiten des Entwicklungsprozesses berĂŒcksichtigen. Zum Beispiel ist es ein typischer Fehler, die Entwicklung zu stören. Lassen Sie uns sehen, welche weiteren Besonderheiten zu berĂŒcksichtigen sind und worauf das Sicherheitsteam achten sollte.
Um die Fristen fĂŒr die Entwicklung und den Release nicht zu gefĂ€hrden, erstellen Sie verschiedene Regeln und verschiedene Show Stopper â Kriterien fĂŒr den Stop des Build-Prozesses bei Vorhandensein von Schwachstellen â fĂŒr verschiedene Umgebungen. Zum Beispiel verstehen wir, dass der aktuelle Branch auf einem Entwicklungsstand oder UAT ist, daher halten wir nicht an und sagen nicht:
â Sie haben hier Schwachstellen, Sie kommen nicht weiter!
An diesem Punkt ist es wichtig, den Entwicklern zu sagen, dass es Sicherheitsprobleme gibt, auf die man achten sollte.
Vorhandensein von Schwachstellen ist kein Hindernis fĂŒr weitere Tests.: manuelles, integratives oder manuelles Testen. Auf der anderen Seite mĂŒssen wir irgendwie die Sicherheit des Produkts erhöhen, und die Entwickler sollten nicht ignorieren, was Sicherheit findet. Deshalb handeln wir manchmal so: Wenn wir eine neue Version fĂŒr die Entwicklungsumgebung bereitstellen, benachrichtigen wir einfach die Entwickler:
â Leute, ihr habt Probleme, bitte achtet darauf.
In der UAT-Phase zeigen wir erneut Warnungen ĂŒber Schwachstellen, und in der Produktionsphase sagen wir:
â Leute, wir haben euch mehrmals gewarnt, ihr habt nichts unternommen â damit lassen wir euch nicht raus.
Wenn es um Code und Dynamik geht, sollten wir nur die Schwachstellen der Features und des Codes anzeigen und warnen, die gerade in diesem Feature geschrieben wurden. Wenn ein Entwickler einen Button um 3 Pixel verschoben hat und wir ihm sagen, dass er dort eine SQL-Injektion hat und dringend etwas Ă€ndern muss â das ist falsch. Schaut nur auf das, was jetzt geschrieben ist, und auf die VerĂ€nderung, die in die Anwendung kommt.
Angenommen, wir haben einen funktionalen Defekt - wie die Anwendung nicht funktionieren sollte: Geld wird nicht ĂŒberwiesen, beim Klicken auf den Button erfolgt kein Ăbergang zur nĂ€chsten Seite oder das Produkt lĂ€dt nicht. Sicherheitsdefekte sind solche Defekte, aber nicht im Kontext des Anwendungsbetriebs, sondern der Sicherheit.
Nicht alle Probleme der SoftwarequalitÀt sind Sicherheitsprobleme. Aber alle Sicherheitsprobleme hÀngen mit der SoftwarequalitÀt zusammen. Sherif Mansour, Expedia.
Da alle Schwachstellen solche Defekte sind, sollten sie dort sein, wo auch alle Entwicklungsfehler sind. Vergesst also Berichte und erschreckende PDFs, die niemand liest.

Als ich fĂŒr ein Unternehmen arbeitete, das Software entwickelte, erhielt ich einen Bericht von einem statischen Analysewerkzeug. Ich öffnete ihn, erschrak, machte mir einen Kaffee, blĂ€tterte durch 350 Seiten, schloss ihn und machte weiter mit der Arbeit. GroĂe Berichte sind tote Berichte. Normalerweise gehen sie nirgendwo hin, E-Mails werden gelöscht, vergessen, verloren oder das GeschĂ€ft sagt, dass es die Risiken akzeptiert.
Was tun? Die bestÀtigten Fehler, die wir gefunden haben, wandeln wir einfach in ein entwicklungsfreundliches Format um, zum Beispiel indem wir sie im Backlog in Jira ablegen. Wir priorisieren die Fehler und beheben sie nach Dringlichkeit, gleichwertig mit funktionalen Fehlern und Testfehlern.
Statische Analyse - SAST
Dies ist eine Analyse des Codes auf Schwachstellen., aber das ist nicht dasselbe wie SonarQube. Wir ĂŒberprĂŒfen nicht nur nach Mustern oder Stil. Bei der Analyse kommen verschiedene AnsĂ€tze zur Anwendung: nach dem Schwachstellenschema, nach , nach der Analyse von Konfigurationsdateien. Das betrifft alles, was direkt den Code angeht.
Vorteile des Ansatzes: die Aufdeckung von Schwachstellen im Code in einer frĂŒhen Phase der Entwicklung, wenn es noch keine StĂ€nde und kein fertiges Werkzeug gibt, und die Möglichkeit einer inkrementellen Analyse: die Analyse des Codes, der sich geĂ€ndert hat, und nur der Funktion, an der wir gerade arbeiten, was die Analysezeit verkĂŒrzt.
Nachteile â das Fehlen der UnterstĂŒtzung benötigter Sprachen.
Notwendige Integrationen, die meiner subjektiven Meinung nach in den Werkzeugen vorhanden sein sollten:
- Integrationswerkzeuge: Jenkins, TeamCity und Gitlab CI.
- Entwicklungsumgebung: Intellij IDEA, Visual Studio. Es ist fĂŒr Entwickler einfacher, nicht durch eine unverstĂ€ndliche BenutzeroberflĂ€che zu navigieren, die man sich erst merken muss, sondern direkt an ihrem Arbeitsplatz in ihrer eigenen Entwicklungsumgebung alle notwendigen Integrationen und Schwachstellen, die sie gefunden haben, zu sehen.
- Code-Review: SonarQube und manuelles Review.
- Fehlerverfolgungssysteme: Jira und Bugzilla.
Auf dem Bild sind einige der besten Vertreter der statischen Analyse.

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

SAST Open Source finden möglicherweise nicht eine groĂe Anzahl von Schwachstellen oder komplexe DataFlows, aber sie können und sollten beim Aufbau des Prozesses verwendet werden. Sie helfen zu verstehen, wie der Prozess aufgebaut wird, wer fĂŒr die Bugs verantwortlich ist, wer reportet und wer Bericht erstattet. Wenn Sie die erste Phase der Sicherstellung der Sicherheit Ihres Codes durchfĂŒhren möchten, verwenden Sie Open-Source-Lösungen.
Wie kann man das integrieren, wenn Sie am Anfang stehen und nichts haben: weder CI, noch Jenkins, noch TeamCity? Lassen Sie uns die Integrationen in den Prozess betrachten.
Integration auf CVS-Ebene
Wenn Sie Bitbucket oder GitLab haben, können Sie die Integration auf .
Nach der Ereignis â Pull-Request, Commit. Sie scannen den Code und zeigen im Status des Builds, ob die SicherheitsprĂŒfung bestanden oder nicht bestanden wurde.
Feedback. NatĂŒrlich ist Feedback immer notwendig. Wenn Sie einfach auf der Sicherheitsseite gearbeitet, alles in eine Box gepackt und niemandem davon erzĂ€hlt haben, und am Ende des Monats eine Menge Bugs herausgekommen sind â das ist nicht richtig und nicht gut.
Integration mit dem Code Review System
Einmal haben wir in einigen wichtigen Projekten als Standard-Reviewer einen technischen Benutzer von AppSec eingesetzt. AbhĂ€ngig davon, ob Fehler im neuen Code gefunden wurden oder nicht, weist der Reviewer im Pull-Request den Status âacceptâ oder âneed workâ zu â entweder alles in Ordnung oder es muss nachgebessert werden, mit Verweisen dazu, was genau ausgearbeitet werden muss. FĂŒr die Integration mit der Version, die in der Produktion lĂ€uft, haben wir das Merge-Verbot aktiviert, wenn der Test fĂŒr die Informationssicherheit nicht bestanden wurde. Dies haben wir in das manuelle Code Review integriert, und die anderen Beteiligten im Prozess konnten die Sicherheitsstatus genau fĂŒr diesen spezifischen Prozess sehen.
Integration mit SonarQube
Viele haben . Hier ist es dasselbe â man kann die gleichen Gates nur fĂŒr SAST-Tools erstellen. Es wird dasselbe Interface, dasselbe Quality Gate sein, nur wird es Security Gategenannt. Und ebenso, wenn Sie einen Prozess mit SonarQube eingerichtet haben, können Sie alles problemlos integrieren.
Integration auf CI-Ebene
Hier ist auch alles ziemlich einfach:
- Auf der gleichen Ebene wie die automatisierten Tests, den Unit-Tests.
- Teilen nach Entwicklungsphasen: dev, test, prod. Unterschiedliche Regelsets oder unterschiedliche Fehlbedingungen können aktiviert werden: Wir stoppen den Build, oder wir stoppen ihn nicht.
- Synchroner/asynchroner Start. Wir warten auf das Ende der SicherheitsprĂŒfungen oder wir warten nicht. Das heiĂt, wir haben sie einfach gestartet und machen weiter, und dann 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 SicherheitsprĂŒfungen sollte den Ergebnissen der Unit-Tests entsprechen.
Zum Beispiel haben wir ein groĂes Projekt ĂŒbernommen und beschlossen, dass wir es jetzt mit SAST scannen werden â in Ordnung. Wir haben dieses Projekt in die SAST eingefĂŒgt, es hat uns 20.000 SicherheitsanfĂ€lligkeiten ausgegeben, und nach einem entschlossenen Beschluss haben wir akzeptiert, dass alles gut ist. 20.000 SicherheitsanfĂ€lligkeiten sind unsere technische Schuld. Diese Schuld packen wir in eine Box, werden sie nach und nach abarbeiten und Bugs in die Fehlerverfolgung eintragen. Wir werden ein Unternehmen einstellen, alles selbst machen oder uns von Security Champions unterstĂŒtzen lassen â und die technische Schuld wird abnehmen.
Alle neu entstehenden SicherheitsanfĂ€lligkeiten im neuen Code mĂŒssen ebenfalls behoben werden, wie Fehler in Unit-Tests oder automatisierten Tests. Vereinfacht gesagt, das Build lĂ€uft, zwei Tests sind fehlgeschlagen und zwei Sicherheitstests sind fehlgeschlagen. In Ordnung â wir haben geschaut, was passiert ist, haben das eine und das andere behoben, beim nĂ€chsten Mal haben wir es erneut getestet â alles gut, es sind keine neuen SicherheitsanfĂ€lligkeiten aufgetaucht, die Tests sind nicht fehlgeschlagen. Wenn diese Aufgabe tiefergehender ist und wir sie gut verstehen mĂŒssen, oder die Behebung von SicherheitsanfĂ€lligkeiten groĂe Teile dessen betrifft, was hinter den Kulissen passiert: Wir tragen den Bug in die Fehlerverfolgung ein, er wird priorisiert und behoben. Leider ist die Welt nicht perfekt und Tests fallen manchmal aus.
Ein Beispiel fĂŒr ein Security Gate â analog zum Quality Gate, bezogen auf die Anzahl und das Vorhandensein von SicherheitsanfĂ€lligkeiten im Code.
Wir integrieren mit SonarQube â das Plugin wird installiert, alles ist sehr praktisch und klasse.
Integration in die Entwicklungsumgebung
Integrationsmöglichkeiten:
- Scannen aus der Entwicklungsumgebung noch vor dem Commit starten.
- Ergebnisse anzeigen.
- Ergebnisse analysieren.
- Synchronisierung mit dem Server.
So sieht der Abruf von Ergebnissen vom Server aus.

In unserer Entwicklungsumgebung erscheint einfach ein zusĂ€tzlicher Punkt, der anzeigt, dass beim Scannen solche SicherheitsanfĂ€lligkeiten gefunden wurden. Man kann sofort den Code anpassen, Empfehlungen einsehen und . Das alles ist am Arbeitsplatz des Entwicklers verfĂŒgbar, was sehr praktisch ist â man muss nicht auf andere Links gehen und zusĂ€tzliche Informationen suchen.
Open Source
Das ist mein Lieblingsthema. Jeder nutzt Open Source-Bibliotheken â wozu eine Menge Hacks und FahrrĂ€der bauen, wenn man eine fertige Bibliothek nutzen kann, in der schon alles umgesetzt ist?

NatĂŒrlich, das stimmt, aber Bibliotheken werden auch von Menschen geschrieben und beinhalten ebenfalls bestimmte Risiken und 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 Bibliotheken. Das Tool weià beispielsweise, dass wir eine bestimmte Bibliothek verwenden und dass in oder in Bug-Trackern Schwachstellen gemeldet sind, die sich auf diese Version der Bibliothek beziehen. 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, die keine Schwachstellen aufweist.
Analyse der Lizenzreinheit. Bei uns ist das noch nicht besonders populĂ€r, aber wenn Sie mit dem Ausland arbeiten, können Sie dort gelegentlich Ărger fĂŒr die Verwendung einer Open Source-Komponente bekommen, die nicht verwendet oder modifiziert werden darf. Laut der Lizenzpolitik der Bibliothek können 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 auch dafĂŒr kann man sich schĂŒtzen.
Analyse von Komponenten, die in der Industrie verwendet werden. Stellen wir uns eine hypothetische Situation vor: Wir haben endlich die Entwicklung abgeschlossen und die letzte Version unseres Mikrodienstes veröffentlicht. Er lĂ€uft dort wunderbar â eine Woche, einen Monat, ein Jahr. Wir sammeln ihn nicht ein, fĂŒhren keine SicherheitsprĂŒfungen durch, alles scheint gut zu sein. Doch plötzlich, zwei Wochen nach der Veröffentlichung, kommt eine kritische Schwachstelle in der Open Source-Komponente heraus, die wir genau in diesem Build, in der Produktionsumgebung, verwenden. Wenn wir nicht aufzeichnen, was und wo wir verwenden, werden wir diese Schwachstelle einfach nicht sehen. In einigen Tools gibt es Möglichkeiten zur Ăberwachung von Schwachstellen in Bibliotheken, die derzeit in der Produktion verwendet werden. Das ist sehr nĂŒtzlich.
VollstÀndig unstationÀre, zeitgenaue Analyse;
- Verschiedene Richtlinien fĂŒr verschiedene Entwicklungsphasen.
- Ăberwachung von Komponenten in der Industrie.
- Kontrolle der Bibliotheken im Organisationsbereich.
- UnterstĂŒtzung verschiedener Build-Systeme und Programmiersprachen.
- Analyse von Docker-Images.
Einige Beispiele von MarktfĂŒhrern, die sich mit Open Source-Analysen befassen.

Der einzige kostenlose von ihnen ist von OWASP. Es kann in den frĂŒhen Phasen aktiviert werden, um zu sehen, wie es funktioniert und was es unterstĂŒtzt. Im Wesentlichen handelt es sich um alle Cloud-Produkte oder On-Premise, aber alle Daten werden dennoch ins Internet gesendet. Sie senden nicht Ihre Bibliotheken, sondern Hashes oder eigene Werte, die sie berechnen, sowie FingerabdrĂŒcke an ihren Server, um Benachrichtigungen ĂŒber bekannte Schwachstellen 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 steht innerhalb von Event Central Nexus, und wir möchten, dass in unserem Repository keine Schwachstellen mit dem Status "kritisch" oder "hoch" vorhanden sind. Man kann das Proxieren mit dem Tool Nexus Firewall Lifecycle so konfigurieren, dass solche Schwachstellen ausgeschlossen werden und nicht in das interne Repository gelangen.
Integration in CI. Auf einer Ebene mit automatisierten Tests, Unit-Tests und der Trennung der Entwicklungsphasen: dev, test, prod. In jeder Phase können beliebige Bibliotheken heruntergeladen und alles Mögliche verwendet werden, aber wenn dort etwas Strenges mit dem Status "critical" vorhanden ist, sollten die Entwickler möglicherweise in der Phase des Live-Gehens darauf hingewiesen werden.
Integration mit Artefakt-Repositories: Nexus und JFrog.
Integration in die Entwicklungsumgebung. Die Werkzeuge, die Sie auswĂ€hlen, sollten Integration mit den Entwicklungsumgebungen haben. Der Entwickler sollte von seinem Arbeitsplatz aus Zugriff auf die Ergebnisse der Scans haben oder die Möglichkeit, selbst zu scannen und den Code auf Schwachstellen vor dem Commit in CVS zu ĂŒberprĂŒfen.
Integration in CD. Das ist eine coole Funktion, die mir sehr gefĂ€llt und ĂŒber die ich bereits gesprochen habe â die Ăberwachung des Auftretens neuer Schwachstellen in der Produktionsumgebung. Das funktioniert ungefĂ€hr so.

Wir haben öffentliche Komponenten-Repositories â einige Werkzeuge nach auĂen und unser internes Repository. Wir möchten, dass darin nur vertrauenswĂŒrdige Komponenten vorhanden sind. Beim Proxieren der Anfrage ĂŒberprĂŒfen wir, dass die heruntergeladene Bibliothek keine Schwachstellen aufweist. Wenn sie bestimmten Richtlinien unterliegt, die wir festlegen und unbedingt mit der Entwicklung abstimmen, wird sie nicht heruntergeladen, und es erfolgt eine Meldung zur Verwendung einer anderen Version. Dementsprechend erhĂ€lt der Entwickler, wenn in der Bibliothek etwas wirklich Kritisches und Schlechtes vorhanden ist, die Bibliothek noch nicht in der Installationsphase â er soll eine höhere oder niedrigere Version verwenden.
- Beim Build ĂŒberprĂŒfen wir, dass niemand etwas Schlechtes hineingeschmuggelt 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.
- Beim Deployment ĂŒberprĂŒfen wir das Paket erneut: war, jar, DL oder Docker-Image, um sicherzustellen, dass es den Richtlinien entspricht.
- Beim Wechsel in die Produktion ĂŒberwachen wir, was in der Produktionsumgebung passiert: ob kritische Schwachstellen auftreten oder nicht.
Dynamische Analyse â DAST
Werkzeuge der dynamischen Analyse unterscheiden sich grundlegend von allem, was bisher gesagt wurde. Es handelt sich um eine Simulation der Benutzerinteraktion mit der Anwendung. Wenn es sich um eine Webanwendung handelt, senden wir Anfragen, simulieren die Arbeit des Clients, klicken auf SchaltflĂ€chen im Frontend und senden kĂŒnstliche Daten aus Formularen: AnfĂŒhrungszeichen, Klammern, Zeichen in verschiedenen Kodierungen, um zu sehen, wie die Anwendung funktioniert und externe Daten verarbeitet.
Dieses System ermöglicht es auch, bekannte Schwachstellen in Open Source zu ĂŒberprĂŒfen. Da DAST nicht weiĂ, welches Open Source wir verwenden, werden einfach "schadhafte" Muster eingesetzt und die Serverantworten analysiert:
â Aha, hier gibt es ein Deserialisierungsproblem, und hier nicht.
Das birgt groĂe Risiken, denn wenn Sie diesen Sicherheitstest auf demselben Stand durchfĂŒhren, mit dem die Tester arbeiten, können unangenehme Dinge passieren.
- Hohe Belastung des Netzwerks des Anwendungsservers.
- Keine Integrationen.
- Möglichkeit zur Ănderung der Einstellungen der analysierten Anwendung.
- Keine UnterstĂŒtzung der erforderlichen Technologien.
- Schwierigkeiten bei der Konfiguration.
Wir hatten eine Situation, als wir endlich AppScan gestartet haben: es dauerte lange, um Zugang zur Anwendung zu erhalten, wir bekamen 3 Konten und freuten uns - endlich können wir alles ĂŒberprĂŒfen! Wir starteten den Scan, und das erste, was AppScan machte, war, in das Admin-Panel einzudringen, alle Knöpfe zu drĂŒcken, die HĂ€lfte der Daten zu Ă€ndern und anschlieĂend den Server mit seinen -Anfragen komplett abzuschalten. -Anfragen. Die Entwicklung mit dem Testteam sagte:
â Leute, macht ihr Witze?! Wir haben euch ZugĂ€nge gegeben, und ihr habt die Standalone-Version zerstört!
BerĂŒcksichtigt mögliche Risiken. Idealerweise solltet ihr eine separate Testumgebung fĂŒr Sicherheitstests vorbereiten, die zumindest irgendwie vom restlichen Umfeld isoliert ist, und das Admin-Panel vorzugsweise manuell ĂŒberprĂŒfen. Das ist ein Pentest - die verbleibenden ProzentsĂ€tze an Aufwand, die wir jetzt nicht betrachten.
Es sollte berĂŒcksichtigt werden, dass man dies als analoge LastprĂŒfung verwenden kann. In der ersten Phase kann man den dynamischen Scanner in 10-15 Threads aktivieren und sehen, was dabei herauskommt, aber normalerweise zeigt die Praxis, dass nichts Gutes herauskommt.
Einige Ressourcen, die wir normalerweise verwenden.

Es ist hervorzuheben  â das ist das âSchweizer Taschenmesserâ fĂŒr jeden Sicherheitsspezialisten. Es wird von allen verwendet und ist sehr benutzerfreundlich. Vor kurzem wurde eine neue Demoversion der Enterprise-Edition veröffentlicht. FrĂŒher war es einfach ein Standalone-Tool mit Plugins, aber jetzt entwickeln die Programmierer endlich einen groĂen Server, von dem aus mehrere Agenten verwaltet werden können. Das ist genial, ich empfehle es auszuprobieren.
Integration in den Prozess
Die Integration funktioniert ausreichend gut und einfach: Start des Scans nach erfolgreicher Installation der Anwendung auf der Testumgebung und Scan nach erfolgreichem Abschluss der Integrationstests..
Wenn die Integrationen nicht funktionieren oder dort Platzhalter und Mock-Funktionen stehen, ist das sinnlos und nutzlos â egal welches Muster wir senden, der Server wird immer gleich antworten.
- Ideal ist eine separate Umgebung fĂŒr Tests.
- Vor Beginn der Tests solltet ihr die Anmeldefolge aufzeichnen.
- Die Testung des Administrationssystems erfolgt ausschlieĂlich manuell.
Prozess
Ein wenig zusammenfassend ĂŒber den gesamten Prozess und ĂŒber die Arbeit jedes Tools, insbesondere. Alle Anwendungen sind unterschiedlich â bei einer funktioniert die dynamische Analyse besser, bei einer anderen die statische, bei einer dritten die OpenSource-Analyse, Pentests oder sogar etwas ganz anderes, zum Beispiel Ereignisse mit .
Jeder Prozess benötigt Kontrolle.
Um zu verstehen, wie ein Prozess funktioniert und wo man ihn verbessern kann, mĂŒssen Metriken von allem gesammelt werden, was in Reichweite ist, einschlieĂlich Produktionsmetriken, Metriken von Tools und aus Fehlerverfolgern.
Alle Daten sind nĂŒtzlich. Man muss aus verschiedenen Perspektiven betrachten, wo welches Tool besser eingesetzt wird und wo der Prozess konkret schwĂ€chelt. Vielleicht sollte man die Reaktionszeit der Entwicklung betrachten, um zu verstehen, wo der Prozess basierend auf der Zeit verbessert werden kann. Je mehr Daten vorhanden sind, desto mehr Perspektiven kann man von hochrangigen bis zu Detailansichten jedes Prozesses aufbauen.

Da jeder statische und dynamische Analyzer seine eigenen APIs, eigene Möglichkeiten der AusfĂŒhrung und Prinzipien hat, einige mit Planern, andere ohne, schreiben wir ein Tool AppSec-Orchestrator, das einen einheitlichen Einstieg in den gesamten Prozess von der Entwicklung ermöglicht und ihn von einem Punkt aus steuern kann.
Manager, Entwickler und Sicherheitsingenieure haben einen Einstiegspunkt, von dem aus sie sehen können, was lĂ€uft, einstellen und Scans ausfĂŒhren, Ergebnisse erhalten und Anforderungen stellen können. Wir versuchen, von Papierkram wegzukommen und alles in eine fĂŒr die Entwicklung verstĂ€ndliche Form zu bringen â Seiten auf Confluence mit Status und Metriken, Fehler in Jira oder in verschiedenen Fehlerverfolgern, oder die Integration in einen synchronen/asynchronen Prozess in CI/CD.
Wesentliche Erkenntnisse
Werkzeuge sind nicht das Wichtigste. Zuerst den Prozess durchdenken â dann die Werkzeuge implementieren. Werkzeuge sind gut, aber teuer; darum kann man mit dem Prozess beginnen und die Interaktion sowie das VerstĂ€ndnis zwischen Entwicklung und Sicherheit gestalten. Aus der Sicht der Sicherheit: Man sollte nicht alles ohne weiteres blockieren. Aus der Sicht der Entwicklung: Wenn etwas hochgradig kritisch ist, muss es eliminiert werden und nicht ignoriert werden.
ProduktqualitĂ€t â das gemeinsame Ziel sowohl fĂŒr die Sicherheit als auch fĂŒr die Entwicklung. Wir machen dasselbe und bemĂŒhen uns, dass alles korrekt funktioniert und keine Reputationsrisiken oder finanziellen Verluste entstehen. Deshalb propagieren wir den Ansatz des DevSecOps und SecDevOps, um die Kommunikation zu verbessern und das Produkt qualitativ hochwertiger zu machen.
Beginnen Sie mit dem, was bereits vorhanden ist: Anforderungen, Architektur, TeilprĂŒfungen, Schulungen, Richtlinien. Verwenden Sie nicht sofort alle Praktiken fĂŒr alle Projekte â arbeiten Sie 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 â bewegen Sie es und automatisieren Sie es. Wenn etwas manuell erledigt wird, ist das kein guter Abschnitt im Prozess. Möglicherweise sollten Sie dies ĂŒberdenken und ebenfalls automatisieren.
Wenn die GröĂe des Sicherheitsteams klein ist â verwenden Sie Security Champions..
Möglicherweise passen die Dinge, von denen ich gesprochen habe, nicht zu Ihnen und Sie entwickeln etwas Eigenes â und das ist gut. Aber wĂ€hlen Sie die Werkzeuge auf der Grundlage der Anforderungen Ihres Prozesses aus.Schauen Sie nicht darauf, was die Community sagt, dass dieses Werkzeug schlecht ist und dieses gut. Vielleicht ist es genau umgekehrt bei Ihrem Produkt.
Anforderungen an die Werkzeuge.
- Niedriger Anteil an False Positives.
- Angemessene Analysezeit.
- Benutzerfreundlichkeit.
- Vorhandensein von Integrationen.
- VerstÀndnis des Entwicklungs-Roadmaps des Produkts.
- Möglichkeit zur Anpassung der Werkzeuge.
Der Vortrag von Yuri wurde als einer der besten auf der DevOpsConf 2018 ausgewĂ€hlt. Um viele weitere interessante Ideen und praktische FĂ€lle kennenzulernen, kommen Sie am 27. und 28. Mai nach Skolkovo zu im Rahmen von . Noch besser ist es, wenn Sie bereit sind, Ihre Erfahrungen zu teilen, dann bis zum 21. April fĂŒr einen Vortrag.
Quelle: habr.com
