Quelle schützen

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

In diesem Dokument werden Best Practices für die Verwaltung von Software-Quellcode beschrieben.

Ein grundlegender Schritt, den Softwareteams zur Verwaltung ihrer Quelle ausführen, ist die Einführung eines Versionsverwaltungssystems (Version Control System, VCS). Versionsverwaltungssysteme bieten Verlauf und Nachvollziehbarkeit von Änderungen. Gehostete Versionsverwaltungssysteme wie GitHub bieten zusätzliche Vorteile wie Verfügbarkeit, Stabilität, Sicherheitskontrollen, integrierte Codeprüfungstools und die Einbindung in andere Cloud-Dienste.

Die meisten Teams verwenden heute die Versionsverwaltung. Es gibt aber viele Möglichkeiten, ein Versionsverwaltungssystem und seine Einbindungen in andere Teile der CI/CD-Pipeline zu konfigurieren.

In diesem Dokument werden Sicherheitsaspekte in der Softwarelieferkette für die Konfiguration eines Versionsverwaltungssystems erläutert. Darin werden Best Practices aus Lieferkettenebenen für Softwareartefakte beschrieben, einem Framework zum Schutz Ihrer Softwarelieferkette. Das Framework enthält Anforderungen auf mehreren Ebenen, mit denen Sie Änderungen schrittweise implementieren können, einschließlich Quellanforderungen.

Ein Versionsverwaltungssystem mit Änderungsverlauf und unveränderlichen Überarbeitungen ist eine SLSA-Anforderung der Stufe 2. Wir empfehlen, die SLSA-Level 2 als Ausgangsbasis für die Softwarelieferkette anzupassen.

In SLSA-Level 3 erfüllen Quell- und Build-Plattformen strengere Sicherheitsanforderungen, einschließlich des verifizierten Quellverlaufs und der Richtlinien zur Quellenaufbewahrung. In SLSA 4 werden den Quellenanforderungen Rezensionen von zwei Personen hinzugefügt.

Versionsverwaltung für mehr als Ihre Anwendungsquelle verwenden

Das Speichern der Anwendungsquelle in der Versionsverwaltung ist eine bekannte Praxis, wenn historische Prüfungen und Prüfungen erforderlich sind. Es gibt jedoch andere Arten von Quellen, die auch von der Versionsverwaltung profitieren, einschließlich Konfiguration, Richtlinie und Daten. Dazu gehören alle Dateien, die:

  • Auswirkungen auf Verfügbarkeit und Sicherheit Ihrer Computing-Infrastruktur
  • Fertigstellen der Zusammenarbeit erforderlich
  • Wiederholbaren Genehmigungsprozess verlangen
  • Änderungsverlauf verlangen

Dazu einige Beispiele:

  • Infrastruktur als Code: Organisationen, die ihre Infrastruktur skalierbar und sicher verwalten möchten, setzen Infrastruktur als Code als Schlüsselmethode ein. Sie können beispielsweise Terraform-Module in der Versionsverwaltung speichern, die Artifact Registry-Repositories erstellen.
  • Konfigurationsverwaltung: Die Konfigurationsverwaltung ähnelt der Infrastruktur als Code, aber sie konzentriert sich auf die Verwaltung der Anwendungskonfiguration mit Tools wie Ansible, Puppet und Chef. Sie speichern und verwalten die Konfigurationsdateien für Anwendungen in Ihrem Versionsverwaltungssystem.
  • Datenbankkonfigurationen und Migrationsskripts: Speichern Sie die Konfiguration und die Skripts für Ihre Produkt- und Analyse- oder Logging-Datenbanken.
  • Jupyter-Notebooks: Es gibt verschiedene Möglichkeiten, mit Notebooks zu arbeiten, die in GitHub gespeichert sind, darunter [Erweiterung für JupyterLab][jlab], Colaboratory und [Vertex AI Workbench][vertex]
  • Sicherheitsrichtlinien: Richtliniendateien für die automatisierte Durchsetzung von Richtlinien speichern. Beispielsweise können Sie Gatekeeper-Richtlinien speichern, die Bereitstellungsverhalten in GKE zulassen oder ablehnen, oder Sentinel-Richtlinien, die eine Bereitstellung von Infrastruktur verhindern, die gegen die Richtlinien verstößt.

Die Versionsverwaltung ist eine der technischen Funktionen, die in der DORA DevOps-Studie identifiziert wurden und eine höhere Softwarebereitstellung und Unternehmensleistung ermöglichen. Wenn Sie Ihre Skripts, Quellcode- und Konfigurationsdateien in der Versionsverwaltung speichern, können Sie Umgebungen reproduzieren und wiederherstellen, Änderungen verfolgen und prüfen sowie schnell auf Fehler reagieren.

Repository-Konfiguration

Repositories sind die grundlegende logische Einheit zum Organisieren von Code und zugehörigen Rollen, Berechtigungen, Integrationen und Genehmigungen.

Folgende Probleme können bei der Repository-Konfiguration auftreten:

  • Die Repository-Konfiguration ist nicht standardisiert. Es wird daher schwierig, zu prüfen, ob die Repository-Sicherheit der Anwendung entspricht, die sie darstellt, insbesondere in dem häufigen Szenario, in dem eine Organisation hunderte oder tausende Repositories hat.
  • Wer das Repository erstellt, wird zum Inhaber mit uneingeschränkten Administratorberechtigungen, einschließlich der Möglichkeit, Zusammenführungen mit anderen Prüfern durchzuführen.
  • Die Einbindung von Repositories in Codeanalysen, Build-Server, Problemverfolgung, Benachrichtigungsdienste und andere Teile der CI/CD-Infrastruktur kann beträchtliche Arbeit erfordern. Mit einer Standardmethode zum Erstellen und Einrichten von Repositories werden wiederkehrende Aufgaben gespeichert und Best Practices unterstützt.

Zu den Best Practices gehören:

  • Richten Sie Repositories mit einem automatisierten, wiederholbaren, sicherheitsbewussten Prozess ein. Sie können beispielsweise Terraform-Module einrichten, die die Sicherheitsanforderungen der Anwendung erfüllen, für die das Repository vorgesehen ist. Anwendungen mit hoher Sicherheit erfordern mehr und andere Genehmiger zur Zusammenführung als Anwendungen mit niedrigerer Sicherheit.
  • Schaffen Sie eine Möglichkeit für Repository-Administratoren, aus einer Reihe von Repository-Konfigurationsvorlagen auszuwählen, die die neue Repository-Einrichtung vorantreiben, anstatt jedes Repository von Grund auf neu zu konfigurieren. Diese Vorlagen sollten die verschiedenen Sicherheitsebenen Ihrer Anwendungen widerspiegeln und mit den Nutzeridentitäten synchronisiert werden, die für jede Sicherheitsebene erforderlich sind. In der Praxis bedeutet dies in der Regel, ein hierarchisches IAM-System (Identity and Access Control) zu verwenden, das die Anwendungen und Infrastruktur in Ihrer Organisation und die dafür verantwortlichen Nutzer widerspiegelt.
  • Zentrale Identitätsverwaltung mit Multi-Faktor-Authentifizierung für Repository-Nutzer erforderlich.
    • Mit einer zentralisierten Identitätsverwaltung sorgen Sie dafür, dass Sie nach dem Verlassen der Organisation oder dem Wechsel zu neuen Teams nur minimale Berechtigungen für die Quellverwaltung haben.
    • Die Multi-Faktor-Authentifizierung verringert das Risiko von Phishing und anderen Angriffen auf Ihre Quelle erheblich. Die Bestätigung in zwei Schritten ist eine der Anforderungen der SLSA-Stufe 4 für Code-Genehmiger.
  • Beschränken Sie Repository-Inhaber auf eine kleine Anzahl von vertrauenswürdigen Mitarbeitern. Dies erfordert möglicherweise die Einbindung der Versionsverwaltung in ein Identitätsverwaltungssystem und die Möglichkeit, Richtlinien weiter oben in der Organisation festzulegen. Entfernen Sie nach Möglichkeit die Möglichkeit für Repository-Inhaber, Zusammenführungen ohne einen zweiten Prüfer auszuführen.

Codeüberprüfung

Die Codeüberprüfung ist das wichtigste Mittel, mit dem Unternehmen die Qualität und Sicherheit ihrer Software aufrechterhalten. Bei der Codeüberprüfung wird versucht, verschiedene Fehlermodi wie die folgenden zu beheben:

  • Einführung von Code mit fehlerhaften Software oder unflexiblem Design
  • Schlecht definierte APIs
  • Einführung von Sicherheitsproblemen aufgrund von unsicherem Code, der vom Entwickler geschrieben wurde
  • Einführung von Sicherheitsproblemen durch Hinzufügen von Bibliotheken von Drittanbietern, die nicht sicher sind oder unsicher werden können

Hier sind einige Möglichkeiten, Risiken zu minimieren:

  • Kontinuierliche Tests während des gesamten Softwarelebenszyklus implementieren Automatisierte Tests, die ausgelöst werden, wenn Sie die Quelle für das Versionsverwaltungssystem festlegen, sind eine Möglichkeit für Entwickler, schnell Feedback zu Problemen zu erhalten, die bei den Tests gefunden wurden.
  • Legen Sie die Anzahl und Identität der Prüfer fest, die der Sicherheitsebene der Anwendung entsprechen. Eine Intranet-App mit geringer Nutzung hat beispielsweise niedrigere Sicherheitsanforderungen als eine öffentlich zugängliche geschäftskritische Anwendung.
  • Weisen Sie Prüfer basierend auf dem technischen Know-how und dem Vertrauensniveau zu, das für die Änderung des Commits erforderlich ist. Der Prüfer sollte in der zu überprüfenden Sprache, mit den Systemen, mit denen der Code interagiert, und mit den Sicherheitsrisiken in dieser Anwendungsklasse gut vertraut sein. Die technische Anforderung umfasst viele Dimensionen. Beispiel:
    • Ist der Code lesbar?
    • Ist es sicher?
    • Werden geeignete Bibliotheken von Drittanbietern verwendet?
    • Ist der Schutz von Bibliotheken von Drittanbietern eingerichtet?
    • Ist der Code zusammensetzbar?
    • Entspricht das API-Design den Best Practices?
  • Rezensionen sollten nicht bürokratisch sein, sondern eine kontinuierliche Diskussion rund um Best Practices sein. Erstellen Sie Checklisten, Styleguides und Designstandards für jeden Teil Ihres Technology Stacks sowie Schulungsprogramme für neue Entwickler. Einige IDEs wie VS Code und IntelliJ bieten Linter, die programmatische oder stilistische Fehler automatisch melden können. Linter sorgen dafür, dass Entwickler einen konsistenteren Code erstellen und Codeprüfer sich auf Probleme konzentrieren können, die sich mit automatisierten Prüfungen nicht einfach erkennen lassen.

    Developing Secure Software ist ein kostenloser Onlinekurs, der von der Open Source Security Foundation (OpenSSF) erstellt wurde. Darin werden grundlegende Methoden der Softwareentwicklung im Zusammenhang mit der Sicherheit der Softwarelieferkette beschrieben.

  • Führen Sie Codeüberprüfungen mit Feature-Branch-Pull-Anfragen durch, sobald ein einzelner Entwickler bereit ist. Warten Sie mit der Sicherheitsprüfung und der Codeüberprüfung nicht, bis ein neuer Release getestet wird.

  • Durch das Einbinden von Scans auf Sicherheitslücken, einschließlich des Scans von Bibliotheken von Drittanbietern, in Pull-Anfragen und IDEs können Probleme so schnell wie möglich erkannt werden. Mit der On-Demand Scanning API in Google Cloud können Sie Container lokal auf Sicherheitslücken scannen.

  • Integrieren Sie automatisierte Tests vor dem Zusammenführen, damit Entwickler Änderungen identifizieren und beheben können, die zu Problemen mit der Anwendung führen. Weitere Informationen zu kontinuierlichen Tests

Genehmigungen zusammenführen

Bei kontinuierlich integrierten CI/CD-Pipelines kann das Zusammenführen von Code in einem Produktionszweig zu nachgelagerten Änderungen führen, einschließlich des automatisierten Builds und Roll-outs. Aus diesem Grund ist das Sichern von Personen, die zusammengeführt werden können, ein wichtiger Teil der Sicherung von Softwarebereitstellungen. Folgende Punkte gehören dazu:

  • Richten Sie geschützte Zweiginhaber in Ihren Produktionszweigen ein. Die Anzahl und Identität der Personen, die zusammengeführt werden dürfen, sollten den Sicherheitsanforderungen der Anwendung entsprechen. Für SLSA-Level 4 sind zwei stark authentifizierte Genehmiger erforderlich, aber die Anzahl der Genehmiger sollte zum Inhalt des Repositorys passen.
  • Sie können die Identitäten der Repository-Inhaber genau steuern, da sie in den meisten Versionsverwaltungssystemen selbst Zusammenführungen ausführen können.
  • Trennen Sie Bereitstellungs- und Zusammenführungsprozesse für Roll-outs mit mehreren Repositories und Multi-Artefakt-Roll-outs.

Tools für die sichere Entwicklung

Software Delivery Shield ist eine vollständig verwaltete End-to-End-Sicherheitslösung für die Lieferkette. Er bietet umfassende und modulare Funktionen und Tools für alle Google Cloud-Dienste, mit denen Entwickler, DevOps und Sicherheitsteams die Sicherheit der Softwarelieferkette verbessern können. Die folgenden Komponenten von Software Delivery Shield tragen zum Schutz des Softwarequellcodes bei:

  • Cloud Workstations (Vorschau)

    Cloud Workstations bietet vollständig verwaltete Entwicklungsumgebungen in Google Cloud. IT- und Sicherheitsadministratoren können ihre Entwicklungsumgebungen ganz einfach bereitstellen, skalieren, verwalten und schützen. Außerdem können Entwickler mit konsistenten Konfigurationen und anpassbaren Tools auf Entwicklungsumgebungen zugreifen.

    Mit Cloud Workstations können Sie die Sicherheit verbessern und den Sicherheitsstatus Ihrer Anwendungsentwicklungsumgebungen verbessern. Sie bietet Sicherheitsfeatures wie VPC Service Controls, privaten eingehenden oder ausgehenden Traffic, erzwungene Image-Updates und Zugriffsrichtlinien für Identity and Access Management. Weitere Informationen finden Sie in der Dokumentation zu Cloud Workstations.

  • Cloud Code-Quelle schützen (Vorschau)

    Cloud Code bietet IDE-Unterstützung zum Erstellen, Bereitstellen und Einbinden von Anwendungen in Google Cloud. Entwickler können damit eine neue Anwendung aus Beispielvorlagen erstellen und anpassen und die fertige Anwendung ausführen. Mit dem Cloud Code-Quellschutz erhalten Entwickler Echtzeit-Sicherheitsfeedback, z. B. zur Identifizierung von anfälligen Abhängigkeiten und Lizenzberichten, während sie in ihren IDEs arbeiten. Es bietet schnelles und umsetzbares Feedback, mit dem Entwickler zu Beginn des Softwareentwicklungsprozesses ihren Code korrigieren können.

    Verfügbarkeit der Funktion: Der Cloud Code-Quellschutz ist nicht für den öffentlichen Zugriff verfügbar. Informationen zum Zugriff auf dieses Feature finden Sie auf der Seite zu Zugriffsanfragen.

Nächste Schritte