AWS - Abusing Lambda Extensions

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

Outras formas de apoiar o HackTricks:

Extensões do Lambda

As extensões do Lambda aprimoram as funções integrando-se a várias ferramentas de monitoramento, observabilidade, segurança e governança. Essas extensões, adicionadas via .zip archives usando camadas do Lambda ou incluídas em implantações de imagens de contêiner, operam em dois modos: interno e externo.

  • As extensões internas se fundem com o processo de tempo de execução, manipulando seu início usando variáveis de ambiente específicas do idioma e scripts de invólucro. Essa personalização se aplica a uma variedade de tempos de execução, incluindo Java Correto 8 e 11, Node.js 10 e 12 e .NET Core 3.1.

  • As extensões externas são executadas como processos separados, mantendo o alinhamento operacional com o ciclo de vida da função Lambda. Elas são compatíveis com vários tempos de execução como Node.js 10 e 12, Python 3.7 e 3.8, Ruby 2.5 e 2.7, Java Corretto 8 e 11, .NET Core 3.1 e tempos de execução personalizados.

Para obter mais informações sobre como as extensões do lambda funcionam, consulte a documentação.

Extensão Externa para Persistência, Roubo de Requisições e Modificação de Requisições

Este é um resumo da técnica proposta neste post: https://www.clearvector.com/blog/lambda-spy/

Foi descoberto que o kernel Linux padrão no ambiente de tempo de execução do Lambda é compilado com as chamadas de sistema “process_vm_readv” e “process_vm_writev”. E todos os processos são executados com o mesmo ID de usuário, mesmo o novo processo criado para a extensão externa. Isso significa que uma extensão externa tem acesso total de leitura e gravação à memória heap do Rapid, por design.

Além disso, enquanto as extensões do Lambda têm a capacidade de se inscrever em eventos de invocação, a AWS não revela os dados brutos para essas extensões. Isso garante que as extensões não possam acessar informações sensíveis transmitidas por meio da solicitação HTTP.

O processo Init (Rapid) monitora todas as solicitações de API em http://127.0.0.1:9001 enquanto as extensões do Lambda são inicializadas e executadas antes da execução de qualquer código de tempo de execução, mas após o Rapid.

A variável AWS_LAMBDA_RUNTIME_API indica o endereço IP e o número da porta da API do Rapid para processos de tempo de execução filho e extensões adicionais.

Ao alterar a variável de ambiente AWS_LAMBDA_RUNTIME_API para uma porta à qual temos acesso, é possível interceptar todas as ações dentro do tempo de execução do Lambda (homem-no-meio). Isso é possível porque a extensão é executada com os mesmos privilégios que o Rapid Init, e o kernel do sistema permite a modificação da memória do processo, possibilitando a alteração do número da porta.

Como as extensões são executadas antes de qualquer código de tempo de execução, modificar a variável de ambiente influenciará o processo de tempo de execução (por exemplo, Python, Java, Node, Ruby) ao iniciar. Além disso, extensões carregadas depois da nossa, que dependem dessa variável, também passarão por nossa extensão. Essa configuração poderia permitir que malware contorne completamente as medidas de segurança ou extensões de registro diretamente dentro do ambiente de tempo de execução.

A ferramenta lambda-spy foi criada para realizar essa escrita na memória e roubar informações sensíveis das solicitações do lambda, de outras solicitações de extensões e até modificá-las.

Referências

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

Outras formas de apoiar o HackTricks:

Última actualización