GCPBucketBrute
Скрипт для перечисления сегментов (buckets) Google Storage, определения вашего уровня доступа к ним и выявления возможностей для повышения привилегий.
- Этот скрипт (опционально) принимает учётные данные пользователя или сервисного аккаунта GCP и ключевое слово.
- Затем из этого ключевого слова генерируется список вариантов, которые используются для сканирования на наличие сегментов Google Storage с такими именами.
- Если предоставлены учётные данные, основная часть перечисления всё равно выполняется без аутентификации, но для каждого обнаруженного в ходе неаутентифицированного перечисления сегмента скрипт попытается перечислить его разрешения через API TestIamPermissions с предоставленными учётными данными. Это поможет найти сегменты, доступные при аутентификации, но недоступные без неё.
- Независимо от того, предоставлены учётные данные или нет, скрипт попытается перечислить разрешения сегмента через API TestIamPermissions без аутентификации. Это означает, что если вы не вводите учётные данные, вы увидите только привилегии неаутентифицированного пользователя, а если вводите – увидите, какой доступ есть у аутентифицированных пользователей по сравнению с неаутентифицированными.
- ПРЕДУПРЕЖДЕНИЕ: Если вы предоставляете учётные данные, ваше имя пользователя может быть раскрыто в журналах доступа к любым обнаруженным сегментам.
TL;DR Резюме
- По заданному ключевому слову скрипт перечисляет сегменты Google 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 Storage.
--check
- Этот аргумент является взаимоисключающим с
-k/--keyword и принимает одну строку. Он позволяет проверить ваши разрешения на конкретном сегменте, а не генерировать список вариантов на основе ключевого слова. Можно повторять для проверки нескольких сегментов. Автор: @BBerastegui
--check-list
- Этот аргумент является взаимоисключающим с
-k/--keyword и --check. Он позволяет проверить разрешения для списка сегментов, указанных в файле. Они должны быть перечислены по одному на строку в текстовом файле. Для чтения из стандартного ввода укажите - в качестве имени файла.
-s/--subprocesses