This repository was archived by the owner on Nov 27, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 105
Blogpost - SSDLC #274
Open
RicoKomenda
wants to merge
16
commits into
adessoSE:master
Choose a base branch
from
RicoKomenda:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Blogpost - SSDLC #274
Changes from all commits
Commits
Show all changes
16 commits
Select commit
Hold shift + click to select a range
d8075f7
add blog post about ssdlc
RicoKomenda 5776a7e
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda ca08b8f
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda 5518f3d
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda 12751ed
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda 7183ea7
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda 6ce1f99
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda 4fc247b
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda b697a0f
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda f515333
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda 66564e2
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda fd9277c
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda 3799512
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda a0518df
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda 4a5e049
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda 11c40c3
Update _posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
RicoKomenda File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
108 changes: 108 additions & 0 deletions
108
_posts/2023-03-01-Der-sichere-Softwareentwicklungslebenszyklus.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
--- | ||
layout: [post, post-xml] | ||
title: "Der sichere Softwareentwicklungslebenszyklus" | ||
date: 2022-11-22 09:00 # Pflichtfeld. Format "YYYY-MM-DD HH:MM". Muss für Veröffentlichung in der Vergangenheit liegen. (Für Preview egal) | ||
author_ids: [komenda] | ||
categories: [Softwareentwicklung] | ||
tags: [Security, SDLC, SSDLC] | ||
--- | ||
|
||
In diesem Blogpost gehen wir auf den sicheren Softwareentwicklungslebenszyklus ein. Dabei sehen wir uns speziell an, was in den verschiedenen Phasen umgesetzt werden kann. | ||
|
||
# Was ist der sichere Softwareentwicklungslebenszyklus? | ||
|
||
Entwicklungsteams arbeiten bereits in einem sehr methodischen, sich wiederholenden Prozess - dem Software Development Lifecycle (SDLC) - und es besteht eine große Chance, durch eine Kombination von Bewusstsein, Aktivitäten und Arbeitsabläufen eine bessere Sicherheit in diesen Prozess einzubringen, so dass das Ergebnis eine weitaus sicherere Software wäre. Das ist der sichere SDLC (SSDLC). | ||
|
||
# Wieso brauchen wir einen sicheren Softwareentwicklungszyklus? | ||
Die Sicherheit spielt in jeder Phase des Softwareentwicklungszyklus (SDLC) eine Rolle und muss bei der Umsetzung einer Software im Vordergrund stehen. In diesem Artikel erfahren wir, wie wir einen sicheren SDLC (SSDLC) erstellen können, der uns hilft, Probleme in den Anforderungen zu erkennen, bevor wir diese in der Implementierung unserer Software wiederfinden. | ||
|
||
Mit entsprechendem Aufwand können Sicherheitsprobleme in der SDLC-Pipeline bereits vor der Produktionsbereitstellung behoben werden. Dadurch kann das Risiko von Sicherheitslücken in einer Applikation verringert werden. Außerdem kann der mögliche Schaden im Risikofall reduziert werden. | ||
|
||
Der SSDLC zielt nicht darauf ab, herkömmliche Sicherheitsprüfungen wie Penetrationstests vollständig abzuschaffen, sondern die Sicherheit in den Verantwortungsbereich der Entwickler einzubeziehen und sie zu befähigen, von Anfang an sichere Anwendungen zu entwickeln. | ||
|
||
# Warum ist der SSDLC wichtig? | ||
|
||
Er ist wichtig, weil die Anwendungssicherheit wichtig ist. Die Zeiten, in denen man ein Produkt in die Öffentlichkeit brachte und Fehler in späteren Patches behoben wurden, sind vorbei. Die Entwickler müssen jetzt bei jedem Schritt des Prozesses auf potenzielle Sicherheitsbedenken Rücksicht nehmen. Dies erfordert die Integration von Sicherheitsaspekten in den Entwicklungszyklus auf eine Art und Weise, die früher nicht nötig war. Da sich jeder potenziell Zugang zu unserem Quellcode verschaffen kann, müssen wir sicherstellen, dass bei der Programmierung mögliche Schwachstellen berücksichtigt werden. Ein stabiler und sicherer SDLC-Prozess ist daher von entscheidender Bedeutung, um sicherzustellen, dass die Anwendung nicht von böswilligen Benutzern angegriffen werden kann. | ||
|
||
# Was sind die Prozesse innerhalb des SSDLC? | ||
|
||
Der Weg zur Erstellung eines SSDLC beginnt mit einem Modell. Wir werden das in der Branche übliche 5-Stufen-Modell verwenden, das den SSDLC in 5 Phasen unterteilt: | ||
* Anforderung - Erfassen des Umfangs der Funktion(en) oder des Produkts. | ||
RicoKomenda marked this conversation as resolved.
Show resolved
Hide resolved
|
||
* Design - Technischer Entwurf der Anforderungen. | ||
* Entwicklung - Schreiben des Codes, der den Entwurf umsetzt. | ||
* Testen - Überprüfen, ob die Funktionalität wie erwartet funktioniert. | ||
* Bereitstellung und Wartung - Freigabe der Funktionalität und kontinuierliche Unterstützung. | ||
|
||
Traditionelle Sicherheitstests wurden in den Schritten 4 und 5 als Aktivität vor und nach der Produktivsetzung der Software durchgeführt. Für die moderne Softwareentwicklung ist es wichtig, die Sicherheit in jeden dieser 5 Schritte einzubinden. | ||
|
||
# Die Anforderungsphase | ||
|
||
Das Schlüsselkonzept besteht hier darin, den Ton anzugeben und die Sicherheitsaspekte des kommenden Produkts oder Produktmerkmals zu definieren. Dies ist eine wichtige Gelegenheit, eine "Sicherheit zuerst"-Mentalität zu fördern und das Bewusstsein der Entwickler zu schärfen. | ||
|
||
Ein Beispiel: Es wird ein neuer Benachrichtigungsdienst entwickelt, der die Kunden über wichtige Ereignisse informieren soll. Zu den Sicherheitsanforderungen sollte beispielsweise die Trennung von Benutzern gehören, damit eine Benachrichtigung nie den "falschen" Empfänger erreicht. Werden die Benachrichtigungen auch sensible Daten enthalten? Wenn ja, führt dies zu einer Reihe von Bedenken hinsichtlich Sicherheit und Datenschutz, die berücksichtigt werden müssen. | ||
|
||
Das Ziel in dieser Phase sollte sein, ein Bedrohungsmodell (Threat Model) zu erstellen, das während des gesamten Entwicklungszyklus des Produkts oder der Funktion verwendet wird. Dieses Modell sollte auf bewährten Sicherheitspraktiken beruhen, z. B. dem von OWASP definierten Modell. | ||
|
||
Das Bedrohungsmodell sollte die Grundlage für eigene Anforderungsbesprechungen sein. Ein empfehlenswerter erster Schritt ist die Planung einer solchen Anforderungsbesprechung unter Verwendung eines generischen Bedrohungsmodells als Vorlage. Definiere in dieser Sitzung die Prinzipien und Leitfäden, die während der Entwicklung und des Testens verwendet werden sollen - was ist wichtig für die Sicherheit? Welches sind die besten Sicherheitsverfahren? Außerdem sollten alle Sicherheitskomponenten festgelegt werden, die im Rahmen des Entwicklungszyklus implementiert werden sollten. | ||
|
||
# Die Designphase | ||
|
||
In der Regel erstellen die Entwicklungsteams den technischen Entwurf einer Funktion. In unserem Beispiel des Benachrichtigungsdienstes könnte es sich um einen neuen Microservice, eine Message Queue, eine Datenbank zur Speicherung nicht zugestellter Benachrichtigungen oder ähnliches handeln. In dieser Phase müssen wir überprüfen, ob der Sicherheitsentwurf das in der Anforderungsphase erstellte Bedrohungsmodell berücksichtigt. | ||
|
||
Hier werden die Sicherheitsmechanismen innerhalb des Entwurfs definiert. Zu den wichtigsten Schritten gehören: | ||
* Überprüfen der Sicherheitsanforderungen. | ||
RicoKomenda marked this conversation as resolved.
Show resolved
Hide resolved
|
||
* Durch Brainstorming Schwachstellen und mögliche Designfehler aufdecken. In die Denkweise eines Angreifers hineinversetzen, um Schwachstellen zu finden. | ||
* Bewerten der verschiedenen Risiken mithilfe von Bedrohungsmodellierungstechniken - geordnet nach dem Gefährdungsgrad und der Wahrscheinlichkeit des Risikos. | ||
|
||
Hier ist wichtig, dass die Priorisierung der jeweiligen Aufgaben an das Entwicklungsteam kommuniziert werden. Es muss ersichtlich sein, welche Aufgaben definitiv umgesetzt werden müssen oder welche auch anhand der Wahrscheinlichkeit erst zu einem späteren Zeitpunkt entwickelt werden können. | ||
|
||
# Die Entwicklungsphase | ||
|
||
Die Einbindung der Sicherheit in die Programmierung bedeutet, dass Entwickler sicheren Code schreiben, Sicherheitsrisiken während der Programmierung beseitigen und dies tun, bevor sie ihre endgültige Version für weitere Tests und den Einsatz vorlegen. Dazu müssen mehrere Dinge berücksichtigt werden: | ||
* Awareness und Security Mindset - Schulung und Ausbildung würden die Messlatte deutlich höher legen. Es gibt viele Menschen, die mit Codeänderungen interagieren. Eine kontinuierliche Schulung und Aufklärung kann dazu führen, dass Anti-Patterns und Gefahren wie Datenbereinigung, Kommunikationsverschlüsselung und anderes erkannt werden. OWASP stellt viele nützliche Schulungsressourcen zur Verfügung und als erster Schritt ist das Verständnis der OWASP Top 10(Link) ein Muss. | ||
Eine Schulung, die wir gerne auch ausführen ist eine Secure-Coding-Schulung, die auf Basis der OWASP Top 10 aufbaut und ein Mix zwischen Theorie, Praxis und Security-Mindset ist. | ||
* Code-Scanning - es gibt eine Vielzahl von Codeanalysescannern, die Probleme bereits während des Programmierens aufspüren können. Dazu gehören SAST-Tools und SCA-Tools, diese scannen den eigenen Code oder überprüfen die angebundenen Bibliotheken. Für viele Infrastrukturdeklarationssprachen gibt es einen speziellen Scannertyp namens "Infrastructure-as-Code"-Scanner, kurz IaC-Scanner, der unsichere Konfigurationen aufspüren kann. Es ist wichtig, dass die verwendeten Technologien mit den verfügbaren Scannern abgleichen. | ||
* Aufbau eines wiederholbaren Prozesses - Erstelle einen operativen Prozess, der beide oben genannten Punkte umsetzt. Lasse die Entwickler die Sicherheitsscan-Tools ausführen, bevor sie ihren Code einreichen, und plane regelmäßige Auffrischungsschulungen für bewährte Sicherheitsmethoden ein. | ||
Eine mögliche Option für die Integration von Scans in den Prozess sind Quellcodeverwaltungssysteme wie Git, die "Pull Requests" verwenden. Hier könnte man bei einem Pull Request einen obligatorischen SAST-Scan ausführen, der die neusten Änderungen vor der Zusammenführung des Quellcodes überprüft. Bei einem negativen Ergebnis kann das jedoch durch speziell benannte Personen überschrieben werden, da dies vielleicht im Anwendungsfall benötigt wird. | ||
|
||
# Die Testphase | ||
|
||
Diese Phase ist ein wenig verzwickt. Einen echten agilen SDLC kennzeichnet, dass es keinen linearen Prozess gibt, bei dem alles stehen bleibt und nur noch getestet wird. Die meisten Teams bauen heute eine Art CI/CD-Pipeline auf, in der kontinuierliche Integration stattfindet und die Software ständig getestet wird. | ||
|
||
Bei diesem Modell gibt es eine Reihe von Tests, die in mehreren Phasen durchgeführt werden, einige während der Programmierung, einige nach jeder Codeübermittlung, einige nachts und einige in der Produktionsumgebung. | ||
|
||
In der Anforderungsphase muss festgelegt werden, wo die Sicherheitstests durchgeführt werden sollen. Wir haben bereits Tests während der Entwicklungsphase erwähnt. Es ist jedoch möglich, zusätzliche Tests vor der Bereitstellung einzuführen - dies hängt von der Release-Strategie ab. | ||
|
||
Zusammenfassend kann man sagen, dass zwei Bereiche für diese Phase wichtig sind: | ||
|
||
* Entscheide auf Grundlage der Release-Strategie, welche Tests gebraucht und wo sie benötigt werden. | ||
* Implementiere diese Tests, vorzugsweise auf automatisierte Weise, damit die Entwickler so schnell wie möglich ein Feedback erhalten. | ||
|
||
# Bereitstellung und Wartung | ||
|
||
In dieser Phase geht es vor allem darum, einen Reaktionsplan zu haben und den Angriffen einen Schritt voraus zu sein. Es müssen Prozesse entwickelt werden, die es ermöglichen, A) bei Bekanntwerden eines neuen externen Risikos alarmiert zu werden und B) über neue Sicherheitsangriffe, Trends und Lösungen auf dem Laufenden zu bleiben. | ||
|
||
* Such nach externen Risiken - Verfahren wie Penetrationstests sind wichtig. Diese decken Risiken auf, die möglicherweise durch alle bisherigen Sicherheitsschleusen geschlüpft sind. Die sollten regelmäßig durchgeführt werden, um die Chance zu erhöhen, sie zu finden. | ||
* Umgang mit Warnmeldungen - einige Tools versorgen uns mit Bedrohungsinformationen, die aus neuen Enthüllungen stammen. Die log4shell-Schwachstelle war beispielsweise bereits in der Produktion vorhanden, aber sobald die Schwachstelle vollständig erkannt wurde, alarmierten die SCA-Tools ihre Benutzer und Sicherheitsteams, um die anfälligen Komponenten schnell zu blockieren und zu entfernen. Wir müssen davon ausgehen, dass auch in unseren Anwendungen "0-Day"-Schwachstellen lauern, die jeden Moment entdeckt werden könnten. | ||
* Bleibe auf dem Laufenden über Sicherheitstrends und -technologien - Es ist ein ständiges Wettrüsten zwischen Sicherheitsexperten und Cyber-Kriminellen. Die Sicherheits-Community veröffentlicht neue Bedrohungsmodelle und es gibt ständige Innovationen bei den Sicherheitswerkzeugen und -techniken. | ||
|
||
# Die Vorteile eines SSDLC | ||
|
||
Secure SDLC ist das ultimative Beispiel für eine sogenannte "shift-left"-Initiative, die darauf abzielt, Sicherheitsprüfungen so früh wie möglich in den SDLC zu integrieren. | ||
|
||
Darüber hinaus werden bei SSDLC die Sicherheitsmaßnahmen im Kern vom Entwicklungsteam selbst geleitet. So können die Probleme von den Experten behoben werden, die die Software geschrieben haben, und nicht von einem anderen Team, das die Fehler nachträglich behebt. Dies ermöglicht es den Entwicklern, die Verantwortung für die Gesamtqualität ihrer Anwendungen zu übernehmen, was dazu führt, dass sicherere Anwendungen in der Produktion eingesetzt werden. | ||
|
||
Der zusätzliche Aufwand für Sicherheitstests im Rahmen des SDLC-Prozesses mag zwar nach viel Arbeit und hohen Kosten für die Erstellung klingen, doch heute wird der größte Teil davon automatisiert. Dies gilt insbesondere für den Entwicklungsbetrieb oder DevOps. Die sichere SDLC-Umgebung erfordert eine häufige Zusammenarbeit zwischen DevOps und den Entwicklern, die die Funktionalität der Anwendung implementieren, und diese Zusammenarbeit muss in den SDLC selbst integriert werden. | ||
RicoKomenda marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Durch die Behebung dieser Probleme in einem frühen Stadium des Prozesses können Entwicklungsteams die Gesamtbetriebskosten ihrer Anwendungen senken. Die späte Entdeckung von Problemen im SDLC kann zu einem 100-fachen Anstieg der Entwicklungskosten führen, die für die Behebung dieser Probleme erforderlich sind, wie in der nachstehenden Grafik dargestellt. | ||
|
||
 | ||
*IBM System Science Institute: Relative Cost of Fixing Defects, 2010* | ||
|
||
Wie im Bild dargestellt, ermöglicht die Umstellung auf einen sicheren SDLC den Entwicklungsteams eine schnellere Erstellung sicherer Anwendungen und kann daher für Unternehmen eine lohnende Investition sein. | ||
RicoKomenda marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
# Auf dem Weg in eine sicherere Zukunft | ||
|
||
Herkömmliche Verfahren zum Testen auf Schwachstellen in der Produktion reichen nicht mehr aus, um die Anwendungen zu sichern. Mit der Entwicklung der Softwarebranche haben sich auch die Arten von Angriffen weiterentwickelt. Um eine sichere Anwendung bereitzustellen und zu warten, muss jeder Schritt des Anwendungsentwicklungsprozesses gesichert werden. Das bedeutet, dass bereits in der Phase der Anforderungserfassung Fragen zum Sicherheitsverhalten gestellt werden müssen. Außerdem müssen die Teamkultur und die Projektmethoden an eine sicherheitsorientierte Denkweise angepasst werden. Automatische Überprüfungen müssen im Deployment-Prozess implementiert und viele andere Methoden ergänzt werden, die zusammen einen sicheren SDLC-Prozess ergeben. | ||
|
||
SSDLC ermöglicht es, Sicherheitsrisiken nach links zu verlagern (shift left approach), indem der Ursprung von Sicherheitsproblemen in der Anforderungsphase angegangen werden, anstatt von der Wartungsphase aus zurückgehen zu müssen. Wenn man sich in jeder Phase der Entwicklung auf die Sicherheit konzentrieren, kann man sich sicher sein, dass die Anwendung im Ergebnis viel sicherer ist. |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.