ثغرة أمنية تسمح باختراق اتصالات TCP التي تتم عبر أنفاق VPN

نشرت تقنية هجوم (CVE-2019-14899) تسمح بانتحال الحزم أو تعديلها أو استبدالها في اتصالات TCP التي يتم توجيهها عبر أنفاق VPN. تؤثر المشكلة على Linux وFreeBSD وOpenBSD وAndroid وmacOS وiOS والأنظمة الأخرى المشابهة لنظام Unix. يدعم Linux آلية rp_filter (تصفية المسار العكسي) لـ IPv4، ويعمل تشغيلها في الوضع "Strict" على تحييد هذه المشكلة.

تسمح الطريقة باستبدال الحزم على مستوى اتصالات TCP التي تمر داخل نفق مشفر، ولكنها لا تسمح بالدمج في الاتصالات التي تستخدم طبقات تشفير إضافية (على سبيل المثال، TLS، HTTPS، SSH). لا يهم خوارزميات التشفير المستخدمة في VPN، حيث أن الحزم المخادعة تأتي من الواجهة الخارجية وتتم معالجتها بواسطة النواة كحزم من واجهة VPN. الهدف الأكثر احتمالاً للهجوم هو التدخل في اتصالات HTTP غير المشفرة، ولكن ليست مستبعدة واستخدام هجوم للتلاعب باستجابات DNS.

لقد تم إثبات نجاح انتحال الحزم في الأنفاق التي تم إنشاؤها باستخدام OpenVPN وWireGuard وIKEv2/IPSec. Tor ليس عرضة لهذه المشكلة، لأنه يستخدم SOCKS لإعادة توجيه حركة المرور ويرتبط بواجهة الاسترجاع. بالنسبة لـ IPv4، يكون الهجوم ممكنًا إذا تم تعيين rp_filter على الوضع "Loose" (sysctl net.ipv4.conf.all.rp_filter = 2). في البداية، استخدمت معظم الأنظمة الوضع "الصارم"، ولكن بدءًا من systemd 240، الذي تم إصداره في ديسمبر الماضي، تم تغيير وضع التشغيل الافتراضي إلى "Loose" وانعكس هذا التغيير في الإعدادات الافتراضية للعديد من توزيعات Linux.

آلية rp_filter تطبق للتحقق الإضافي من مسارات الحزم لمنع انتحال عنوان المصدر. عند التعيين على 0، لا يتم إجراء فحص لعنوان المصدر ويمكن إعادة توجيه أي حزمة بين واجهات الشبكة دون قيود. يتضمن الوضع 1 "صارم" التحقق من كل حزمة قادمة من الخارج للتأكد من امتثالها لجدول التوجيه، وإذا كانت واجهة الشبكة التي تم استلام الحزمة من خلالها غير مرتبطة بمسار تسليم الاستجابة الأمثل، فسيتم تجاهل الحزمة. يعمل الوضع 2 "فضفاض" على تخفيف عملية التحقق للسماح لموازنات التحميل أو التوجيه غير المتماثل بالعمل عندما
قد يمر مسار الاستجابة عبر واجهة شبكة غير تلك التي وصلت الحزمة الواردة من خلالها.

في الوضع فضفاض، يتم فحص الحزمة الواردة مقابل جدول التوجيه، ولكنها تعتبر صالحة إذا كان عنوان المصدر يمكن الوصول إليه من خلال أي واجهة شبكة متاحة. يعتمد الهجوم المقترح على حقيقة أن المهاجم يمكنه إرسال حزمة بعنوان مصدر مزيف يتوافق مع واجهة VPN، وعلى الرغم من أن هذه الحزمة ستدخل النظام من خلال واجهة الشبكة الخارجية وليس من خلال VPN، لن يتم تجاهل الوضع "الفضفاض" rp_filter مثل هذه الحزمة.

لتنفيذ هجوم، يجب على المهاجم التحكم في البوابة التي يصل المستخدم من خلالها إلى الشبكة (على سبيل المثال، من خلال منظمة MITM، عندما يتصل الضحية بنقطة وصول لاسلكية يتحكم فيها المهاجم، أو من خلال اختراق جهاز التوجيه). من خلال التحكم في البوابة التي يتصل المستخدم من خلالها بالشبكة، يمكن للمهاجم إرسال حزم زائفة سيتم إدراكها في سياق واجهة شبكة VPN، ولكن سيتم توجيه الاستجابات عبر النفق.

من خلال توليد دفق من الحزم الوهمية التي يتم فيها استبدال عنوان IP الخاص بواجهة VPN، تتم محاولات للتأثير على الاتصال الذي أنشأه العميل، ولكن لا يمكن ملاحظة تأثير هذه الحزم إلا من خلال التحليل السلبي لتدفق حركة المرور المشفرة المرتبطة مع تشغيل النفق. لتنفيذ هجوم، تحتاج إلى معرفة عنوان IP الخاص بواجهة شبكة النفق التي تم تعيينها بواسطة خادم VPN، وكذلك تحديد ما إذا كان الاتصال بمضيف معين نشطًا حاليًا عبر النفق.

لتحديد عنوان IP لواجهة الشبكة الافتراضية الخاصة بـ VPN، يتم إرسال حزم SYN-ACK إلى النظام الضحية، مع تعداد النطاق الكامل للعناوين الافتراضية بشكل تسلسلي (أولاً وقبل كل شيء، يتم تعداد العناوين المستخدمة في VPN افتراضيًا، على سبيل المثال، OpenVPN يستخدم الشبكة الفرعية 10.8.0.0/24). يمكن الحكم على وجود عنوان بناءً على استلام استجابة بعلامة RST.

بطريقة مماثلة، يتم تحديد وجود اتصال بموقع معين ورقم المنفذ على جانب العميل - من خلال فرز أرقام المنافذ، يتم إرسال حزمة SYN إلى المستخدم، كعنوان المصدر، حيث IP يتم استبدال الموقع، وعنوان الوجهة هو IP VPN افتراضي. يمكن التنبؤ بمنفذ الخادم (80 لـ HTTP)، ويمكن حساب رقم المنفذ على جانب العميل عن طريق القوة الغاشمة، وتحليل التغير في شدة استجابات ACK مع عدم وجود حزمة مع RST لأرقام مختلفة. علَم.

في هذه المرحلة، يعرف المهاجم جميع عناصر الاتصال الأربعة (عناوين/منفذ IP المصدر وعنوان/منفذ IP الوجهة)، ولكن من أجل إنشاء حزمة وهمية يقبلها النظام الضحية، يجب على المهاجم تحديد تسلسل TCP و أرقام الإقرار (seq وack) - الاتصالات. لتحديد هذه المعلمات، يرسل المهاجم باستمرار حزم RST مزيفة، محاولًا استخدام أرقام تسلسلية مختلفة، حتى يكتشف حزمة استجابة ACK، والتي يشير وصولها إلى أن الرقم يقع ضمن نافذة TCP.

بعد ذلك، يوضح المهاجم صحة التعريف عن طريق إرسال حزم بنفس الرقم ومراقبة وصول استجابات ACK، وبعد ذلك يختار العدد الدقيق للتسلسل الحالي. المهمة معقدة بسبب حقيقة أن الاستجابات يتم إرسالها داخل نفق مشفر ولا يمكن تحليل وجودها في تدفق حركة المرور المعترض إلا باستخدام طرق غير مباشرة. يتم تحديد ما إذا كان العميل يرسل حزمة ACK موجهة إلى خادم VPN بناءً على حجم وزمن الاستجابة للاستجابات المشفرة، والتي ترتبط بإرسال الحزم المخادعة. على سبيل المثال، بالنسبة لـ OpenVPN، يسمح لك حجم الحزمة المشفرة البالغ 79 بالحكم بدقة على وجود ACK بالداخل.

حتى تتم إضافة الحماية من الهجمات إلى نواة نظام التشغيل كوسيلة مؤقتة لمنع المشكلة موصى به باستخدام مرشح الحزمة في سلسلة "المسار المسبق"، قم بحظر مرور الحزم التي يتم فيها تحديد عنوان IP الظاهري للنفق كعنوان الوجهة.

iptables -t Raw -I PREROUTING ! -i wg0 -d 10.182.12.8 -m addrtype ! --src-type LOCAL -j DROP

أو للnftables

NFT إضافة جدول IP الخام
nft add chain ip Raw prerouting '{ نوع مرشح ربط أولوية التوجيه المسبق 0؛ }'
nft إضافة قاعدة التوجيه المسبق ip الخام 'iifname != "wg0" ip adddr 10.182.12.8 fib Saddr type != local drop'

لحماية نفسك عند استخدام الأنفاق بعناوين IPv4، ما عليك سوى ضبط rp_filter على الوضع "Strict" ("sysctl net.ipv4.conf.all.rp_filter = 1"). من ناحية VPN، يمكن حظر طريقة الكشف عن الرقم التسلسلي عن طريق إضافة الحشو إلى الحزم المشفرة، مما يجعل جميع الحزم بنفس الحجم.

المصدر: opennet.ru

إضافة تعليق