Files
hacktricks-cloud/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md

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

  1. Copie o código original da Lambda
  2. Create a new version backdooring o código original (ou apenas com código malicioso). Publique e implante essa versão para $LATEST
  3. Chame o API Gateway relacionado à lambda para executar o código
  4. Crie uma nova versão com o código original, Publique e implante essa version para $LATEST.
  5. Isso esconderá o código backdoored em uma versão anterior
  6. 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
  7. Observe o final :1 do arn indicando a versão da função (version 1 será a backdoored neste cenário).
  8. Selecione o método POST criado e em Actions selecione Deploy API
  9. 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}}