بنناجح
المرحلة 3: Authorization وحماية الحسابات · الدرس 4 من 4 · 40 دقيقة

الـ MFA والـ Passkeys

آخر درس في الموضوع. هتمسح QR بموبايلك وتشوف كود TOTP بيتحسب قدامك، وتعرف ليه الـ SMS أضعف طريقة، وإزاي الهاكرز بيعدّوا الـ MFA بالزهق، وليه الـ Passkeys بتقفل الـ Phishing. وفي الآخر Checklist للسلسلة كلها.

في الدرس ده هتتعلم
  • تشرح TOTP بيشتغل إزاي من غير نت، خطوة بخطوة
  • تقارن طرق الـ MFA وتعرف نقطة ضعف كل واحدة، ومنها MFA Fatigue
  • تشرح ليه الـ Passkeys مبيتعملهاش Phishing
  • تطلب الباسورد تاني قبل العمليات الحساسة، وتسجّل الصح في الـ logs

1. MFA و TOTP

بيشتغل إزاي من غير نت؟

  1. وقت التفعيل، السيرفر بيعمل سر عشوائي ويوريهولك في QR code. إنت بتمسحه بتطبيق زي Google Authenticator، فالسر بيبقى عندك وعند السيرفر.
  2. كل 30 ثانية، الاتنين بيحسبوا: HMAC-SHA1(secret, floor(time / 30)).
  3. من ناتج الـ HMAC بيطلّعوا 6 أرقام بطريقة ثابتة.
  4. نفس السر + نفس الوقت = نفس الكود. فمحدش محتاج يبعت حاجة لحد.

والسيرفر غالباً بيقبل الكود الحالي واللي قبله واللي بعده، عشان لو ساعة الموبايل متأخرة شوية. واتعمل الـ standard بتاعه سنة 2011 (RFC 6238).

امسح الـ QR بموبايلك، وهتلاقي الكود اللي على الموبايل هو هو اللي هنا، وبيتغيروا مع بعض. وتحت، كل خطوة في الحساب بتتعاد قدامك كل 30 ثانية:

TOTP حقيقيامسحه بموبايلك
------
السر (لو حبيت تكتبه بإيدك في التطبيق):…
الكود بيتحسب إزاي (بيتعاد كل 30 ثانية):
  1. الوقت…
  2. ÷ 30 = العدّاد…
  3. HMAC-SHA1(secret, counter)…
  4. آخر nibble = offset، ونقرا 4 bytes من عنده…
  5. mod 1,000,000…

ده سر تجريبي اتعمل في متصفحك دلوقتي. امسحه من التطبيق بعد ما تجرّب.

مقارنة طرق الـ MFA

الطريقة القوة نقطة الضعف
SMS ضعيفة SIM Swap: الهاكر يقنع شركة الاتصالات تنقل رقمك لشريحة عنده. وكمان الرسايل ممكن تتسرّب من شبكة الاتصالات نفسها. ولسه أحسن من مفيش
TOTP (تطبيق) كويسة Phishing: موقع مزيّف يطلب منك الكود ويستخدمه في نفس الـ 30 ثانية
Push (“هل ده إنت؟”) كويسة MFA Fatigue (تحت)
Passkey أو مفتاح أمان الأقوى مبيتعملهاش Phishing (السكشن الجاي)

MFA Fatigue

الهاكر يبعتلك إشعارات ورا بعض لحد ما تدوس “أيوه” عشان تخلص. حصلت لـ Uber سنة 2022. والحل إن الإشعار يطلب منك رقم يظهر على الشاشة. جرّب من غير Number Matching، وبعدين شغّله:

MFA Fatigueحصلت لـ Uber سنة 2022
مفيش إشعارات
صبر المستخدم

الإشعار بيقول "هل ده إنت؟" وفيه زرارين: أيوه ولأ.

الهاكر معاه الباسورد من تسريب. فاضله الـ push بس.

Recovery Codes

لو المستخدم ضيّع موبايله، محتاج طريقة يدخل بيها. فوقت التفعيل بتديله 8 أو 10 أكواد، كل كود يتستخدم مرة واحدة. والأكواد دي باسوردات فعلياً، فبتتخزن hash، وبيتعرضوا مرة واحدة بس.

الـ TOTP بيشتغل من غير نت عشان الطرفين بيحسبوا نفس الكود من سر مشترك والوقت، والـ SMS أضعف طريقة، والـ Passkeys أقواها.

2. Passkeys و WebAuthn

بيشتغل إزاي

  1. التسجيل: جهازك يعمل زوج مفاتيح خاص بـ shop-lab.test، ويبعت الـ Public Key للسيرفر.
  2. الدخول: السيرفر يبعت challenge (رقم عشوائي جديد كل مرة).
  3. جهازك يطلب بصمتك أو وشك أو الـ PIN، وبعدين يوقّع الـ challenge بالـ Private Key.
  4. السيرفر يتأكد من التوقيع بالـ Public Key اللي عنده.

ليه مبيتعملهاش Phishing؟

المتصفح بيربط الـ passkey بالـ domain. لو دخلت على shop-1ab.test (موقع مزيّف بالرقم 1 بدل الحرف l)، المتصفح هيدوّر على passkey للـ domain ده، ومش هيلاقي. يعني حتى لو إنت اتخدعت، المتصفح مش هيتخدع. جرّب الاتنين على الموقعين:

Passkey قدام موقع مزيّفPhishing-resistant
بتدخل بـ:على:
🔒https://shop-lab.test/login
الـ passkeys على جهازك
🔑 shop-lab.test · user 7
السيرفر الحقيقي مخزّن
public key (مش سر)
جرّب الاتنين على الموقع الحقيقي، وبعدين على المزيّف (الرقم 1 بدل حرف l).
الباسورد Passkey
السيرفر بيخزن hash لسر Public Key (مش سر أصلاً)
لو الداتابيز اتسربت الهاكر يحاول يكسر الهاشات مفيش حاجة يكسرها
Phishing ممكن مستحيل تقريباً
تكرار نفس الباسورد في كل حتة مشكلة كبيرة مفتاح مختلف لكل موقع لوحده

الـ Passkey مبيبعتش سر خالص، بيوقّع challenge بمفتاح مربوط بالـ domain، وعشان كده بيقفل الـ Phishing وتسريب الداتابيز مع بعض.

3. بعد العمليات الحساسة (Re-authentication)

تخيّل حد قعد على لابتوبك وإنت سايبه مفتوح. الـ session شغالة. لو shop-lab بيسمح بتغيير الإيميل أو الباسورد على طول، الشخص ده هياخد حسابك في 10 ثواني.

العمليات اللي تستاهل تطلب فيها الباسورد تاني:

  • تغيير الإيميل أو الباسورد.
  • إضافة أو شيل الـ MFA.
  • إضافة عنوان شحن جديد أو كارت دفع.
  • عمل API token جديد.

لارافيل عنده middleware اسمه password.confirm بيطلب الباسورد، وبيفتكر إنك أكدته لمدة 3 ساعات افتراضياً. وبعد العمليات دي، ابعت إيميل تنبيه للمستخدم: لو هو مش اللي عمل كده، هيعرف بسرعة.

الـ session المفتوحة مش دليل كافي على العمليات الحساسة: اطلب الباسورد تاني، وبلّغ صاحب الحساب.

4. الـ Logging

سجّل متسجلش أبداً
دخول ناجح وفاشل (الإيميل، الـ IP، الوقت) الباسورد، حتى الغلط. الناس بتكتب باسورد حساب تاني بالغلط
تغيير الباسورد والإيميل والـ MFA الـ tokens والـ session IDs
تغيير الصلاحيات والأدوار أرقام الكروت
عمليات الأدمن (مسح، تغيير سعر، refund) الـ request body كله من غير ما تنضّفه
مرات الرفض (403) المتكررة Query strings فيها tokens (زي لينك الـ reset)

ولارافيل بيطلق events زي Login و Failed و Lockout و PasswordReset. اعمل listener يسجلهم، وكده ممكن تلاحظ إن 300 محاولة فاشلة جت من نفس الـ IP في دقيقة.

سجّل كل حاجة بتغيّر الأمان أو الصلاحيات، ومتسجلش أي سر أبداً.

5. Checklist الموضوع كله

قبل ما أي مشروع يطلع production، علّم على كل بند:

أسئلة الإنترفيو

فكّر في إجابتك الأول، وبعدين افتح السؤال.

01الـ TOTP بيشتغل إزاي من غير نت؟

الموبايل والسيرفر عندهم نفس السر من وقت ما مسحت الـ QR. كل 30 ثانية كل واحد بيحسب HMAC-SHA1 للسر مع رقم الفترة الزمنية، ويطلّع منه 6 أرقام. نفس السر ونفس الوقت يدّوا نفس الكود. والسيرفر بيقبل فترة قبل وبعد عشان فرق الساعة.

02ليه الـ SMS أضعف طريقة MFA؟

عشان SIM Swap، إن الهاكر يقنع شركة الاتصالات تنقل الرقم لشريحة عنده، وعشان الرسايل ممكن تتسرب من شبكة الاتصالات، وعشان ممكن تتعملها phishing زي أي كود. لكن لسه أحسن من مفيش MFA.

03ليه الـ Passkeys مبيتعملهاش Phishing؟

لأن المتصفح بيربط الـ passkey بالـ domain. الموقع المزيّف domain مختلف، فالمتصفح مش هيلاقي passkey ليه أصلاً. وكمان مفيش سر بيتبعت، الجهاز بيوقّع challenge جديد كل مرة، والسيرفر عنده public key بس.

04إيه هو MFA Fatigue؟

الهاكر عنده الباسورد، فيفضل يبعت push notifications للضحية لحد ما تدوس "أيوه" عشان تخلص منها. حصل لـ Uber سنة 2022. الحل إن الإشعار يطلب رقم ظاهر على شاشة الدخول (number matching)، و rate limit على الإشعارات.

05الـ Recovery Codes بتتخزن إزاي؟

زي الباسوردات بالظبط: hash، وكل كود يتستخدم مرة واحدة ويتمسح، وبيتعرضوا للمستخدم مرة واحدة بس وقت التفعيل.

06صمم صلاحيات لوحة أدمن متجر فيها admin و support و warehouse.

RBAC للأدوار: admin كل حاجة، و support يشوف الأوردرات ويعمل refund، و warehouse يشوف الأوردرات المدفوعة ويغيّر حالتها لـ "اتشحن". فوقيه قواعد ABAC: الـ refund فوق مبلغ معين محتاج admin، ومينفعش تلغي أوردر اتشحن. التنفيذ: middleware على group الأدمن، و Policies لكل model، و queries متحددة، وإعادة طلب الباسورد قبل الـ refund، و audit log لكل عملية، و MFA إجباري لكل حسابات الأدمن.

علّم عليه لما تقدر تجاوب أسئلة الإنترفيو من غير ما تبص.