
A Python reconnaissance tool designed to discover Azure services and attribute tenant ownership information based on their responses.
This tool helps security researchers, penetration testers, and Azure administrators discover Azure resources associated with specific tenant IDs.
Tests resource names against 6 different Azure services and their subdomains:
.azurewebsites.net and .scm.azurewebsites.net)dev.azure.com).vault.azure.net).blob.core.windows.net).sharepoint.com).azuredatabricks.net)Clone or download the tool:
git clone https://github.com/NetSPI/ATEAM.git
cd ATEAM
Install required dependencies:
pip install -r requirements.txt
Or install manually:
pip install requests dnspython urllib3
Verify installation:
python ateam.py --help
Scan a single resource:
python ateam.py -r "myapp"
Scan multiple resources:
python ateam.py -r "app1" "app2" "app3"
Scan from a text file resource list:
python ateam.py -f resources.txt
Verbose output with (20) workers:
python ateam.py -f resources.txt -v -w 20
Generate permutations and scan:
python ateam.py -f resources.txt -p
Generate permutations with smaller batch size (recommended for large scans):
python ateam.py -f resources.txt -p -b 100
Export results to HTML:
python ateam.py -e html
Clear database and start fresh:
python ateam.py -f resources.txt --clear
ATEAM/
├── ateam.py # Main script
├── requirements.txt # Python dependencies
├── permutations.txt # Resource name permutations
└── README.md # This file
The permutations.txt file contains common prefixes and suffixes to generate variations of resource names:
dev
prod
test
staging
api
web
...
This will generate combinations like:
devmyappmyappdevprodmyappmyapp-prodResults are stored in azure_tenants.db (SQLite) with the following schema:
resource_uri: The discovered resource URLresource_type: Type of Azure servicetenant_id: Extracted tenant IDdiscovered_at: Timestamp of discovery2025-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
⚠️ Important: Always ensure you have proper authorization before scanning any resources. Unauthorized scanning may violate terms of service or applicable laws.
You can enable verbose logging for detailed information, but it can be a bit much:
python ateam.py -f resources.txt -v
If you experience "killed" messages when using permutations, try reducing the batch size:
python ateam.py -f resources.txt -p -b 100 -w 5
This processes resources in smaller batches with fewer concurrent workers to prevent memory exhaustion.
Contributions are welcome! Please feel free to submit:
| Option | Description | Example |
|---|
-f, --file | File containing resources (one per line) | -f resources.txt |
-r, --resources | Space-separated list of resources | -r "app1" "app2" |
-w, --workers | Number of concurrent workers (default: 10) | -w 20 |
-b, --batch-size | Resources per batch (default: 1000) | -b 100 |
-v, --verbose | Enable verbose logging | -v |
-l, --list | List all database entries | -l |
-e, --export | Export results (csv, json, html) | -e html |
--clear | Clear database before scanning | --clear |
-t, --tenant | Filter results by tenant ID | -t "tenant-id" |
-p, --permutations | Generate resource name permutations | -p |