Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
red-shadow — AWS IAM 구성을 스캔하여 그룹에 대한 사용자 작업을 제한하지 못하는 잘못 구성된 deny 정책을 감지함으로써 섀도우 관리자를 탐지하고, 권한 상승 탐지 및 수정을 가능하게 합니다. | Kitploit
도구/GitHubGitHub/lightspin-tech/red-shadow
Cloud Infrastructure SecurityVulnerability ScannersPenetration TestingCloud SecurityIdentity & Access Management (IAM)Misconfiguration
GitHublightspin-tech/red-shadow

red-shadow

AWS IAM 구성을 스캔하여 그룹에 대한 사용자 작업을 제한하지 못하는 잘못 구성된 deny 정책을 감지함으로써 섀도우 관리자를 탐지하고, 권한 상승 탐지 및 수정을 가능하게 합니다.

저장소 보기
95225년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

red-shadow

Red-Shadow

Lightspin AWS IAM 취약점 스캐너

설명

AWS IAM 구성에서 섀도우 관리자를 스캔합니다. 이는 Lightspin 보안 연구팀이 발견한, 그룹 내 사용자에게 영향을 미치지 않는 잘못 구성된 거부(deny) 정책을 기반으로 합니다.

이 도구는 다음 IAM 객체에서 잘못된 구성을 탐지합니다.

  • 관리형 정책(Managed Policies)

  • 사용자 인라인 정책(Users Inline Policies)

  • 그룹 인라인 정책(Groups Inline Policies)

  • 역할 인라인 정책(Roles Inline Policies)

연구 요약

그룹에 적용되는 거부 정책에 대한 AWS IAM 평가 로직은 대부분의 보안 엔지니어가 다른 권한 부여 메커니즘에 익숙한 방식과 동일하게 작동하지 않습니다.

그룹 리소스가 포함된 정책에 명시적 거부(deny)가 있다고 가정해 보겠습니다. 이 경우 해당 거부는 그룹 작업에만 영향을 미치며 사용자 작업에는 영향을 미치지 않으므로, 프로세스가 예를 들어 Active Directory와 동일하다고 가정하면 조직이 잘못된 구성과 취약점에 노출될 수 있습니다.

취약한 JSON 정책 예시:

root@kitploit:~
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ProtectManagersByDeny",
            "Effect": "Deny",
            "Action": "*",
            "Resource": "arn:aws:iam::123456789999:group/managers"
        }
    ]
}

이 예시에서 정책은 해당 정책이 연결된 사용자, 그룹 또는 역할이 managers라는 그룹에 대해 수행하는 모든 IAM 작업을 거부해야 합니다.

그러나 실제로는 iam:ChangePassword와 같은 단순한 IAM 작업이 거부 정책이 효과적이지 않기 때문에 작동할 수 있습니다.

전체 보안 연구 블로그 링크

탐지

AWS IAM은 사용자 객체 작업과 그룹 객체 작업을 명확히 구분합니다.

다음 목록은 도구가 그룹에 영향을 미치는 거부 정책(와일드카드 제외)을 스캔하는 사용자 객체 작업입니다.

root@kitploit:~
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로 구축되었습니다.

이 도구는 다음을 필요로 합니다.

  • OS 환경 변수에 Access Key가 있는 IAM 사용자
  • IAM 사용자가 스캐너를 실행할 수 있는 충분한 권한
  • Python 3 및 pip3 설치

설치

root@kitploit:~
sudo git clone https://github.com/lightspin-tech/red-shadow.git
cd red-shadow
pip3 install -r requirements.txt

사용법

root@kitploit:~
python3 red-shadow.py

결과 분석

결과는 AWS에서 이러한 권한 부여 우회에 취약한 모든 IAM 객체를 발견합니다.

출력 예시:

root@kitploit:~
++ 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 취약점을 검증하고 익스플로잇을 실행하려면 다음 흐름을 따르십시오.

  1. aws iam create-group --group-name managers
  2. aws iam attach-group-policy --group-name managers --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
  3. aws iam create-user --user-name JohnAdmin
  4. aws iam add-user-to-group --user-name JohnAdmin --group-name managers
  5. 아래 내용으로 policy.json 파일을 생성합니다 (계정 ID를 바꾸세요):
root@kitploit:~
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ProtectManagersByDeny",
      "Effect": "Deny",
      "Action": "*",
      "Resource": "arn:aws:iam::123456789999:group/managers"
    }
  ]
}
  1. aws iam create-policy --policy-name ProtectManagers --policy-document file://policy.json
  2. aws iam create-group --group-name backend-dev
  3. aws iam create-user --user-name BobAttacker
  4. aws iam add-user-to-group --user-name BobAttacker --group-name backend-dev
  5. aws iam attach-group-policy --group-name backend-dev --policy-arn arn:aws:iam::123456789999:policy/ProtectManagers
  6. backend-dev 그룹에 대해 사용자가 액세스 키를 생성할 수 있도록 policy_iam.json 파일에 정책을 생성합니다:
root@kitploit:~
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "iam:CreateAccessKey",
            "Resource": "*"
        }
    ]
}
  1. aws iam create-policy --policy-name devCreateAccessKeys --policy-document file://policy_iam.json
  2. aws iam attach-group-policy --group-name backend-dev --policy-arn arn:aws:iam::123456789999:policy/devCreateAccessKeys
  3. 다음 명령으로 구성을 검증합니다: aws iam list-attached-group-policies --group backend-dev
  4. aws iam create-access-key --user-name BobAttacker
  5. 새 액세스 키와 시크릿을 aws 프로파일에 구성합니다 (로컬 환경)
  6. 이제 BobAttacker 사용자는 모든 리소스에 대해 액세스 키를 생성할 수 있지만 managers 그룹에 대해서는 명시적 거부가 적용됩니다.

다음을 사용하여 취약점을 익스플로잇 해보겠습니다:

aws iam create-access-key --user-name JohnAdmin --profile BobAttacker

권한 상승 완료!

수정

권한 부여 우회에 취약한 정책을 발견한 경우, 취약점을 수정하고 정책을 수정하는 두 가지 방법이 있습니다.

옵션 1: 효과가 없는 IAM 작업을 방지하기 위해 리소스 필드에 그룹 대신 관련 모든 사용자를 정의하고, 다음과 같은 예시와 같이 모든 그룹 작업을 거부합니다:

root@kitploit:~
{
    "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 조건을 사용합니다. 예시는 다음과 같습니다:

root@kitploit:~
{
    "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에 따라 사용 가능합니다.

도구 다운로드