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