فیلترنت و ماجرای اختلال عمدی پروتکل‌های SSL/TLS

در چند روز گذشته باز شاهد داستان تکراری و ملال‌آور اختلال در فیلترنت هستیم و به دنبالش جنگ اعصاب و عذاب‌های همیشگی. به روال همیشه اول وجود اختلال انکار شد، بعد لطف کردند تقصیر را به گردن مدل گوشی‌ مردم و سایز بیشتر عکس‌ها و فیلم‌ها انداختند (اینجا!) و بعد که این بهانه‌تراشی‌ها جواب نداد مساله را به مقابله با فروش VPN غیرقانونی ربط دادند. زومیت در گزارشی تایید می‌کند که دولت به اسم مقابله با فروش VPNهای غیرقانونی، «در حال ایجاد اختلال عمدی روی برخی از پروتکل‌ها مخصوصاً پروتکل‌های رمزنگاری‌شده TLS است». اتفاقی که دارد می‌افتد و فراتر از وی‌پی‌ان روی تمام درگاه‌های اینترنتی و اپلیکیشن‌ها تاثیرش را گذاشته.

اما اختلال در TLSدقیقا یعنی چی؟

می‌دانیم که برای برقراری ارتباط امن بین کاربر (کلاینت) و سرور باید ترافیک رد و بدل‌شده بین این دو رمزنگاری بشود. برای این رمزنگاری پروتکل‌های مختلفی وجود دارد. از جمله SSL و بعدتر TLS که به فاصله چند سال جای آن را گرفت. مثلا همینکه آدرس یک وب‌سایت با https آغاز می‌شود، به این معنی است که دارد از گواهی SSL یا TLS استفاده می‌کند.

میان پرانتز جا دارد یادآوری کنیم که روزگاری نه چندان دور حتی استفاده از همین پروتکل SSL بیچاره هم در ایران «تخلف» بود و پیگرد قانونی داشت! بگذریم.

و اما این دو روش چه فرقی دارند؟ تفاوتشان به طور خلاصه مربوط به نوع الگوریتم‌هایی می‌شود که برای رمزنگاری ترافیک استفاده می‌کنند. برای انجام این عملیات رمزگذاری یک فرایند چندمرحله‌ای طی می‌شود که اصطلاحا به آن SSL/TLS Handshaking می‌گویند.

SSL/TLS Handshaking
SSL/TLS Handshaking

اگر این فرایند موفقیت‌آمیز طی بشود، داده به طور امن بین کاربر و سرور جابجا می‌شود و در غیر این صورت هم که قطع ارتباط یا timeout رخ می‌دهد.

در چند روز گذشته کم نبوده‌اند مواردی که اینستاگرام باز نمی‌شده، فیلترشکن‌های متکی بر پروتکل SSL/TLS از کار می‌افتاده‌اند، دانلود فایل‌ها با پروتکل https وسط کار متوقف می‌شده، موقع ریموت زدن به سیستم مشتری با نرم‌افزار Anydesk ارتباط مدام از دست می‌رفته یا هنگام اتصال به سرور با پروتکل SSH خطای TLS handshake failed نشان داده می‌شده و غیره.

وجه اشتراک همه این موارد این بوده که فرایند SSL/TLS Handshaking مختل می‌شده. اما چطور؟ به این صورت که یک شخص ثالث در ارتباطِ میان کاربر و سرور مداخله می‌کند و با ارسال کردن یک‌سری پکت‌های ساختگی داده به نوعی در کانکشن پارازیت می‌اندازد. به این ترتیب دسترسی به داده‌های رمزنگاری‌شده مسدود یا مختل می‌شود و سایت/اپلیکیشن بالا نمی‌آید. این همان روشی است که اصطلاحا Packet injection گفته می‌شود و سابقه‌دار است (مثلا نگاه کنید به این مطلب). با رصد کردن ترافیک با نرم‌افزارهایی مثل وایرشارک می‌شد دید که در این چند روزه پکت‌هایی غیرعادی از سمت زیرساخت (و نه سرورهای اصلی) برای کاربر ارسال می‌شده و به این اعتبار دستکاری در پروتکل‌های SSL/TLS کار خودِ سیستم فیلترینگ بوده است.

روش دیگری که در ترکیب با روش بالا می‌تواند برای ایجاد اختلال استفاده بشود، Null Route است؛ به این معنی که یک آی‌پی آدرس به هیچ مسیری منتهی نمی‌شود، انگار که در یک سیاهچاله گیر افتاده باشد.

بنابراین به طور خلاصه هدف این بوده که با این تکنیک VPNها مسدود شوند، اما به خاطر شباهت ترافیک https سایت‌ها و ترافیک فیلترشکن‌ها (یعنی همان فرایند TLS Handshaking)، با این تکنیک بسیاری از سایت‌های عادی و اپلیکیشن‌ها و سرویس‌ها هم دچار مشکل شده‌اند.

وندا نوژن