AWS - CloudTrail Enum
CloudTrail
O AWS CloudTrail registra e monitora a atividade dentro do seu ambiente AWS. Ele captura logs de eventos detalhados, incluindo quem fez o quê, quando e de onde, para todas as interações com os recursos da AWS. Isso fornece um rastro de auditoria de alterações e ações, auxiliando na análise de segurança, auditoria de conformidade e rastreamento de alterações de recursos. O CloudTrail é essencial para entender o comportamento do usuário e dos recursos, aprimorar posturas de segurança e garantir conformidade regulatória.
Cada evento registrado contém:
O nome da API chamada:
eventName
O serviço chamado:
eventSource
O horário:
eventTime
O endereço IP:
SourceIPAddress
O método do agente:
userAgent
. Exemplos:Signing.amazonaws.com - Do Console de Gerenciamento da AWS
console.amazonaws.com - Usuário raiz da conta
lambda.amazonaws.com - AWS Lambda
Os parâmetros da solicitação:
requestParameters
Os elementos de resposta:
responseElements
Os eventos são gravados em um novo arquivo de log aproximadamente a cada 5 minutos em um arquivo JSON, eles são retidos pelo CloudTrail e, finalmente, os arquivos de log são entregues ao S3 aproximadamente 15 minutos depois. Os logs do CloudTrail podem ser agregados entre contas e regiões diferentes. O CloudTrail permite usar integridade de arquivo de log para poder verificar se seus arquivos de log permaneceram inalterados desde que o CloudTrail os entregou a você. Ele cria um hash SHA-256 dos logs dentro de um arquivo de digestão. Um hash sha-256 dos novos logs é criado a cada hora. Ao criar um Trail, os seletores de evento permitirão indicar o trail para registrar: eventos de gerenciamento, dados ou insights.
Os logs são salvos em um bucket S3. Por padrão, a Criptografia do Lado do Servidor é usada (SSE-S3) para que a AWS descriptografe o conteúdo para as pessoas que têm acesso a ele, mas para segurança adicional você pode usar SSE com KMS e suas próprias chaves.
Os logs são armazenados em um bucket S3 com este formato de nome:
BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD
Sendo o BucketName:
aws-cloudtrail-logs-<accountid>-<random>
Exemplo:
aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/
Dentro de cada pasta, cada log terá um nome seguindo este formato: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz
Convenção de Nomenclatura de Arquivos de Log
Além disso, os arquivos de digestão (para verificar a integridade do arquivo) estarão dentro do mesmo bucket em:
Agregar Logs de Múltiplas Contas
Crie um Trail na conta AWS para a qual deseja que os arquivos de log sejam entregues
Aplique permissões ao bucket S3 de destino permitindo acesso entre contas para o CloudTrail e permita que cada conta AWS que precisa de acesso
Crie um novo Trail nas outras contas AWS e selecione usar o bucket criado no passo 1
No entanto, mesmo que você possa salvar todos os logs no mesmo bucket S3, você não pode agregar logs do CloudTrail de várias contas em um CloudWatch Logs pertencente a uma única conta AWS.
Lembre-se de que uma conta pode ter diferentes Trails do CloudTrail ativados armazenando os mesmos (ou diferentes) logs em buckets diferentes.
Cloudtrail de todas as contas da organização em 1
Ao criar um CloudTrail, é possível indicar ativar o cloudtrail para todas as contas na organização e obter os logs em apenas 1 bucket:
Dessa forma, você pode configurar facilmente o CloudTrail em todas as regiões de todas as contas e centralizar os logs em 1 conta (que você deve proteger).
Verificação de Arquivos de Log
Você pode verificar se os logs não foram alterados executando
Registros para o CloudWatch
O CloudTrail pode enviar automaticamente registros para o CloudWatch para que você possa configurar alertas que o avisem quando atividades suspeitas são realizadas. Observe que, para permitir que o CloudTrail envie os registros para o CloudWatch, um papel precisa ser criado que permita essa ação. Se possível, é recomendável usar o papel padrão da AWS para realizar essas ações. Esse papel permitirá que o CloudTrail:
CreateLogStream: Isso permite criar fluxos de log de registros do CloudWatch
PutLogEvents: Entregar logs do CloudTrail para o fluxo de log do CloudWatch
Histórico de Eventos
O Histórico de Eventos do CloudTrail permite que você inspecione em uma tabela os registros que foram gravados:
Insights
O CloudTrail Insights analisa automaticamente eventos de gerenciamento de gravação de trilhas do CloudTrail e alerta sobre atividades incomuns. Por exemplo, se houver um aumento nos eventos TerminateInstance
que difere das linhas de base estabelecidas, você verá isso como um evento Insight. Esses eventos tornam a localização e resposta a atividades de API incomuns mais fáceis do que nunca.
Os insights são armazenados no mesmo bucket que os logs do CloudTrail em: BucketName/AWSLogs/AccountID/CloudTrail-Insight
Segurança
Integridade do Arquivo de Log do CloudTrail |
|
Impedir acesso não autorizado |
|
Impedir que arquivos de log sejam excluídos |
|
Consultor de Acesso
O Consultor de Acesso da AWS depende dos logs do CloudTrail dos últimos 400 dias para reunir suas informações. O CloudTrail captura um histórico de chamadas de API da AWS e eventos relacionados feitos em uma conta da AWS. O Consultor de Acesso utiliza esses dados para mostrar quando os serviços foram acessados pela última vez. Ao analisar os logs do CloudTrail, o Consultor de Acesso pode determinar quais serviços da AWS um usuário IAM ou papel acessou e quando esse acesso ocorreu. Isso ajuda os administradores da AWS a tomar decisões informadas sobre refinar permissões, pois podem identificar serviços que não foram acessados por períodos prolongados e potencialmente reduzir permissões excessivamente amplas com base em padrões reais de uso.
Portanto, o Consultor de Acesso informa sobre as permissões desnecessárias concedidas aos usuários para que o administrador possa removê-las
Ações
Enumeração
Injeção de CSV
É possível realizar uma injeção de CSV dentro do CloudTrail que executará código arbitrário se os logs forem exportados em CSV e abertos com o Excel. O código a seguir gerará uma entrada de log com um nome de Trail ruim contendo o payload:
Para obter mais informações sobre Injeções de CSV, consulte a página:
Para obter mais informações sobre essa técnica específica, consulte https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/
Bypass de Detecção
HoneyTokens bypass
Honeyokens são criados para detectar a exfiltração de informações sensíveis. No caso da AWS, eles são chaves da AWS cujo uso é monitorado, se algo disparar uma ação com essa chave, então alguém deve ter roubado essa chave.
No entanto, essa monitorização é realizada via CloudTrail, e existem alguns serviços da AWS que não enviam logs para o CloudTrail (encontre a lista aqui). Alguns desses serviços irão responder com um erro contendo o ARN da função da chave se alguém não autorizado (a chave honeytoken) tentar acessá-lo.
Dessa forma, um atacante pode obter o ARN da chave sem acionar nenhum log. No ARN, o atacante pode ver o ID e o nome da conta da AWS, é fácil saber os IDs e nomes das contas das empresas HoneyToken, assim um atacante pode identificar se o token é um HoneyToken.
Detecção de HoneyTokens
Pacu detecta se uma chave pertence a Canarytokens, SpaceCrab, SpaceSiren:
Se
canarytokens.org
aparecer no nome da função ou o ID da conta534261010715
aparecer na mensagem de erro.Testando-os mais recentemente, eles estão usando a conta
717712589309
e ainda possuem a stringcanarytokens.com
no nome.Se
SpaceCrab
aparecer no nome da função na mensagem de erro.SpaceSiren usa uuids para gerar nomes de usuário:
[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}
Se o nome parecer gerado aleatoriamente, há altas probabilidades de ser um HoneyToken.
Observe que todas as APIs públicas descobertas como não criando logs do CloudTrail agora estão corrigidas, então talvez você precise encontrar as suas próprias...
Ou você pode obter o ID da conta do codificado dentro da chave de acesso como explicado aqui e verificar o ID da conta com sua lista de contas AWS de Honeytokens:
Para mais informações, consulte a pesquisa original.
Acessando Terceira Infraestrutura
Certos serviços da AWS irão criar alguma infraestrutura como Bancos de Dados ou clusters Kubernetes (EKS). Um usuário se comunicando diretamente com esses serviços (como a API do Kubernetes) não usará a API da AWS, então o CloudTrail não será capaz de ver essa comunicação.
Portanto, um usuário com acesso ao EKS que descobriu a URL da API do EKS poderia gerar um token localmente e se comunicar diretamente com o serviço da API sem ser detectado pelo CloudTrail.
Mais informações em:
pageAWS - EKS Post ExploitationModificando Configuração do CloudTrail
Excluir trilhas
Parar trilhas
Desativar o registro em várias regiões
Desativar o Registro por Seletores de Eventos
No primeiro exemplo, um seletor de evento único é fornecido como uma matriz JSON com um único objeto. O "ReadWriteType": "ReadOnly"
indica que o seletor de evento deve capturar apenas eventos de leitura (para que as percepções do CloudTrail não verifiquem eventos de escrita, por exemplo).
Você pode personalizar o seletor de evento com base em seus requisitos específicos.
Exclusão de logs via política de ciclo de vida do S3
Modificando a Configuração do Bucket
Excluir o bucket S3
Alterar a política do bucket para negar quaisquer gravações do serviço CloudTrail
Adicionar uma política de ciclo de vida ao bucket S3 para excluir objetos
Desativar a chave KMS usada para criptografar os logs do CloudTrail
Ransomware do CloudTrail
Ransomware do S3
Você poderia gerar uma chave assimétrica e fazer o CloudTrail criptografar os dados com essa chave e excluir a chave privada para que o conteúdo do CloudTrail não possa ser recuperado. Basicamente, isso é um ransomware S3-KMS explicado em:
pageAWS - S3 Post ExploitationRansomware KMS
Esta é uma maneira mais fácil de realizar o ataque anterior com diferentes requisitos de permissões:
pageAWS - KMS Post ExploitationReferências
Última actualización