Translated ['src/pentesting-cloud/aws-security/aws-post-exploitation/aws

This commit is contained in:
Translator
2025-10-23 20:46:17 +00:00
parent 7c465d7e07
commit a99cf3ed95
18 changed files with 542 additions and 539 deletions

View File

@@ -1,26 +1,26 @@
# AWS - Lambda Persistence
# AWS - Persistência em Lambda
{{#include ../../../../banners/hacktricks-training.md}}
## Lambda
Para mais informações veja:
Para mais informações, consulte:
{{#ref}}
../../aws-services/aws-lambda-enum.md
{{#endref}}
### Lambda Layer Persistence
### Persistência em Lambda Layer
É possível **introduzir/backdoor um layer para executar código arbitrário** quando a Lambda é executada de forma furtiva:
É possível **introduzir/backdoor uma layer para executar arbitrary code** quando a Lambda é executada de forma furtiva:
{{#ref}}
aws-lambda-layers-persistence.md
{{#endref}}
### Lambda Extension Persistence
### Persistência em Lambda Extension
Abusando de Lambda Layers, também é possível abusar de extensions e persistir na lambda, além de roubar e modificar requisições.
Abusando de Lambda Layers também é possível abusar de extensions e persistir na Lambda, além de roubar e modificar requests.
{{#ref}}
aws-abusing-lambda-extensions.md
@@ -28,42 +28,42 @@ aws-abusing-lambda-extensions.md
### Via resource policies
É possível conceder acesso a diferentes ações da lambda (como invoke ou update code) para contas externas:
É possível conceder acesso a diferentes ações do Lambda (como invoke ou update code) para contas externas:
<figure><img src="../../../../images/image (255).png" alt=""><figcaption></figcaption></figure>
### Versions, Aliases & Weights
### Versões, Aliases & Weights
Uma Lambda pode ter **versões diferentes** (com código diferente em cada versão).\
Então, você pode criar **aliases diferentes com versões diferentes** da Lambda e definir pesos diferentes para cada.\
Dessa forma um atacante poderia criar uma **versão 1 backdoored** e uma **versão 2 com apenas o código legítimo** e **executar a versão 1 em apenas 1%** das requisições para permanecer furtivo.
Uma Lambda pode ter **different versions** (com different code em cada versão).\
Então, você pode criar **different aliases apontando para different versions** da função e definir diferentes weights para cada um.\
Dessa forma, um atacante poderia criar uma **backdoored version 1** e uma **version 2 com apenas o legit code** e **executar somente a version 1 em 1%** das requests para permanecer furtivo.
<figure><img src="../../../../images/image (120).png" alt=""><figcaption></figcaption></figure>
### 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). Publish e **deploy that version** para $LATEST
1. Chame o API Gateway relacionado à Lambda para executar o código
3. **Create a new version with the original code**, Publish e deploy essa **version** para $LATEST.
1. Isso esconderá o código backdoored em uma versão anterior
4. Vá ao API Gateway e **create a new POST method** (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`
1. Note o final :1 do arn **indicando a versão da função** (version 1 será a backdoored neste cenário).
5. Selecione o método POST criado e em Actions selecione **`Deploy API`**
6. Agora, quando você **chamar a função via POST seu Backdoor** será invocado
1. Copy the original code of the Lambda
2. **Create a new version backdooring** the original code (or just with malicious code). Publish and **deploy that version** to $LATEST
1. Call the API gateway related to the lambda to execute the code
3. **Create a new version with the original code**, Publish and deploy that **version** to $LATEST.
1. This will hide the backdoored code in a previous version
4. Go to the API Gateway and **create a new POST method** (or choose any other method) that will execute the backdoored version of the lambda: `arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1`
1. Note the final :1 of the arn **indicating the version of the function** (version 1 will be the backdoored one in this scenario).
5. Select the POST method created and in Actions select **`Deploy API`**
6. Now, when you **call the function via POST your Backdoor** will be invoked
### Cron/Event actuator
O fato de você poder fazer **funções Lambda rodarem quando algo acontece ou quando algum tempo passa** torna a Lambda uma forma comum e interessante de obter persistência e evitar detecção.\
O fato de você poder fazer **lambda functions rodarem quando algo acontece ou quando passa um intervalo de tempo** torna o Lambda uma forma comum 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 é criado a Lambda gera uma nova user key e a envia para o atacante.
- Toda vez que um novo role é criado a Lambda concede permissões de assume role a usuários comprometidos.
- Sempre que novos logs do CloudTrail são gerados, delete/altere-os
- Toda vez que um novo user é criado, a Lambda gera uma nova user key e envia para o atacante.
- Toda vez que uma nova role é criada, a Lambda concede permissões de assume role para usuários comprometidos.
- Toda vez que novos cloudtrail logs são gerados, deletar/alterar eles
### RCE abusing AWS_LAMBDA_EXEC_WRAPPER + Lambda Layers
### RCE abusando de 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 o role de execução da função e finalmente `exec`s o runtime real para que o handler original ainda seja executado normalmente.
Abuse da variável de ambiente `AWS_LAMBDA_EXEC_WRAPPER` para executar um wrapper controlado pelo atacante antes do runtime/handler iniciar. Entregue o wrapper via um Lambda Layer em `/opt/bin/htwrap`, configure `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 execution role da função e, por fim, faz `exec` do runtime real para que o handler original ainda seja executado normalmente.
{{#ref}}
aws-lambda-exec-wrapper-persistence.md
@@ -71,7 +71,7 @@ aws-lambda-exec-wrapper-persistence.md
### AWS - Lambda Function URL Public Exposure
Abuse destinos assíncronos do Lambda juntamente com a configuração de Recursion para fazer com que uma função se re-invoque continuamente sem um agendador externo (sem EventBridge, cron, etc.). Por padrão, o Lambda termina loops recursivos, mas definir a config de recursion para Allow reativa-os. Destinations entregam do lado do serviço para invocações assíncronas, então uma única seed invoke cria um canal furtivo, sem código, de heartbeat/backdoor. Opcionalmente regule com reserved concurrency para manter o ruído baixo.
Abuse de destinations assíncronas do Lambda junto com a configuração de 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 configurando recursion para Allow reativa-os. Destinations entregam do lado do serviço para invokes async, então um único invoke seed cria um canal stealthy de heartbeat/backdoor sem necessidade de código. Opcionalmente throttle com reserved concurrency para manter o ruído baixo.
{{#ref}}
aws-lambda-async-self-loop-persistence.md
@@ -79,9 +79,9 @@ aws-lambda-async-self-loop-persistence.md
### AWS - Lambda Alias-Scoped Resource Policy Backdoor
Crie uma versão oculta da Lambda com lógica do atacante e escopo uma resource-based policy para 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` a 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.
Crie uma versão escondida da Lambda com lógica do atacante e aplique uma resource-based policy com escopo para aquela versão específica (ou alias) usando o parâmetro `--qualifier` em `lambda add-permission`. Conceda apenas `lambda:InvokeFunction` sobre `arn:aws:lambda:REGION:ACCT:function:FN:VERSION` a um principal atacante. Invocações normais via 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 um Function URL e não altera o alias de tráfego primário.
Isto é mais furtivo do que expor um Function URL e não altera o alias de tráfego primário.
{{#ref}}
aws-lambda-alias-version-policy-backdoor.md
@@ -89,7 +89,7 @@ aws-lambda-alias-version-policy-backdoor.md
### Freezing AWS Lambda Runtimes
Um atacante que possui permissões lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig e lambda:GetRuntimeManagementConfig pode modificar a runtime management configuration de uma função. Este ataque é especialmente eficaz quando o objetivo é manter uma função Lambda em uma versão de runtime vulnerável ou preservar compatibilidade com layers maliciosos que podem ser incompatíveis com runtimes mais novos.
Um atacante que possui permissions lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig, e lambda:GetRuntimeManagementConfig pode modificar a runtime management configuration de uma função. Este ataque é especialmente efetivo quando o objetivo é manter uma função Lambda em uma versão de runtime vulnerável ou preservar compatibilidade com layers maliciosas que podem ser incompatíveis com runtimes mais novos.
O atacante modifica a runtime management configuration para fixar a versão do runtime:
```bash