AWS - S3 Unauthenticated Enum
S3 공개 버킷
버킷은 **“공개”**로 간주되며, 모든 사용자가 버킷의 내용을 나열할 수 있는 경우이고, **“비공개”**는 버킷의 내용을 특정 사용자만 나열하거나 쓸 수 있는 경우입니다.
회사는 버킷 권한이 잘못 구성되어 모든 것 또는 AWS의 모든 계정에 인증된 모든 사용자에게 접근을 허용할 수 있습니다(즉, 누구에게나). 이러한 잘못된 구성에서도 일부 작업은 수행할 수 없을 수 있으며, 버킷은 자체 접근 제어 목록(ACL)을 가질 수 있습니다.
AWS-S3 잘못 구성에 대해 알아보세요: http://flaws.cloud 및 http://flaws2.cloud/
AWS 버킷 찾기
웹페이지가 AWS를 사용하여 일부 리소스를 저장할 때 찾는 다양한 방법:
열거 및 OSINT:
wappalyzer 브라우저 플러그인 사용
burp 사용(웹 스파이더링) 또는 페이지를 수동으로 탐색하여 모든 로드된 리소스가 기록에 저장됩니다.
리소스 확인 도메인에서:
CNAMES 확인,
resources.domain.com
은 CNAMEbucket.s3.amazonaws.com
을 가질 수 있습니다.https://buckets.grayhatwarfare.com를 확인하세요. 이미 발견된 공개 버킷이 있는 웹사이트입니다.
버킷 이름과 버킷 도메인 이름은 같아야 합니다.
flaws.cloud는 IP 52.92.181.107에 있으며, 해당 주소로 가면 https://aws.amazon.com/s3/로 리디렉션됩니다. 또한,
dig -x 52.92.181.107
는s3-website-us-west-2.amazonaws.com
을 반환합니다.버킷인지 확인하려면 https://flaws.cloud.s3.amazonaws.com/를 방문할 수 있습니다.
무차별 대입
회사를 대상으로 이름을 무차별 대입하여 버킷을 찾을 수 있습니다:
https://github.com/jordanpotti/AWSBucketDump (잠재적인 버킷 이름 목록 포함)
S3 버킷 약탈
S3 공개 버킷이 주어지면, BucketLoot는 자동으로 흥미로운 정보를 검색할 수 있습니다.
지역 찾기
AWS에서 지원하는 모든 지역은 https://docs.aws.amazon.com/general/latest/gr/s3.html에서 확인할 수 있습니다.
DNS로
dig
및 **nslookup
**을 사용하여 발견된 IP의 DNS 요청을 수행하여 버킷의 지역을 확인할 수 있습니다:
해결된 도메인에 "website"라는 단어가 있는지 확인하세요.
정적 웹사이트에 접근하려면: flaws.cloud.s3-website-us-west-2.amazonaws.com
또는 버킷에 접근하려면: flaws.cloud.s3-us-west-2.amazonaws.com
을 방문하세요.
시도해보기
버킷에 접근하려고 시도하지만 지정한 도메인 이름에 다른 지역을 입력하는 경우 (예: 버킷이 bucket.s3.amazonaws.com
에 있지만 bucket.s3-website-us-west-2.amazonaws.com
에 접근하려고 하는 경우, 그러면 올바른 위치로 안내됩니다:
버킷 열거하기
버킷의 개방성을 테스트하기 위해 사용자는 웹 브라우저에 URL을 입력하기만 하면 됩니다. 개인 버킷은 "Access Denied"로 응답합니다. 공개 버킷은 저장된 첫 1,000개의 객체를 나열합니다.
모두에게 열려 있음:
개인:
CLI로도 확인할 수 있습니다:
버킷에 도메인 이름이 없는 경우, 이를 열거하려고 할 때 버킷 이름만 입력하고 전체 AWSs3 도메인은 입력하지 마십시오. 예: s3://<BUCKETNAME>
공개 URL 템플릿
Get Account ID from public Bucket
AWS 계정을 확인하는 것은 새로운 S3:ResourceAccount
정책 조건 키를 이용하여 가능합니다. 이 조건은 계정이 있는 S3 버킷에 따라 접근을 제한합니다 (다른 계정 기반 정책은 요청하는 주체가 있는 계정에 따라 제한합니다).
정책에 와일드카드가 포함될 수 있기 때문에 한 번에 하나의 숫자로 계정 번호를 찾는 것이 가능합니다.
이 도구는 이 과정을 자동화합니다:
이 기술은 API Gateway URL, Lambda URL, Data Exchange 데이터 세트와 태그 값을 얻는 데에도 작동합니다(태그 키를 알고 있는 경우). 더 많은 정보는 원본 연구와 이 악용을 자동화하는 도구 conditional-love에서 찾을 수 있습니다.
버킷이 AWS 계정에 속하는지 확인하기
이 블로그 게시물에서 설명한 바와 같이, 버킷을 나열할 수 있는 권한이 있는 경우 요청을 보내어 버킷이 속한 accountID를 확인할 수 있습니다:
If the error is an “Access Denied” it means that the account ID was wrong.
Used Emails as root account enumeration
As explained in this blog post, it's possible to check if an email address is related to any AWS account by trying to grant an email permissions over a S3 bucket via ACLs. If this doesn't trigger an error, it means that the email is a root user of some AWS account: 오류가 “Access Denied”인 경우, 계정 ID가 잘못되었다는 의미입니다.
루트 계정 열거를 위한 사용된 이메일
이 블로그 게시물에서 설명한 바와 같이, S3 버킷에 대한 ACL을 통해 이메일에 권한을 부여하려고 시도함으로써 이메일 주소가 AWS 계정과 관련이 있는지 확인할 수 있습니다. 이로 인해 오류가 발생하지 않으면, 해당 이메일이 일부 AWS 계정의 루트 사용자라는 의미입니다:
References
Last updated