
Python-инструмент для разведки, предназначенный для обнаружения служб Azure и определения принадлежности тенанта через проверку DNS, многосервисное зондирование и анализ ответов. Поддерживает параллельное сканирование, генерацию перестановок и несколько форматов экспорта.
 <br> [![licence badge]][licence] [![stars badge]][stars] [![forks badge]][forks] [![issues badge]][issues]  [licence badge]:https://img.shields.io/badge/license-New%20BSD-blue.svg [stars badge]:https://img.shields.io/github/stars/NetSPI/ATEAM.svg [forks badge]:https://img.shields.io/github/forks/NetSPI/ATEAM.svg [issues badge]:https://img.shields.io/github/issues/NetSPI/ATEAM.svg [licence]:https://raw.githubusercontent.com/NetSPI/ATEAM/master/LICENSE.txt [stars]:https://github.com/NetSPI/ATEAM/stargazers [forks]:https://github.com/NetSPI/ATEAM/network [issues]:https://github.com/NetSPI/ATEAM/issues # ATEAM: модуль перечисления и атрибуции клиентов Azure Инструмент разведки на Python, предназначенный для обнаружения служб Azure и определения принадлежности клиента на основе их ответов. ### Авторы, участники и лицензия * Авторы: * Karl Fosaaen ([@kfosaaen - на большинстве платформ), NetSPI * Thomas Elling ([@thomaselling1](https://linkedin.com/in/thomaselling1)), NetSPI * Лицензия: BSD 3-Clause ## 🎯 Назначение Этот инструмент помогает исследователям безопасности, специалистам по пентесту и администраторам Azure обнаруживать ресурсы Azure, связанные с конкретными идентификаторами клиентов (tenant ID). ## ✨ Возможности ### **Обнаружение нескольких служб** Проверяет имена ресурсов для 6 различных служб Azure и их поддоменов: - **Azure App Services** (`.azurewebsites.net` и `.scm.azurewebsites.net`) - **Azure DevOps** (`dev.azure.com`) - **Azure Key Vault** (`.vault.azure.net`) - **Azure Storage Accounts** (`.blob.core.windows.net`) - **SharePoint Online** (`.sharepoint.com`) - **Azure Databricks** (`.azuredatabricks.net`) ### **Дополнительные возможности** - **Параллельная обработка**: многопоточное сканирование для ускорения работы - **Пакетная обработка**: обрабатывает ресурсы настраиваемыми пакетами для предотвращения проблем с памятью - **Проверка DNS**: подтверждает DNS-записи перед выполнением HTTP-запросов - **Генерация перестановок**: автоматически создает варианты имен ресурсов - **Хранение в базе данных**: база данных SQLite для постоянного хранения результатов - **Несколько форматов экспорта**: экспорт в CSV, JSON и HTML - **Подробное журналирование**: детальная отладочная информация для устранения неполадок ## 📋 Предварительные требования - Python 3.7 или новее - Подключение к интернету - Необходимые пакеты Python (см. раздел «Установка» ниже) ## 🚀 Установка 1. **Клонируйте или скачайте инструмент:** ```bash git clone https://github.com/NetSPI/ATEAM.git cd ATEAM ``` 2. **Установите необходимые зависимости:** ```bash pip install -r requirements.txt ``` Или установите вручную: ```bash pip install requests dnspython urllib3 ``` 3. **Проверьте установку:** ```bash python ateam.py --help ``` ## 📖 Использование ### Базовое использование **Сканирование одного ресурса:** ```bash python ateam.py -r "myapp" ``` **Сканирование нескольких ресурсов:** ```bash python ateam.py -r "app1" "app2" "app3" ``` **Сканирование по списку ресурсов из текстового файла:** ```bash python ateam.py -f resources.txt ``` ### Расширенное использование **Подробный вывод с (20) рабочими потоками:** ```bash python ateam.py -f resources.txt -v -w 20 ``` **Сгенерировать перестановки и выполнить сканирование:** ```bash python ateam.py -f resources.txt -p ``` **Сгенерировать перестановки с меньшим размером пакета (рекомендуется для больших сканирований):** ```bash python ateam.py -f resources.txt -p -b 100 ``` **Экспортировать результаты в HTML:** ```bash python ateam.py -e html ``` **Очистить базу данных и начать заново:** ```bash python ateam.py -f resources.txt --clear ``` ### Параметры командной строки | Параметр | Описание | Пример | |--------|-------------|---------| | `-f, --file` | Файл со списком ресурсов (по одному в строке) | `-f resources.txt` | | `-r, --resources` | Список ресурсов через пробел | `-r "app1" "app2"` | | `-w, --workers` | Количество одновременных рабочих потоков (по умолчанию: 10) | `-w 20` | | `-b, --batch-size` | Ресурсов в пакете (по умолчанию: 1000) | `-b 100` | | `-v, --verbose` | Включить подробное журналирование | `-v` | | `-l, --list` | Показать все записи базы данных | `-l` | | `-e, --export` | Экспорт результатов (csv, json, html) | `-e html` | | `--clear` | Очистить базу данных перед сканированием | `--clear` | | `-t, --tenant` | Фильтровать результаты по tenant ID | `-t "tenant-id"` | | `-p, --permutations` | Сгенерировать перестановки имен ресурсов | `-p` | ## 📁 Структура файлов ``` ATEAM/ ├── ateam.py # Main script ├── requirements.txt # Python dependencies ├── permutations.txt # Resource name permutations └── README.md # This file ``` ## 🔧 Конфигурация ### Файл перестановок Файл `permutations.txt` содержит распространенные префиксы и суффиксы для генерации вариантов имен ресурсов: ``` dev prod test staging api web ... ``` Это создаст такие комбинации, как: - `devmyapp` - `myappdev` - `prodmyapp` - `myapp-prod` - и т. д. ### База данных Результаты сохраняются в `azure_tenants.db` (SQLite) со следующей схемой: - `resource_uri`: URL обнаруженного ресурса - `resource_type`: тип службы Azure - `tenant_id`: извлеченный tenant ID - `discovered_at`: временная метка обнаружения ## 📊 Примеры вывода ### Вывод в консоль ``` 2025-06-27 14:37:39 - INFO - Found Storage Account tenant ID 72f988bf-86f1-41af-91ab-2d7cd011db47 for mars 2025-06-27 14:37:40 - INFO - Found App Service SCM tenant ID 'common' for notarealapplication 2025-06-27 14:37:47 - INFO - Found Key Vault tenant ID 72f988bf-86f1-41af-91ab-2d7cd011db47 for mdo ``` ### Список записей базы данных ``` Resource URI Type Tenant ID Discovered At ----------------------------------------------------------------------------------------------------------------- hanover.scm.azurewebsites.net AppServices-SCM 72f988bf-86f1-41af-91ab-2d7cd011db47 2025-06-27 21:37:41 dev.azure.com/microsoft DevOps 72f988bf-86f1-41af-91ab-2d7cd011db47 2025-06-27 21:37:12 mdo.vault.azure.net KeyVault 72f988bf-86f1-41af-91ab-2d7cd011db47 2025-06-27 21:37:47 mars.blob.core.windows.net StorageAccount 72f988bf-86f1-41af-91ab-2d7cd011db47 2025-06-27 21:37:46 ``` ## 🔍 Как это работает 1. **Проверка DNS**: проверяет, существуют ли DNS-записи для ресурса 2. **Зондирование служб**: выполняет HTTP-запросы к соответствующим конечным точкам служб Azure 3. **Анализ ответов**: в зависимости от ресурса извлекает tenant ID из: - заголовков WWW-Authenticate - URL-адресов перенаправления OAuth - заголовков ответов - сообщений об ошибках 4. **Хранение данных**: сохраняет результаты в базу данных SQLite 5. **Экспорт**: создает отчеты в различных форматах ## 🛡️ Рекомендации по безопасности - **Ограничение частоты запросов**: инструмент включает задержки и соблюдает лимиты служб - **Обработка ошибок**: корректная обработка тайм-аутов и ошибок - **Журналирование**: подробные журналы для аудита - **Ненавязчивость**: использует стандартные HTTP-запросы без аутентификации для анонимного перечисления **⚠️ Важно**: всегда убедитесь, что у вас есть надлежащее разрешение перед сканированием любых ресурсов. Несанкционированное сканирование может нарушать условия обслуживания или применимое законодательство. ## 🐛 Устранение неполадок ### Режим отладки Вы можете включить подробное журналирование для получения детальной информации, но его может быть многовато: ```bash python ateam.py -f resources.txt -v ``` ### Проблемы с памятью при использовании перестановок Если при использовании перестановок вы получаете сообщения «killed», попробуйте уменьшить размер пакета: ```bash python ateam.py -f resources.txt -p -b 100 -w 5 ``` Это обрабатывает ресурсы меньшими пакетами и с меньшим количеством одновременных рабочих потоков, чтобы предотвратить исчерпание памяти. ## 🤝 Вклад Вклад приветствуется! Не стесняйтесь отправлять: - Отчеты об ошибках - Запросы новых функций - Улучшения кода - Обновления документации ### Связанные блоги * <a href="https://www.netspi.com/blog/technical-blog/cloud-pentesting/azure-resource-attribution-via-tenant-id-enumeration/">Мы знаем, что вы делали прошлым летом (в Azure)</a> ### Презентации * <a href="https://github.com/NetSPI/ATEAM">Мы знаем, что вы делали прошлым летом (в Azure) - DEF CON 33 - Cloud Village</a> - <a href="https://github.com/NetSPI/ATEAM/blob/main/AzureTenantEnum.pdf">Слайды</a>