AWS - Nitro Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
AWS Nitro é um conjunto de tecnologias inovadoras que formam a plataforma subjacente para instâncias AWS EC2. Introduzido pela Amazon para aumentar a segurança, desempenho e confiabilidade, o Nitro aproveita componentes de hardware personalizados e um hipervisor leve. Ele abstrai grande parte da funcionalidade de virtualização tradicional para hardware e software dedicados, minimizando a superfície de ataque e melhorando a eficiência dos recursos. Ao descarregar funções de virtualização, o Nitro permite que as instâncias EC2 ofereçam desempenho quase bare-metal, tornando-se particularmente benéfico para aplicações que consomem muitos recursos. Além disso, o Nitro Security Chip garante especificamente a segurança do hardware e firmware, solidificando ainda mais sua arquitetura robusta.
AWS Nitro Enclaves fornece um ambiente de computação seguro e isolado dentro das instâncias Amazon EC2, projetado especificamente para processar dados altamente sensíveis. Aproveitando o AWS Nitro System, esses enclaves garantem isolamento e segurança robustos, ideais para manipular informações confidenciais como PII ou registros financeiros. Eles apresentam um ambiente minimalista, reduzindo significativamente o risco de exposição de dados. Além disso, Nitro Enclaves suportam atestação criptográfica, permitindo que os usuários verifiquem se apenas código autorizado está em execução, crucial para manter padrões rigorosos de conformidade e proteção de dados.
As imagens do Nitro Enclave são executadas de dentro das instâncias EC2 e você não pode ver no console da web da AWS se uma instância EC2 está executando imagens no Nitro Enclave ou não.
Siga todas as instruções da documentação. No entanto, estas são as mais importantes:
As imagens que você pode executar no Nitro Enclave são baseadas em imagens docker, então você pode criar suas imagens Nitro Enclave a partir de imagens docker como:
Como você pode ver, as imagens do Nitro Enclave usam a extensão eif
(Arquivo de Imagem de Enclave).
A saída será semelhante a:
De acordo com a documentação, para executar uma imagem de enclave, você precisa atribuir a ela uma memória de pelo menos 4 vezes o tamanho do arquivo eif
. É possível configurar os recursos padrão a serem fornecidos a ele no arquivo.
Sempre lembre-se de que você precisa reservar alguns recursos para a instância EC2 pai também!
Depois de saber os recursos a serem dados a uma imagem e até mesmo ter modificado o arquivo de configuração, é possível executar uma imagem de enclave com:
Se você comprometer um host EC2, é possível obter uma lista de imagens de enclave em execução com:
Não é possível obter um shell dentro de uma imagem de enclave em execução porque esse é o principal objetivo do enclave, no entanto, se você usar o parâmetro --debug-mode
, é possível obter o stdout dele com:
Se um atacante comprometer uma instância EC2, por padrão, ele não conseguirá obter um shell dentro delas, mas poderá terminá-las com:
A única maneira de se comunicar com uma enclave em execução é usando vsocks.
Virtual Socket (vsock) é uma família de sockets no Linux especificamente projetada para facilitar a comunicação entre máquinas virtuais (VMs) e seus hypervisors, ou entre as VMs entre si. Vsock permite uma comunicação eficiente e bidirecional sem depender da pilha de rede do host. Isso torna possível que as VMs se comuniquem mesmo sem configurações de rede, usando um ID de Contexto de 32 bits (CID) e números de porta para identificar e gerenciar conexões. A API vsock suporta tanto tipos de socket de stream quanto de datagrama, semelhante ao TCP e UDP, fornecendo uma ferramenta versátil para aplicações de nível de usuário em ambientes virtuais.
Portanto, um endereço vsock se parece com isto: <CID>:<Port>
Para encontrar os CIDs das imagens de enclave em execução, você pode simplesmente executar o seguinte comando e obter o EnclaveCID
:
Observe que a partir do host não há como saber se um CID está expondo alguma porta! A menos que use algum scanner de porta vsock como https://github.com/carlospolop/Vsock-scanner.
Encontre aqui alguns exemplos: