GCPBucketBrute
Скрипт для перечисления бакетов Google Cloud Storage, определения ваших прав доступа к ним и проверки возможности повышения привилегий.
- Этот скрипт (опционально) принимает учетные данные пользователя/сервисного аккаунта GCP и ключевое слово.
- Затем на основе этого ключевого слова будет сгенерирован список перестановок, который будет использоваться для поиска существования бакетов Google Cloud Storage с такими именами.
- Если учетные данные предоставлены, большинство операций по перечислению все еще будут выполняться без аутентификации, но для любого обнаруженного через неаутентифицированный поиск бакета скрипт попытается перечислить права доступа к бакету, используя API
TestIamPermissions с предоставленными учетными данными. Это поможет найти бакеты, к которым есть доступ при аутентификации, но нет без неё.
- Независимо от того, предоставлены ли учетные данные, скрипт затем попытается перечислить права доступа к бакету, используя API
TestIamPermissions без аутентификации. Это означает, что если вы не вводите учетные данные, вам будут показаны только привилегии неаутентифицированного пользователя, но если вы вводите учетные данные, вы увидите, какой доступ имеют аутентифицированные пользователи по сравнению с неаутентифицированными.
- ПРЕДУПРЕЖДЕНИЕ: Если учетные данные предоставлены, ваше имя пользователя может быть раскрыто в логах доступа к любым обнаруженным вами бакетам.
Краткое резюме
- Получив ключевое слово, этот скрипт перечисляет бакеты Google Cloud Storage на основе ряда перестановок, сгенерированных из ключевого слова.
- Затем все обнаруженные бакеты будут выведены.
- Затем все права доступа, предоставленные вам (если таковые имеются), к любому обнаруженному бакету будут выведены.
- Затем скрипт проверит эти привилегии на возможность повышения привилегий (
storage.buckets.setIamPolicy) и выведет любую интересную информацию (например, публично листаемые, публично записываемые, листаемые для аутентифицированных, повышение привилегий и т.д.).
Требования
- Linux/OS X
- Windows работает только для неаутентифицированных сканирований. Что-то не так со способом использования скриптом модуля
subprocess, из-за чего он выходит из строя при использовании аутентифицированного Google-клиента.
- Python3
- Pip3
Установка
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. Если вы используете учетную запись пользователя, не передавайте аргумент аутентификации. Затем вам будет предложено ввести токен доступа вашей учетной записи для доступа к API GCP. Если вы хотите сканировать полностью без аутентификации, передайте аргумент -u/--unauthenticated, чтобы скрыть запросы аутентификации.
- Сканирование бакетов с использованием ключевого слова "test" полностью без аутентификации:
python3 gcpbucketbrute.py -k test -u
- Сканирование бакетов с использованием ключевого слова "test" с аутентификацией через сервисную учетную запись (приватный ключ хранится в ../sa-priv-key.pem), вывод результатов в файл out.txt в текущей директории:
python3 gcpbucketbrute.py -k test -f ../sa-priv-key.pem -o ./out.txt
- Сканирование бакетов с использованием ключевого слова "test", с использованием токена доступа учетной записи пользователя, запуск с 10 подпроцессами вместо 5:
python3 gcpbucketbrute.py -k test -s 10
Доступные аргументы
-k/--keyword
- Этот аргумент используется для указания ключевого слова, на основе которого будут генерироваться перестановки. Именно эти перестановки будут использоваться для поиска в Google Cloud Storage.
--check
- Этот аргумент является взаимоисключающим с
-k/--keyword и принимает одну строку. Он позволяет проверить ваши права доступа к конкретному бакету, а не генерировать список перестановок на основе ключевого слова. Может быть использован несколько раз для проверки нескольких бакетов. Автор: @BBerastegui
--check-list
- Этот аргумент является взаимоисключающим с
-k/--keyword и --check. Он позволяет проверить права доступа для списка бакетов в файле. Они должны быть перечислены по одному на строку в текстовом файле. Чтобы читать из стандартного ввода, передайте - в качестве имени файла.
-s/--subprocesses
- Этот аргумент указывает количество подпроцессов, которые будут использоваться для перечисления бакетов. По умолчанию 5, и чем выше это значение, тем быстрее будет перечисление, но увеличится количество запросов в секунду к Google. По сути это потоки, но скрипт использует подпроцессы вместо потоков для параллельного выполнения.
-f/--service-account-credential-file-path
- Этот аргумент используется для указания пути к файлу приватного ключа сервисного аккаунта GCP, который вы хотите использовать для аутентификации в Google Cloud Storage. Это опционально. Если вы хотите использовать токен доступа, пропустите этот аргумент, и вам будет предложено ввести токен, чтобы он не сохранялся в истории командной строки. Больше информации здесь: 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
- Этот аргумент позволяет указать входной файл со списком слов.