بسیاری از کاربران تصور می کنند که به محض فعال شدن یک اتصال شبکه خصوصی مجازی، الگوریتم های رمزنگاری به تنهایی می توانند امنیت کامل جریان داده را تضمین کنند. اگرچه الگوریتم های مدرن نظیر ChaCha20-Poly1305 و AES-256-GCM داده ها را در بستر فیزیکی با دقت ریاضی بالایی محافظت می کنند، اما رمزنگاری هرگز مسیر فیزیکی انتقال بسته ها را تعیین نمی کند. این تصمیم منحصرا در اختیار جدول مسیریابی هسته سیستم عامل قرار دارد.

در سال 2023، تیمی از پژوهشگران برجسته امنیت شبکه متشکل از Mathy Vanhoef، Nian Xue، Yashaswi Malla، Zihang Xiao و Cristina Nita-Rotaru نقصی بنیادین را تحت عنوان TunnelCrack افشا کردند. این آسیب پذیری ها با شناسه های CVE-2023-36664 و CVE-2023-35838 ثبت شده اند و نشان می دهند که چگونه یک شبکه محلی غیرقابل اعتماد یا هات اسپات وای فای آلوده می تواند با دستکاری قواعد مسیریابی، داده های هدف را به شکل متن ساده به بیرون از تونل هدایت کند.

برای شناخت دقیق شیوه عملکرد TunnelCrack، باید دو شیوه اصلی حمله یعنی LocalNet و ServerIP را به دقت واکاوی کرد.

+-----------------------------------------------------------------------------+
|                     جریان نشت مسیریابی در حمله LOCALNET                     |
|                                                                             |
|  [دستگاه کاربر]                                                             |
|         │                                                                   |
|         ├── مقصد: نشانی عمومی هدف (مثلا 142.250.190.46)                     |
|         │                                                                   |
|         ▼                                                                   |
|  [تصمیم جدول مسیریابی هسته سیستم عامل]                                      |
|         │                                                                   |
|         ├─► مسیر الف: تونل ایمن پیش فرض (0.0.0.0/1 از طریق utun0)           |
|         │                                                                   |
|         └─► مسیر ب: زیرشبکه محلی تزریق شده (142.250.0.0/16 روی wlan0)       |
|                    (اولویت تطبیق طولانی ترین پیشوند Longest Prefix Match)   |
|                                                                             |
|         ▼                                                                   |
|  [رابط فیزیکی بی سیم: wlan0] ───────────────► [روتر وای فای متخاصم]         |
|  (ارسال فریم های اترنت رمزنشده به بیرون)       (شنود اطلاعات توسط نفوذگر)   |
+-----------------------------------------------------------------------------+

حمله LocalNet (CVE-2023-36664): سوءاستفاده از استثناهای شبکه محلی

آسیب پذیری LocalNet از قابلیتی کاربردی اما پرخطر به نام دسترسی به شبکه محلی سرچشمه می گیرد. کاربران هنگام اتصال به شبکه در منزل یا محل کار معمولا مایلند همچنان به چاپگرها، فضاهای ذخیره سازی تحت شبکه و تلویزیون های هوشمند دسترسی داشته باشند. برای پاسخ به این نیاز، سیستم عامل ها مسیرهای مستقیمی با دامنه پیوند برای زیرشبکه محلی ایجاد می کنند.

هنگام اتصال به یک شبکه بی سیم، سرور DHCP تنظیمات آدرس آی پی، ماسک زیرشبکه و گیت وی را تحویل می دهد. در شرایط معمول، محدوده های خصوصی RFC 1918 مانند 192.168.1.0/24 اختصاص می یابد و هسته یک مسیر مستقیم اضافه می کند:

192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.105

ویژگی scope link به هسته نشان می دهد که داده های ارسالی به این محدوده بدون نیاز به گیت وی خارجی و به صورت مستقیم تحویل داده شوند. کلاینت های شبکه معمولا این مسیر را حفظ می کنند تا اختلالی در کاربری های اداری رخ ندهد.

یک اکسس پوینت متخاصم با تعریف یک بلوک آی پی عمومی بزرگ به عنوان زیرشبکه محلی، این رفتار را به سلاحی کارآمد تبدیل می کند. برای مثال سرور DHCP آلوده محدوده 142.250.0.0/16 را با ماسک 255.255.0.0 به دستگاه نسبت می دهد:

# نصب مسیر محلی برای محدوده عمومی اینترنت بر روی کارت شبکه بی سیم
142.250.0.0/16 dev wlan0 proto kernel scope link src 142.250.10.45

هنگامی که کاربر در مرورگر یا برنامه های دیگر به یکی از سرورهای این محدوده متصل می شود، هسته جدول هدایت بسته ها را بررسی می کند. بر اساس قواعد استاندارد مسیریابی:

  1. رابط شبکه مجازی دو مسیر با پیشوند /1 یعنی 0.0.0.0/1 و 128.0.0.0/1 تنظیم می کند.
  2. مسیر محلی تزریق شده پیشوند /16 دارد که بسیار مشخص تر از پیشوند /1 است.
  3. طبق اصل تطبیق طولانی ترین پیشوند، اولویت قطعی به مسیر /16 روی کارت فیزیکی داده می شود.

در نتیجه، بسته ها بدون رمزنگاری از طریق رابط فیزیکی wlan0 خارج می شوند. تونل ایمن در این فرایند نادیده گرفته شده و نفوذگر درخواست های وب و داده های متنی را دریافت می کند.

حمله ServerIP (CVE-2023-35838): دستکاری مسیرهای راه‌اندازی گیت‌وی

در حالی که LocalNet بر ماسک زیرشبکه تکیه دارد، حمله ServerIP نیاز پیش فرض پروتکل برای برقراری اتصال اولیه را هدف می گیرد.

برای فرستادن بسته های کپسوله شده به سمت سرور مقصد در بستر اینترنت، کارت شبکه فیزیکی باید نشانی دقیق سرور خارجی را بداند. چنانچه تمام ترافیک به رابط مجازی هدایت شود، بسته های کپسوله شده دوباره به داخل تونل رانده شده و حلقه ای تکرارشونده ارتباط را به کلی متوقف می کند.

برای جلوگیری از این تداخل، برنامه ها پیش از برقراری تونل، یک مسیر مستقیم میزبان با پیشوند /32 برای سرور روی رابط فیزیکی ثبت می کنند:

# مسیر مستقیم میزبان به سرور بیرونی از طریق روتر فیزیکی
198.51.100.50/32 via 192.168.1.1 dev wlan0

آسیب پذیری هنگامی شکل می گیرد که نام دامنه سرور از طریق دی ان اس غیرقابل اعتماد شبکه محلی در زمان اتصال ترجمه شود:

  1. در ابتدای اتصال، برنامه نام سرور ارائه دهنده خدمات را پرس وجو می کند.
  2. سرور دی ان اس محلی نشانی آی پی یک سرور هدف را که قصد جاسوسی از آن را دارد بازمی گرداند.
  3. برنامه این پاسخ را می پذیرد و یک مسیر اختصاصی /32 برای آن نشانی روی رابط wlan0 تعریف می کند.
  4. با اینکه اتصال به آن نشانی مقصد به عنوان سرور برقرار نمی شود، اما مسیر /32 فعال مانده و از این پس تمام ترافیک عادی کاربر به آن سرور به صورت رمزنشده از شبکه فیزیکی ارسال می گردد.

حتی در صورت استفاده از آی پی های ثابت، مهاجم می تواند پاسخ دی ان اس سایر وب سایت ها را به آی پی سرور متصل کند تا ترافیک آن ها نیز از بستر رمزنگاری خارج شود.

+-----------------------------------------------------------------------------+
|                      مقایسه ساختاری حملات LOCALNET و SERVERIP               |
+------------------------+----------------------------------------------------+
| نوع حمله               | شیوه سوءاستفاده اصلی                               |
+------------------------+----------------------------------------------------+
| LocalNet               | تخصیص ماسک های عمومی بزرگ از طریق DHCP             |
| (CVE-2023-36664)       | اولویت پیشوند طولانی بر مسیرهای /1 تونل            |
|                        | سوءاستفاده از دسترسی به تجهیزات شبکه محلی          |
+------------------------+----------------------------------------------------+
| ServerIP               | جعل پاسخ دی ان اس در مرحله شروع اتصال              |
| (CVE-2023-35838)       | ثبت مسیر میزبان /32 برای ارسال ترافیک به بیرون     |
|                        | سوءاستفاده از سازوکار جلوگیری از حلقه بسته ها      |
+------------------------+----------------------------------------------------+

تفاوت های ساختاری میان TunnelCrack و TunnelVision

تفکیک این آسیب پذیری از حمله TunnelVision (با شناسه CVE-2024-3661) ضرورت دارد. با اینکه هر دو از رفتارهای جدول مسیریابی بهره می برند، بنیان های متفاوتی دارند:

  • TunnelVision کاملا وابسته به آپشن 121 پروتکل DHCP (مسیرهای ایستای بدون کلاس RFC 3442) است. سیستم هایی که این گزینه را پردازش نمی کنند (همچون اندروید پیش فرض) در برابر آن ایمن هستند.
  • TunnelCrack نیازمند هیچ آپشن اختیاری نیست. شیوه LocalNet از فیلد ماسک زیرشبکه استفاده می کند که از سال 1997 در RFC 2132 تعریف شده است. از آنجا که تمام دستگاه ها ماسک شبکه را پردازش می کنند، این آسیب پذیری سیستم های iOS، macOS، ویندوز، لینوکس و اندروید را درگیر می کند.

مسیریاب های نرم افزاری هسته تنها بر مبنای طول پیشوند تصمیم می گیرند و متوجه نیت امنیتی کاربر نمی شوند. وجود یک مسیر خاص تر روی وای فای فیزیکی به معنای خروج اجباری ترافیک از کانال امن است.

سلسله مراتب اولویت مسیریابی در هسته سیستم عامل:
┌────────────────────────────────────────────────────────┐
│  مسیر میزبان (/32): نشانی مقصد هدف (ServerIP)          │  ◄── بالاترین اولویت
├────────────────────────────────────────────────────────┤
│  مسیر زیرشبکه محلی (/16, /24): شبکه محلی (LocalNet)    │  ◄── مقدم بر تونل
├────────────────────────────────────────────────────────┤
│  مسیر دوگانه تونل (/1): 0.0.0.0/1 و 128.0.0.0/1        │  ◄── تونل استاندارد
├────────────────────────────────────────────────────────┤
│  گیت وی پیش فرض (/0): 0.0.0.0/0                        │  ◄── پایین ترین اولویت
└────────────────────────────────────────────────────────┘

راهکارهای معماری: مهار قطعی نشت مسیریابی

برای برطرف کردن کامل مخاطرات TunnelCrack، اصلاح صرف جدول مسیریابی کافی نیست و باید از تدابیر چندلایه فایروال هسته، فضاهای نام شبکه و اتصال مستقیم سوکت استفاده کرد.

1. سوئیچ قطع خودکار (Kill Switch) در سطح فایروال هسته

یک قطع کننده خودکار کارآمد نباید به اولویت های مسیریابی تکیه کند، بلکه باید با وضع قوانین پالایش بسته ها در هسته، هرگونه بسته خروجی از کارت فیزیکی را که متعلق به سوکت رمزنگاری شده تونل نباشد فورا مسدود سازد.

در لینوکس با استفاده از nftables، ترافیک رابط فیزیکی به شدت محدود می شود:

# مسدودسازی خروج داده ها از کارت فیزیکی به جز بسته های معتبر تونل
table inet vpn_filter {
    chain output {
        type filter hook output priority 0; policy drop;

        # اجازه عبور برای رابط محلی لوپ بک و تونل
        oifname "lo" accept
        oifname "rice0" accept

        # تنها بسته های ارسالی به سرور مجاز روی کارت فیزیکی عبور می کنند
        oifname "wlan0" udp dport 51820 ip daddr 203.0.113.10 accept
    }
}

در ویندوز پلتفرم فیلترینگ WFP بسته های رمزنشده را قبل از رسیدن به کنترلر کارت شبکه متوقف می کند و در مک او اس قوانین فایروال pf مانع پردازش داده های غیرمجاز روی رابط های خارجی می شوند.

2. غیرفعال سازی دسترسی به شبکه محلی در وای فای عمومی

از آنجا که حمله LocalNet بر استثناهای شبکه داخلی استوار است، برنامه های استاندارد در شبکه های ناشناس اشتراک گذاری محلی را خاموش می کنند:

  • حذف کلیه مسیرهای مستقیم با دامنه پیوند.
  • هدایت تمامی ترافیک به سمت تونل ایمن.
  • حتی در صورت اعلام زیرشبکه بزرگ /8 توسط سرور متخاصم، دیواره آتش مانع انتقال مستقیم می شود.

3. فضاهای نام شبکه و قفل کردن سوکت با SO_BINDTODEVICE

در سیستم های لینوکس و اندروید، قابلیت Network Namespaces تفکیک کاملی فراهم می آورد. با انتقال کارت شبکه فیزیکی به یک فضای نام جداگانه و قرار دادن برنامه های کاربردی در فضای نام اصلی که فقط حاوی تونل مجازی است، برنامه ها دسترسی فیزیکی به مسیرهای وای فای نخواهند داشت.

علاوه بر این، پردازش ها می توانند سوکت های خود را مستقیما به رابط تونل مقید کنند:

// الصاق مستقیم سوکت برنامه به رابط تونل ایمن
setsockopt(sock_fd, SOL_SOCKET, SO_BINDTODEVICE, "rice0", strlen("rice0"));

این فرایند باعث می شود هسته بررسی جداول مسیریابی را نادیده گرفته و داده ها را مستقیما به کارت شبکه مجازی بفرستد.

آزمودن پایداری دستگاه در برابر دستکاری های شبکه

کاربران و متخصصان شبکه می توانند با ابزارهای متعارف پایداری تجهیزات خود را ارزیابی کنند:

  1. بررسی جدول مسیریابی زنده: پیش و پس از برقراری تونل، جدول سیستم را ارزیابی کنید تا مسیر ناخواسته یا مسیر میزبان مشکوکی مشاهده نشود:
    ip route show table all
    
  2. آزمون شبیه سازی زیرشبکه: روی یک مودم آزمایشگاهی، توزیع رنج آی پی عمومی (مانند 198.51.100.0/24) را از طریق DHCP فعال کنید و بسنجید که آیا ترافیک مقصد به درستی به داخل تونل رانده می شود یا فایروال آن را مسدود می سازد.
  3. اطمینان از خاموش بودن اشتراک محلی: در هنگام حضور در فرودگاه ها و کافه ها همواره قابلیت Local Network Sharing را در تنظیمات خاموش نگه دارید.

زیرساخت VPNRice با بهره گیری از پروتکل اختصاصی RiceGuard و پیاده سازی لایه سه ایزوله، از اتصال مستقیم رابط ها و فیلترینگ فعال هسته بهره می برد تا ارتباطات را در برابر نشت های مسیریابی محافظت نماید.

برای تجهیز رایانه ها و دستگاه های همراه خود به این لایه های ایمن، می توانید نسخه هماهنگ با سیستم عامل خود را از طریق دریافت VPNRice.