Dziel się trikami hackingowymi, przesyłając PR-y doHackTricks i HackTricks Cloud repozytoriów na githubie.
IAM
Możesz znaleźć opis IAM w:
Enumeracja
Główne wymagane uprawnienia:
iam:ListPolicies, iam:GetPolicy i iam:GetPolicyVersion
iam:ListRoles
iam:ListUsers
iam:ListGroups
iam:ListGroupsForUser
iam:ListAttachedUserPolicies
iam:ListAttachedRolePolicies
iam:ListAttachedGroupPolicies
iam:ListUserPolicies i iam:GetUserPolicy
iam:ListGroupPolicies i iam:GetGroupPolicy
iam:ListRolePolicies i iam:GetRolePolicy
# All IAMs## Retrieves information about all IAM users, groups, roles, and policies## in your Amazon Web Services account, including their relationships to## one another. Use this operation to obtain a snapshot of the configura-## tion of IAM permissions (users, groups, roles, and policies) in your## account.awsiamget-account-authorization-details# List usersawsiamget-user#Get current user informationawsiamlist-usersawsiamlist-ssh-public-keys#User keys for CodeCommitawsiamget-ssh-public-key--user-name<username>--ssh-public-key-id<id>--encodingSSH#Get public key with metadataawsiamlist-service-specific-credentials#Get special permissions of the IAM user over specific servicesawsiamget-user--user-name<username>#Get metadata of user, included permissions boundariesawsiamlist-access-keys#List created access keys## inline policiesawsiamlist-user-policies--user-name<username>#Get inline policies of the userawsiamget-user-policy--user-name<username>--policy-name<policyname>#Get inline policy details## attached policiesawsiamlist-attached-user-policies--user-name<username>#Get policies of user, it doesn't get inline policies# List groupsawsiamlist-groups#Get groupsawsiamlist-groups-for-user--user-name<username>#Get groups of a userawsiamget-group--group-name<name>#Get group name info## inline policiesawsiamlist-group-policies--group-name<username>#Get inline policies of the groupawsiamget-group-policy--group-name<username>--policy-name<policyname>#Get an inline policy info## attached policiesawsiamlist-attached-group-policies--group-name<name>#Get policies of group, it doesn't get inline policies# List rolesawsiamlist-roles#Get rolesawsiamget-role--role-name<role-name>#Get role## inline policiesawsiamlist-role-policies--role-name<name>#Get inline policies of a roleawsiamget-role-policy--role-name<name>--policy-name<name>#Get inline policy details## attached policiesawsiamlist-attached-role-policies--role-name<role-name>#Get policies of role, it doesn't get inline policies# List policiesawsiamlist-policies [--only-attached] [--scope Local]aws iam list-policies-granting-service-access --arn <identity> --service-namespaces <svc> # Get list of policies that give access to the user to the service
## Get policy contentawsiamget-policy--policy-arn<policy_arn>awsiamlist-policy-versions--policy-arn<arn>awsiamget-policy-version--policy-arn<arn:aws:iam::975426262029:policy/list_apigateways>--version-id<VERSION_X># Enumerate providersawsiamlist-saml-providersawsiamget-saml-provider--saml-provider-arn<ARN>awsiamlist-open-id-connect-providersawsiamget-open-id-connect-provider--open-id-connect-provider-arn<ARN># Password Policyawsiamget-account-password-policy# MFAawsiamlist-mfa-devicesawsiamlist-virtual-mfa-devices
Bruteforce uprawnień
Jeśli jesteś zainteresowany swoimi uprawnieniami, ale nie masz dostępu do zapytań IAM, zawsze możesz je bruteforce'ować.
bf-aws-permissions
Narzędzie bf-aws-permissions to po prostu skrypt bash, który uruchomi wszystkie akcje list*, describe*, get*, które może znaleźć, korzystając z komunikatów pomocy aws cli i zwróci udane wykonania.
Narzędzie bf-aws-perms-simulate może znaleźć twoje obecne uprawnienia (lub uprawnienia innych podmiotów), jeśli masz uprawnienie iam:SimulatePrincipalPolicy
# Ask for permissionspython3aws_permissions_checker.py--profile<AWS_PROFILE> [--arn <USER_ARN>]
Perms2ManagedPolicies
Jeśli znalazłeś jakieś uprawnienia, które ma twój użytkownik, i myślisz, że są one przyznawane przez zarządzaną rolę AWS (a nie przez niestandardową). Możesz użyć narzędzia aws-Perms2ManagedRoles, aby sprawdzić wszystkie zarządzane role AWS, które przyznają uprawnienia, które odkryłeś, że posiadasz.
# Run example with my profilepython3aws-Perms2ManagedPolicies.py--profilemyadmin--permissions-fileexample-permissions.txt
Możliwe jest "wiedzieć", czy uprawnienia, które posiadasz, są przyznawane przez zarządzaną rolę AWS, jeśli zauważysz, że masz uprawnienia do usług, które nie są używane na przykład.
Cloudtrail2IAM
CloudTrail2IAM to narzędzie w Pythonie, które analizuje logi AWS CloudTrail, aby wydobyć i podsumować działania wykonane przez wszystkich lub tylko przez konkretnego użytkownika lub rolę. Narzędzie przeanalizuje każdy log cloudtrail z wskazanego koszyka.
Jeśli znajdziesz pliki .tfstate (pliki stanu Terraform) lub pliki CloudFormation (zwykle są to pliki yaml znajdujące się w wiadrze z prefiksem cf-templates), możesz je również przeczytać, aby znaleźć konfigurację aws i dowiedzieć się, które uprawnienia zostały przypisane do kogo.
enumerate-iam
Aby użyć narzędzia https://github.com/andresriancho/enumerate-iam, najpierw musisz pobrać wszystkie punkty końcowe API AWS, z których skrypt generate_bruteforce_tests.py pobierze wszystkie "list_", "describe_" i "get_" punkty końcowe. A na koniec spróbuje uzyskać do nich dostęp za pomocą podanych poświadczeń i wskaże, czy to zadziałało.
(Z mojego doświadczenia narzędzie zawiesza się w pewnym momencie, sprawdź to rozwiązanie, aby spróbować to naprawić).
Z mojego doświadczenia to narzędzie jest jak poprzednie, ale działa gorzej i sprawdza mniej uprawnień.
Możesz również użyć narzędzia weirdAAL. To narzędzie sprawdzi kilka powszechnych operacji na kilku powszechnych usługach (sprawdzi niektóre uprawnienia do enumeracji oraz niektóre uprawnienia do privesc). Ale sprawdzi tylko zakodowane kontrole (jedynym sposobem na sprawdzenie większej liczby rzeczy jest zakodowanie większej liczby testów).
# Installgitclonehttps://github.com/carnal0wnage/weirdAAL.gitcdweirdAALpython3-mvenvweirdAALsourceweirdAAL/bin/activatepip3install-rrequirements.txt# Create a .env file with aws credentials such as[default]aws_access_key_id=<insertkeyid>aws_secret_access_key=<insertsecretkey># Setup DBpython3create_dbs.py# Invoke itpython3weirdAAL.py-mec2_describe_instances-tec2test# Just some ec2 testspython3weirdAAL.py-mrecon_all-tMyTarget# Check all permissions# You will see output such as:# [+] elbv2 Actions allowed are [+]# ['DescribeLoadBalancers', 'DescribeAccountLimits', 'DescribeTargetGroups']
# https://github.com/turbot/steampipe-mod-aws-insightssteampipecheckall--export=json# https://github.com/turbot/steampipe-mod-aws-perimeter# In this case you cannot output to JSON, so heck it in the dashboardsteampipedashboard
<YourTool>
Żadne z poprzednich narzędzi nie jest w stanie sprawdzić prawie wszystkich uprawnień, więc jeśli znasz lepsze narzędzie, wyślij PR!
Nieautoryzowany dostęp
Eskalacja uprawnień
Na następnej stronie możesz sprawdzić, jak wykorzystać uprawnienia IAM do eskalacji uprawnień:
IAM Po eksploatacji
IAM Utrzymywanie
IAM Identity Center
Możesz znaleźć opis IAM Identity Center w:
Połączenie przez SSO z CLI
# Connect with sso via CLI aws configure ssoawsconfiguresso[profile profile_name]sso_start_url=https://subdomain.awsapps.com/start/sso_account_id=<account_numbre>sso_role_name=AdministratorAccesssso_region=us-east-1
Enumeracja
Główne elementy Centrum Tożsamości to:
Użytkownicy i grupy
Zestawy uprawnień: Mają przypisane polityki
Konta AWS
Następnie tworzone są relacje, aby użytkownicy/grupy miały Zestawy uprawnień w ramach Konta AWS.
Zauważ, że istnieją 3 sposoby przypisania polityk do Zestawu uprawnień. Przypisanie polityk zarządzanych przez AWS, polityk zarządzanych przez klienta (te polityki muszą być tworzone we wszystkich kontach, na które wpływa Zestaw uprawnień) oraz polityk inline (zdefiniowanych tam).
# Check if IAM Identity Center is usedawssso-adminlist-instances# Get Permissions sets. These are the policies that can be assignedawssso-adminlist-permission-sets--instance-arn<instance-arn>awssso-admindescribe-permission-set--instance-arn<instance-arn>--permission-set-arn<perm-set-arn>## Get managed policies of a permission setawssso-adminlist-managed-policies-in-permission-set--instance-arn<instance-arn>--permission-set-arn<perm-set-arn>## Get inline policies of a permission setawssso-adminget-inline-policy-for-permission-set--instance-arn<instance-arn>--permission-set-arn<perm-set-arn>## Get customer managed policies of a permission setaws sso-admin list-customer-managed-policy-references-in-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>
## Get boundaries of a permission setaws sso-admin get-permissions-boundary-for-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>
## List accounts a permission set is affectingaws sso-admin list-accounts-for-provisioned-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn>
## List principals given a permission set in an accountaws sso-admin list-account-assignments --instance-arn <instance-arn> --permission-set-arn <perm-set-arn> --account-id <account_id>
# Get permissions sets affecting an accountawssso-adminlist-permission-sets-provisioned-to-account--instance-arn<instance-arn>--account-id<account_id># List users & groups from the identity storeawsidentitystorelist-users--identity-store-id<store-id>awsidentitystorelist-groups--identity-store-id<store-id>## Get members of groupsawsidentitystorelist-group-memberships--identity-store-id<store-id>--group-id<group-id>## Get memberships or a user or a groupawsidentitystorelist-group-memberships-for-member--identity-store-id<store-id>--member-id<member-id>
Local Enumeration
Możliwe jest utworzenie wewnątrz folderu $HOME/.aws pliku config, aby skonfigurować profile, które są dostępne za pomocą SSO, na przykład:
# Login in ms-sso-profileawsssologin--profilemy-sso-profile# Use dependent-profileawss3ls--profiledependent-profile
Kiedy profil z SSO jest używany do uzyskania dostępu do informacji, dane uwierzytelniające są buforowane w pliku wewnątrz folderu $HOME/.aws/sso/cache. Dlatego mogą być odczytywane i używane stamtąd.
Ponadto, więcej danych uwierzytelniających może być przechowywanych w folderze $HOME/.aws/cli/cache. Ten katalog buforu jest głównie używany, gdy pracujesz z profilami AWS CLI, które używają danych uwierzytelniających użytkownika IAM lub przyjmują role przez IAM (bez SSO). Przykład konfiguracji:
# Create user identitystore:CreateUseraws identitystore create-user --identity-store-id <store-id> --user-name privesc --display-name privesc --emails Value=sdkabflvwsljyclpma@tmmbt.net,Type=Work,Primary=True --name Formatted=privesc,FamilyName=privesc,GivenName=privesc
## After creating it try to login in the console using the selected username, you will receive an email with the code and then you will be able to select a password
Utwórz grupę, przypisz jej uprawnienia i ustaw na niej kontrolowanego użytkownika
Daj dodatkowe uprawnienia kontrolowanemu użytkownikowi lub grupie
Domyślnie tylko użytkownicy z uprawnieniami z Konta Zarządzającego będą mogli uzyskać dostęp i kontrolować IAM Identity Center.
Jednak możliwe jest, aby za pomocą Delegowanego Administratora zezwolić użytkownikom z innego konta na zarządzanie nim. Nie będą mieli dokładnie tych samych uprawnień, ale będą mogli wykonywać działania zarządzające.