
MacStealer: Wi-Fi Client Isolation Bypass
يحتوي هذا المستودع على MacStealer. يمكنه اختبار شبكات Wi-Fi بحثًا عن تجاوزات عزل العملاء (CVE-2022-47522). يمكن لهجومنا اعتراض (سرقة) حركة المرور الموجهة إلى عملاء آخرين في طبقة MAC، حتى لو كان العملاء مُنعوا من التواصل مع بعضهم البعض. تؤثر هذه الثغرة على شبكات Wi-Fi التي تضم مخربين داخليين، حيث يمكن لهجومنا تجاوز عزل العملاء، والذي يُعرف أحيانًا أيضًا بعزل نقطة الوصول AP isolation. يمكن أيضًا استخدام الهجوم لتجاوز فحص ARP الديناميكي (DAI)، ومن المرجح أنه يمكن استخدامه أيضًا لتجاوز طرق أخرى تمنع العملاء من مهاجمة بعضهم البعض. يُعرف الهجوم أيضًا باسم هجوم تجاوز السياق الأمني، انظر القسم 5 من ورقة USENIX Security '23 (المستودع).
أمثلة ملموسة على الشبكات التي قد تتأثر:
شبكات المؤسسات حيث قد لا يثق المستخدمون ببعضهم البعض، وحيث تُستخدم تقنيات مثل عزل العملاء أو فحص ARP لمنع المستخدمين من مهاجمة بعضهم البعض. على سبيل المثال، شبكات الشركات التي تحتوي على حسابات لكل من الضيوف والموظفين، وشبكات مثل eduroam وgovroam، إلخ.
النقاط الساخنة العامة المحمية بواسطة Passpoint (المعروفة سابقًا باسم Hotspot 2.0). هذه هي نقاط ساخنة يمكنك الاتصال بها تلقائيًا وبشكل آمن. على سبيل المثال، يمكنها مصادقتك بسلاسة باستخدام بطاقة SIM في هاتفك.
شبكات WPA2 أو WPA3 المنزلية التي يتم فيها تمكين عزل العملاء. يشمل ذلك الشبكات التي تحتوي على SSID منفصل للضيوف أو للأجهزة غير الآمنة (IoT). ويشمل أيضًا الشبكات التي تُستخدم فيها كلمات مرور متعددة لزيادة عزل الأجهزة، وهو ما يُعرف أيضًا باسم Multi-PSK، Identity PSK، per-station PSK، أو EasyPSK. انظر مناقشة نموذج التهديد لمزيد من المعلومات.
النقاط الساخنة العامة القائمة على WPA3 SAE-PK. هذه هي نقاط ساخنة محمية بكلمة مرور عامة مشتركة، ولكن لا يمكن للخصم إساءة استخدام كلمة المرور المعروفة علنًا.
نلاحظ أن هجومنا لا يمكنه تجاوز شبكات VLAN. بعبارة أخرى، استنادًا إلى التجارب الحالية، لا يمكن استخدام هجومنا لاستغلال جهاز في شبكة VLAN أخرى.
يتوفر أيضًا مستودع النتائج الأخرى في ورقتنا USENIX Security '23.
الفكرة الأساسية وراء الهجوم هي أن الطريقة التي يتم بها مصادقة العملاء لا علاقة لها بكيفية توجيه الحزم إلى عميل Wi-Fi الصحيح. أي أن المصادقة تتم بناءً على كلمات المرور، وأسماء المستخدمين، وهويات 802.1X، و/أو الشهادات، ولكن بمجرد اتصال العميل، يتم توجيه الحزم بناءً على عناوين MAC. يمكن للمخرب الداخلي إساءة استخدام هذا لاعتراض البيانات الموجهة إلى عميل Wi-Fi عن طريق فصل الضحية ثم الاتصال باستخدام عنوان MAC الخاص بالضحية (باستخدام بيانات اعتماد الخصم). أي حزم كانت لا تزال في طريقها إلى الضحية، مثل بيانات موقع ويب كان الضحية لا يزال يحمّلها، سيستقبلها الخصم الآن بدلاً منه.
وبشكل أكثر دقة، يتكون الهجوم من ثلاث خطوات:
جعل الضحية يطلب بيانات: ينتظر الخصم أولاً حتى يقوم الضحية (العميل)
بإنشاء اتصال Wi-Fi مع نقطة الوصول (AP) المعرضة للخطر. نفترض أن الضحية
سيرسل بعد ذلك طلبًا إلى خادم على الإنترنت. على سبيل المثال، قد يرسل الضحية
طلب HTTP إلى موقع الويب (غير المشفر) example.com. هدف الخصم هو
اعتراض الاستجابة التي سيرسلها الموقع.
الاتصال باستخدام عنوان MAC الخاص بالضحية: بعد أن يطلب الضحية البيانات، على سبيل المثال
عن طريق إرسال حزمة HTTP Request، سيقوم الخصم بفصل الضحية قسريًا عن
الشبكة قبل وصول الاستجابة إلى
نقطة الوصول المعرضة للخطر. في مثالنا، هذا يعني أن الضحية يتم فصله قبل وصول الاستجابة من
example.com إلى نقطة الوصول. بمجرد فصل الضحية، يقوم الخصم بانتحال
عنوان MAC الخاص بالضحية وسيتصل الخصم بالشبكة باستخدام بيانات اعتماد خاصة به.
وهذا يعني أن الخصم هو مخرب داخلي يمكنه الاتصال بالشبكة باستخدام بيانات اعتماد خاصة به،
على سبيل المثال، باستخدام اسم المستخدم وكلمة المرور الخاصين به في
شبكة Wi-Fi للمؤسسات.
اعتراض الاستجابة: بمجرد أن يتصل الخصم باستخدام عنوان MAC الخاص بالضحية،
ستربط نقطة الوصول مفاتيح التشفير المُنشأة حديثًا للخصم بعنوان MAC الخاص بالضحية.
ونتيجة لذلك، عندما تصل الاستجابة من الخادم إلى شبكة Wi-Fi، أو أي حركة مرور واردة
نحو الضحية بشكل عام، سيقوم الموجّه بإعادة توجيه هذه الحزم الواردة إلى عنوان MAC الخاص بالضحية.
في مثالنا، هذا يعني أن الاستجابة من example.com يتم إعادة توجيهها بواسطة الموجّه
إلى عنوان MAC الخاص بالضحية. ومع ذلك، فإن الخصم يستخدم الآن عنوان MAC هذا. وهذا يعني أن
نقطة الوصول ستقوم بتشفير الاستجابة باستخدام مفاتيح الخصم. بعبارة أخرى، سيستقبل الخصم
الآن أي حركة مرور معلقة لا تزال في طريقها إلى الضحية.
نلاحظ أن حركة المرور المعترضَة قد تكون محمية بتشفير من طبقة أعلى، مثل TLS وHTTPS. ومع ذلك، حتى إذا تم استخدام تشفير من طبقة أعلى، فإن هجومنا لا يزال يكشف عن عنوان IP الذي يتواصل معه الضحية. وهذا بدوره يكشف عن المواقع التي يزورها الضحية، والتي يمكن أن تكون معلومات حساسة بحد ذاتها.
افتراضيًا، لا يعترض الهجوم حركة المرور المرسلة من الضحية، بل يمكنه فقط اعتراض حركة المرور المرسلة إلى الضحية. ومع ذلك، يمكن للخصم محاولة هجمات لاحقة لاعتراض حركة المرور المرسلة من الضحية أيضًا. على وجه الخصوص، من خلال اعتراض رد DNS الموجه إلى الضحية، يمكن للخصم انتحال رد DNS واعتراض كل حركة مرور IP المرسلة إلى الضحية والمرسلة من الضحية.
تنفيذ الهجوم أعلاه له معنى فقط عندما يكون عزل العملاء مفعلًا في الشبكة المستهدفة. وإلا، إذا كان عزل العملاء معطلاً، يمكن للمخرب الداخلي ببساطة مهاجمة العملاء الآخرين مباشرة باستخدام تقنيات مثل انتحال ARP (انظر اختبارات عزل العملاء).
الهجوم متطابق ضد شبكات Enterprise WPA1 وWPA2 وWPA3. وذلك لأن الهجوم لا يستغل أي خصائص تشفير لشبكة Wi-Fi، بل يسيء استخدام الطريقة التي تحدد بها الشبكة إلى أي عميل يجب إرسال الحزم، أي توجيهها.
لمزيد من التفاصيل حول الهجوم، انظر هجوم تجاوز السياق الأمني (القسم 5) في ورقتنا Framing Frames: Bypassing Wi-Fi Encryption by Manipulating Transmit Queues.
للتخفيف من هجومنا، يمكن لنقطة الوصول منع العملاء مؤقتًا من الاتصال إذا كانوا يستخدمون عنوان MAC كان متصلاً مؤخرًا بنقطة الوصول. وهذا يمنع الخصم من انتحال عنوان MAC واعتراض الإطارات المعلقة أو الموجودة في قائمة الانتظار الموجهة إلى ضحية. عندما يمكن ضمان أن المستخدم الذي يقف خلف عنوان MAC لم يتغير، يمكن السماح للعميل بإعادة الاتصال فورًا. لاحظ أن هذا الفحص يجب أن يتم عبر جميع نقاط الوصول التي تشكل جزءًا من نفس نظام التوزيع، وبشكل أكثر تحديدًا، عبر جميع نقاط الوصول التي يمكن للعملاء التجوال بينها مع الاحتفاظ بعنوان IP الحالي الخاص بهم.
للتعرف بشكل آمن على المستخدمين المتصلين مؤخرًا، يمكن لنقطة الوصول تخزين تعيين بين عنوان MAC الخاص بالعميل وارتباطات الأمان المخزنة مؤقتًا الخاصة به (على سبيل المثال، PMK المخزن مؤقتًا). يمكن السماح للعميل بإعادة الاتصال فورًا باستخدام عنوان MAC مستخدم مؤخرًا من خلال إثبات أنه يمتلك ارتباط الأمان المخزن مؤقتًا المرتبط بعنوان MAC هذا، على سبيل المثال، عن طريق الاتصال باستخدام PMK المخزن مؤقتًا الصحيح.
عند استخدام multi-PSK، والذي يُعرف أيضًا باسم per-station PSK أو Identity PSK، يمكن لنقطة الوصول الاحتفاظ بتعيين لعناوين MAC المتصلة مؤخرًا وكلمة المرور (الفريدة) التي استخدموها. عندما يتصل عميل، تتحقق نقطة الوصول مما إذا كان عنوان MAC الخاص به مستخدمًا مؤخرًا. إذا لم يكن كذلك، أو إذا كان كذلك والعميل يستخدم نفس كلمة المرور كما في السابق، يمكن للعميل الاتصال بشكل طبيعي. ومع ذلك، إذا تم استخدام نفس عنوان MAC مع كلمة مرور مختلفة، يُجبر العميل على الانتظار لفترة زمنية محددة مسبقًا قبل أن يتمكن من الاتصال بنجاح.
عند استخدام SAE-PK لتأمين النقاط الساخنة، فإن الطريقة الوحيدة التي نعرفها للتعرف بشكل آمن على أن عنوان MAC يُعاد استخدامه من قبل نفس المستخدم كما في السابق، هي الاعتماد على ارتباطات الأمان المخزنة مؤقتًا (على سبيل المثال، PMK المخزن مؤقتًا المرتبط بعنوان MAC).
تفترض الدفاعات المذكورة أعلاه أنه، بعد فترة زمنية معينة، لن تصل أي حزم معلقة أخرى إلى الضحية. لمنع التسريبات بعد هذه الفترة الزمنية، يمكن للعملاء استخدام تشفير من طرف إلى طرف (مثل TLS) مع الخدمات التي يتواصلون معها.
عند استخدام مصادقة 802.1X القائمة على EAP، هناك طريقة بديلة أفضل للتعرف بشكل آمن على المستخدمين المتصلين مؤخرًا تعتمد على هوية EAP التي استخدموها أثناء مصادقة 802.1X. يمكن لنقطة الوصول تعلم هوية EAP بشكل آمن من خادم RADIUS الذي صادق على العميل، ويمكنها الاحتفاظ بتعيين لعناوين MAC المتصلة مؤخرًا وهوية EAP المقابلة لها. عندما يتصل عميل، تتحقق نقطة الوصول مما إذا كان عنوان MAC الخاص به مستخدمًا مؤخرًا. إذا لم يكن كذلك، أو إذا كان كذلك والعميل يستخدم نفس هوية EAP كما في السابق، يمكن للعميل الاتصال بشكل طبيعي. ومع ذلك، إذا تم استخدام نفس عنوان MAC بهوية EAP مختلفة، يُجبر العميل على الانتظار لفترة زمنية محددة مسبقًا قبل أن يتمكن من الاتصال بنجاح.
أحد التحديات هو أن نقطة الوصول قد لا تعرف دائمًا هوية 802.1X الخاصة بالعميل بسبب مخاوف الخصوصية. على سبيل المثال، قد تكون هذه المعلومات متاحة فقط في خادم AAA الرئيسي، وستتلقى نقطة الوصول فقط هوية مستخدم قابلة للفوترة Chargeable User Identity من خادم RADIUS. لا تسمح هذه الهوية لنقطة الوصول بالتعرف على ارتباطين لنفس الجهاز/نفس بيانات الاعتماد لأن قيمتها قد تتغير باستمرار. تستقبل نقطة الوصول الهوية المجهولة في EAP-Response/Identity، مثل anonymous@realm، ويمكنها الاعتماد على ذلك للتعرف على الأقل على المستخدمين من عوالم (realms) مختلفة.
لمنع المستخدمين في نفس العالم من مهاجمة بعضهم البعض، دون الكشف عن هوية العميل لنقطة الوصول، يلزم التعاون وإجراء تغييرات على خادم RADIUS. على وجه الخصوص، يمكن تحديث خادم RADIUS للمساعدة في اكتشاف ما إذا كان عنوان MAC قد استُخدم مؤخرًا من قبل مستخدم آخر في نفس العالم (في الشبكة المحلية المعنية). سيحتاج خادم RADIUS بعد ذلك إلى إبلاغه عندما ينقطع اتصال عميل، حتى يعرف متى كانت آخر مرة استُخدم فيها عنوان MAC من قبل أحد مستخدميه، ويحتاج إلى إبلاغه بعنوان MAC لأي عميل يحاول الاتصال.
ملاحظة أخيرة هي أنه، في حين أن هذا النهج القائم على هوية EAP سيمنع المستخدمين المختلفين من مهاجمة بعضهم البعض، فإنه لن يمنع جهازًا مخترقًا من مهاجمة جهاز آخر لنفس المستخدم. أي أن الهجمات لن تُمنع إلا بين مستخدمين مختلفين، ولكن ليس بين أجهزة مختلفة لنفس المستخدم.
من المهم ملاحظة أن هجومنا لا يقتصر على اعتراض الحزم الموجهة إلى عملاء Wi-Fi. يمكن للخصم أيضًا محاولة الارتباط بعنوان MAC الخاص ببوابة افتراضية أو خادم آخر في الشبكة المحلية. لمنع مثل هذه الهجمات، يمكن لنقطة الوصول أو وحدة التحكم منع العملاء من استخدام عنوان MAC مساوٍ لعنوان البوابة الافتراضية. بشكل أكثر عمومية، يمكن استخدام اكتشاف عناوين MAC المكررة عندما يتصل عميل Wi-Fi بالشبكة، لمنع عملاء Wi-Fi من استخدام عنوان MAC مستخدم أيضًا بواسطة أجهزة أخرى في الشبكة.
استخدام حماية إطارات الإدارة (MFP) سيجعل الهجوم أكثر صعوبة ولكن ليس مستحيلاً. في عمل سابق، وجدنا بعض الطرق التي يمكن من خلالها فصل/إلغاء مصادقة العملاء حتى عند استخدام MFP. بناءً على تلك الخبرة، يبدو دائمًا أن هناك طريقة ما لفصل عميل قسريًا عن الشبكة، حتى عند استخدام MFP. بعبارة أخرى، من الصعب منع هجمات الفصل وإلغاء المصادقة تمامًا. ومع ذلك، فإن MFP ستكون عقبة إضافية يجب تجاوزها عند تنفيذ الهجوم عمليًا، لذا يمكن أن تكون تخفيفًا مفيدًا لجعل الهجوم أكثر صعوبة (ولكن ليس مستحيلاً) في الممارسة العملية.
استنادًا إلى التجارب الأولية، لا يعمل الهجوم عبر شبكات VLAN مختلفة. بعبارة أخرى، يجب أن يكون المخرب الداخلي الذي ينفذ الهجوم في نفس شبكة VLAN التي يتواجد بها الضحية. لذلك، يتمثل أحد التخفيفات في وضع مجموعات مختلفة من المستخدمين في شبكات VLAN مختلفة. ومع ذلك، سيظل المخرب الداخلي قادرًا على تنفيذ الهجوم (أي تجاوز عزل العملاء) ضد مستخدمين آخرين في نفس شبكة VLAN.
لاحظ أنه عند استخدام multi-PSK (المعروف أيضًا باسم per-station PSK أو identity PSK)، يمكنك وضع العملاء في شبكات VLAN مختلفة اعتمادًا على كلمة المرور التي يستخدمونها. بعبارة أخرى، يمكنك استخدام شبكة VLAN لكل كلمة مرور. وهذا يمنع العملاء الذين لديهم كلمات مرور مختلفة من مهاجمة بعضهم البعض.
تعمل أداة MacStealer مع أي بطاقة شبكة مدعومة من Linux. اختبرنا MacStealer على Ubuntu 22.04. لتثبيت التبعيات المطلوبة على Ubuntu 22.04 نفّذ:
sudo apt update
sudo apt install libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libssl-dev \
libdbus-1-dev git pkg-config build-essential net-tools python3-venv \
aircrack-ng rfkill
الآن استنسخ هذا المستودع، وقم ببناء الأدوات، وقم بإعداد بيئة python3 افتراضية:
git clone https://github.com/vanhoefm/macstealer.git macstealer
cd macstealer/research
./build.sh
./pysetup.sh
التعليمات أعلاه تحتاج إلى تنفيذ مرة واحدة فقط.
بعد سحب كود جديد باستخدام git، يجب عليك تنفيذ ./build.sh و./pysetup.sh مرة أخرى.
انظر سجل التغييرات للحصول على نظرة عامة مفصلة عن التحديثات التي طرأت على MacStealer
منذ بدء الإفصاح المنسق.
في كل مرة تريد استخدام MacStealer، يجب عليك أولاً تحميل بيئة python3 الافتراضية كجذر. يمكن القيام بذلك باستخدام:
cd research
sudo su
source venv/bin/activate
يجب عليك الآن تعطيل Wi-Fi في مدير الشبكة لديك
حتى لا يتعارض مع MacStealer. يمكنك اختياريًا التحقق باستخدام sudo airmon-ng check لمعرفة
العمليات الأخرى التي قد تستخدم بطاقة الشبكة اللاسلكية وقد تتعارض مع MacStealer.
الخطوة التالية هي تعديل client.conf بمعلومات الشبكة التي تريد اختبارها.
هذا ملف إعداد لـ wpa_supplicant
يجب أن يحتوي على كتلتين للشبكة: واحدة تمثل الضحية وواحدة تمثل
المهاجم. مثال على ملف إعداد لاختبار الشبكة الافتراضية kuleuven هو:
# Don't change this line, other MacStealer won't work
ctrl_interface=wpaspy_ctrl
network={
# Don't change this field, the script relies on it
id_str="victim"
# Network to test: fill in properties of the network to test
ssid="kuleuven"
key_mgmt=WPA-EAP
eap=PEAP
phase2="auth=MSCHAPV2"
# Victim login: fill in login credentials representing the victim
identity="[email protected]"
password="SuperSecret"
}
network={
# Don't change this field, the script relies on it
id_str="attacker"
# Network to test: you can copy this from the previous block
ssid="kuleuven"
key_mgmt=WPA-EAP
eap=PEAP
phase2="auth=MSCHAPV2"
# Attacker login: fill in login credentials representing the attacker
identity="[email protected]"
password="SomePassword"
}
في الجزء "الشبكة المراد اختبارها" يجب عليك تقديم اسم الشبكة التي يتم اختبارها وإعداداتها الأمنية. انظر wpa_supplicant.conf للحصول على توثيق حول كتابة/تحرير ملفات الإعداد ولأمثلة على كتل الشبكة لمختلف أنواع شبكات Wi-Fi. في كتلة الشبكة الأولى، ضمن "تسجيل دخول الضحية"، يجب عليك تحديد بيانات اعتماد تسجيل دخول صالحة تمثل الضحية المحاكاة. في كتلة الشبكة الثانية، يمكنك تقديم نفس المعلومات تمامًا ضمن "الشبكة المراد اختبارها"، ولكن يجب عليك تقديم بيانات اعتماد تسجيل دخول تمثل المهاجم المحاكى.
في المثال أعلاه، سيختبر MacStealer هجومًا يكون فيه الخصم هو [email protected]
وسيحاول هذا الخصم اعتراض حركة المرور المرسلة إلى الضحية [email protected].
افتراضيًا، يستخدم البرنامج النصي ملف الإعداد client.conf. يمكنك استخدام ملف إعداد
مختلف عن طريق توفير المعامل --config network.conf، حيث يمكنك استبدال
network.conf بملف الإعداد الذي تريد استخدامه.
يحتوي هذا المستودع أيضًا على ملفات الإعداد المثال التالية:
multipsk.conf: ملف إعداد لاختبار شبكة
تستخدم multi-PSK حيث تُستخدم كلمة مرور واحدة للأجهزة الموثوقة وكلمة مرور ثانية
تُعطى للضيوف.
saepk.conf: ملف إعداد لاختبار نقطة ساخنة عامة
تستخدم SAE-PK.
لاحظ أنه من الممكن أيضًا تعديل كتلة (كتل) الشبكة لاختبار نقطة وصول/BSS محددة.
افتراضيًا، سيرسل MacStealer حزمة TCP SYN إلى 8.8.8.8 على المنفذ 443 في جميع الاختبارات، وهو
خادم DNS تابع لجوجل. إذا كنت تريد استخدام خادم أو منفذ مختلف، يمكنك توفير واحد باستخدام
المعامل --server. على سبيل المثال:
./macstealer.py wlan0 --server 208.67.222.222
يمكنك أيضًا إضافة المنفذ الذي يجب استخدامه في حزم TCP SYN:
./macstealer.py wlan0 --server 208.67.222.222:80
استبدل wlan0 باسم واجهة Wi-Fi الخاصة بك وعنوان IP بالخادم
الذي تريد استخدامه.
يجب على هذا الخادم إعادة إرسال ردود TCP SYN/ACK، ومن المثالي أن يستمر في إرسال
SYN/ACK مُعاد إرساله بعد أكثر من 10 ثوانٍ من إرسال MacStealer لحزمة TCP SYN الأولية. يمكنك
اختبار سلوك إعادة الإرسال هذا باستخدام المعامل --ping كما يلي:
./macstealer.py wlan0 --server 208.67.222.222 --ping
سيقوم MacStealer بإخراج ما يلي في حال كان الخادم يمتلك سلوك إعادة الإرسال المطلوب:
[22:53:15] Received SYN/ACK 15.265095233917236 seconds after sending SYN.
[22:53:20] >>> Ping test done, everything looks good so far. You can continue with other tests.
في حال كان الخادم المقدم لا يرسل ردود TCP SYN/ACK، أو لا يعيد إرسالها في وقت متأخر بما فيه الكفاية، فسيقوم MacStealer بإخراج ما يلي:[22:52:05] Received SYN/ACK 1.0727121829986572 seconds after sending SYN. [22:52:24] >>> Ping test done. Consider using a server that retransmits SYN/ACK for a longer time.
السبب في ضرورة استمرار الخادم في إعادة إرسال SYN/ACK بعد مرور أكثر من 10 ثوانٍ هو أنه قد يستغرق أحيانًا عدة ثوانٍ لإعادة الاتصال بصفة المهاجم المحاكى. يجب أن تكتمل عملية إعادة الاتصال هذه قبل أن يرسل الخادم آخر حزمة TCP SYN/ACK معاد إرسالها.
يحتوي الجدول التالي على الأوامر الشائعة التي ستنفّذها عند اختبار شبكة، مع وصف مختصر لما يفعله كل أمر. أسفل الجدول يتم شرح التفاصيل الكامنة خلف كل أمر.
إذا كانت الشبكة التي يتم اختبارها تستخدم حماية إطارات الإدارة (802.11w)، يفترض البرنامج أن الخصم ما يزال قادرًا على فصل الضحية قسرًا عن الشبكة. يستند هذا الافتراض إلى بحث حديث أظهر أن هجمات قطع الاتصال تظل ممكنة في العادة، وإن كانت أقل مباشرة أو عمومية، عند استخدام MFP.
قبل اختبار الثغرات، يمكنك استخدام الأمرين التاليين للتأكد من أن MacStealer يمكنه الاتصال بالشبكة بصفته الضحية والمهاجم معًا:
./macstealer.py wlan0 --ping: يتصل بالشبكة باستخدام بيانات اعتماد الضحية. وبمجرد الاتصال، يتم إرسال TCP SYN إلى الخادم (الذي يكون افتراضيًا 8.8.8.8 ويمكن تغييره). سيتحقق MacStealer من إعادة إرسال SYN/ACK وعدد مرات إعادة الإرسال. يمكنك استخدام هذا لتأكيد صحة بيانات اعتماد الضحية والتحقق من أن الخادم المُهيأ يعيد إرسال ردود SYN/ACK بشكل صحيح.
./macstealer.py wlan0 --ping --flip: نفس الاختبار أعلاه، لكن البرنامج النصي سيتصل الآن باستخدام بيانات اعتماد الخصم. يمكنك استخدام هذا لتأكيد صحة بيانات اعتماد الخصم.
./macstealer.py wlan0: اختبار النمط الافتراضي لهجوم سرقة عنوان MAC. سيعيد المهاجم الاتصال بنفس نقطة الوصول/مجموعة الخدمات الأساسية (AP/BSS) التي يتصل بها الضحية.
./macstealer.py wlan0 --other-bss: سيتصل المهاجم بنقطة وصول/مجموعة خدمات أساسية مختلفة تابعة لنفس الشبكة. الشبكة التي تكون (أيضًا) عرضة لهذا الاختبار يسهل استغلالها عمليًا. إذا كانت نقطة وصول/BSS واحدة فقط ضمن نطاق الراديو، ستنتهي مهلة البرنامج النصي عند الاتصال كمهاجم.
استغلال ثغرة سرقة عنوان MAC يكون منطقيًا فقط إذا كان عزل العملاء مفعّلاً أو عند استخدام تقنيات مثل فحص ARP لمنع العملاء من مهاجمة بعضهم البعض. وإلا، يمكن للخصم استخدام هجمات أسهل مثل تسميم ARP لاعتراض حركة المرور. لاختبار ما إذا كان عزل العملاء مفعّلاً، أو ما إذا كانت الشبكة تستخدم فحص ARP، يمكنك استخدام الأوامر التالية:
./macstealer.py wlan0 --c2c wlan1: بهذه الوسائط، يختبر MacStealer ما إذا كانت الشبكة تسمح بحركة مرور تسميم ARP من عميل إلى عميل من المهاجم (wlan1) نحو الضحية (wlan0). هنا wlan1 هي واجهة شبكة لاسلكية ثانية. سيختبر البرنامج النصي بعد ذلك ما إذا كان يمكن إرسال حزم ARP خبيثة من المهاجم إلى الضحية.
./macstealer.py wlan0 --c2c-eth wlan1: يشبه هذا الاختبار السابق، لكن بدلاً من إرسال حزم ARP خبيثة، سيرسل المهاجم حزم DNS إلى الضحية.
يجب اعتبار ثغرة سرقة عنوان MAC خطرًا عمليًا إذا تم حظر حركة المرور من عميل إلى عميل في أي من الاختبارين أعلاه (أي عندما يكون عزل العملاء مفعّلاً أو عند استخدام تقنيات أخرى مثل فحص ARP لمنع المستخدمين من مهاجمة بعضهم البعض).
افتراضيًا، سيحاول MacStealer الاتصال بنفس نقطة الوصول/مجموعة الخدمات الأساسية باستخدام الواجهتين معًا، لذلك من المهم أن تتمكن بطاقتا الشبكة من رؤية الشبكات نفسها (أي تأكد من أن واجهتي الشبكة تدعمان نطاقات التردد والقنوات نفسها). إذا أردت أن يتصل العميلان بنقطة وصول/مجموعة خدمات أساسية مختلفة، يمكنك استخدام المعامل --other-bss.
يمكنك استخدام المعامل --flip-id لاختبار ما إذا كانت حركة المرور من الضحية (wlan0) مسموحًا بها نحو المهاجم (wlan1).
إذا بدا أن MacStealer لا يعمل، تحقق مما يلي:
تأكد من عدم استخدام أي عملية أخرى لبطاقة الشبكة (على سبيل المثال، أوقف مدير الشبكة لديك). قد ترى المخرجات kernel reports: match already configured إذا كانت عملية أخرى تستخدم بطاقة الشبكة أيضًا.
إذا كان كل شيء يعمل سابقًا، جرّب فصل دونجل Wi-Fi، وأعد تشغيل جهاز الكمبيوتر أو الجهاز الافتراضي، ثم حاول مرة أخرى.
تأكد من أنك تتصل بالشبكة الصحيحة. تحقق مرة أخرى من client.conf.
إذا حدّثت الكود باستخدام git، فنفّذ ./build.sh و ./pysetup.sh مرة أخرى (انظر المتطلبات الأساسية).
إذا كنت تستخدم جهازًا افتراضيًا، فجرّب تشغيل MacStealer من تثبيت Linux أصلي بدلاً من ذلك.
شغّل MacStealer مع المعامل الإضافي -dd للحصول على مخرجات تصحيح إضافية من wpa_supplicant ومن MacStealer نفسه.
ستتحقق اختبارات عزل العملاء الافتراضية مما إذا كانت حركة المرور على طبقة إيثرنت مسموحًا بها بين العملاء. ومن الممكن أيضًا اختبار ما إذا كانت حركة مرور طبقة IP مسموحًا بها بين العملاء باستخدام الأمر التالي:
./macstealer.py wlan0 --c2c-ip wlan1 [--flip-id]
عندما تكون حركة مرور طبقة IP بين العملاء مسموحًا بها، ما يزال من الممكن أن يهاجم العملاء بعضهم البعض. على سبيل المثال، قد تظل هجمات إعادة توجيه ICMP ممكنة. هذه الهجمات أكثر تعقيدًا من تسميم ARP، لكن من الأفضل منعها أيضًا عن طريق حظر حركة مرور طبقة IP بين العملاء.
يمكن تنفيذ الاختبارات التالية لاختبار الخصائص العامة للشبكة. هذه الاختبارات ليست مرتبطة مباشرة بالثغرات، ولكن يمكن استخدامها لفهم سلوك الشبكة بشكل أفضل.
./macstealer.py wlan0 --same-id [--other-bss] [--flip]: اختبر ما إذا كانت اتصالات TCP تظل نشطة بعد قطع الاتصال وإعادة الاتصال بنقطة وصول. إذا لم تظل الاتصالات نشطة بعد إعادة الاتصال، فمن المرجح أن الشبكة ليست عرضة لهجمات سرقة عنوان MAC. ومع ذلك، فإن أحد العيوب الرئيسية لهذا السلوك هو أن العملاء الشرعيين يضطرون إلى فتح اتصالات TCP جديدة كلما أعادوا الاتصال بهذه الشبكة، مما يجعل هذه الشبكة تبدو بطيئة وغير موثوقة (لذلك يجب استخدام دفاع أفضل بدلاً من ذلك).
يمكنك استخدام المعامل --other-bss لإعادة الاتصال بنقطة وصول/مجموعة خدمات أساسية مختلفة تابعة لنفس الشبكة.
يمكنك استخدام الوسيط --flip لتنفيذ هذا الاختبار بهوية المهاجم بدلاً من هوية الضحية.
./macstealer.py wlan0 --flip: اختبر هجوم سرقة عنوان MAC العادي، مع تبديل دور المهاجم والضحية. بمعنى آخر، سيستخدم المهاجم "بيانات اعتماد الضحية" المقدمة في ملف الإعداد، وستستخدم الضحية "بيانات اعتماد الخصم".
./macstealer.py wlan0 --c2c wlan1 --same-id [--flid-id]: اختبر ما إذا كانت حركة المرور من عميل إلى عميل مسموحًا بها بين جهازين لنفس المستخدم. راجع اختبارات عزل العملاء لتوثيق المعامل wlan1.
يمكنك استخدام الوسيط --flip لتنفيذ هذا الاختبار بهوية المهاجم بدلاً من هوية الضحية.
--delay seconds: يمكنك استخدام المعامل --delay لتحديد تأخير، بالثواني، قبل إعادة الاتصال كمهاجم.
-d أو -dd: إضافة أحد هذين المعاملين تزيد من مستوى تفاصيل التصحيح للبرنامج النصي ولنسخة wpa_supplicant الأساسية.
افتراضيًا، سيختار MacStealer تلقائيًا نقطة وصول/مجموعة خدمات أساسية تابعة للشبكة للاتصال بها واختبارها. إذا كانت لديك شبكة تحتوي على نقاط وصول/مجموعات خدمات أساسية متعددة، يمكنك اختبار واحدة محددة عن طريق تحديد نقطة الوصول/مجموعة الخدمات الأساسية هذه في كتلة الشبكة الخاصة بالضحية باستخدام الكلمة المفتاحية bssid. على سبيل المثال، يمكنك استخدام:
...
network={
# Don't change this field, the script relies on it
id_str="victim"
# Network to test: fill in properties of the network to test
ssid="kuleuven"
key_mgmt=WPA-EAP
eap=PEAP
phase2="auth=MSCHAPV2"
# Victim login: fill in login credentials representing the victim
identity="[email protected]"
password="SuperSecret"
# This a specific AP/BSS
bssid=00:11:22:33:44:55
}
...
باستخدام الإعداد أعلاه، سيختبر MacStealer العنوان 00:11:22:33:44:55. وهذا يعني أنه سيتصل بهذه النقطة سواء بصفته الضحية وكذلك بصفته المهاجم.
يمكنك أيضًا دمج هذا مع المعامل --other-bss. في هذه الحالة، سيتصل الضحية بـ 00:11:22:33:44:55، وسيتصل المهاجم بنقطة وصول/مجموعة خدمات أساسية مختلفة تابعة لنفس الشبكة.
خيار آخر هو تحديد BSS/AP صريح في كتلة الشبكة الخاصة بالضحية والمهاجم.
لاحظ أن MacStealer سيبحث عن نقطة الوصول/مجموعة الخدمات الأساسية المعطاة لمدة 30 ثانية كحد أقصى. إذا تعذر العثور على نقطة الوصول/مجموعة الخدمات الأساسية المحددة، سيخرج البرنامج.
يمكنك اختبار شبكة SAE-PK باستخدام ملف الإعداد التالي. لاحظ أنه بالنسبة لشبكات SAE-PK لا يوجد فرق في كيفية مصادقة الضحية والمهاجم، أي أن كلاهما يستخدم نفس كلمة المرور.
# Don't change this line, other MacStealer won't work
ctrl_interface=wpaspy_ctrl
# WPA3/SAE: support both hunting-and-pecking loop and hash-to-element
sae_pwe=2
network={
# Don't change this field, the script relies on it
id_str="attacker"
# Network to test - attacker login
ssid="test-saepk"
psk="7iip-ytnz-qa25"
key_mgmt=SAE
ieee80211w=2
}
network={
# Don't change this field, the script relies on it
id_str="victim"
# Network to test - victim login
ssid="test-saepk"
psk="7iip-ytnz-qa25"
key_mgmt=SAE
ieee80211w=2
}
عمليًا، يُستخدم عزل العملاء أيضًا في الشبكات المؤمَّنة بكلمة مرور مشتركة مسبقًا. على سبيل المثال، توفر العديد من أجهزة التوجيه خيارًا لإنشاء شبكة للضيوف أو للأجهزة غير الآمنة (IoT)، حيث يتم عزل العملاء في هذه الشبكة بحيث لا يمكنهم مهاجمة بعضهم البعض. ومع ذلك، يمكن التشكيك في الميزة الأمنية لاستخدام عزل العملاء في هذا السيناريو. من المفترض أن يمنع عزل العملاء طرفًا داخليًا خبيثًا من مهاجمة الآخرين. ولكن إذا كان الطرف الداخلي الخبيث يعرف كلمة المرور المشتركة مسبقًا، فيمكنه ببساطة إنشاء نسخة مزيفة (توأم شرير)، وخداع الضحايا للاتصال بهذه النسخة الخبيثة من الشبكة، ثم مهاجمة العملاء الآخرين! بعبارة أخرى، استخدام عزل العملاء في شبكة مؤمَّنة بكلمة مرور لا يوفر أمانًا قويًا، إذ يمكن لعميل خبيث إنشاء نقطة وصول مزيفة لمهاجمة عملاء آخرين.
ومع ذلك، يمكن القول إن إنشاء نقطة وصول مزيفة يمكن أن يكتشفه مسؤول الشبكة، مما يعني أن عزل العملاء يجعل الهجمات أكثر صعوبة بالفعل. بالإضافة إلى ذلك، عند اختراق جهاز خفيف (عن بُعد)، قد لا يمتلك الموارد اللازمة ليعمل (بسهولة) كنقطة وصول مزيفة. وهذا يجعل تنفيذ الهجمات عند استخدام عزل العملاء أكثر صعوبة، لكنه ليس مستحيلاً. بشكل عام، على الرغم من أن عزل العملاء لا يوفر ضمانات أمنية قوية في شبكة محمية بكلمة مرور، يمكن القول إنه يزيد من الصعوبة العملية لتنفيذ الهجمات.
هجوم MacStealing خاصتنا أسهل تنفيذًا من إنشاء نقطة وصول مزيفة. كل ما يحتاج إليه الطرف الداخلي الخبيث، مثل جهاز IoT خفيف مخترق، هو انتحال عنوان MAC وإعادة الاتصال بالشبكة. كما أن هذا الهجوم أصعب في اكتشافه. بناءً على هذه الملاحظة، فإن هجومنا الجديد يجعل الوضع أسوأ، ولذلك يمكن القول إنه ينبغي أيضًا اعتبار هجومنا ذا صلة في الشبكات المحمية بكلمة مرور مشتركة مسبقًا.
الخلاصة: عند استخدام عزل العملاء في شبكة محمية بكلمة مرور، فأنت تفترض أن الطرف الداخلي الخبيث لن ينشئ نقطة وصول مزيفة. وإلا، فإن استخدام عزل العملاء يكون بلا معنى من منظور أمني. يمكن تنفيذ هجوم MacStealing دون إنشاء نقطة وصول مزيفة، وبالتالي يجعل الهجمات أسهل.
الهدف من هجومنا ليس تجاوز قوائم منع/سماح عناوين MAC على نقاط الوصول. انتحال عناوين MAC لتجاوز تصفية عناوين MAC هو هجوم مختلف ومعروف.
الهدف من هجومنا ليس اختطاف اتصال شخص مدفوع في نقاط اتصال Wi-Fi. على سبيل المثال، تتطلب بعض نقاط الاتصال المفتوحة (أو المحمية) من المستخدم الدفع قبل السماح له بالوصول إلى الإنترنت. غالبًا ما يتم التعرف على المشترك الذي يدفع بناءً على عنوان MAC الخاص به، ويمكن للخصم انتحال عنوان MAC الخاص بالضحية للوصول إلى الإنترنت. ليس هذا هو الغرض من هجومنا؛ هدف MacStealer هو تجاوز عزل العملاء.
يؤثر هجومنا أيضًا على الشبكات التي تدافع عن ثغرة Hole 196. على سبيل المثال، شبكات Passpoint (المعروفة سابقًا باسم Hotspot 2.0) مطلوب منها منع ثغرة Hole 196، لكنها ما تزال عرضة لهجومنا.
يعمل هجومنا في الشبكات التي تدافع ضد تسميم ARP. في شبكات Wi-Fi سيئة التأمين، يمكن للخصم تنفيذ تسميم ARP بسهولة لاعتراض حركة مرور الضحية، ولا يكون هجومنا عمليًا حقًا. ومع ذلك، تعتمد الشبكات الحديثة، التي قد تضم أطرافًا داخلية خبيثة، على عزل العملاء أو طرق أخرى لمنع هجمات الوسيط. مهاجمنا يتجاوز كل هذه الدفاعات الحديثة وما يزال يمكّن الخصم من اعتراض حركة المرور الموجهة إلى الضحية.
باختصار، يؤثر هجومنا على شبكات Wi-Fi التي يُمنع فيها العملاء من مهاجمة بعضهم البعض، مما يمكّن الخصم من اعتراض حركة المرور الموجهة إلى عميل آخر.
يستخدم معظم البائعين CVE-2022-47522 للإشارة إلى ثغرة تجاوز عزل عملاء Wi-Fi التي تتم مناقشتها في مستودع git هذا. تتوافق هذه الثغرة مع الهجوم في القسم 5 من ورقتنا البحثية.
لسوء الحظ، يستخدم بائعون آخرون أيضًا هذا CVE للإشارة إلى الثغرة (غير المرتبطة بالمعنى الدقيق) التي تتم مناقشتها في القسم 3 من ورقتنا البحثية. في الواقع، الوصف الفعلي لـ CVE كما هو موجود على MITRE، في رأينا، يصف فقط الهجوم في القسم 3 من ورقتنا. عمليًا، يبدو أن CVE-2022-47522 يُستخدم للإشارة إلى جميع الهجمات في ورقتنا، على الرغم من أنها مختلفة تقنيًا.
الإصدار 1.2 (قيد الإعداد)
تحسين ملف README: توضيح استخدام معرّف CVE.
تحسين ملف README: تركيز المقدمة على تجاوز عزل العملاء، وتحديث الدفاعات بملاحظات 802.1X ومنع سرقة عنوان MAC الخاص بالبوابة الافتراضية.
إضافة المعامل --delay لتحديد تأخير بالثواني قبل إعادة الاتصال كمهاجم.
الإصدار 1.1 (18 يناير 2023)
استخدام 8.8.8.8 افتراضيًا كخادم بدلاً من 216.58.208.100 (كلاهما خادمان من Google).
تحديث اختبارات عزل العملاء: الاختبار افتراضيًا باستخدام تسميم ARP على طبقة إيثرنت. مع توفير خيار لإرسال بيانات UDP مع إعادة التوجيه على طبقة إيثرنت، واختبار مع إعادة توجيه على طبقة IP.
تحسين ملف README: تحديث أنواع الشبكات التي قد تتأثر. تضمين مناقشة حول ما إذا كانت شبكات WPA2 أو WPA3 المحمية بكلمة مرور تتأثر. شرح الأوامر المختلفة لاختبار حركة المرور بين العملاء على طبقة إيثرنت أو طبقة IP.
تحسين ملف README: مناقشة MFP، ومناقشة شبكات VLAN كإجراء تخفيفي، وتوضيح نقاط الوصول التي يجب إجراء فحص الهوية عليها، وتحديد منفذ الخادم،
تحسين مخرجات MacStealer.
الإصدار 1.0 (3 يناير 2023):
| الأمر | وصف مختصر |
|---|
./macstealer.py wlan0 --ping | الاتصال كضحية واختبار سلوك إعادة إرسال الخادم. |
./macstealer.py wlan0 --ping --flip | الاتصال كمهاجم واختبار سلوك إعادة إرسال الخادم. |
./macstealer.py wlan0 | اختبار النمط الافتراضي لهجوم سرقة عنوان MAC. |
./macstealer.py wlan0 --other-bss | اسمح للمهاجم بالاتصال بنقطة وصول مختلفة عن تلك التي يتصل بها الضحية. |
./macstealer.py wlan0 --c2c wlan1 | اختبار حركة مرور طبقة إيثرنت من عميل إلى عميل (تسميم ARP). |
./macstealer.py wlan0 --c2c-eth wlan1 | اختبار حركة مرور طبقة إيثرنت من عميل إلى عميل (DNS). |