Account ID Enumeration (Public S3 Bucket)

S3 버킷 기본 생성 설정

S3 Bucket은 생성할 때 기본적으로 프라이빗 상태이지만, e커머스와 같이 웹 자산을 제공하기 위해 의도적으로 퍼블릭으로 사용하기도 합니다.

퍼블릭 버킷을 하는 주 목적인 파일 다운로드(웹 자산 배포)를 위해서는 s3:GetObject 권한이 필요합니다. 반면 s3:ListBucket 권한이 같이 활성화 되어 있을 경우에만 Account ID 열거 공격이 가능합니다.

Setting

열거 공격을 위해서 공격자 AWS에서 몇가지 설정을 해줘야 합니다. IAM > 사용자 > 사용자 생성 > 권한 추가 > 인라인 정책 생성을 통해 json 형식의 정책을 생성합니다.

{
	"Version": "2012-10-17",
	"Statement": {
		"Effect": "Allow",
		"Action": "sts:AssumeRole",
		"Resource": "arn:aws:iam::317995862587:role/pentest"
	}
}

사용자 정책 생성 이후 역할을 생성해야 합니다. IAM > 역할 > 역할 생성 > 사용자 지정 신뢰 정책 를 통해 json 형식의 신뢰 정책을 생성합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::317995862587:user/s3user"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

마지막으로 IAM > 역할 > 생성한 역할 > 권한 정책 > 권한 추가 > 인라인 정책 생성 에서 json 형식의 권한 정책을 추가합니다.

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"s3:ListAllMyBuckets",
				"s3:ListBucket",
				"s3:GetBucketLocation",
				"s3:GetObject"
			],
			"Resource": "*"
		}
	]
}

Abuse

# s3-account-search 설치
python3 -m pipx install s3-account-search

# 대상 Account ID 열거
s3-account-search 

Last updated

Was this helpful?