Was ist Containersicherheit?
Containersicherheit konzentriert sich auf den Schutz von Container-Registries, den zentralen Speicher- und Verteilungssystemen für Container-Images. Container-Registrierungsstellen spielen eine zentrale Rolle im Container-Ökosystem, da sie die Integrität und Sicherheit von containerisierten Anwendungen gewährleisten. Zu einer angemessenen Containersicherheit gehören die Verwendung vertrauenswürdiger Registrierungen, die Implementierung einer strengen Zugriffskontrolle, die Überwachung auf Schwachstellen und die Sicherung des Hosting-Servers. Außerdem müssen unsichere Verbindungen abgelehnt und veraltete Bilder entfernt werden. Indem sie der Containersicherheit Priorität einräumen, können Organisationen ihre containerisierten Umgebungen schützen und das Vertrauen von Benutzern und Kunden erhalten.
Containersicherheit im Register erklärt
Die Containersicherheit konzentriert sich auf eine wichtige Komponente des Container-Ökosystems - die Container-Registrierung. Im Rahmen der Containersicherheitfungiert die Registry als Verwahrer von Container-Images, den Bausteinen von containerisierten Anwendungen. Das Container-Register ist also mehr als nur eine Lagereinheit. Es handelt sich vielmehr um einen Knotenpunkt, an dem die Integrität von Anwendungsimages sowohl gewahrt als auch verteilt wird.
Verstehen von Container-Registern
In einer containerisierten Umgebung werden, wie Sie wissen, Anwendungen mit ihren Abhängigkeiten in Pakete verpackt, wodurch sie portabel werden und sich leicht plattformübergreifend bereitstellen lassen. Container-Registraturen dienen diesem Prozess, indem sie einen Ort bereitstellen, an dem Container-Images auf konsistente Weise versioniert, abgerufen und bereitgestellt werden können.
Die Container-Registry ist also ein zentrales Speicher- und Verteilungssystem für Container-Images. Die Registry ermöglicht es Entwicklern und Betriebsteams, Container-Images zu speichern, zu verwalten und auszutauschen, die sie zur Erstellung und Bereitstellung von containerisierten Anwendungen und Microservicesverwenden.
Öffentliche und private Register
Organisationen können eine Kombination aus öffentlichen und privaten Container-Registraturen verwenden, um ihre Container-Images sowie andere Artefakte zu verwalten.
Öffentliche Registrierungsstellen wie Docker Hub und GitHub Container Registry, eine Unterfunktion von GitHub Packages, bieten eine umfangreiche Sammlung von Open-Source-Images, die Organisationen als Grundlage für ihre Anwendungen nutzen können. Diese Register sind in der Regel für jedermann zugänglich, so dass es für Entwickler einfach ist, vorgefertigte Bilder zu finden und zu verwenden.
Organisationen haben jedoch oft spezielle Anforderungen und proprietäre Software, die den Einsatz privater Register erforderlich machen.
Abbildung 1: Container-Register / Repository öffentlich vs. privat
Private Container-Registrierungsstellen wie Azure Container Registry, Amazon Elastic Container Registry und Google Container Registry bieten sichere, kontrollierte Umgebungen für die Speicherung und Verwaltung proprietärer Images und zugehöriger Artefakte. Auf diese Register können nur autorisierte Benutzer innerhalb der Organisation zugreifen, um sicherzustellen, dass sensible Informationen und individuell erstellte Bilder sicher bleiben.
Durch die Verwendung einer Kombination aus öffentlichen und privaten Registern können Organisationen die Vorteile von Open-Source-Images nutzen und gleichzeitig die Kontrolle über ihre proprietäre Software behalten. Dieser duale Ansatz ermöglicht es Organisationen, ihre Arbeitsabläufe bei der Containerverwaltung zu optimieren und die Bereitstellung zu rationalisieren.
Komponenten der Containersicherheitsregistrierung
Da die Registry für die Funktionsweise einer Container-Umgebung von zentraler Bedeutung ist - und Organisationen leicht Zehntausende von Images darin speichern können - ist die Sicherung der Registry ein wesentlicher Bestandteil der Integrität des Softwareentwicklungszyklus.
Schwachstellen können mehr als nur die Anwendung gefährden. Ein Angreifer, der eine Fehlkonfigurationen ausnutzt, könnte sich unbefugten Zugriff auf das CI/CD-System verschaffen und sich seitlich bewegen, um auf das zugrunde liegende Betriebssystem zuzugreifen. Sie könnten möglicherweise legitime CI/CD-Abläufe manipulieren, sensible Token erlangen und in die Produktionsumgebung gelangen, wo sie durch die Identifizierung eines freiliegenden Berechtigungsnachweises in das Netzwerk der Organisation gelangen könnten.
Verwandter Artikel: Anatomie eines Angriffs auf die Cloud Supply Pipeline
Die Sicherheit der Registrierung beginnt damit, dass Sie nur vertrauenswürdige Registraturen und Bibliotheken verwenden. Die kontinuierliche Überwachung von Schwachstellen ist von grundlegender Bedeutung, ebenso wie die Sicherung des Hosting-Servers und die Implementierung umfangreicher Zugriffsrichtlinien. Eine ordnungsgemäße Registrierungssicherheit sollte unsichere Verbindungen verweigern, veraltete Bilder kennzeichnen oder entfernen und strenge Authentifizierungs- und Autorisierungsbeschränkungen durchsetzen.
Schauen wir uns diese Maßnahmen genauer an.
Förderung der Integrität von Images und Artefakten in CI/CD
Das Verständnis der Risiken, die mit Bildern und Artefakten verbunden sind, macht deutlich, wie wichtig die Implementierung strenger Kontrollen ist, um ihre Integrität sicherzustellen. Erwägen Sie die Implementierung der folgenden Strategien.
Unsichere Verbindungen verweigern
Öffentliche Registrierungsstellen können zwar einen anonymen Zugriff auf Container-Images ermöglichen, aber um Man-in-the-Middle-Angriffe, unbefugte Manipulationen und den unbefugten Zugriff auf sensible Daten zu verhindern, müssen Sie sichere Verbindungen unterhalten.
Um unsichere Verbindungen abzulehnen, konfigurieren Sie Ihre Systeme so, dass sie nur sichere Protokolle wie HTTPS oder TLS-verschlüsselte Verbindungen akzeptieren. Beginnen Sie damit, ein gültiges SSL/TLS-Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle (CA) für Ihre Domain zu erwerben und zu installieren. Aktualisieren Sie dann Ihre Server- oder Servicekonfiguration, um die Verwendung von HTTPS oder TLS zu erzwingen und unsichere Protokolle wie HTTP zu deaktivieren. Abhängig von Ihrer Einrichtung kann dies eine Anpassung der Einstellungen Ihres Webservers (z.B. Nginx, Apache), des Load Balancers oder der Anwendung erfordern. Ziehen Sie auch die Verwendung von Sicherheitsfunktionen wie HSTS (HTTP Strict Transport Security) in Betracht, um Browser anzuweisen, beim Zugriff auf Ihre Website oder Ihren Dienst immer sichere Verbindungen zu verwenden.
Veraltete Bilder entfernen
Legen Sie eine Richtlinie fest, um veraltete Bilder zu definieren - Bilder, die älter als ein bestimmter Zeitrahmen sind oder eine bestimmte Zeit lang nicht benutzt wurden - und verwenden Sie Registry-Tools oder APIs, um Bilder auf der Grundlage der Richtlinie aufzulisten und zu filtern. Verwenden Sie z.B. in Docker Registry die Docker Registry API, um Bild-Metadaten abzurufen und nach dem Datum der letzten Veröffentlichung oder dem Tag zu filtern. In anderen Registern können ähnliche APIs oder CLI-Tools verfügbar sein. Sobald Sie die veralteten Images identifiziert haben, verwenden Sie die entsprechenden Befehle oder APIs, um sie zu löschen, und stellen Sie sicher, dass Sie die Best Practices der Registrierung für die Garbage Collection befolgen.
Vermeiden Sie IAM-Probleme in Drittanbieter-Registern
Die Identitäts- und Zugriffsverwaltung (IAM) ist für Organisationen von entscheidender Bedeutung, insbesondere in Quellcodeverwaltungssystemen (SCM) wie GitHub, wo Repositories wertvollen Code und Assets speichern. Unzureichende IAM kann zu Sicherheitsrisiken in der CI/CD-Pipeline führen. Zur Optimierung von Sicherheit und Governance für Repositories können Organisationen Single Sign-On (SSO) und Systeme für domänenübergreifendes Identitätsmanagement (SCIM) zur Verwaltung von Zugriffskontrollen einsetzen. SSO ist jedoch nur für GitHub Enterprise verfügbar, so dass andere Lizenzen einem Risiko ausgesetzt sind.
Um Probleme mit privaten E-Mail-Adressen in GitHub-Konten, Geister-GitHub-Konten und unvollständigem Offboarding zu vermeiden, sollten Sie eine Zwei-Faktor-Authentifizierung (2FA) durchsetzen, ein Onboarding-Protokoll mit speziellen Unternehmenskonten einrichten und ein Inventar der Benutzerkonten führen. Für SSO-fähige Organisationen gewährleistet die Implementierung von SCIM die automatische Deprovisionierung von Benutzern und verhindert den Zugriff über veraltete Anmeldedaten. Der Umgang mit IAM-Risiken hilft, Repositories und das CI/CD-Ökosystem zu schützen und ein hohes Sicherheitsniveau für alle Systeme aufrechtzuerhalten.
Verwandter Artikel: Die 3 größten IAM-Risiken in Ihrer GitHub Organisation
Ausreichende Authentifizierungs- und Autorisierungsbeschränkungen verwenden
Identitäten, denen mehr Rechte gewährt werden, als für das Repository erforderlich sind, eröffnen Möglichkeiten zur Ausweitung der Privilegien und können zu nicht autorisierten Codeänderungen, Manipulationen des Build-Prozesses und Zugriff auf sensible Daten führen. Automatisierung kann dabei helfen, Zugriffskontrollen zu validieren, Benutzerberechtigungen zu überprüfen und potenzielle Schwachstellen zu identifizieren, so dass Organisationen routinemäßige proaktive Maßnahmen ergreifen können, wie z.B.:
- Analysieren und Zuordnen aller Identitäten im gesamten technischen Ökosystem. Ordnen Sie für jede Identität kontinuierlich den Identitätsanbieter, die gewährten und die verwendeten Berechtigungen zu. Stellen Sie sicher, dass die Analyse alle programmatischen Zugangsmethoden abdeckt.
- Entfernen von unnötigen Berechtigungen für jede Identität auf verschiedenen Systemen in der Umgebung.
- Festlegung eines akzeptablen Zeitraums für die Deaktivierung oder Entfernung veralteter Konten. Deaktivieren und entfernen Sie Identitäten, die diesen Inaktivitätszeitraum überschreiten.
- Kartierung aller externen Mitarbeiter und Anpassung ihrer Identitäten an das Prinzip der geringsten Privilegien. Erteilen Sie, wenn möglich, Berechtigungen mit einem Ablaufdatum für menschliche und programmatische Konten.
- Verbot des Zugriffs von Mitarbeitern auf SCMs, CIs oder andere CI/CD-Plattformen über ihre persönlichen E-Mail-Adressen oder Adressen von Domänen, die nicht der Organisation gehören. Überwachen Sie Nicht-Domain-Adressen in verschiedenen Systemen und entfernen Sie nicht konforme Benutzer.
- Verhindern Sie, dass sich Benutzer selbst bei Systemen registrieren und erteilen Sie Berechtigungen nach Bedarf.
- Vermeidung der Vergabe von Basisberechtigungen in einem System an alle Benutzer und an große Gruppen mit automatisch zugewiesenen Benutzerkonten.
- Erstellen Sie dedizierte Konten für jeden spezifischen Kontext, anstatt gemeinsame Konten zu verwenden, und gewähren Sie genau die Berechtigungen, die für den jeweiligen Kontext erforderlich sind.
Implementierung von sicherem Speicher
Richten Sie ein sicheres, manipulationssicheres Repository zum Speichern von Artefakten ein. Ermöglichen Sie die Versionierung, um eine historische Aufzeichnung der Artefaktänderungen zu erhalten und implementieren Sie eine Echtzeitüberwachung, um verdächtige Aktivitäten zu verfolgen und zu melden. Im Falle kompromittierter Artefakte sollten Sie das System so konfigurieren, dass ein Rollback auf eine frühere, als gut bekannte Version möglich ist.
Führen Sie Integritätsprüfungen von der Entwicklung bis zur Produktion durch
Implementieren Sie Prozesse und Technologien, die die Integrität der Ressourcen in der gesamten Softwarebereitstellungskette überprüfen. Wenn Entwickler eine Ressource generieren, sollten sie diese mit einer externen Ressourcensignatur-Infrastruktur signieren. Bevor Sie eine Ressource in den nachfolgenden Phasen der Pipeline verwenden, überprüfen Sie ihre Integrität anhand der Signierstelle.
Code Signing
SCM-Lösungen bieten die Möglichkeit, Commits mit einem eindeutigen Schlüssel für jeden Mitwirkenden zu signieren und so zu verhindern, dass unsignierte Commits die Pipeline durchlaufen.
Software zur Überprüfung von Artefakten
Tools zum Signieren und Verifizieren von Code und Artefakten, wie z.B. Sigstore der Linux Foundation, können verhindern, dass ungeprüfte Software in der Pipeline weitergegeben wird.
Erkennung von Konfigurationsabweichungen
Implementieren Sie Maßnahmen zur Erkennung von Konfigurationsabweichungen, wie z.B. Ressourcen in Cloud-Umgebungen, die nicht mit einer signierten infrastructure-as-code Vorlage verwaltet werden. Solche Abweichungen könnten auf Bereitstellungen aus nicht vertrauenswürdigen Quellen oder Prozessen hindeuten.
Kryptographisches Signieren verwenden
Verwenden Sie die Public Key Infrastructure (PKI), um Artefakte in jeder Phase der CI/CD-Pipeline kryptografisch zu signieren. Bei diesem Verfahren werden Signaturen vor der Verwendung mit einer vertrauenswürdigen Zertifizierungsstelle abgeglichen. Konfigurieren Sie Ihre CI/CD-Pipeline so, dass Artefakte mit ungültigen oder fehlenden Signaturen zurückgewiesen werden, um das Risiko der Bereitstellung manipulierter Ressourcen oder nicht autorisierter Änderungen zu verringern.
Verwenden Sie nur gesicherte Container-Images
Container-Images können Schwachstellen enthalten, die Angreifer ausnutzen können, um unbefugten Zugriff auf den Container und seinen Host zu erhalten. Um dies zu verhindern, verwenden Sie sichere, vertrauenswürdige Container-Images aus seriösen Quellen und überprüfen diese regelmäßig. Wenn Sie einen Container aus einer öffentlichen Registrierung bereitstellen, ist es besonders wichtig, den Container zunächst auf Malware und Schwachstellen zu scannen.
Multi-Source-Validierung erzwingen
Verwenden Sie eine Strategie zur Validierung mehrerer Quellen, die die Integrität von Artefakten anhand verschiedener Quellen wie Prüfsummen, digitalen Signaturen und sicheren Hash-Algorithmen sowie vertrauenswürdigen Repositories überprüft. Halten Sie die kryptographischen Algorithmen und Schlüssel auf dem neuesten Stand, um ihre Wirksamkeit zu erhalten.
Validierung von Drittanbieter-Ressourcen
Ressourcen von Drittanbietern, die in Build- und Bereitstellungspipelines eingebunden sind, wie z.B. Skripte, die während des Build-Prozesses ausgeführt werden, sollten einer strengen Validierung unterzogen werden. Bevor Sie diese Ressourcen nutzen, berechnen Sie ihren Hash und vergleichen ihn mit dem offiziellen Hash des Ressourcenanbieters.
Sicherheits-Scans integrieren
Die CI/CD-Pipeline sollte bei der Erstellung von Abbildern nur überprüften (produktionsgeprüften) Code verwenden. Integrieren Sie Tools zum Scannen von Schwachstellen - sowie Software Composition Analysis (SCA) und Static Application Security Testing (SAST) - in die CI/CD-Pipelines, um die Integrität der Images zu gewährleisten, bevor diese in die Registry gestellt werden, aus der sie für die Bereitstellung in der Produktion stammen. Achten Sie auch auf die Einhaltung bewährter Verfahren. Erstellen Sie z.B. keine Images, bevor Sie nicht alle unnötigen Softwarekomponenten, Bibliotheken, Konfigurationsdateien, Geheimnisse usw. entfernt haben.
Ein konservativer, vorsichtiger Ansatz ermöglicht es den Teams, Schwachstellen frühzeitig im Entwicklungsprozess zu beheben und ein hohes Maß an Codequalität aufrechtzuerhalten, während gleichzeitig das Risiko von Sicherheitsvorfällen reduziert wird. Wählen Sie eine Lösung zum Scannen von Container-Images, die sich in alle Registrierungsarten integrieren lässt. Plattformen wie Prisma Cloud bieten Administratoren eine flexible Lösung zum Scannen von Bildern aus einer Hand.
Image Analysis Sandbox
Die Verwendung einer Image Analysis Sandbox verbessert Ihre Containersicherheitsstrategie während der Entwicklung und Bereitstellung von containerisierten Anwendungen. Sie ermöglicht es Ihnen, Container-Images, die möglicherweise veraltete, angreifbare Pakete und eingebettete Malware enthalten, sicher aus externen Repositories zu ziehen und auszuführen.
Mit den Funktionen der Sandbox können Sie in einer kontrollierten Umgebung nach verdächtigem anomalem Container-Verhalten wie Cryptomining, Port-Scanning, modifizierten Binärdateien und Kernel-Modul-Modifikationen suchen. Sie können Risiken aufdecken und verdächtige Abhängigkeiten in Ihrer Software-Lieferkette identifizieren, die die statische Analyse sonst übersehen hätte.
- Erfassen Sie ein detailliertes Laufzeitprofil des Containers.
- Bewerten Sie das Risiko eines Bildes
- Integrieren Sie dynamische Analysen in Ihren Arbeitsablauf
Festlegung von Validierungsrichtlinien und Audit-Zeitplan
Um eine ordnungsgemäße Validierung der Integrität von Bildern und Artefakten zu gewährleisten, sollten Organisationen klare Richtlinien festlegen, die die Validierungsprozesse definieren. Prüfen Sie regelmäßig die Compliance mit den internen Richtlinien, um Schwachstellen und Bereiche, in denen die Richtlinien nicht eingehalten werden, zu identifizieren und zu beheben. Kontinuierliche Überwachung und Analyse helfen Ihnen, Anomalien und unbefugte Aktivitäten aufzudecken.
Sicherheitscheckliste des Containerregisters im Überblick
- Verwenden Sie vertrauenswürdige Registrierungsstellen und Bibliotheken
- Sichern Sie den Hosting-Server und implementieren Sie robuste Zugriffsrichtlinien
- Implementieren Sie ausreichende Authentifizierungs- und Autorisierungsbeschränkungen
- Sichere Aufbewahrung für Artefakte einrichten
- Führen Sie während des gesamten CI/CD-Prozesses Integritätsprüfungen durch.
- Kryptografische Signierung verwenden
- Erzwingen Sie die Validierung mehrerer Quellen
- Validieren Sie Ressourcen Dritter
- Integrieren Sie Sicherheitsscans in die CI/CD-Pipeline
- Erstellen Sie Validierungsrichtlinien und regelmäßige Auditpläne
FAQs zur Containerregistrierung
Eine CI/CD-Pipeline automatisiert die Schritte, die erforderlich sind, um Software von der Versionskontrolle in die Hände der Endbenutzer zu bringen. Es umfasst die kontinuierliche Integration (CI) und die kontinuierliche Bereitstellung (CD) und automatisiert den Prozess der Softwarebereitstellung und der Infrastrukturänderungen. Die Pipeline umfasst in der Regel Phasen wie Codekompilierung, Unit-Tests, Integrationstests und Bereitstellung. Diese Automatisierung stellt sicher, dass die Software stets bereitgestellt werden kann, was schnelle und zuverlässige Software-Release-Zyklen ermöglicht. CI/CD-Pipelines sind für DevOps-Praktiken unerlässlich, da sie es den Teams ermöglichen, Codeänderungen häufiger und zuverlässiger bereitzustellen.
- SCM hilft dabei, die Konsistenz und Rückverfolgbarkeit des für die Erstellung von Container-Images verwendeten Codes aufrechtzuerhalten, so dass Entwickler die spezifische Code-Version, die zur Erstellung eines Container-Images verwendet wurde, leicht identifizieren können.
- SCM ermöglicht es Entwicklern, gemeinsam am Code zu arbeiten und sicherzustellen, dass die erstellten und in der Registry gespeicherten Container-Images den Qualitätsanforderungen der Organisation entsprechen.
- SCM-Tools verbessern die Arbeitsabläufe durch die Integration in CI/CD-Pipelines und die Automatisierung des Prozesses der Erstellung, des Testens und der Übertragung von Container-Images in die Registry.
Ein Webhook ist eine Methode, mit der Sie das Verhalten einer Webseite oder Webanwendung durch benutzerdefinierte Rückrufe ergänzen oder ändern können. Diese Rückrufe können von Drittnutzern und Entwicklern gepflegt, geändert und verwaltet werden, die nicht unbedingt Zugriff auf den Quellcode der Webseite oder Anwendung haben. Im Cloud-Computing und bei DevOps werden Webhooks verwendet, um automatisierte Workflows wie CI/CD-Pipelinesauszulösen, wenn bestimmte Ereignisse in einem Repository oder einer Bereitstellungsumgebung auftreten. Webhooks ermöglichen Echtzeit-Benachrichtigungen und automatische Reaktionen auf Ereignisse und verbessern die Automatisierung und Integration zwischen Cloud-Diensten und -Tools.
Notary ist ein Open-Source-Tool, das einen Rahmen für die Veröffentlichung und Überprüfung der Signaturen von Inhalten, wie z.B. Container-Images, bietet. Es implementiert die Spezifikationen von The Update Framework (TUF) für die sichere Bereitstellung und Aktualisierung von Inhalten. Notary stellt sicher, dass der Inhalt, den ein Benutzer erhält, genau dem entspricht, was der Herausgeber beabsichtigt hat, und schützt so vor unbefugten Änderungen.
Notary wird in der Regel in Verbindung mit Docker Content Trust verwendet, um Docker-Images zu signieren und zu verifizieren.