AWS - IAM Post Exploitation

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 지원하기

IAM

IAM 액세스에 대한 자세한 정보:

AWS - IAM, Identity Center & SSO Enum

Confused Deputy 문제

만약 당신이 **외부 계정 (A)**에게 당신의 계정 내 role에 접근을 허용하면, 해당 외부 계정에 정확히 누가 접근할 수 있는지에 대해 전혀 가시성이 없을 가능성이 큽니다. 이는 문제가 되는데, 다른 외부 계정 (B)이 외부 계정 (A)에 접근할 수 있다면 B도 당신의 계정에 접근할 수 있게 될 가능성이 있기 때문입니다.

따라서, 외부 계정이 당신의 계정 내의 role에 접근하도록 허용할 때 ExternalId를 지정할 수 있습니다. 이것은 외부 계정 (A)이 조직 내에서 assume the role 하기 위해 명시해야 하는 "비밀" 문자열입니다. 외부 계정 B가 이 문자열을 모른다면, B가 A에 접근하더라도 당신의 role에 접근할 수 없습니다.

다만, 이 ExternalId "비밀"은 비밀이 아니다는 점에 유의하세요 — IAM assume role policy를 읽을 수 있는 누구나 그것을 볼 수 있습니다. 하지만 외부 계정 A만 이 값을 알고 있고 외부 계정 B가 모른다면, 이는 B가 A를 악용해 당신의 role에 접근하는 것을 방지합니다.

Example:

json
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"AWS": "Example Corp's AWS Account ID"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "12345"
}
}
}
}

warning

공격자가 confused deputy를 악용하려면 현재 account의 principals가 다른 account의 roles를 impersonate할 수 있는지 어떻게든 찾아내야 합니다.

예상치 못한 신뢰 관계

principal로서의 와일드카드

json
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": { "AWS": "*" }
}

이 정책은 모든 AWS가 역할을 맡을 수 있도록 허용합니다.

서비스가 주체인 경우

json
{
"Action": "lambda:InvokeFunction",
"Effect": "Allow",
"Principal": { "Service": "apigateway.amazonaws.com" },
"Resource": "arn:aws:lambda:000000000000:function:foo"
}

이 정책은 모든 계정이 자신의 apigateway를 구성해 이 Lambda를 호출할 수 있도록 허용합니다.

S3를 주체로

json
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" },
"StringEquals": {
"aws:SourceAccount": "123456789012"
}
}

S3 bucket이 principal로 지정된 경우, S3 buckets에는 Account ID가 없으므로, 만약 당신이 deleted your bucket and the attacker created 것을 attacker가 자신의 계정에 생성했다면, attacker가 이를 악용할 수 있습니다.

지원되지 않음

json
{
"Effect": "Allow",
"Principal": { "Service": "cloudtrail.amazonaws.com" },
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*"
}

A common way to avoid Confused Deputy problems is the use of a condition with AWS:SourceArn to check the origin ARN. However, 일부 서비스는 이를 지원하지 않을 수 있습니다 (예: 일부 출처에 따르면 CloudTrail).

자격 증명 삭제

With any of the following permissions — iam:DeleteAccessKey, iam:DeleteLoginProfile, iam:DeleteSSHPublicKey, iam:DeleteServiceSpecificCredential, iam:DeleteInstanceProfile, iam:DeleteServerCertificate, iam:DeleteCloudFrontPublicKey, iam:RemoveRoleFromInstanceProfile — an actor can remove access keys, login profiles, SSH keys, service-specific credentials, instance profiles, certificates or CloudFront public keys, or disassociate roles from instance profiles. Such actions can immediately block legitimate users and applications and cause denial-of-service or loss of access for systems that depend on those credentials, so these IAM permissions must be tightly restricted and monitored.

bash
# Remove Access Key of a user
aws iam delete-access-key \
--user-name <Username> \
--access-key-id AKIAIOSFODNN7EXAMPLE

## Remove ssh key of a user
aws iam delete-ssh-public-key \
--user-name <Username> \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE

아이덴티티 삭제

권한(예: iam:DeleteUser, iam:DeleteGroup, iam:DeleteRole, iam:RemoveUserFromGroup)이 있으면 행위자는 사용자, 역할 또는 그룹을 삭제하거나 그룹 멤버십을 변경하여 아이덴티티와 관련된 흔적을 제거할 수 있습니다. 이는 해당 아이덴티티에 의존하는 사람과 서비스의 접근을 즉시 차단해 서비스 거부(denial-of-service) 또는 접근 상실을 초래할 수 있으므로, 이러한 IAM 작업은 엄격하게 제한되고 모니터링되어야 합니다.

bash
# Delete a user
aws iam delete-user \
--user-name <Username>

# Delete a group
aws iam delete-group \
--group-name <Username>

# Delete a role
aws iam delete-role \
--role-name <Role>

다음 권한 중 하나라도 있으면 — iam:DeleteGroupPolicy, iam:DeleteRolePolicy, iam:DeleteUserPolicy, iam:DeletePolicy, iam:DeletePolicyVersion, iam:DeleteRolePermissionsBoundary, iam:DeleteUserPermissionsBoundary, iam:DetachGroupPolicy, iam:DetachRolePolicy, iam:DetachUserPolicy — 행위자는 관리형/인라인 정책을 삭제하거나 분리(detach)하고, 정책 버전이나 permissions boundaries를 제거하며, 사용자·그룹·역할에서 정책을 분리(unlink)할 수 있습니다. 이는 권한 부여를 파괴하고 권한 모델을 변경하여 해당 정책에 의존하던 주체(principals)의 즉각적인 접근 상실 또는 서비스 거부(denial-of-service)를 초래할 수 있으므로 이러한 IAM 액션은 엄격히 제한하고 모니터링해야 합니다.

bash
# Delete a group policy
aws iam delete-group-policy \
--group-name <GroupName> \
--policy-name <PolicyName>

# Delete a role policy
aws iam delete-role-policy \
--role-name <RoleName> \
--policy-name <PolicyName>

연합 ID 삭제

iam:DeleteOpenIDConnectProvider, iam:DeleteSAMLProvider, 및 iam:RemoveClientIDFromOpenIDConnectProvider 권한으로 행위자는 OIDC/SAML identity providers를 삭제하거나 클라이언트 ID를 제거할 수 있습니다. 이로 인해 페더레이션 인증이 중단되어 토큰 검증이 불가능해지고, IdP 또는 구성이 복구될 때까지 SSO에 의존하는 사용자와 서비스의 접근이 즉시 차단됩니다.

bash
# Delete OIDCP provider
aws iam delete-open-id-connect-provider \
--open-id-connect-provider-arn arn:aws:iam::111122223333:oidc-provider/accounts.google.com

# Delete SAML provider
aws iam delete-saml-provider \
--saml-provider-arn arn:aws:iam::111122223333:saml-provider/CorporateADFS

무단 MFA 활성화

iam:EnableMFADevice를 통해 공격자는 사용자의 계정에 MFA device를 등록하여 정당한 사용자의 로그인(sign-in)을 차단할 수 있습니다. 무단 MFA가 활성화되면 해당 device가 제거되거나 재설정될 때까지 사용자가 잠길 수 있습니다(참고: 여러 MFA devices가 등록되어 있는 경우 sign-in에는 단 하나만 필요하므로 이 공격은 접근 차단에 영향을 주지 않습니다).

bash
aws iam enable-mfa-device \
--user-name <Username> \
--serial-number arn:aws:iam::111122223333:mfa/alice \
--authentication-code1 123456 \
--authentication-code2 789012

Certificate/Key Metadata Tampering

다음 권한들(iam:UpdateSSHPublicKey, iam:UpdateCloudFrontPublicKey, iam:UpdateSigningCertificate, iam:UpdateServerCertificate)로 공격자는 공개 키와 인증서의 상태나 메타데이터를 변경할 수 있습니다. 키/인증서를 비활성으로 표시하거나 참조를 변경하면 SSH 인증을 중단시키고 X.509/TLS 검증을 무효화하며, 해당 자격 증명에 의존하는 서비스를 즉시 중단시켜 접근 권한 또는 가용성 상실을 초래할 수 있습니다.

bash
aws iam update-ssh-public-key \
--user-name <Username> \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE \
--status Inactive

aws iam update-server-certificate \
--server-certificate-name <Certificate_Name> \
--new-path /prod/

iam:Delete*

IAM 와일드카드 iam:Delete* 는 사용자(users), 역할(roles), 그룹(groups), 정책(policies), 키(keys), 인증서(certificates), MFA devices, 정책 버전(policy versions) 등 다양한 종류의 IAM 리소스를 제거할 수 있는 권한을 부여합니다. 따라서 영향 범위(blast radius)가 매우 큽니다: iam:Delete* 권한을 가진 행위자는 identities, credentials, policies 및 관련 아티팩트를 영구적으로 삭제하고, 감사/증거(audit/evidence)를 제거하며, 서비스 또는 운영 중단을 일으킬 수 있습니다. 몇 가지 예시는 다음과 같습니다

bash
# Delete a user
aws iam delete-user --user-name <Username>

# Delete a role
aws iam delete-role --role-name <RoleName>

# Delete a managed policy
aws iam delete-policy --policy-arn arn:aws:iam::<ACCOUNT_ID>:policy/<PolicyName>

iam:EnableMFADevice

iam:EnableMFADevice 권한이 부여된 actor는 account 내 identity에 MFA device를 등록할 수 있습니다. 단, 해당 user가 이미 MFA를 활성화하지 않은 경우에만 가능합니다. 이로 인해 user의 액세스에 방해가 될 수 있습니다: attacker가 MFA device를 등록하면 정당한 user는 attacker가 등록한 MFA를 제어하지 못하기 때문에 sign in이 차단될 수 있습니다.

이러한 접근 차단(denial-of-access) 공격은 user가 MFA를 등록하지 않은 경우에만 작동합니다; attacker가 그 user에 대해 MFA device를 등록하면 정당한 user는 해당 새 MFA를 요구하는 모든 흐름에서 잠기게 됩니다. 반대로 user가 이미 하나 이상 MFA device를 보유하고 있다면 attacker가 제어하는 MFA를 추가해도 정당한 user는 차단되지 않습니다 — user는 기존에 가지고 있던 어떤 MFA로도 계속 authenticate할 수 있습니다.

user에 대해 MFA device를 enable(등록)하려면 attacker가 다음을 실행할 수 있습니다:

bash
aws iam enable-mfa-device \
--user-name <Username> \
--serial-number arn:aws:iam::111122223333:mfa/alice \
--authentication-code1 123456 \
--authentication-code2 789012

참고자료

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 지원하기