Lehrplan
- 4 Sections
- 7 Lessons
- 6 Hours
- Einführung in die sichere Softwareentwicklung3
- Sichere Entwicklungspraktiken: Sichere Kodierungstechniken, Bedrohungsmodellierung und Risikobewertung3
- Implementierung und Wartung: Einsatz von sicherer Software und Sicherheitsmaßnahmen nach dem Einsatz3
- Weiterführende Lektüre1
Grundlagen & Theoretisches
Sichere Kodierungstechniken
Sichere Kodierungstechniken sind für Entwickler*innen unerlässlich, um Anwendungen zu erstellen, die gegen Angriffe resistent sind und Benutzerdaten schützen. Diese Techniken sind eine Untergruppe der sicheren Entwicklungspraktiken, die sich speziell darauf konzentrieren, Code so zu schreiben, dass die Einführung von Sicherheitsschwachstellen verhindert wird. Im Folgenden finden Sie einen Überblick über einige wichtige Techniken zur sicheren Kodierung;
- Eingabeüberprüfung: Stellen Sie sicher, dass alle Eingaben, die von Benutzer*innen, Dateien, Datenbanken oder anderen externen Quellen eingehen, auf Typ, Länge, Format und Bereich geprüft werden, bevor sie in der Anwendung verwendet werden.
- Ausgabe Kodierung: Bei der Anzeige oder Übermittlung von Daten sollten diese angemessen kodiert werden, um Injection Angriffe wie Cross-Site Scripting (XSS) zu verhindern. So sollte beispielsweise die HTML-Ausgabe kodiert werden, um zu verhindern, dass der Browser bösartige Skripte ausführt.
- Parametrisierte Abfragen: Verwenden Sie parametrisierte Abfragen oder vorbereitete Anweisungen beim Zugriff auf Datenbanken, um SQL-Injection-Angriffe zu verhindern.
- Geringste Privilegien: Wenden Sie das Prinzip der geringsten Privilegien an, indem Sie Prozesse und den Zugriff auf Ressourcen mit den minimal erforderlichen Berechtigungen ausführen.
- Authentifizierung und Autorisierung: Implementieren Sie starke Authentifizierungsmechanismen und setzen Sie strenge Autorisierungs Prüfungen durch, um sicherzustellen, dass nur legitime Benutzer*innen auf sensible Funktionen und Daten zugreifen können.
- Passwortverwaltung: Speichern Sie Passwörter sicher mit starken, adaptiven Hashing-Algorithmen wie bcrypt oder Argon2.
- Sitzungsverwaltung: Speichern Sie Sitzungsdaten sicher und stellen Sie sicher, dass Sitzungs-Tokens sicher übertragen werden, in der Regel in HTTP-Headern bei ordnungsgemäßer Verwendung von HTTPS.
- Fehlerbehandlung: Implementieren Sie eine robuste Fehlerbehandlung, die keine sensiblen Informationen an den/die Benutzer*in weitergibt.
- Verschlüsselung: Verwenden Sie Verschlüsselung, um Daten bei der Übertragung (mit TLS/SSL) und im Ruhezustand zu schützen. Stellen Sie sicher, dass die Verschlüsselung Implementierungen aktuell sind und starke Algorithmen und Schlüssel verwenden.
- Code-Signierung: Signieren Sie Ihren Code, um seine Integrität und Herkunft sicherzustellen. Dies hilft, Manipulationen zu verhindern und kann Benutzer auf nicht autorisierte Änderungen aufmerksam machen.
- Sichere Dateioperationen: Achten Sie beim Umgang mit Dateien darauf, dass Dateivorgänge sicher durchgeführt werden, um Angriffe auf Verzeichnisse zu verhindern, und stellen Sie sicher, dass die Dateiberechtigungen angemessen sind.
- Speicherverwaltung: Bei Sprachen, die den Speicher nicht automatisch verwalten, wie z. B. C und C++, sollten Sie bei der Zuweisung, Verwendung und Freigabe von Speicher sorgfältig vorgehen, um Speicherlecks und Pufferüberläufe zu vermeiden.
- Gleichzeitigkeit und Behandlung von Wett Laufbedingungen: Schreiben Sie Code, der sicher für die gleichzeitige Ausführung ist und Race Conditions handhabt, um Probleme wie TOCTOU (Time-of-Check to Time-of-Use)-Fehler zu vermeiden.
- Daten-Sanitisierung: Bereinigen Sie Daten, die an Interpreter*innen oder Befehls Shells weitergegeben werden, um Injection Angriffe zu verhindern.
- Codeüberprüfung und statische Analyse: Führen Sie regelmäßig Code-Reviews mit Schwerpunkt auf der Sicherheit durch und setzen Sie statische Analyse Tools ein, um potenzielle Schwachstellen im Code automatisch zu erkennen.
- Sicherheit von Abhängigkeiten: Halten Sie Bibliotheken und Abhängigkeiten von Drittanbietern auf dem neuesten Stand und überprüfen Sie sie mit Hilfe von Analysetools für die Software Zusammensetzung auf bekannte Schwachstellen.

Abbildung -4
(Quelle: https://securityboulevard.com/2022/01/7-security-coding-guidelines-to-keep-in-mind/)
Modellierung von Bedrohungen und Risikobewertung
Bedrohungsmodellierung und Risikobewertung sind proaktive Prozesse, die in der Cybersicherheit und Softwareentwicklung eingesetzt werden, um potenzielle Bedrohungen für ein System zu identifizieren, zu priorisieren und zu entschärfen. Diese Verfahren sind Teil eines umfassenderen Sicherheits Ansatzes, der als “Security by Design” bekannt ist und die Bedeutung der Einbeziehung von Sicherheitsmaßnahmen bereits in den frühesten Phasen der Entwicklung betont. Die Bedrohungsmodellierung ist ein strukturierter Ansatz zur Identifizierung und Bekämpfung potenzieller Bedrohungen für ein System.

Abbildung -5
(Quelle: https://www.security-analyst.org/threat-analysis-and-risk-assessment/)
Bewährte Praktiken für Bedrohungsmodellierung und Risikobewertung
- Frühzeitig beginnen: Beginnen Sie mit der Modellierung von Bedrohungen und der Risikobewertung bereits in der Entwurfsphase und führen Sie sie während des gesamten Entwicklungszyklus fort.
- Multidisziplinäre Teams einbeziehen: Beziehen Sie Mitglieder*innen mit unterschiedlichen Perspektiven ein, z. B. Entwickler*innen, Sicherheitsexpert*innen, Betriebsmitarbeiter*innen und Geschäftsanalyst*innen.
- Standard-Rahmenwerke und -Methoden verwenden: Verwenden Sie etablierte Rahmenwerke (wie NIST, ISO oder OCTAVE) und Methoden (wie STRIDE oder PASTA), um den Prozess zu steuern.
- Halten Sie die Dokumentation auf dem neuesten Stand: Stellen Sie sicher, dass alle Ergebnisse und Maßnahmen gut dokumentiert und leicht zugänglich sind.
- Integration in den Entwicklungsprozess: Integrieren Sie die Bedrohungsmodellierung und Risikobewertung in den Softwareentwicklungszyklus (SDLC) und machen Sie sie zu einem Teil der regulären Entwicklungsverfahren.
- Aufklärung und Schulung: Schulen Sie alle am Prozess Beteiligten, um sicherzustellen, dass sie die Bedeutung und die Methoden der Bedrohungsmodellierung und Risikobewertung verstehen.
- Regelmäßig neu bewerten: Sicherheit ist keine einmalige Angelegenheit. Bewerten Sie Bedrohungen und Risiken regelmäßig neu, um auf neue Schwachstellen, Änderungen im System oder neue Bedrohungen zu reagieren.
Sicherheitsprüfung
Sicherheitstests sind ein wichtiger Bestandteil des Softwareentwicklungszyklus und der allgemeinen Cybersicherheitsstrategie. Dabei werden die Sicherheitseigenschaften eines Systems bewertet, um sicherzustellen, dass sie Daten schützen und die Funktionalität wie vorgesehen aufrechterhalten. Im Folgenden finden Sie einen Überblick über die verschiedenen Arten von Sicherheitstests und wie sie üblicherweise durchgeführt werden:
) Scannen auf Schwachstellen: Automatisierte Tools scannen Systeme, Netzwerke und Anwendungen auf bekannte Schwachstellen.
b) Penetrationstests (Pen Testing): Bei Penetrationstests wird ein Cyberangriff simuliert, um Schwachstellen in Systemen, Netzwerken und Anwendungen zu ermitteln und auszunutzen. Sie werden in der Regel von ethischen Hackern durchgeführt, die dieselben Techniken wie böswillige Angreifer anwenden, dies aber auf kontrollierte und autorisierte Weise tun.
c) Sicherheitsprüfung: Hierbei handelt es sich um eine systematische Bewertung von Sicherheitskontrollen und -prozessen, um sicherzustellen, dass diese korrekt und wirksam umgesetzt werden.
d) Sicherheitsbewertung: Eine umfassendere Bewertung, die Schwachstellen-Scans, Penetrationstests, Sicherheitsprüfungen und Risikobewertungen umfasst. Sie liefert ein umfassendes Bild der Sicherheitslage einer Organisation.
e) Risikobewertung: Dieser Prozess beinhaltet die Identifizierung, Quantifizierung und Priorisierung von Risiken für das Unternehmensvermögen.
f) Ethisches Hacking: Ähnlich wie bei Penetrationstests werden beim Ethical Hacking die Systeme eines Unternehmens absichtlich angegriffen, um Schwachstellen aus der Sicht eines Angreifers zu finden.
g) Code-Überprüfung: Code-Reviews können manuell oder mit automatisierten Tools durchgeführt werden und sind ein wesentlicher Bestandteil der Sicherung des Softwareentwicklungsprozesses.
h) Überprüfung des Konfigurationsmanagements: Es ist von entscheidender Bedeutung, dass die Systeme und Anwendungen sicher konfiguriert sind.
i) Prüfung der Einhaltung von Vorschriften: Überprüfung, ob Systeme und Prozesse den einschlägigen Sicherheitsstandards und -vorschriften (wie GDPR, HIPAA, PCI DSS usw.) entsprechen.
j) Red Teaming: Eine mehrschichtige Angriffssimulation, bei der getestet wird, wie gut die Mitarbeiter*innen, Netzwerke, Anwendungen und physischen Sicherheitskontrollen einer Organisation einem Angriff eines realen Gegners standhalten können.
k) Soziale Manipulations-Tests: Testen, wie anfällig die Mitarbeiter*innen eines Unternehmens für Soziale Manipulations-Taktiken wie Phishing, Pretexting, Baiting oder Tailgating sind.
l) Bewertung des Zustands: Analyse und Verständnis des Sicherheitszustands von Computersystemen, Netzwerken und anderen Informationsressourcen, um Sicherheitslücken zu identifizieren.

Abbildung-6
(Quelle: https://www.educba.com/security-testing/)
