
يستغل التكوين الافتراضي لـ Windows IPv6 لانتحال DNS عبر DHCPv6، وإعادة توجيه حركة مرور الضحية لترحيل بيانات الاعتماد وهجمات الوسيط أثناء اختبارات الاختراق.
mitm6 هي أداة اختبار اختراق تستغل الإعداد الافتراضي لويندوز للسيطرة على خادم DNS الافتراضي. تقوم بذلك عن طريق الرد على رسائل DHCPv6، مما يوفر للضحايا عنوان IPv6 محلي الارتباط ويعيّن خادم المهاجم كخادم DNS افتراضي. وبصفته خادم DNS، يقوم mitm6 بالرد بشكل انتقائي على استعلامات DNS التي يختارها المهاجم وتوجيه حركة مرور الضحايا إلى جهاز المهاجم بدلاً من الخادم الشرعي. للحصول على شرح كامل للهجوم، راجع مدونتنا حول mitm6. تم تصميم Mitm6 للعمل مع ntlmrelayx من impacket لتزوير WPAD وترحيل بيانات الاعتماد.
mitm6 متوافق مع كل من Python 2.7 و 3.x. يمكنك تثبيت المتطلبات الخاصة بإصدارك باستخدام pip install -r requirements.txt. في كلتا الحالتين، يستخدم mitm6 الحزم التالية:
بالنسبة لـ Python 2.7، يستخدم وحدة ipaddress الخلفية.
يمكنك تثبيت أحدث إصدار من PyPI باستخدام pip install mitm6، أو أحدث إصدار من المصدر باستخدام python setup.py install بعد استنساخ مستودع git هذا.
بعد التثبيت، سيكون mitm6 متاحًا كبرنامج سطر أوامر يُسمى mitm6. نظرًا لأنه يستخدم التقاط الحزم الخام مع Scapy، فيجب تشغيله كمستخدم جذر. يجب أن يقوم mitm6 باكتشاف إعدادات الشبكة الخاصة بك افتراضيًا واستخدام واجهتك الأساسية للتزوير. الخيار الوحيد الذي قد تحتاج إلى تحديده هو domain الخاص بـ Active Directory الذي تقوم بتزويره. للضبط المتقدم، تتوفر الخيارات التالية:
usage: mitm6 [-h] [-i INTERFACE] [-l LOCALDOMAIN] [-4 ADDRESS] [-6 ADDRESS] [-m ADDRESS] [-a] [-r TARGET] [-v] [--debug]
[-d DOMAIN] [-b DOMAIN] [-hw DOMAIN] [-hb DOMAIN] [--ignore-nofqdn]
mitm6 - اختراق IPv4 عبر IPv6
للمساعدة أو الإبلاغ عن المشكلات، تفضل بزيارة https://github.com/dirkjanm/mitm6
الوسائط الاختيارية:
-h, --help إظهار رسالة المساعدة هذه والخروج
-i INTERFACE, --interface INTERFACE
الواجهة المراد استخدامها (الافتراضي: الكشف التلقائي)
-l LOCALDOMAIN, --localdomain LOCALDOMAIN
اسم النطاق المراد استخدامه كنطاق بحث DNS (الافتراضي: استخدم أول نطاق DNS)
-4 ADDRESS, --ipv4 ADDRESS
عنوان IPv4 لإرسال الحزم منه (الافتراضي: الكشف التلقائي)
-6 ADDRESS, --ipv6 ADDRESS
عنوان IPv6 المحلي الارتباط لإرسال الحزم منه (الافتراضي: الكشف التلقائي)
-m ADDRESS, --mac ADDRESS
عنوان MAC مخصص - ربما يسبب مشاكل (الافتراضي: عنوان MAC للواجهة المحددة)
-a, --no-ra لا تعلن عن أنفسنا (مفيد للشبكات التي تكشف إعلانات الموجه المزيفة)
-r TARGET, --relay TARGET
هدف ترحيل المصادقة، سيتم استخدامه كاسم مضيف خادم DNS وهمي لتشغيل مصادقة Kerberos
-v, --verbose إظهار معلومات مفصلة
--debug إظهار معلومات التصحيح
خيارات التصفية:
-d DOMAIN, --domain DOMAIN
اسم النطاق لتصفية استعلامات DNS عليه (مبدأ القائمة البيضاء، يمكن تحديد عدة نطاقات.)
-b DOMAIN, --blocklist DOMAIN, --blacklist DOMAIN
اسم النطاق لتصفية استعلامات DNS عليه (مبدأ القائمة السوداء، يمكن تحديد عدة نطاقات.)
-hw DOMAIN, -ha DOMAIN, --host-allowlist DOMAIN, --host-whitelist DOMAIN
اسم المضيف (FQDN) لتصفية استعلامات DHCPv6 عليه (مبدأ القائمة البيضاء، يمكن تحديد عدة نطاقات.)
-hb DOMAIN, --host-blocklist DOMAIN, --host-blacklist DOMAIN
اسم المضيف (FQDN) لتصفية استعلامات DHCPv6 عليه (مبدأ القائمة السوداء، يمكن تحديد عدة نطاقات.)
--ignore-nofqdn تجاهل استعلامات DHCPv6 التي لا تحتوي على خيار اسم النطاق المؤهل بالكامل (FQDN).
يمكنك تجاوز معظم خيارات الكشف التلقائي يدويًا (على الرغم من أن تجاوز عنوان MAC سيؤدي إلى مشاكل). إذا كانت الشبكة تحتوي على أجهزة تمنع أو تكتشف رسائل إعلان الموجه المزيفة، يمكنك إضافة العلامة --no-ra لعدم بثها. إعلانات الموجه ليست ضرورية لعمل mitm6 لأنه يعتمد بشكل أساسي على رسائل DHCPv6.
تتوفر عدة خيارات تصفية لتحديد المضيفين الذين تريد مهاجمتهم وتزويرهم. أولاً، هناك خيارا --host-allowlist و --host-blocklist (أو -hw و -hb للاختصار)، واللذان يقبلان نطاقًا (جزئيًا) كوسيط. سيتم تصفية طلبات DHCPv6 الواردة مقابل هذه القائمة. الخاصية التي يتم فحصها هي خيار FQND الخاص بـ DHCPv6، والذي يوفر فيه العميل اسم المضيف الخاص به.
وينطبق الشيء نفسه على طلبات DNS، ولهذا يتوفر الخيار --domain (أو -d)، حيث يمكنك تحديد النطاق (النطاقات) التي تريد تزويرها. كما يمكن حظر نطاقات محددة باستخدام --blocklist/-b. يمكن تحديد كلا المعلمتين عدة مرات لتضمين/حظر نطاقات متعددة (على سبيل المثال -d domain.local -d otherdomain.local -b somehost.domain.local -b somehost.otherdomain.local).
بالنسبة لكل من تصفية المضيف و DNS، يتم إجراء مطابقة بسيطة للسلاسل. لذا، إذا اخترت الرد على wpad، فسوف يرد أيضًا على الاستعلامات الخاصة بـ wpad.corpdomain.com. إذا كنت تريد تصفية أكثر تحديدًا، استخدم كلاً من خيارات القائمة البيضاء والقائمة السوداء، لأن القائمة السوداء لها الأولوية على القائمة البيضاء.
افتراضيًا، سيتم استخدام أول نطاق محدد كنطاق بحث DNS، إذا كنت تريد تحديد هذا النطاق بنفسك بشكل صريح، استخدم الخيار --localdomain.
تم تصميم mitm6 كأداة لاختبار الاختراق وبالتالي يجب أن تؤثر على الشبكة بأقل قدر ممكن. هذا هو السبب الرئيسي لعدم تطبيق mitm6 لهجوم وسيط كامل حاليًا، كما نرى على سبيل المثال في هجوم SLAAC. لتقليل التأثير بشكل أكبر، فإن عناوين IP المخصصة لها قيم وقت حياة (TTL) منخفضة. سينتهي الإيجار خلال 5 دقائق عند إيقاف mitm6، مما سيزيل خادم DNS من تكوين الضحايا. لمنع تخزين ردود DNS مؤقتًا، يتم إرسال جميع الردود بقيمة TTL تبلغ 100 ثانية، مما يضمن مسح ذاكرة التخزين المؤقت في غضون دقائق بعد خروج الأداة.
تم تصميم mitm6 لاستخدامه مع ntlmrelayx. يجب تشغيل الأدوات بجانب بعضها البعض، في هذا السيناريو سيقوم mitm6 بتزوير DNS، مما يتسبب في اتصال الضحايا بـ ntlmrelayx لاتصالات HTTP و SMB. للقيام بذلك، يجب التأكد من تشغيل ntlmrelayx مع الخيار -6، مما يجعله يستمع على كل من IPv4 و IPv6. للحصول على بيانات اعتماد لـ WPAD، حدد اسم مضيف WPAD لتزويره باستخدام -wh HOSTNAME (أي اسم مضيف غير موجود في النطاق المحلي سيعمل لأن mitm6 هو خادم DNS). اختياريًا، يمكنك أيضًا استخدام المعلمة -wa N مع عدد من المحاولات للمطالبة بالمصادقة على ملف WPAD نفسه في حالة اشتباهك في أن الضحايا لم يطبقوا تصحيح MS16-077.
يمكنك أيضًا استخدام mitm6 لترحيل مصادقة Kerberos، خاصة عبر DNS. للقيام بذلك، استخدم المعلمة --relay وحدد مضيفًا تريد الترحيل إليه. سيتم انتحال شخصية هذا المضيف، وسيحاول mitm6 إقناع ضحاياك بإرسال تحديثات ديناميكية موثقة باستخدام مصادقة Kerberos إلى krbrelayx. مزيد من المعلومات حول هذا الهجوم متاح في المدونة التالية: https://dirkjanm.io/relaying-kerberos-over-dns-with-krbrelayx-and-mitm6/
قام فريق Fox-IT لأبحاث الأمن بإصدار توقيعات Snort و Suricata لكشف حركة DHCPv6 المزيفة وردود WPAD عبر IPv6. التوقيعات متاحة هنا: https://gist.github.com/fox-srt/98f29051fe56a1695de8e914c4a2373f