For the complete documentation index, see llms.txt. This page is also available as Markdown.

IAM Account Enumeration

IAM 자격증명을 획득하거나 세션을 가지고 있더라도 다른 사용자 계정 목록을 열거하기 위해서는 명시적으로 iam:ListUsers 권한이 필요합니다.

하지만 AWS 서비스를 이용하는 몇가지 기능들에서 객체에 대한 새로운 속성 등을 생성하거나 지정할 때, 존재하는 계정과 존재하지 않는 계정의 응답이 다른 것을 이용하여 계정 목록을 열거할 수 있습니다.

이러한 에러 기반의 열거 공격은 비록 iam:ListUsers 권한이 없더라도 사용할 수 있지만, 그 대신 속성들을 생성하거나 수정하는 권한들이 요구됩니다.

Abuse

# AWeSomeUserFinder 설치
git clone https://github.com/dievus/AWeSomeUserFinder.git
cd AWeSomeUserFinder
pip install -r requirements.txt

# 워드리스트 기반로 사용자 계정 목록 열거
- s3 버킷 정책 수정을 통한 열거
python3 AWeSomeUserFinder.py -a '<account-id>' -ak '<access-key>' -sk '<secret-key>' -s3 -b '<bucket>' -rf '<username-wordlist>'

- iam 역할 정책 수정을 통한 열거
python3 AWeSomeUserFinder.py -a '<account-id>' -ak '<access-key>' -sk '<secret-key>' -i -rn '<role>' -rf '<username-wordlist>'

IAM 역할 정책 수정을 통한 시나리오는 다음과 같은 권한이 요구됩니다.

  1. iam:GetRole

  2. iam:CreatePolicy

  3. iam:UpdateAssumeRolePolicy

  4. iam:CreateRole

  5. iam:AttachRolePolicy

S3 버킷 정책 수정을 통한 시나리오는 다음과 같은 권한이 요구됩니다.

  1. s3:PutBucketPolicy

  2. s3:GetBucketPolicy

Root Cause

AWS에서 정책의 영향을 받는 객체를 지정할 때, 해당 객체에 대한 제어권이 없더라도 존재하는 계정과 없는 계정은 응답에서 차이가 발생합니다.

위 사진의 경우 IAM 역할의 신뢰 관계에서 적용 대상을 통해 객체의 존재 여부를 파악하는 예시이며, 실제로는 더 다양한 벡터가 있습니다.

존재하지 않는 객체
존재하는 객체

References

Last updated