
Azure RedOps — это инструментарий наступательной безопасности для оценки безопасности Microsoft Entra ID
Инструмент «швейцарский нож» для проведения Red Team операций в Azure / Entra ID.
Автор: Mr.Un1k0d3r (TrueCyber Inc) Версия: 0.1 Язык: Python 3.12+
AzureRedOps — это набор средств для оценки безопасности (offensive security) арендаторов Microsoft Entra ID и Azure. Он объединяет наиболее распространенные сценарии Red Team — аутентификацию, управление токенами, перечисление каталогов, проверку привилегий, подбор паролей (password spraying) и действия после эксплуатации против Microsoft Graph — в едином CLI, управляемом через --activity.
Каждая операция выбирается с помощью -a/--activity. Полученные при аутентификации токены можно кэшировать локально (.azure_creds) и повторно использовать по имени с помощью -l/--load-access-token, так что вам редко придется вставлять необработанные JWT.
Узнайте больше об инструменте в блоге CYPFER
.azure_creds). Любой поток может автоматически сохранять свои токены с помощью -s/--save + -n/--name.auth) — прямая аутентификация по имени пользователя и паролю.phish-start / phish-capture) — злоупотребление OAuth-грантом авторизации устройства для захвата токенов, выдаваемых, когда цель вводит ваш код пользователя на microsoft.com/devicelogin. Автоматический захват по умолчанию.auth-app) — полный поток кода авторизации + PKCE для пользовательской регистрации приложения, обслуживаемый встроенным локальным HTTPS-слушателем, который принимает перенаправление.auth-interactive) — управление реальным браузером (Playwright; Firefox по умолчанию, -br для переключения) (обрабатывает MFA / Conditional Access / SSO), затем извлечение всех токенов из записанного HAR сессии.refresh) — обмен токена обновления на новые токены доступа.obo) — обмен уже выпущенного токена доступа на новый токен, ограниченный нижестоящим ресурсом (OAuth 2.0 jwt-bearer / OBO).browser-sso) — открытие реального браузера уже аутентифицированного как пользователь прямо в целевое веб-приложение (Outlook в вебе, Teams, SharePoint, портал Azure и т.д.). С помощью -aprt/--auto-prt автоматически создает cookie Primary Refresh Token (PRT) из токена обновления (регистрация устройства → PRT → x-ms-RefreshTokenCredential), так что новый браузер выполняет единый вход без ручного входа.gather-all.spray) и межприложечный подбор токенов обновления (spray-refresh).magic-app находит приложения с публичной перенаправляемостью и согласием AllPrincipals; встроенные списки известных/интересных идентификаторов приложений Microsoft.requirements.txt):
PyJWTrequestsplaywrightcryptography (нужен только для browser-sso -aprt, авто-PRT потока)auth-interactive, browser-sso). Firefox — движок по умолчанию (-br/--browser); установите его с помощью python -m playwright install firefox.includes/web/cert.pem и includes/web/key.pem (нужны только для потока PKCE auth-app — см. Примечания).---```bash
git clone AzureRedOps cd AzureRedOps
python3 -m venv AzureRedOps source AzureRedOps/bin/activate # Linux / macOS
pip install -r requirements.txt
python -m playwright install firefox
Запустите инструмент:```bash
python3 AzureRedOps.py -a <activity> [options]
Общий шаблон вызова:```bash python3 AzureRedOps.py -a [authentication] [activity options] [global options]
### Предоставление токена
Действия, вызывающие Microsoft Graph, требуют токен доступа. Вы можете предоставить его двумя способами:
| Метод | Флаг | Пример |
|--------|------|---------|
| Передача сырого токена | `-ac, --access-token` | `-ac eyJ0eXAi...` |
| Загрузка кэшированного токена по имени | `-l, --load-access-token` | `-l mytoken` |
При использовании `-l` соответствующий `access_token` (и, где необходимо, `refresh_token` и `tenant`) читается из хранилища `.azure_creds`.
### Сохранение токенов в файл (`-s` / `-n`)
Любая активность, которая получает токены (`auth`, `auth-app`, `auth-interactive`, `phish-start`/`phish-capture`, `refresh`), может **автоматически сохранять их** в локальное хранилище учетных данных (`.azure_creds`) путем добавления `-s/--save` вместе с `-n/--name`:```bash
# Authenticate and save the resulting tokens under the name "victim1"
python3 AzureRedOps.py -a auth -u [email protected] -p 'P@ssw0rd!' -tid <tenant-guid> -s -n victim1
-s/--save включает автосохранение; требует указания -n/--name — инструмент завершается с
ошибкой, если -n отсутствует.-n/--name — это ключ, под которым сохраняется токен. Позднее вы можете повторно использовать его с
-l victim1 вместо вставки сырого JWT, просмотреть с помощью -a view -n victim1 или
удалить с помощью -a delete -n victim1.auth-interactive всегда сохраняет автоматически и запросит имя в интерактивном режиме,
если -n не указан.-j)Большинство перечислительных действий (list-users, list-applications, list-principals,
gather-all, raw-url) принимают -j/--json <filename> для записи сырого ответа API в JSON-файл вместо
(или в дополнение к) выводу на экран:```bash
python3 AzureRedOps.py -a list-users -l victim1 -j users.json
Для `gather-all` указанное имя файла используется как суффикс, и один файл записывается для каждой конечной точки Graph (например, `users-<name>`, `groups-<name>`, ...).
> Совет: `-j` управляет структурированным экспортом JSON, а `-re/--redirect-to-file` дублирует форматированный вывод консоли в `output.txt`. Эти два параметра независимы.
### Идентификаторы клиента
- `-t, --tenant` ожидает **имя домена** (например, `contoso.com`) и используется действием `id`.
- `-tid, --tenant-id` ожидает **GUID клиента** или `common`, используется в действиях аутентификации.
---
## Параметры командной строки