
POC لثغرة القوة الغاشمة لكلمات المرور في Azure Active Directory التي أعلنتها SecureWorks مؤخرًا
إثبات مفهوم لثغرة القوة العمياء في كلمات مرور Azure Active Directory التي كشفت عنها SecureWorks
هذا الكود هو إثبات مفهوم للثغرة الأخيرة المكشوفة في كلمات مرور Azure Active Directory والقاضية بتخمينها بالعنف، والتي أعلنت عنها Secureworks (وهذه مقالة Ars Technica التي سبقت النشر الرسمي بنحو يوم واحد لكنها شبه مطابقة).
نظريًا، يسمح هذا النهج بتنفيذ هجمات القوة العمياء أو رشّ كلمات المرور ضد حساب واحد أو أكثر من حسابات AAD دون التسبب في إقفال الحساب أو توليد بيانات سجل، مما يجعل الهجوم غير مرئي.
الاستخدام الأساسي بسيط:
.\aad-sso-enum-brute-spray.ps1 USERNAME PASSWORD
استدعاء الكود بهذه الطريقة سيتيح لك الحصول على النتيجة لاسم المستخدم وكلمة المرور المحددين.
من خلال الاستفادة من foreach، يمكنك بسهولة تسخير هذا لأغراض رشّ كلمات المرور:
foreach($line in Get-Content .\all-m365-users.txt) {.\aad-sso-enum-brute-spray.ps1 $line Passw0rd! |Out-File -FilePath .\spray-results.txt -Append }
لاحظ أن استخدام هذه الطريقة سيتطلب منك تحويل الملف الناتج من UTF-16 إلى UTF-8 إذا أردت التعامل معه في لينكس:
iconv -f UTF16 -t UTF-8 spray-results.txt >new-spray-results.txt
إذا كنت مهتمًا بالتعداد فقط، فما عليك سوى التشغيل كما في الأعلى لأغراض رشّ كلمات المرور. أي قيمة إرجاع تتضمن "bad password"، أو أي قيمة غير "no user"، تعني أنك عثرت على اسم مستخدم صالح.
عودة "True" لاسم مستخدم تعني أن كلمة المرور المقدمة صالحة.
عودة "locked" قد تعني أن الحساب مقفَل، أو أن Smart Lockout يمنعك مؤقتًا من التفاعل مع الحساب.
لتسخير الكود لأغراض القوة العمياء، ما عليك سوى التكرار على حقل كلمة المرور بدلًا من حقل اسم المستخدم:
foreach($line in Get-Content .\passwords.txt) {.\aad-sso-enum-brute-spray.ps1 [email protected] $line |Out-File -FilePath .\brute-results.txt -Append }
إذا اكتشفت زوجًا واحدًا أو أكثر من أزواج اسم المستخدم/كلمة المرور الصالحة، يمكنك تعديل هذا الكود للحصول على DesktopSSOToken الذي يُرجَع. ويمكن بعد ذلك مبادلة DesktopSSOToken مقابل OAuth2 Access Token باستخدام هذه الطريقة.
ويمكن بعد ذلك استخدام OAuth2 Access Token مع نقاط نهاية Azure وM365 وO365 API المختلفة.
غير أنك قد تتعثر بسبب MFA عند هذه النقطة. أفضل رهان لك هنا هو الاستفادة من وصول غير MFA، مثل Outlook Web Access أو ActiveSync. MFASweep من Dafthack مفيد هنا.
ستبدأ ميزة Smart Lockout من Microsoft في الادعاء كذبًا بأن الحسابات مقفلة إذا ضربت نقطة نهاية API بسرعة كبيرة من عنوان IP نفسه. لتجاوز ذلك، أوصي بشدة باستخدام fireprox من ustayready لتجنّب هذه المشكلة. ببساطة غيّر متغير $url على النحو التالي:
$url="https://xxxxxxx.execute-api.us-east-1.amazonaws.com/fireprox/"+$requestid
غير أن هذا لن يتجاوز Smart Lockout إذا كنت تحاول تخمين كلمة مرور لحساب معيّن بالعنف.
تقريبًا كل الكود لهذا العمل مستعار من مشروع AADInternals الممتاز للدكتور Nestori Syynimaa.