Zusammenfassung
In diesem Modul haben Sie erfahren, wie Sie Sicherheit in jede Phase des Softwareentwicklungslebenszyklus über DevSecOps-Prinzipien und -Praktiken integrieren. Herkömmliche Ansätze, die die Sicherheit vor der Veröffentlichung als endgültigen Prüfpunkt behandeln, Engpässe verursachen, Kosten erhöhen und häufig kritische Sicherheitsrisiken bis zur Produktion nicht erfassen können. Durch die Verlagerung der Sicherheit nach links und die Übertragung der Verantwortung auf die gesamte Belegschaft können Unternehmen ihre Entwicklungsgeschwindigkeit beibehalten und gleichzeitig ihre Sicherheitslage erheblich verbessern.
SQL-Einfügungsangriffe
Sie haben gelernt, wie die SQL-Injektion eines der gefährlichsten und häufigsten Webanwendungsrisiken bleibt:
- Angriffsmechanismus: Angreifer fügen schädlichen SQL-Code in Anwendungseingaben ein, und missbrauchen die unzureichende Eingabeüberprüfung, um Datenbankabfragen zu bearbeiten.
- Potenzielle Schäden: Erfolgreiche Angriffe können die Authentifizierung umgehen, gesamte Datenbankinhalte abrufen, Datensätze ändern oder löschen, Betriebssystembefehle ausführen oder Denial of Service verursachen.
- Weit verbreitete Auswirkungen: DIE SQL-Einfügung wirkt sich auf alle wichtigen Datenbanksysteme aus, einschließlich MySQL, Oracle Database, Microsoft SQL Server, PostgreSQL und SQLite.
- Präventionserwendungen: Schützen Sie vor SQL-Einfügungen, indem Sie parametrisierte Abfragen verwenden, Eingaben überprüfen und bereinigen, die Prinzipien der geringsten Rechte anwenden, regelmäßige Sicherheitstests durchführen und Datenbankaktivitäten überwachen.
DevSecOps-Prinzipien
Sie haben untersucht, wie DevSecOps die Sicherheit von einem Hindernis in einen Enabler transformiert:
- Sicherheitslücken in Cloudanwendungen: Viele Anwendungen weisen Verschlüsselungslücken für ruhende und übertragene Daten auf, und es fehlen ordnungsgemäße Sitzungsschutzmechanismen wie HTTP-Sicherheitsheader.
- Herkömmliche Probleme: Herkömmliche Ansätze schaffen ungeplante Arbeit am Ende der Entwicklungszyklen, teure Nacharbeiten, Engpässe bei Releaseprozessen und Entprioritisierung von Sicherheitsbedenken.
- DevSecOps-Lösung: Integrieren Sie Sicherheit von Anfang an in die Entwicklung und macht sie zu einer gemeinsamen Verantwortung für Entwicklung, Betrieb und Sicherheitsteams.
- Erweiterter Sicherheitsbereich: Über herkömmliche Zugriffssteuerung und Umkreisschutz hinaus sichert DevSecOps die gesamte Pipeline, einschließlich Repositorys, Buildserver, Artefaktspeicher, Bereitstellungstools, Infrastruktur als Code, Konfigurationsverwaltung und geheime Verwaltung.
- Sicherheit als Code: Automatisieren Sie sowohl die Infrastruktursicherheit (IaC-Überprüfung, Richtlinien-as-Code- und Complianceüberprüfung) als auch die Anwendungssicherheit (SAST, DAST, SCA, Containerüberprüfung), um eine kontinuierliche Sicherheitsüberprüfung zu ermöglichen.
Sichere DevOps-Pipeline
Sie haben untersucht, wie sichere Pipelines die Standard-CI/CD um wichtige Sicherheitsfunktionen erweitern:
- Paketverwaltung mit Sicherheitsgenehmigung: Implementieren Sie Genehmigungsworkflows, die Pakete auf bekannte Sicherheitsrisiken überprüfen, Lizenzen überprüfen, Abhängigkeiten analysieren und kontinuierlich auf neue Sicherheitsprobleme überwachen, bevor Sie Komponenten von Drittanbietern in Ihre Codebasis integrieren.
- Überprüfung der Quellcodesicherheit: Stellen Sie statische Anwendungssicherheitstests (SAST) bereit, um Code zu analysieren, ohne ihn auszuführen, geheime Überprüfung, um die Gefährdung von Anmeldeinformationen zu verhindern, und codequalitätsanalyse, um Probleme zu identifizieren, die zu Sicherheitsrisiken führen.
- Überprüfungszeitpunkt: Führen Sie nach Abschluss der Erstellung, aber vor dem Testen und der Bereitstellung Sicherheitsprüfungen durch, um Probleme frühzeitig zu erkennen, wenn die Kosten für deren Behebung am geringsten sind.
- Toolintegration: Verwenden Sie Tools wie GitHub CodeQL, SonarQube, Checkmarx, Veracode und Microsoft Security Code Analysis, die direkt in Ihre Pipeline integriert sind.
Wichtige Überprüfungspunkte
Sie haben kritische Sicherheitsprüfpunkte während des gesamten Entwicklungsprozesses entdeckt:
- Sicherheitsprüfungen auf IDE-Ebene: Erfassen Sie Sicherheitsrisiken während des Schreibens von Code mit Echtzeitfeedback, sofortigen Lernmöglichkeiten und Korrekturen vor dem Commit, wodurch die Feedbackschleife auf Sekunden reduziert wird.
- Commitsteuerelemente im Repository: Implementieren Sie Git-Branchrichtlinien, die Codeüberprüfungen, die Verknüpfung von Arbeitselementen für Prüfpfade und erfolgreiche CI-Builds vor dem Zusammenführen von Änderungen vorschreiben.
- Codeüberprüfungsanforderungen: Stellen Sie die manuelle Überprüfung von Sicherheitsbedenken wie Eingabeüberprüfung, Authentifizierungs- und Autorisierungsmechanismen, die Verarbeitung vertraulicher Daten, die Verwendung von Sicherheitsbibliotheken und das Fehlen hartcodierter geheimer Schlüssel sicher.
- Automatisierte Prüfungen in Pullanforderungen: Führen Sie statische Analysen, Abhängigkeitsüberprüfungen, geheime Erkennung und Codequalitätsanalyse aus, wobei Ergebnisse direkt in der Pullanforderungsschnittstelle angezeigt werden.
- Schrittweise Implementierung: Nehmen Sie bei ausgereiften Produkten validierungspunkte schrittweise an, priorisieren Sie prüfpunkte mit hohem Einfluss und bauen Sie die Sicherheitskultur im Laufe der Zeit auf.
Laufende Sicherheitsüberprüfung
Sie haben gelernt, wie die kontinuierliche Validierung die Sicherheit während des gesamten Softwarelebenszyklus aufrecht erhält:
- Risiken von Drittanbieterkomponenten: Moderne Anwendungen sind stark von Open Source- und Drittanbieterpaketen abhängig, und es werden Sicherheitsrisiken, Lizenzcomplianceprobleme und Angriffsvektoren der Lieferkette eingeführt.
- Wert der Früherkennung: Das Auffinden von Sicherheitsrisiken während der Entwicklung kostet 10-100 Mal weniger als die Behebung in der Produktion und macht automatisiertes Scannen wirtschaftlich kritisch.
- Statische Codeanalyse: Verwenden Sie Tools wie SonarQube, Visual Studio Code Analysis, Checkmarx, BinSkim und sprachspezifische Analysatoren, um sicherzustellen, dass Code Sicherheit und Wartungsregeln befolgt.
- Überprüfung der Sicherheitsanfälligkeit: Automatisieren Sie die Erkennung bekannter Schwachstellen in Abhängigkeiten mithilfe von Tools wie Mend (WhiteSource), GitHub Dependabot, Snyk und Azure Artifacts, die kontinuierlich überwachen, Risiken priorisieren und Anleitungen zur Behebung bereitstellen.
- Vorteile der Softwarekompositionsanalyse: Erhalten Sie umfassende Einblicke in alle Abhängigkeiten, verfolgen Sie Versionen, identifizieren Sie nicht verwaltete Pakete, priorisieren Sie Risiken mit CVSS-Bewertungen, verwalten Sie kontinuierliche Überwachung und generieren Sie Compliancedokumentation.
Methodik der Bedrohungsmodellierung
Sie haben die Bedrohungsmodellierung als strukturierten Ansatz zum Verständnis von Sicherheitsrisiken untersucht:
- Fünfstufiger Prozess: Definieren Sie Sicherheitsanforderungen (Vertraulichkeit, Integrität, Verfügbarkeit, Compliance), erstellen Sie Anwendungsdiagramme (Komponenten, Datenflüsse, Sicherheitsgrenzen), identifizieren Sie Bedrohungen mithilfe der STRIDE-Methodik, entwickeln Sie Entschärfungsstrategien (Beseitigen, Erkennen, Reagieren) und überprüfen Sie, ob Gegenmaßnahmen wirksam bleiben.
- STRIDE-Methodik: Betrachten Sie Bedrohungen systematisch in sechs Kategorien– Spoofing-Identität, Manipulation mit Daten, Ablehnung von Aktionen, Offenlegung von Informationen, Denial of Service und Rechteerweiterung.
- Häufige Bedrohungen und Gegenmaßnahmen: Adressieren Sie die SQL-Einfügung mit parametrisierten Abfragen und der Eingabeüberprüfung, verhindern Sie Sitzungs-Hijacking mit sicherer Sitzungsverwaltung und HTTPS, schützen Sie vor Man-in-the-Middle-Angriffen mit TLS- und Zertifikatanheftung, und mindern Sie DDoS mit Cloudschutzdiensten und -ratelimiting.
- Lebenszyklusintegration: Führen Sie während des anfänglichen Entwurfs umfassende Bedrohungsmodellierung durch, wiederholen Sie wichtige neue Features, führen Sie regelmäßige Überprüfungen auch ohne wesentliche Änderungen, Aktualisierungen nach Sicherheitsvorfällen durch, und verringern Sie das Risiko im Laufe der Zeit schrittweise.
- Microsoft Threat Modeling Tool: Verwenden Sie dieses kostenlose Tool, um Systemkomponenten mit Standardnotation zu visualisieren, automatisches Generieren potenzieller Bedrohungen basierend auf systemstruktur, Dokumentminderungsentscheidungen, Nachverfolgen des Implementierungsstatus und Integration in Azure DevOps.
Automatisierte CodeQL-Sicherheitsanalyse
Sie haben gelernt, wie GitHub CodeQL anspruchsvolle automatisierte Sicherheitsanalysen ermöglicht:
- Semantische Codeanalyse: CodeQL behandelt Code als Daten, indem er in eine abfragbare Datenbank konvertiert wird, die Syntaxstrukturen, Kontrollflussdiagramme und Datenflusspfade erfasst. Dies ermöglicht eine genaue Erkennung von Sicherheitsrisiken, die codekontexte und nicht nur den Musterabgleich versteht.
- Dreistufige Analyse: Erstellen Sie eine CodeQL-Datenbank, die die Struktur Ihres Codes darstellt, Führen Sie Abfragen für die Datenbank aus, um Sicherheitsprobleme zu finden, und interpretieren Sie Ergebnisse mit Priorisierung, Kontextinformationen und Anleitungen zur Behebung.
- CodeQL-Abfragesprache: Schreiben Sie deklarative Abfragen mit objektorientierter Logikprogrammierung, die beschreibt, was Sie finden müssen, anstatt sie zu finden, mit umfangreichen Standardabfragebibliotheken für OWASP Top 10-Sicherheitsrisiken und CWE-Kategorien.
- GitHub-Integration: Aktivieren Sie die Codeüberprüfung mit nur einem Klick, empfangen Sie Inlineanmerkungen für Pullanforderungen mit anfälligen Codezeilen, konfigurieren Sie CodeQL als erforderliche Überprüfung, die vor dem Zusammenführen übergeben werden muss, und zeigen Sie alle Ergebnisse auf der Registerkarte "Sicherheit" mit detaillierten Erläuterungen an.
- CI/CD-Pipelineintegration: Verwenden Sie CodeQL in GitHub Actions, Azure Pipelines, Jenkins, GitLab CI/CD, CircleCI und benutzerdefinierten Systemen über die Befehlszeilenschnittstelle und konfigurieren Sie Sicherheitsgates, die Builds bei Erkennung von Sicherheitslücken mit hoher Schwere fehlschlagen lassen.
- Entwicklungstools: Schreiben und Testen von Abfragen in Visual Studio Code mit der CodeQL-Erweiterung, die Syntaxmarkierung, AutoVervollständigen, lokale Analyse und Debuggingunterstützung bereitstellt.
Wichtige Erkenntnisse
Denken Sie beim Implementieren von DevSecOps in Ihrer Organisation an die folgenden grundlegenden Prinzipien:
Sicherheit ist die Verantwortung aller : Gehen Sie über die Denkweise hinaus, die die Sicherheit ausschließlich zu einem Sicherheitsteam gehört. Entwickler, Betriebsingenieure, Tester und Geschäftsbeteiligte tragen alle zur Anwendungssicherheit bei. Wenn Sicherheit teil der täglichen Arbeit aller Benutzer und nicht einer separaten Funktion wird, erstellen Sie eine Kultur, in der sichere Praktiken die Standardeinstellung sind.
Sicherheit nach links verschieben: Behandeln Sie Sicherheitsbedenken in der frühesten möglichen Phase. Das Auffinden und Beheben einer Sicherheitsanfälligkeit während der Entwicklung kostet erheblich weniger als das Reparieren in der Produktion – oft 10 bis 100 Mal weniger. Durch die Integration von Sicherheitsüberprüfungen in die IDE, den Codeüberprüfungsprozess und die CI-Pipeline erfassen Sie Probleme, wenn sie am einfachsten und kostengünstigsten zu beheben sind.
Automatisieren der Sicherheitsüberprüfung: Manuelle Sicherheitsüberprüfungen skalieren nicht auf moderne Release-Kadenzen. Automatisieren Sie Sicherheitsprüfungen für statische Codeanalyse, Überprüfung von Abhängigkeitsrisiken, geheime Erkennung und Codequalität. Automatisierung bietet eine konsistente Sicherheitsüberprüfung für jeden Commit, ohne die Entwicklungsgeschwindigkeit zu verlangsamen.
Fortlaufend überprüfen: Sicherheit ist kein einmaliges Tor vor der Veröffentlichung. Implementieren Sie die Sicherheitsüberprüfung in mehreren Phasen – in der IDE des Entwicklers, während der Codeüberprüfung, in CI-Builds, vor der Bereitstellung und in der Produktion. Die kontinuierliche Überprüfung schafft mehrere Möglichkeiten, Probleme zu erfassen und eine detaillierte Verteidigung zu bieten.
Nutzen Sie Bedrohungsmodellierung proaktiv: Warten Sie nicht, bis Sicherheitsvorfälle eintreten, um über Bedrohungen nachzudenken. Verwenden Sie die strukturierte Bedrohungsmodellierung während des anfänglichen Entwurfs und beim Hinzufügen wichtiger Features. Die STRIDE-Methodik bietet einen systematischen Ansatz, den nicht sicherheitsrelevante Experten anwenden können, um Bedrohungen zu identifizieren und Maßnahmen zu planen, bevor Sie Code schreiben.
Nutzen Sie automatisierte Analysetools: Tools wie CodeQL, SonarQube und Snyk ermöglichen anspruchsvolle Sicherheitsanalysen, die für die manuelle Ausführung unpraktisch wären. Diese Tools verstehen die Codesemantik, verfolgen den Datenfluss und finden komplexe Sicherheitsrisiken in großen Codebasen. Integrieren Sie sie in Ihre Pipeline, um erweiterte Sicherheitsanalyseroutinen zu erstellen.
Nachverfolgen und Verwalten von Abhängigkeiten: Moderne Anwendungen sind stark von Drittanbieterkomponenten abhängig. Die automatisierte Abhängigkeitsüberprüfung identifiziert bekannte Sicherheitsrisiken und Lizenzcomplianceprobleme in Ihren Abhängigkeiten. Die Softwarekompositionsanalyse bietet Einblicke in Ihre Lieferkette und hilft Ihnen, schnell zu reagieren, wenn neue Sicherheitsrisiken offengelegt werden.
Dokumentsicherheitsentscheidungen: Verwenden Sie dokumentation zur Bedrohungsmodellierung, Sicherheitsanforderungen und automatisierte Toolausgabe, um Überwachungspfade zu erstellen, die zeigen, wie Sicherheitsbedenken behoben wurden. Diese Dokumentation veranschaulicht due diligence, hilft neuen Teammitgliedern, den Sicherheitskontext zu verstehen und Stellt Nachweise für Complianceanforderungen bereit.
Balance Geschwindigkeit und Sicherheit: Bei DevSecOps geht es nicht darum, die Entwicklung zu verlangsamen, um Sicherheitsüberprüfungen hinzuzufügen – es geht darum, Sicherheit so reibungslos zu integrieren, dass sie den Entwicklungsprozess nicht ausbremst. Automatisierte Tools, klare Richtlinien und Sicherheit, die in normale Workflows integriert sind, ermöglichen Es Teams, schnell zu arbeiten, ohne die Sicherheit zu beeinträchtigen.
Iterieren und verbessern Sie: Beginnen Sie mit hochwirksamen Sicherheitspraktiken und erweitern Sie diese im Laufe der Zeit. Sie müssen nicht sofort jede Sicherheitskontrolle implementieren. Beginnen Sie mit automatisierten Überprüfungen von Abhängigkeiten oder Pullanforderungssicherheitsprüfungen, demonstrieren Sie Wert, und fügen Sie schrittweise komplexere Validierungspunkte hinzu. Kontinuierliche Verbesserung der Sicherheit spiegelt den iterativen Ansatz von DevOps selbst wieder.
Durch die Anwendung dieser DevSecOps-Praktiken erstellen Sie Software, die sowohl schnell bereitgestellt als auch sicher nach Design bereitgestellt wird. Sicherheit wird zu einem Enabler und nicht zu einem Hindernis, sodass Ihre Organisation mit Vertrauen innovationen kann.
Weitere Informationen
- DevSecOps-Tools und -Dienste | Microsoft Azure
- Aktivieren von DevSecOps mit Azure und GitHub – DevSecOps | Microsoft Learn.
- Advanced Threat Protection: Azure SQL-Datenbank, SQL Managed Instance und Azure Synapse Analytics | Microsoft Learn.
- Sichern von Azure Pipelines – Azure Pipelines | Microsoft Learn.
- SQL-Einschleusung – SQL Server | Microsoft Learn
- CodeQL-Übersicht.
- Übersicht über das Microsoft Threat Modeling Tool.