GCPBucketBrute
Google Storage 버킷을 열거하고, 해당 버킷에 대한 액세스 권한을 확인하고, 권한 에스컬레이션이 가능한지 확인하는 스크립트입니다.
- 이 스크립트는 (선택적으로) GCP 사용자/서비스 계정 사용자 인증 정보와 키워드를 허용합니다.
- 그런 다음 해당 키워드에서 순열 목록이 생성되고 해당 이름을 가진 Google Storage 버킷이 있는지 검색하는 데 사용됩니다.
- 자격 증명이 제공되면 인증되지 않은 동안 대부분의 열거가 계속 수행되지만, 인증되지 않은 열거를 통해 검색된 버킷의 경우 제공된 자격 증명과 함께 TestIamPermissions API를 사용하여 버킷 권한을 열거하려고 시도합니다. 이렇게 하면 인증된 동안 액세스할 수 있지만 인증되지 않은 동안에는 액세스할 수 없는 버킷을 찾는 데 도움이 됩니다.
- 자격 증명 제공 여부에 관계없이 스크립트는 인증되지 않은 동안 TestIamPermissions API를 사용하여 버킷 권한을 열거하려고 시도합니다. 즉, 자격 증명을 입력하지 않으면 인증되지 않은 사용자가 가진 권한만 표시되지만, 자격 증명을 입력하면 인증되지 않은 사용자와 비교하여 인증된 사용자의 액세스 권한을 볼 수 있습니다.
- 경고: 자격 증명을 제공하면 검색한 버킷의 액세스 로그에 사용자 이름이 공개될 수 있습니다.
핵심요약, DR 요약
- 키워드가 주어지면 이 스크립트는 키워드에서 생성된 순열 수를 기반으로 Google Storage 버킷을 열거합니다.
- 그러면 검색된 버킷이 모두 출력됩니다.
- 그러면 검색된 버킷에 부여된 모든 권한(있는 경우)이 출력됩니다.
- 그런 다음 스크립트는 권한 에스컬레이션(storage.buckets.setIamPolicy)을 위해 해당 권한을 확인하고 흥미로운 내용(공개적으로 나열 가능, 공개적으로 쓰기 가능, 인증된 나열 가능, 권한 에스컬레이션 등)을 출력합니다.
요구사항
- 리눅스/OS X
- Windows는 인증되지 않은 스캔에만 작동합니다. 인증된 Google 클라이언트를 사용할 때 실패한다는 점에서 스크립트가 하위 프로세스 모듈을 사용하는 방식에 문제가 있습니다.
- 파이썬3
- 핍3
설치
-
git clone https://github.com/RhinoSecurityLabs/GCPBucketBrute.git
-
cd GCPBucketBrute/
-
pip3 install -r requirements.txt
또는 python3 -m pip install -r requirements.txt
용법
먼저 사용자 계정, 서비스 계정 또는 인증되지 않은 계정 간의 열거에 사용할 인증 유형을 결정합니다. 서비스 계정을 사용하는 경우 -f
/ --service-account-credential-file-path
인수를 통해 비공개 키에 대한 파일 경로를 제공하세요. 사용자 계정을 사용하는 경우 인증 인수를 제공하지 마세요. 그러면 GCP API에 액세스하기 위해 사용자 계정의 액세스 토큰을 입력하라는 메시지가 표시됩니다. 완전히 인증되지 않은 상태로 검사하려면 -u
/ --unauthenticated
인수를 전달하여 인증 프롬프트를 숨깁니다.
- 완전히 인증되지 않은 상태에서 "test" 키워드를 사용하여 버킷을 검색합니다.
python3 gcpbucketbrute.py -k test -u
- 서비스 계정(../sa-priv-key.pem에 저장된 개인 키)으로 인증하는 동안 키워드 "test"를 사용하여 버킷을 검색하고 결과를 현재 디렉터리의 out.txt로 출력합니다.
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- 5개가 아닌 10개의 하위 프로세스로 실행되는 사용자 계정 액세스 토큰을 사용하여 키워드 "test"를 사용하여 버킷을 검색합니다.
python3 gcpbucketbrute.py -k test -s 10
사용 가능한 인수
-
-k
/ --keyword
- 이 인수는 순열을 생성하는 데 사용할 키워드를 지정하는 데 사용됩니다. 이러한 순열은 Google Storage에서 검색됩니다.
-
--check
- 이 인수는
-k
/ --keyword
와 상호 배타적이며 단일 문자열을 허용합니다. 키워드를 기반으로 순열 목록을 생성하는 대신 특정 버킷에 대한 권한을 확인할 수 있습니다. 여러 버킷을 확인하기 위해 이 작업을 반복할 수 있습니다. 크레딧: @BBerastegui
-
--check-list
- 이 인수는
-k
/ --keyword
및 --check
와 상호 배타적입니다. 파일의 버킷 목록에 대한 권한을 확인할 수 있습니다. 텍스트 파일에서는 한 줄에 하나씩 나열되어야 합니다. 표준 입력에서 읽으려면 -
파일 이름으로 전달합니다.
-
-s
/ --subprocesses
- 이 인수는 버킷 열거에 사용될 하위 프로세스 수를 지정합니다. 기본값은 5이고 이 값을 더 높게 설정할수록 열거 속도는 빨라지지만 Google에 대한 초당 요청은 증가합니다. 이는 본질적으로 스레드이지만 스크립트는 병렬 실행을 위해 스레드 대신 하위 프로세스를 사용합니다.
-
-f
/ --service-account-credential-file-path
- 이 인수는 Google Storage에 인증하는 데 사용할 GCP 서비스 계정의 비공개 키 파일 경로를 지정하는 곳입니다. 이는 선택 사항입니다. 대신 액세스 토큰을 사용하려면 이 인수를 생략하세요. 토큰이 명령줄 기록에 저장되지 않도록 토큰을 입력하라는 메시지가 표시됩니다. 자세한 내용은 여기: https://google-auth.readthedocs.io/en/latest/user-guide.html#service-account-private-key-files 및 여기: https://google-auth.readthedocs.io/ en/latest/user-guide.html#user-credentials
-
-u
/ --unauthenticated
- 이 인수는 인증되지 않은 열거를 강제합니다. 이 플래그를 사용하면 자격 증명을 묻는 메시지가 표시되지 않으며 유효한 버킷에서 인증된 권한을 확인하지 않습니다.
-
-o
/ --out-file
- 이 인수를 사용하면 결과를 출력할 로그 파일에 대한 (상대 또는 절대) 파일 경로를 지정할 수 있습니다. 파일이 아직 없으면 생성되고, 이미 있으면 추가됩니다.
-
-w
/ --wordlist
- 이 인수를 사용하면 단어 목록 입력 파일을 지정할 수 있습니다.