GCP - Basic Information

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Ressourcenhierarchie

Google Cloud verwendet eine Ressourcenhierarchie, die konzeptionell ähnlich wie die eines traditionellen Dateisystems ist. Dies bietet einen logischen Eltern-Kind-Arbeitsablauf mit spezifischen Anknüpfungspunkten für Richtlinien und Berechtigungen.

Auf hoher Ebene sieht es so aus:

Organization
--> Folders
--> Projects
--> Resources

Projektmigration

Es ist möglich, ein Projekt ohne eine Organisation zu einer Organisation zu migrieren mit den Berechtigungen roles/resourcemanager.projectCreator und roles/resourcemanager.projectMover. Wenn sich das Projekt in einer anderen Organisation befindet, muss der GCP-Support kontaktiert werden, um sie zuerst aus der Organisation zu verschieben. Weitere Informationen finden Sie hier.

Organisationsrichtlinien

Ermöglichen die zentrale Kontrolle über die Cloud-Ressourcen Ihrer Organisation:

  • Zentrale Kontrolle zur Konfiguration von Beschränkungen für die Verwendung der Ressourcen Ihrer Organisation.

  • Definieren und festlegen von Leitplanken für Ihre Entwicklungsteams, um innerhalb der Compliance-Grenzen zu bleiben.

  • Unterstützen Projektinhaber und ihre Teams dabei, schnell voranzukommen, ohne sich um die Einhaltung von Vorschriften sorgen zu müssen.

Diese Richtlinien können erstellt werden, um die gesamte Organisation, Ordner oder Projekte zu beeinflussen. Nachkommen des ausgewählten Ressourcen-Hierarchieknotens erben die Organisationsrichtlinie.

Um eine Organisationsrichtlinie zu definieren, wählen Sie eine Einschränkung aus, die eine bestimmte Art von Beschränkung gegen einen Google Cloud-Dienst oder eine Gruppe von Google Cloud-Diensten darstellt. Sie konfigurieren diese Einschränkung mit den gewünschten Beschränkungen.

Häufige Anwendungsfälle

  • Begrenzung des Ressourcenaustauschs basierend auf der Domäne.

  • Begrenzung der Verwendung von Identitäts- und Zugriffsverwaltungsdienstkonten.

  • Einschränkung des physischen Standorts neu erstellter Ressourcen.

  • Deaktivierung der Erstellung von Dienstkonten

Standard-Organisationsrichtlinien

Dies sind die Richtlinien, die Google standardmäßig hinzufügt, wenn Ihre GCP-Organisation eingerichtet wird:

Zugriffsverwaltungspolitiken

  • Domänenbeschränkte Kontakte: Verhindert das Hinzufügen von Benutzern zu Essential Contacts außerhalb Ihrer angegebenen Domänen. Dies beschränkt Essential Contacts darauf, nur verwaltete Benutzeridentitäten in Ihren ausgewählten Domänen zuzulassen, um Plattformbenachrichtigungen zu erhalten.

  • Domänenbeschränktes Teilen: Verhindert das Hinzufügen von Benutzern zu IAM-Richtlinien außerhalb Ihrer angegebenen Domänen. Dies beschränkt IAM-Richtlinien darauf, nur verwaltete Benutzeridentitäten in Ihren ausgewählten Domänen zuzulassen, um auf Ressourcen innerhalb dieser Organisation zuzugreifen.

  • Öffentlicher Zugriffsschutz: Verhindert, dass Cloud Storage-Buckets der Öffentlichkeit zugänglich gemacht werden. Dadurch kann ein Entwickler keine Cloud Storage-Buckets so konfigurieren, dass sie einen nicht authentifizierten Internetzugriff haben.

  • Einheitlicher Bucket-Zugriffsebene: Verhindert die Zugriffssteuerungslisten (ACLs) auf Objektebene in Cloud Storage-Buckets. Dies vereinfacht Ihr Zugriffsmanagement, indem IAM-Richtlinien konsistent auf alle Objekte in Cloud Storage-Buckets angewendet werden.

  • Erfordernis der OS-Anmeldung: VMs, die in neuen Projekten erstellt werden, haben OS-Anmeldung aktiviert. Dadurch können Sie den SSH-Zugriff auf Ihre Instanzen mithilfe von IAM verwalten, ohne einzelne SSH-Schlüssel erstellen und verwalten zu müssen.

Zusätzliche Sicherheitsrichtlinien für Dienstkonten

  • Automatische IAM-Zuweisungen deaktivieren: Verhindert, dass den Standard-App Engine- und Compute Engine-Dienstkonten automatisch die Rolle Editor bei der Projekterstellung zugewiesen wird. Dadurch erhalten Dienstkonten bei der Erstellung keine übermäßig berechtigten IAM-Rollen.

  • Erstellung von Dienstkontoschlüsseln deaktivieren: Verhindert die Erstellung öffentlicher Dienstkontoschlüssel. Dies hilft, das Risiko der Offenlegung dauerhafter Anmeldeinformationen zu verringern.

  • Hochladen von Dienstkontoschlüsseln deaktivieren: Verhindert das Hochladen öffentlicher Dienstkontoschlüssel. Dies hilft, das Risiko von offengelegtem oder wiederverwendetem Schlüsselmaterial zu verringern.

Sichere VPC-Netzwerkkonfigurationsrichtlinien

  • Zulässige externe IPs für VM-Instanzen definieren: Verhindert die Erstellung von Compute-Instanzen mit einer öffentlichen IP, die sie dem Internetverkehr aussetzen können.

  • Verschachtelte VMs in Compute Engine-VMs deaktivieren: Verhindert die Erstellung von verschachtelten VMs auf Compute Engine-VMs. Dies verringert das Sicherheitsrisiko unüberwachter verschachtelter VMs.

  • Serielles Portdeaktivieren für VMs: Verhindert den Zugriff auf serielle Ports von Compute Engine-VMs. Dadurch wird verhindert, dass über die Compute Engine-API Eingaben an den seriellen Port eines Servers erfolgen.

  • Autorisierte Netzwerkeinschränken für Cloud SQL-Instanzen: Verhindert, dass öffentliche oder nicht interne Netzwerkbereiche auf Ihre Cloud SQL-Datenbanken zugreifen können.

  • Weiterleitung von Protokollen basierend auf dem Typ der IP-Adresse einschränken: Verhindert die Weiterleitung von VM-Protokollen für externe IP-Adressen.

  • Öffentlichen IP-Zugriff auf Cloud SQL-Instanzen einschränken: Verhindert die Erstellung von Cloud SQL-Instanzen mit einer öffentlichen IP, die sie dem Internetverkehr aussetzen können.

  • Entfernen von Shared VPC-Projektsperren einschränken: Verhindert das versehentliche Löschen von Shared VPC-Hostprojekten.

  • Setzt die interne DNS-Einstellung für neue Projekte auf Zonal DNS Only: Verhindert die Verwendung einer veralteten DNS-Einstellung, die die Serviceverfügbarkeit verringert.

  • Standardnetzwerkerstellung überspringen: Verhindert die automatische Erstellung des Standard-VPC-Netzwerks und zugehöriger Ressourcen. Dadurch werden übermäßig berechtigte Standard-Firewallregeln vermieden.

  • Externe IPv6-Nutzung in VPC deaktivieren: Verhindert die Erstellung von externen IPv6-Subnetzen, die nicht autorisiertem Internetzugriff ausgesetzt sein können.

IAM-Rollen

Diese sind wie IAM-Richtlinien in AWS, da jede Rolle eine Reihe von Berechtigungen enthält.

Im Gegensatz zu AWS gibt es jedoch kein zentrales Repository für Rollen. Anstatt dessen geben Ressourcen X-Zugriffsrollen an Y-Prinzipale, und der einzige Weg herauszufinden, wer Zugriff auf eine Ressource hat, besteht darin, die get-iam-policy-Methode über diese Ressource zu verwenden. Dies könnte ein Problem sein, da dies bedeutet, dass der einzige Weg herauszufinden, welche Berechtigungen ein Prinzipal hat, darin besteht, jede Ressource zu fragen, wem sie Berechtigungen gibt, und ein Benutzer möglicherweise nicht die Berechtigungen hat, um Berechtigungen von allen Ressourcen zu erhalten.

Es gibt drei Arten von Rollen in IAM:

  • Grundlegende/Primitive Rollen, die die Owner, Editor und Viewer-Rollen umfassen, die vor der Einführung von IAM existierten.

  • Vordefinierte Rollen, die granularen Zugriff für einen bestimmten Dienst bieten und von Google Cloud verwaltet werden. Es gibt viele vordefinierte Rollen, Sie können alle mit den ihnen zugeordneten Berechtigungen hier einsehen hier.

  • Benutzerdefinierte Rollen, die granularen Zugriff gemäß einer benutzerspezifischen Liste von Berechtigungen bieten.

Es gibt Tausende von Berechtigungen in GCP. Um zu überprüfen, ob eine Rolle über Berechtigungen verfügt, können Sie hier nach der Berechtigung suchen und sehen, welche Rollen diese haben.

Sie können auch hier nach vordefinierten Rollen suchen, die von jedem Produkt angeboten werden. Beachten Sie, dass einige Rollen nicht an Benutzer angehängt werden können und nur an SAs aufgrund einiger Berechtigungen, die sie enthalten. Darüber hinaus werden Berechtigungen nur wirksam, wenn sie dem relevanten Dienst zugeordnet sind.

Oder überprüfen Sie, ob eine benutzerdefinierte Rolle eine bestimmte Berechtigung hier verwenden kann.

pageGCP - IAM, Principals & Org Policies Enum

Benutzer

Im GCP-Console gibt es kein Benutzer- oder Gruppenmanagement, das wird in Google Workspace durchgeführt. Sie könnten jedoch einen anderen Identitätsanbieter in Google Workspace synchronisieren.

Sie können auf die Benutzer und Gruppen von Workspaces unter https://admin.google.com zugreifen.

MFA kann für Workspace-Benutzer erzwungen werden, jedoch könnte ein Angreifer ein Token verwenden, um auf GCP zuzugreifen über die Befehlszeile, die nicht durch MFA geschützt ist (es wird nur durch MFA geschützt, wenn der Benutzer sich anmeldet, um es zu generieren: gcloud auth login).

Gruppen

Wenn eine Organisation erstellt wird, wird dringend empfohlen, mehrere Gruppen zu erstellen. Wenn Sie eine davon verwalten, könnten Sie die gesamte Organisation oder einen wichtigen Teil davon kompromittiert haben:

Gruppe

Funktion

gcp-organization-admins (Gruppe oder individuelle Konten erforderlich für Checkliste)

Verwaltung von Ressourcen, die der Organisation gehören. Weisen Sie diese Rolle sparsam zu; Org-Administratoren haben Zugriff auf alle Ihre Google Cloud-Ressourcen. Alternativ, da diese Funktion sehr privilegiert ist, erwägen Sie die Verwendung von individuellen Konten anstelle der Erstellung einer Gruppe.

gcp-network-admins (erforderlich für Checkliste)

Erstellen von Netzwerken, Subnetzen, Firewall-Regeln und Netzwerkgeräten wie Cloud Router, Cloud VPN und Cloud-Lastenausgleicher.

gcp-billing-admins (erforderlich für Checkliste)

Einrichten von Abrechnungskonten und Überwachung ihrer Nutzung.

gcp-developers (erforderlich für Checkliste)

Entwurf, Codierung und Testen von Anwendungen.

gcp-security-admins

Einrichten und Verwalten von Sicherheitsrichtlinien für die gesamte Organisation, einschließlich Zugriffsverwaltung und Organisationsrichtlinienbeschränkungen. Sehen Sie sich den Google Cloud Security Foundations-Leitfaden für weitere Informationen zur Planung Ihrer Google Cloud-Sicherheitsinfrastruktur an.

gcp-devops

Erstellen oder Verwalten von End-to-End-Pipelines, die die kontinuierliche Integration und Bereitstellung, Überwachung und Systembereitstellung unterstützen.

gcp-logging-admins

gcp-logging-viewers

gcp-monitor-admins

gcp-billing-viewer (nicht mehr standardmäßig)

Überwachung der Ausgaben für Projekte. Typische Mitglieder sind Teil des Finanzteams.

gcp-platform-viewer (nicht mehr standardmäßig)

Überprüfung von Ressourceninformationen in der gesamten Google Cloud-Organisation.

gcp-security-reviewer (nicht mehr standardmäßig)

Überprüfung der Cloud-Sicherheit.

gcp-network-viewer (nicht mehr standardmäßig)

Überprüfung von Netzwerkkonfigurationen.

grp-gcp-audit-viewer (nicht mehr standardmäßig)

Anzeigen von Prüfprotokollen.

gcp-scc-admin (nicht mehr standardmäßig)

Verwaltung des Security Command Center.

gcp-secrets-admin (nicht mehr standardmäßig)

Verwaltung von Secrets im Secret Manager.

Standard-Passwortrichtlinie

  • Durchsetzung von starken Passwörtern

  • Zwischen 8 und 100 Zeichen

  • Keine Wiederverwendung

  • Kein Ablaufdatum

  • Wenn Personen über einen Drittanbieter auf Workspace zugreifen, werden diese Anforderungen nicht angewendet.

Dienstkonten

Dies sind die Prinzipale, die Ressourcen angehängt haben können und Zugriff haben, um einfach mit GCP zu interagieren. Zum Beispiel ist es möglich, auf das Authentifizierungstoken eines Dienstkontos zuzugreifen, das an eine VM angehängt ist, in den Metadaten. Es kann zu Konflikten kommen, wenn sowohl IAM als auch Zugriffsberechtigungen verwendet werden. Zum Beispiel könnte Ihr Dienstkonto die IAM-Rolle compute.instanceAdmin haben, aber die Instanz, auf die Sie zugegriffen haben, wurde mit der Bereichseinschränkung https://www.googleapis.com/auth/compute.readonly eingeschränkt. Dadurch wird verhindert, dass Sie Änderungen mit dem automatisch Ihrem Dienst zugewiesenen OAuth-Token vornehmen können.

Es ähnelt den IAM-Rollen von AWS. Aber anders als bei AWS kann jedes Dienstkonto an jeden Dienst angehängt werden (es muss nicht über eine Richtlinie zugelassen werden).

Einige der Dienstkonten, die Sie finden werden, werden tatsächlich automatisch von GCP generiert, wenn Sie einen Dienst verwenden, wie:

PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_ID@appspot.gserviceaccount.com

Jedoch ist es auch möglich, benutzerdefinierte Dienstkonten zu erstellen und an Ressourcen anzuhängen, die wie folgt aussehen werden:

SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com

Zugriffsberechtigungen

Zugriffsberechtigungen werden den generierten OAuth-Token zugeordnet, um auf die GCP-API-Endpunkte zuzugreifen. Sie beschränken die Berechtigungen des OAuth-Tokens. Das bedeutet, dass, wenn ein Token einem Besitzer einer Ressource gehört, aber nicht über den im Token festgelegten Bereich verfügt, um auf diese Ressource zuzugreifen, das Token nicht verwendet werden kann, um diese Berechtigungen zu (miss)brauchen.

Google empfiehlt tatsächlich, dass Zugriffsberechtigungen nicht verwendet werden und vollständig auf IAM vertraut wird. Das Web-Verwaltungsportal setzt dies tatsächlich durch, aber Zugriffsberechtigungen können immer noch programmgesteuert auf Instanzen angewendet werden, die benutzerdefinierte Dienstkonten verwenden.

Sie können sehen, welche Bereiche zugewiesen sind, indem Sie abfragen:

curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>'

{
"issued_to": "223044615559.apps.googleusercontent.com",
"audience": "223044615559.apps.googleusercontent.com",
"user_id": "139746512919298469201",
"scope": "openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/appengine.admin https://www.googleapis.com/auth/sqlservice.login https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/accounts.reauth",
"expires_in": 2253,
"email": "username@testing.com",
"verified_email": true,
"access_type": "offline"
}

Die vorherigen Berechtigungen sind diejenigen, die standardmäßig mit gcloud generiert werden, um auf Daten zuzugreifen. Dies liegt daran, dass Sie bei Verwendung von gcloud zunächst ein OAuth-Token erstellen und es dann verwenden, um die Endpunkte zu kontaktieren.

Die wichtigste Berechtigung davon ist wahrscheinlich cloud-platform, was im Grunde bedeutet, dass es möglich ist, auf jeden Dienst in GCP zuzugreifen.

Sie können eine Liste aller möglichen Berechtigungen hier finden.

Wenn Sie gcloud Browser-Anmeldeinformationen haben, ist es möglich, ein Token mit anderen Berechtigungen zu erhalten, indem Sie etwas Ähnliches tun wie:

# Maybe you can get a user token with other scopes changing the scopes array from ~/.config/gcloud/credentials.db

# Set new scopes for SDKs credentials
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/sqlservice.login,https://www.googleapis.com/auth/appengine.admin,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/accounts.reauth,https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.domain,https://www.googleapis.com/auth/admin.directory.user

# Print new token
gcloud auth application-default print-access-token

# To use this token with some API you might need to use curl to indicate the project header with --header "X-Goog-User-Project: <project-name>"

Terraform IAM-Richtlinien, Bindungen und Mitgliedschaften

Wie von Terraform in https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam definiert, gibt es bei der Verwendung von Terraform mit GCP verschiedene Möglichkeiten, einem Prinzipal Zugriff auf eine Ressource zu gewähren:

  • Mitgliedschaften: Sie setzen Prinzipale als Mitglieder von Rollen ohne Einschränkungen über die Rolle oder die Prinzipale. Sie können einen Benutzer als Mitglied einer Rolle festlegen und dann eine Gruppe als Mitglied derselben Rolle festlegen und auch diese Prinzipale (Benutzer und Gruppe) als Mitglied anderer Rollen festlegen.

  • Bindungen: Mehrere Prinzipale können an eine Rolle gebunden werden. Diese Prinzipale können immer noch gebunden sein oder Mitglieder anderer Rollen sein. Wenn jedoch ein Prinzipal, der nicht an die Rolle gebunden ist, als Mitglied einer gebundenen Rolle festgelegt wird, verschwindet die Mitgliedschaft beim nächsten Mal, wenn die Bindung angewendet wird.

  • Richtlinien: Eine Richtlinie ist verbindlich, sie gibt Rollen und Prinzipale an und dann können diese Prinzipale keine weiteren Rollen haben und diese Rollen keine weiteren Prinzipale haben, es sei denn, diese Richtlinie wird geändert (nicht einmal in anderen Richtlinien, Bindungen oder Mitgliedschaften). Wenn also eine Rolle oder ein Prinzipal in einer Richtlinie angegeben ist, sind alle seine Berechtigungen durch diese Richtlinie eingeschränkt. Offensichtlich kann dies umgangen werden, falls dem Prinzipal die Möglichkeit gegeben wird, die Richtlinie zu ändern oder Berechtigungen für Eskalation von Privilegien zu erhalten (wie das Erstellen eines neuen Prinzips und Zuweisen einer neuen Rolle).

Referenzen

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated