GCP - Storage Enum

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Armazenamento

O Armazenamento da Google Cloud Platform (GCP) é uma solução de armazenamento baseada em nuvem que fornece armazenamento de objetos altamente durável e disponível para dados não estruturados. Ele oferece várias classes de armazenamento com base em desempenho, disponibilidade e custo, incluindo Padrão, Nearline, Coldline e Archive. O Armazenamento da GCP também fornece recursos avançados, como políticas de ciclo de vida, versionamento e controle de acesso para gerenciar e proteger dados de forma eficaz.

O bucket pode ser armazenado em uma região, em 2 regiões ou multi-região (padrão).

Tipos de Armazenamento

  • Armazenamento Padrão: Esta é a opção de armazenamento padrão que oferece acesso de alto desempenho e baixa latência a dados acessados com frequência. É adequado para uma ampla gama de casos de uso, incluindo servir conteúdo de site, transmitir mídia e hospedar pipelines de análise de dados.

  • Armazenamento Nearline: Esta classe de armazenamento oferece custos de armazenamento mais baixos e custos de acesso ligeiramente mais altos do que o Armazenamento Padrão. É otimizado para dados acessados com pouca frequência, com uma duração mínima de armazenamento de 30 dias. É ideal para fins de backup e arquivamento.

  • Armazenamento Coldline: Esta classe de armazenamento é otimizada para armazenamento de longo prazo de dados acessados com pouca frequência, com uma duração mínima de armazenamento de 90 dias. Oferece custos de armazenamento mais baixos do que o Armazenamento Nearline, mas com custos de acesso mais altos.

  • Armazenamento Archive: Esta classe de armazenamento é projetada para dados frios que são acessados muito raramente, com uma duração mínima de armazenamento de 365 dias. Oferece os custos de armazenamento mais baixos de todas as opções de armazenamento da GCP, mas com os custos de acesso mais altos. É adequado para a retenção de longo prazo de dados que precisam ser armazenados por motivos de conformidade ou regulamentares.

  • Autoclass: Se você não sabe com que frequência vai acessar os dados, pode selecionar Autoclass e a GCP mudará automaticamente o tipo de armazenamento para minimizar os custos.

Controle de Acesso

Por padrão, é recomendado controlar o acesso por meio do IAM, mas também é possível ativar o uso de ACLs. Se você optar por usar apenas o IAM (padrão) e 90 dias se passarem, você não poderá habilitar ACLs para o bucket.

Versionamento

É possível habilitar o versionamento, isso salvará versões antigas do arquivo dentro do bucket. É possível configurar o número de versões que deseja manter e até por quanto tempo deseja que as versões não atuais (versões antigas) permaneçam. O recomendado é 7 dias para o tipo Padrão.

O metadados de uma versão não atual são mantidos. Além disso, as ACLs das versões não atuais também são mantidas, então versões antigas podem ter ACLs diferentes da versão atual.

Saiba mais na documentação.

Política de Retenção

Indique por quanto tempo deseja impedir a exclusão de Objetos dentro do bucket (muito útil para conformidade, no mínimo). Apenas um dos versionamento ou política de retenção pode ser habilitado por vez.

Criptografia

Por padrão, os objetos são criptografados usando chaves gerenciadas pela Google, mas você também pode usar uma chave do KMS.

Acesso Público

É possível dar acesso aos conteúdos dos buckets para usuários externos (logados na GCP ou não). Por padrão, quando um bucket é criado, a opção de expor publicamente o bucket estará desativada, mas com permissões suficientes, isso pode ser alterado.

O formato de uma URL para acessar um bucket é https://storage.googleapis.com/<nome-do-bucket> ou https://<nome_do_bucket>.storage.googleapis.com (ambos são válidos).

Chaves HMAC

Uma chave HMAC é um tipo de credencial e pode ser associada a uma conta de serviço ou a uma conta de usuário no Cloud Storage. Você usa uma chave HMAC para criar assinaturas que são então incluídas em solicitações ao Cloud Storage. As assinaturas mostram que uma determinada solicitação é autorizada pelo usuário ou conta de serviço.

As chaves HMAC têm duas partes principais, um ID de acesso e um segredo.

  • ID de Acesso: Uma sequência alfanumérica vinculada a um serviço específico ou conta de usuário. Quando vinculado a uma conta de serviço, a sequência tem 61 caracteres de comprimento e, quando vinculado a uma conta de usuário, a sequência tem 24 caracteres de comprimento. O seguinte mostra um exemplo de um ID de acesso:

GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA

  • Segredo: Uma sequência codificada em Base-64 de 40 caracteres que está vinculada a um ID de acesso específico. Um segredo é uma chave pré-compartilhada que apenas você e o Cloud Storage conhecem. Você usa seu segredo para criar assinaturas como parte do processo de autenticação. O seguinte mostra um exemplo de um segredo:

bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ

Tanto o ID de acesso quanto o segredo identificam exclusivamente uma chave HMAC, mas o segredo é uma informação muito mais sensível, pois é usado para criar assinaturas.

Enumeração

# List all storage buckets in project
gsutil ls

# Get each bucket configuration (protections, CLs, times, configs...)
gsutil ls -L

# List contents of a specific bucket
gsutil ls gs://bucket-name/
gsutil ls -r gs://bucket-name/ # Recursive
gsutil ls -a gs://bucket-name/ # Get ALL versions of objects

# Cat the context of a file without copying it locally
gsutil cat 'gs://bucket-name/folder/object'
gsutil cat 'gs://bucket-name/folder/object#<num>' # cat specific version

# Copy an object from the bucket to your local storage for review
gsutil cp gs://bucket-name/folder/object ~/

# List using a raw OAuth token
## Useful because "CLOUDSDK_AUTH_ACCESS_TOKEN" and "gcloud config set auth/access_token_file" doesn't work with gsutil
curl -H "Authorization: Bearer $TOKEN" "https://storage.googleapis.com/storage/v1/b/<storage-name>/o"
# Download file content from bucket
curl -H "Authorization: Bearer $TOKEN" "https://storage.googleapis.com/storage/v1/b/supportstorage-58249/o/flag.txt?alt=media" --output -

# Enumerate HMAC keys
gsutil hmac list

Se você receber um erro de permissão negada ao listar os buckets, ainda pode ter acesso ao conteúdo. Agora que você conhece a convenção de nomes dos buckets, pode gerar uma lista de possíveis nomes e tentar acessá-los:

for i in $(cat wordlist.txt); do gsutil ls -r gs://"$i"; done

Com as permissões storage.objects.list e storage.objects.get, você deve ser capaz de enumerar todas as pastas e arquivos do bucket para baixá-los. Você pode conseguir isso com este script Python:

import requests
import xml.etree.ElementTree as ET

def list_bucket_objects(bucket_name, prefix='', marker=None):
url = f"https://storage.googleapis.com/{bucket_name}?prefix={prefix}"
if marker:
url += f"&marker={marker}"
response = requests.get(url)
xml_data = response.content
root = ET.fromstring(xml_data)
ns = {'ns': 'http://doc.s3.amazonaws.com/2006-03-01'}
for contents in root.findall('.//ns:Contents', namespaces=ns):
key = contents.find('ns:Key', namespaces=ns).text
print(key)
next_marker = root.find('ns:NextMarker', namespaces=ns)
if next_marker is not None:
next_marker_value = next_marker.text
list_bucket_objects(bucket_name, prefix, next_marker_value)

list_bucket_objects('<storage-name>')

Escalação de Privilégios

Na página a seguir, você pode verificar como abusar das permissões de armazenamento para escalar privilégios:

pageGCP - Storage Privesc

Enumeração Não Autenticada

pageGCP - Storage Unauthenticated Enum

Pós-Exploração

pageGCP - Storage Post Exploitation

Persistência

pageGCP - Storage Persistence
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Última actualización