AWS - Lambda Enum
Lambda
Amazon Web Services (AWS) Lambda é descrito como um serviço de computação que permite a execução de código sem a necessidade de provisionamento ou gerenciamento de servidores. É caracterizado por sua capacidade de lidar automaticamente com a alocação de recursos necessários para a execução de código, garantindo recursos como alta disponibilidade, escalabilidade e segurança. Um aspecto significativo do Lambda é seu modelo de precificação, onde as cobranças são baseadas exclusivamente no tempo de computação utilizado, eliminando a necessidade de investimentos iniciais ou obrigações de longo prazo.
Para chamar um lambda é possível chamá-lo com a frequência que desejar (com Cloudwatch), expor um endpoint de URL e chamá-lo, chamá-lo via API Gateway ou até mesmo com base em eventos como alterações nos dados em um bucket S3 ou atualizações em uma tabela DynamoDB.
O código de um lambda é armazenado em /var/task
.
Pesos de Aliases do Lambda
Um Lambda pode ter várias versões. E pode ter mais de 1 versão exposta via aliases. Os pesos de cada uma das versões expostas dentro de um alias decidirão qual alias receberá a invocação (pode ser 90%-10%, por exemplo). Se o código de um dos aliases for vulnerável, você pode enviar solicitações até que a versão vulnerável receba o exploit.
Políticas de Recursos do Lambda
As políticas de recursos do Lambda permitem dar acesso a outros serviços/contas para invocar o lambda, por exemplo. Por exemplo, esta é a política para permitir que qualquer pessoa acesse um lambda exposto via URL:
Ou isso para permitir que um API Gateway o invoque:
Proxys de Banco de Dados do Lambda
Quando há centenas de solicitações lambda simultâneas, se cada uma delas precisar conectar e fechar uma conexão com um banco de dados, simplesmente não funcionará (os lambdas são sem estado, não podem manter conexões abertas). Então, se suas funções Lambda interagem com o RDS Proxy em vez da instância do seu banco de dados. Ele lida com o agrupamento de conexões necessário para dimensionar muitas conexões simultâneas criadas por funções Lambda concorrentes. Isso permite que suas aplicações Lambda reutilizem conexões existentes, em vez de criar novas conexões para cada invocação de função.
Sistemas de Arquivos EFS do Lambda
Para preservar e até mesmo compartilhar dados os Lambdas podem acessar EFS e montá-los, para que o Lambda possa ler e escrever neles.
Camadas do Lambda
Uma camada do Lambda é um arquivo .zip que pode conter código adicional ou outro conteúdo. Uma camada pode conter bibliotecas, um tempo de execução personalizado, dados ou arquivos de configuração.
É possível incluir até cinco camadas por função. Quando você inclui uma camada em uma função, o conteúdo é extraído para o diretório /opt
no ambiente de execução.
Por padrão, as camadas que você cria são privadas para sua conta da AWS. Você pode optar por compartilhar uma camada com outras contas ou tornar a camada pública. Se suas funções consomem uma camada que uma conta diferente publicou, suas funções podem continuar a usar a versão da camada após ela ter sido excluída, ou após sua permissão de acesso à camada ser revogada. No entanto, você não pode criar uma nova função ou atualizar funções usando uma versão de camada excluída.
Funções implantadas como uma imagem de contêiner não usam camadas. Em vez disso, você empacota seu tempo de execução preferido, bibliotecas e outras dependências na imagem do contêiner quando você constrói a imagem.
Extensões do Lambda
As extensões do Lambda aprimoram 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: internos e externos.
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 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.
Enumeração
Invocar um lambda
Manual
Através de URL exposta
Chamar a função Lambda via URL
Agora é hora de descobrir possíveis funções lambda para executar:
Uma função lambda chamada "Level6" está disponível. Vamos descobrir como chamá-la:
Agora que você conhece o nome e o ID, você pode obter o Nome:
E finalmente chame a função acessando (observe que o ID, Nome e nome da função aparecem na URL): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:
https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Outros Disparadores
Existem muitas outras fontes que podem acionar uma lambda
Privesc
Na página a seguir, você pode verificar como abusar das permissões da Lambda para escalar privilégios:
pageAWS - Lambda PrivescAcesso Não Autenticado
pageAWS - Lambda Unauthenticated AccessPós-Exploração
pageAWS - Lambda Post ExploitationPersistência
pageAWS - Lambda PersistenceReferências
Última actualización