
نهج جديد لـ Browser In The Browser (BITB) دون استخدام iframes، مما يتيح تجاوز أدوات منع الإطارات التقليدية التي تنفذها صفحات تسجيل الدخول مثل Microsoft وإمكانية الاستخدام مع Evilginx.
نهج جديد لمفهوم "متصفح داخل المتصفح" (BITB) دون استخدام iframes، مما يسمح بتجاوز أدوات كسر الإطارات التقليدية التي تنفذها صفحات تسجيل الدخول مثل Microsoft.
تم تصميم كود الإثبات هذا لاستخدام تقنية BITB الجديدة مع Evilginx، وقالب تسجيل دخول (phishlet) خاص بـ Microsoft Enterprise.

قبل الغوص في الموضوع، أوصيك بمشاهدة محاضرتي في BSides 2023، حيث قدمت هذا المفهوم لأول مرة مع تفاصيل مهمة حول كيفية صياغة هجوم التصيد "المثالي". ▶ شاهد الفيديو
هذه الأداة مخصصة للأغراض التعليمية والبحثية فقط. تقدم طريقة "متصفح داخل المتصفح" (BITB) غير قائمة على iframe. ليس المؤلف مسؤولاً عن أي استخدام خاطئ. استخدم هذه الأداة فقط بشكل قانوني وأخلاقي، في بيئات خاضعة للرقابة لاختبار الدفاعات السيبرانية. باستخدامك لهذه الأداة، فإنك توافق على استخدامها بمسؤولية وعلى مسؤوليتك الخاصة.
على مدار العام الماضي، كنت أجرب حيلاً مختلفة لصياغة هجوم التصيد "المثالي". "الأعلام الحمراء" النموذجية التي يدرب الناس على البحث عنها هي أشياء مثل الاستعجال والتهديدات والسلطة والأخطاء اللغوية، إلخ. الشيء التالي الذي يفحصه الناس هذه الأيام هو الرابط/عنوان URL للموقع الذي يتفاعلون معه، ويميلون إلى الحذر الشديد في اللحظة التي يُطلب منهم فيها إدخال بيانات حساسة مثل البريد الإلكتروني وكلمات المرور.
وهنا ظهر مفهوم "متصفح داخل المتصفح" (BITB). قدمه @mrd0x في الأصل، وهو مفهوم يخلق مظهر نافذة متصفح قابلة للتصديق يتحكم المهاجم في محتواها (عن طريق تقديم الموقع الخبيث داخل iframe). ومع ذلك، يتم تعيين شريط URL المزيف لنافذة المتصفح المزيفة إلى الموقع الشرعي الذي يتوقعه المستخدم. هذا مع أداة مثل Evilginx يصبح وصفة مثالية لهجوم تصيد مقنع.
المشكلة أنه على مدى الأشهر/السنوات الماضية، قامت مواقع رئيسية مثل Microsoft بتنفيذ حيل صغيرة متنوعة تسمى "framebusters/framekillers" والتي تهدف بشكل أساسي إلى كسر الإطارات iframe التي قد تُستخدم لتقديم الموقع الوكيل (proxied) كما هو الحال مع Evilginx.
باختصار، لم يعد Evilginx + BITB يعمل للمواقع مثل Microsoft. على الأقل ليس مع BITB الذي يعتمد على iframes.
متصفح داخل المتصفح (BITB) بدون أي iframes! بهذه البساطة.
مما يعني أنه يمكننا الآن استخدام BITB مع Evilginx على مواقع مثل Microsoft.
Evilginx هنا مجرد مثال قوي، لكن نفس المفهوم يمكن استخدامه لحالات استخدام أخرى أيضاً.
تستهدف أدوات كسر الإطارات (framebusters) الـ iframes تحديداً، لذا الفكرة هي إنشاء تأثير BITB دون استخدام iframes، ودون تعطيل البنية/المحتوى الأصلي للصفحة الموكلة (proxied). يمكن تحقيق ذلك عن طريق حقن نصوص (scripts) وأكواد HTML بجانب المحتوى الأصلي باستخدام البحث والاستبدال (المعروف بـ substitutions)، ثم الاعتماد كلياً على حيل HTML/CSS/JS لجعل التأثير البصري. نستخدم أيضاً خدعة إضافية تسمى "Shadow DOM" في HTML لوضع محتوى الصفحة المقصودة (الخلفية) بطريقة لا تتداخل مع المحتوى الموكَل، مما يسمح لنا باستخدام أي صفحة مقصودة بمرونة مع نصوص JS إضافية بسيطة.
قم بإنشاء جهاز افتراضي Linux محلي. (أنا شخصياً أستخدم Ubuntu 22 على VMWare Player أو Parallels Desktop)
قم بتحديث وترقية حزم النظام:
sudo apt update && sudo apt upgrade -y
إنشاء مستخدم جديد لـ Evilginx، وإضافة المستخدم إلى مجموعة sudo:
sudo su
adduser evilginx
usermod -aG sudo evilginx
تأكد أن مستخدم evilginx ضمن مجموعة sudo:
su - evilginx
sudo ls -la /root
انتقل إلى المجلد الرئيسي للمستخدم:
cd /home/evilginx
(يمكنك فعل كل شيء كمستخدم sudo أيضاً لأننا نشغل كل شيء محلياً)
تحميل وبناء Evilginx: الوثائق الرسمية
انسخ ملفات Evilginx إلى /home/evilginx
تثبيت Go: الوثائق الرسمية
wget https://go.dev/dl/go1.21.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.4.linux-amd64.tar.gz
nano ~/.profile
أضف: export PATH=$PATH:/usr/local/go/bin
source ~/.profile
تحقق:
go version
تثبيت make:
sudo apt install make
بناء Evilginx:
cd /home/evilginx/evilginx2
make
أنشئ مجلداً جديداً لبناء Evilginx الخاص بنا مع phishlets و redirectors:
mkdir /home/evilginx/evilginx
انسخ البناء و phishlets و redirectors:
cp /home/evilginx/evilginx2/build/evilginx /home/evilginx/evilginx/evilginx
cp -r /home/evilginx/evilginx2/redirectors /home/evilginx/evilginx/redirectors
cp -r /home/evilginx/evilginx2/phishlets /home/evilginx/evilginx/phishlets
إصلاح سريع لجدار الحماية في Ubuntu (شكراً لـ @kgretzky)
sudo setcap CAP_NET_BIND_SERVICE=+eip /home/evilginx/evilginx/evilginx
في Ubuntu، إذا ظهر لك الخطأ Failed to start nameserver on: :53، حاول تعديل هذا الملف
sudo nano /etc/systemd/resolved.conf
قم بتعديل/إضافة DNSStubListener إلى no > DNSStubListener=no
ثم
sudo systemctl restart systemd-resolved
بما أننا سنستخدم Apache2 أمام Evilginx، نحتاج إلى جعل Evilginx يستمع لمنفذ مختلف عن 443.
nano ~/.evilginx/config.json
غيّر https_port من 443 إلى 8443
تثبيت Apache2:
sudo apt install apache2 -y
تفعيل وحدات Apache2 التي سيتم استخدامها: (سنقوم أيضاً بتعطيل وحدة access_compat لأنها تسبب مشاكل أحياناً)
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo a2enmod env
sudo a2enmod include
sudo a2enmod setenvif
sudo a2enmod ssl
sudo a2ensite default-ssl
sudo a2enmod cache
sudo a2enmod substitute
sudo a2enmod headers
sudo a2enmod rewrite
sudo a2dismod access_compat
شغّل وفعّل Apache:
sudo systemctl start apache2
sudo systemctl enable apache2
جرب إن كان Apache وشبكة VM يعملان بزيارة عنوان IP الخاص بـ VM من متصفح على الجهاز المضيف.
تثبيت git إن لم يكن موجوداً:
sudo apt -y install git
استنساخ هذا المستودع:
git clone https://github.com/waelmas/frameless-bitb
cd frameless-bitb
أنشئ مجلدات للصفحات التي سنقدمها:
sudo mkdir /var/www/home
sudo mkdir /var/www/primary
sudo mkdir /var/www/secondary
انسخ مجلدات كل صفحة:
sudo cp -r ./pages/home/ /var/www/
sudo cp -r ./pages/primary/ /var/www/
sudo cp -r ./pages/secondary/ /var/www/
اختياري: حذف صفحة Apache الافتراضية (غير مستخدمة):
sudo rm -r /var/www/html/
انسخ قالب O365 phishlet إلى مجلد phishlets:
sudo cp ./O365.yaml /home/evilginx/evilginx/phishlets/O365.yaml
اختياري: لتعيين عنصر واجهة Calendly لاستخدام حسابك بدلاً من الافتراضي الموجود لدي، اذهب إلى pages/primary/script.js وغيّر CALENDLY_PAGE_NAME و CALENDLY_EVENT_TYPE.
ملاحظة حول التعتيم التجريبي: كما شرحت في فيديو الشرح، قمت بتضمين تعتيم بسيط للمحتوى النصي مثل عناوين URL وعناوين BITB. يمكنك فتح أداة التعتيم التجريبي بفتح demo-obfuscator.html في متصفحك.
في السيناريو الحقيقي، أوصي بشدة بتعتيم أجزاء أكبر من كود HTML المحقون أو استخدام حيل JS لتجنب الاكتشاف والإبلاغ. النسخة المتقدمة التي أعمل عليها ستستخدم مزيجاً من الحيل المتقدمة لجعل من المستحيل تقريباً للماسحات الضوئية التعرف على كود BITB أو اكتشافه، تابعونا.
بما أننا نشغل كل شيء محلياً، نحتاج إلى إنشاء شهادات SSL ذاتية التوقيع سيستخدمها Apache. لن يحتاج Evilginx إلى الشهادات لأننا سنشغله في وضع المطور.
سنستخدم النطاق fake.com والذي سيشير إلى VM المحلي. إذا كنت تريد استخدام نطاق مختلف، تأكد من تغييره في جميع الملفات (ملفات إعدادات Apache، ملفات JS، إلخ.)
أنشئ المجلد والمجلدات الأم إن لم تكن موجودة: