4.9 KiB
AWS - Lambda Persistence
{{#include ../../../../banners/hacktricks-training.md}}
Lambda
Para mais informações consulte:
{{#ref}} ../../aws-services/aws-lambda-enum.md {{#endref}}
Lambda Layer Persistence
É possível introduzir/backdoor uma Layer para executar código arbitrário quando a lambda é executada de forma furtiva:
{{#ref}} aws-lambda-layers-persistence.md {{#endref}}
Lambda Extension Persistence
Abusando de Lambda Layers também é possível abusar de extensions e persistir no lambda, além de roubar e modificar requests.
{{#ref}} aws-abusing-lambda-extensions.md {{#endref}}
Via resource policies
É possível conceder acesso a diferentes ações do lambda (como invoke ou update code) para contas externas:

Versions, Aliases & Weights
Uma Lambda pode ter diferentes versões (cada versão com código diferente).
Então, você pode criar diferentes aliases com diferentes versões da lambda e definir pesos diferentes para cada um.
Dessa forma um atacante poderia criar uma backdoored version 1 e uma version 2 com apenas o código legítimo e executar a version 1 em apenas 1% das requisições para permanecer furtivo.

Version Backdoor + API Gateway
- Copie o código original da Lambda
- Create a new version backdooring o código original (ou apenas com código malicioso). Publique e implante essa versão para $LATEST
- Chame o API Gateway relacionado à lambda para executar o código
- Crie uma nova versão com o código original, Publique e implante essa version para $LATEST.
- Isso esconderá o código backdoored em uma versão anterior
- Vá ao API Gateway e crie um novo método POST (ou escolha qualquer outro método) que executará a versão backdoored da lambda:
arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1 - Observe o final :1 do arn indicando a versão da função (version 1 será a backdoored neste cenário).
- Selecione o método POST criado e em Actions selecione
Deploy API - Agora, quando você chamar a função via POST seu Backdoor será invocado
Cron/Event actuator
O fato de que você pode fazer funções lambda serem executadas quando algo acontece ou quando passa algum tempo torna o lambda uma forma comum e eficiente de obter persistência e evitar detecção.
Aqui estão algumas ideias para tornar sua presença na AWS mais furtiva criando lambdas.
- Toda vez que um novo usuário for criado, a lambda gera uma nova chave de usuário e a envia ao atacante.
- Toda vez que uma nova role for criada, a lambda concede permissões de assume role a usuários comprometidos.
- Toda vez que novos logs do cloudtrail forem gerados, deletá-los/alterá-los
RCE abusing AWS_LAMBDA_EXEC_WRAPPER + Lambda Layers
Abuse a variável de ambiente AWS_LAMBDA_EXEC_WRAPPER para executar um script wrapper controlado pelo atacante antes do runtime/handler iniciar. Entregue o wrapper via um Lambda Layer em /opt/bin/htwrap, defina AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap e então invoque a função. O wrapper roda dentro do processo do runtime da função, herda a função de execução (function execution role) e por fim execs o runtime real para que o handler original ainda seja executado normalmente.
{{#ref}} aws-lambda-exec-wrapper-persistence.md {{#endref}}
AWS - Lambda Function URL Public Exposure
Abuse as asynchronous destinations do Lambda juntamente com a configuração Recursion para fazer uma função se re-invocar continuamente sem um agendador externo (sem EventBridge, cron, etc.). Por padrão, o Lambda termina loops recursivos, mas definir a configuração de recursion para Allow os reativa. Destinations entregam no lado do serviço para invocações assíncronas, então um único invoke semente cria um canal stealthy, sem código, de heartbeat/backdoor. Opcionalmente faça throttle com reserved concurrency para manter o ruído baixo.
{{#ref}} aws-lambda-async-self-loop-persistence.md {{#endref}}
AWS - Lambda Alias-Scoped Resource Policy Backdoor
Crie uma versão oculta da Lambda com lógica do atacante e aplique uma resource-based policy a essa versão específica (ou alias) usando o parâmetro --qualifier em lambda add-permission. Conceda apenas lambda:InvokeFunction em arn:aws:lambda:REGION:ACCT:function:FN:VERSION para um principal atacante. Invocações normais via o nome da função ou alias primário permanecem inalteradas, enquanto o atacante pode invocar diretamente o ARN da versão backdoored.
Isso é mais furtivo do que expor uma Function URL e não altera o alias de tráfego primário.
{{#ref}} aws-lambda-alias-version-policy-backdoor.md {{#endref}}
{{#include ../../../../banners/hacktricks-training.md}}