مبانی

بازرسی عمیق بسته‌ها (DPI) چیست؟

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

7 دقیقه مطالعهآخرین بازبینی

بازرسی سطحی در برابر بازرسی عمیق

هر بسته‌ای که از شبکه عبور می‌کند مجموعه‌ای از سرآیندهای تودرتو را با خود حمل می‌کند. بیرونی‌ترین آن‌ها پیوند را توصیف می‌کند، سپس سرآیند IP نشانی مبدأ و مقصد را می‌دهد، و بعد سرآیند TCP یا UDP شمارهٔ درگاه مبدأ و مقصد را. یک مسیریاب ساده فقط به همین‌ها نیاز دارد: مقصد را بخوان، جدول را ببین، بسته را بفرست. هرگز محتوا را باز نمی‌کند و نیازی هم به این کار ندارد.

بازرسی عمیق بسته‌ها یعنی خواندن فراتر از آن سرآیندها و رفتن به درون محتوا — همان بایت‌هایی که برنامه فرستاده است. یک موتور DPI به‌صورت درون‌خطی روی یک پیوند می‌نشیند، جریان بایت‌ها را از بسته‌های سازندهٔ آن بازسازی می‌کند، و سپس می‌کوشد تشخیص دهد چه پروتکلی در جریان است و تا جایی که بتواند، چه چیزی گفته می‌شود. به آن «عمیق» می‌گویند چون از آنچه مسیریابی لازم دارد، عمیق‌تر به بسته وارد می‌شود.

  • فیلترینگ سطحی بر اساس نشانی و درگاه مسدود می‌کند: «هر چه به مقصد 203.0.113.10 می‌رود را بینداز» یا «هر چه به درگاه ۱۱۹۴ می‌رود را بینداز». ارزان است، درشت‌دانه است، و با تغییر نشانی یا درگاه به‌سادگی دور زده می‌شود.
  • بازرسی عمیق بر اساس رفتار مسدود می‌کند: «هر چیزی که شبیه دست‌دادن OpenVPN است را بینداز، به هر مقصدی که می‌رود و روی هر درگاهی که هست». اجرایش بسیار پرهزینه‌تر است، و تغییر نشانی یا درگاه کمکی نمی‌کند.

یک موتور DPI واقعاً به چه چیزی نگاه می‌کند

یک موتور DPI به‌ندرت می‌کوشد پروتکلی را به‌طور کامل بفهمد. به‌دنبال ارزان‌ترین نشانه‌ای می‌گردد که به‌طور قابل‌اتکا یک پروتکل را از دیگری جدا کند، چون باید روی پیوندی که میلیون‌ها جریان را حمل می‌کند ظرف چند میلی‌ثانیه تصمیم بگیرد. در عمل از چهار خانوادهٔ نشانه بهره می‌گیرد.

الگوهای بایتی صریح
رشته‌ها یا ساختارهای ثابتی که در جایگاه‌های مشخصی ظاهر می‌شوند. نخستین بایت‌های یک رکورد TLS قابل‌تشخیص‌اند؛ همین‌طور بنر SSH، دست‌دادن BitTorrent یا چیدمان کدهای عملیاتی یک بستهٔ کنترلی OpenVPN. تطبیق یک الگو در جایگاهی مشخص تقریباً رایگان است.
فراداده‌های آشکار درون پروتکل‌های رمزگذاری‌شده
رمزگذاری همه‌چیز را پنهان نمی‌کند. یک دست‌دادن استاندارد TLS نام میزبان درخواستی را به‌صورت آشکار در میدان SNI می‌فرستد، و در نسخه‌های قدیمی‌تر TLS گواهی سرور هم قابل‌مشاهده است. این فراداده غنی‌ترین منبع اطلاعاتی است که یک فیلتر دربارهٔ اتصالی که در غیر این صورت مبهم است در اختیار دارد.
اثرانگشت دست‌دادن
حتی وقتی محتوا رمزگذاری شده، شکل مذاکره رمزگذاری نشده است. فهرست دقیق مجموعه‌رمزهایی که کلاینت پیشنهاد می‌دهد، ترتیب افزونه‌های TLS، اندازهٔ نخستین رکوردها — این‌ها میان یک مرورگر، یک برنامهٔ موبایل و یک کلاینت VPN تفاوت دارند و می‌توان آن‌ها را به یک اثرانگشت درهم‌سازی کرد.
رفتار آماری و زمان‌بندی
اندازهٔ بسته‌ها، نسبت بارگذاری به بارگیری، ریتم یک اتصال در طول زمان. یک تماس تصویری، یک بارگیری فایل و تونلی که همه‌چیز را یکجا حمل می‌کند هرکدام نمایهٔ قابل‌تمایزی دارند، و می‌توان یک دسته‌بند را بدون خواندن حتی یک بایت از محتوا روی آن آموزش داد.

دو مورد نخست در عمل بیش از همه اهمیت دارند. دقیق‌اند، ارزان‌اند و مثبت کاذب بسیار کمی تولید می‌کنند؛ به همین دلیل سامانه‌های فیلترینگ ابتدا سراغ آن‌ها می‌روند و طراحان پروتکل بیشترِ تلاششان را صرف حذف همین‌ها می‌کنند.

رمزگذاری چه چیزی را پنهان می‌کند و چه چیزی را نه

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

آنچه یک ناظر درون‌خطی از یک اتصال معمولی HTTPS می‌بیند
ویژگیقابل‌مشاهده؟توضیح
نشانی IP شمابلهدر سرآیند IP است؛ ناچار است باشد تا پاسخ به شما برسد.
نشانی IP مقصدبلهبه همان دلیل. جست‌وجوی معکوس DNS اغلب گردانندهٔ آن را آشکار می‌کند.
درگاه مقصدبلهسرویس را نشان می‌دهد: ۴۴۳ برای HTTPS، ۲۲ برای SSH و مانند آن.
نام میزبان درخواستیمعمولاًبه‌صورت آشکار در میدان SNI فرستاده می‌شود، مگر آنکه Encrypted Client Hello به کار رفته باشد که هنوز به‌هیچ‌وجه فراگیر نیست.
محتوای صفحهخیرپس از کامل‌شدن دست‌دادن، لایهٔ رکورد از آن محافظت می‌کند.
حجم و زمان‌بندی دادهبلههرگز با رمزگذاری پنهان نمی‌شود. لایه‌گذاری می‌تواند آن را مبهم کند؛ هیچ‌چیز آن را حذف نمی‌کند.
اثرانگشت نرم‌افزار کلاینتمعمولاًخودِ دست‌دادن پیش از توافق بر سر هر کلیدی فرستاده می‌شود.

نتیجهٔ عملی این است که یک فیلتر برای تصمیم به مسدودسازی نیازی به رمزگشایی ندارد. تنها باید از روی بخش‌هایی که هرگز رمزگذاری نشده‌اند تشخیص دهد آیا این اتصال به دسته‌ای تعلق دارد که به آن گفته‌اند بیندازد یا نه. این مسئلهٔ بسیار ساده‌تری است، و همان مسئله‌ای است که سامانه‌های سانسور امروزی برای حلش ساخته شده‌اند.

یک تصمیم چگونه اجرا می‌شود

پس از دسته‌بندی یک جریان، سامانه باید بر اساس آن عمل کند. روشی که انتخاب می‌شود چیزهای زیادی دربارهٔ آن استقرار می‌گوید، و معمولاً می‌توان از سمت کلاینت آن‌ها را از هم تشخیص داد.

  1. انداختن خاموش. بسته‌ها بدون هیچ پاسخی دور ریخته می‌شوند. اتصال معلق می‌ماند و سرانجام منقضی می‌شود. این رایج‌ترین رفتار فیلتری است که نمی‌خواهد خود را نشان دهد.
  2. بازنشانی جعلی. سامانه یک بستهٔ TCP RST تزریق می‌کند که جعل شده تا انگار از سوی طرف مقابل آمده است. اتصال ناگهان می‌میرد، اغلب پس از آنکه چند بسته پیشاپیش رد و بدل شده — و همین نشانهٔ پررنگی است، چون سروری که واقعاً در دسترس نیست هرگز از ابتدا پاسخ نمی‌دهد.
  3. دستکاری DNS. جست‌وجوی نام با نشانی نادرست پاسخ داده می‌شود، یا اصلاً بی‌پاسخ می‌ماند، پیش از آنکه هرگز اتصالی برقرار شود. ارزان است و با مقایسهٔ پاسخ‌های چند حل‌کنندهٔ متفاوت به‌سادگی دیده می‌شود.
  4. کاهش سرعت. جریان اجازهٔ عبور دارد اما تا حدی که بی‌فایده شود محدود می‌شود. انتساب آن دشوارتر است، چون بدون اندازه‌گیری دقیق از ازدحام عادی قابل‌تشخیص نیست.
  5. کاوش فعال. سامانه به‌جای مسدودسازی درجا، نقطهٔ پایانی را ثبت می‌کند و بعداً خودش به آن وصل می‌شود و ادای کلاینت درمی‌آورد تا ببیند آنجا چه در جریان است. اگر سرور به شیوه‌ای پاسخ دهد که فقط یک پروکسی پاسخ می‌دهد، آن نشانی به فهرست سیاه افزوده می‌شود.

چرا این موضوع طراحی پروتکل‌های تونل را شکل می‌دهد

اگر بپذیرید که یک فیلتر به‌جای محتوا، دست‌دادن‌ها و فراداده را می‌خواند، هدف طراحی یک تونل به‌کلی تغییر می‌کند. دیگر رمزگذاری‌شده‌بودن کافی نیست. اتصال باید از ارائهٔ هر نشانه‌ای که آن را از ترافیکی که فیلتر مجاز دانسته جدا کند بپرهیزد — و در اینترنت امروز، آن ترافیک یعنی TLS معمولی به یک وب‌سرور معمولی.

به همین دلیل است که پروتکل‌هایی که در جاهای دیگر این کتابخانه بررسی شده‌اند همگی به چند ایدهٔ یکسان می‌رسند: حذف الگوهای بایتی مخصوص پروتکل از روی سیم، هم‌شکل‌کردن اثرانگشت دست‌دادن TLS با یک مرورگر واقعی، پرهیز از فرستادن نام میزبانی که خودش یک نشانه است، و پاسخ‌دادن به یک کاوشگر بدون اعتبارنامه دقیقاً همان‌گونه که یک وب‌سرور عادی پاسخ می‌دهد. هرکدام از این‌ها برای حذف یکی از نشانه‌های بالا وجود دارد.

همچنین به همین دلیل است که هیچ توصیف صادقانه‌ای از یک پروتکل تونل وعدهٔ شکست‌دادن کامل DPI را نمی‌دهد. گردانندهٔ یک فیلتر همیشه می‌تواند سیاست را گسترده‌تر کند — مثلاً با مسدودکردن دسته‌های ترافیک به‌صورت پیش‌فرض به‌جای استثنا — و هیچ طراحی پروتکلی در برابر شبکه‌ای که هر چیزِ نشناخته را رد می‌کند دوام نمی‌آورد.

پرسش‌های پرتکرار

آیا بازرسی عمیق بسته‌ها می‌تواند ترافیک رمزگذاری‌شدهٔ من را بخواند؟

محتوا را نه، تا زمانی که رمزگذاری سالم باشد و شبکه گواهی خودش را ارائه نکرده باشد که دستگاه شما وادار به اعتماد به آن شده باشد. آنچه می‌تواند بخواند هر چیزی بیرون از محتوای رمزگذاری‌شده است: هر دو نشانی IP، درگاه، حجم و زمان‌بندی ترافیک، اثرانگشت دست‌دادن، و در بیشتر اتصال‌ها نام میزبانی که درخواست کرده‌اید.

آیا بازرسی عمیق بسته‌ها قانونی است؟

کاملاً به حوزهٔ قضایی و به اینکه چه کسی آن را انجام می‌دهد بستگی دارد. بازرسی ترافیک خودِ یک اپراتور شبکه برای مقاصد امنیتی یا ظرفیتی امری رایج و عموماً قانونی است؛ شنود از سوی دیگران معمولاً نیست. این پرسشی حقوقی است نه فنی، و بررسی قواعد حاکم بر محل خودتان ارزش دارد.

آیا VPN جلوی بازرسی عمیق بسته‌ها را می‌گیرد؟

یک VPN به‌جای جلوگیری از بازرسی، آنچه را که بازرسی می‌بیند تغییر می‌دهد. محتوای ترافیک شما برای شبکهٔ محلی مبهم می‌شود، اما خود اتصال به VPN همچنان قابل‌مشاهده است و می‌تواند دسته‌بندی شود. اینکه درست دسته‌بندی شود یا نه، به این بستگی دارد که تونل چقدر به ترافیک عادی شباهت داشته باشد.

چطور بفهمم آنچه مرا مسدود کرده DPI است؟

الگوی شکست، سرنخ است. اتصالی که برقرار می‌شود و بعد ناگهان می‌میرد به بازنشانی‌های تزریقی اشاره دارد؛ اتصالی که بدون هیچ پاسخی معلق می‌ماند به انداختن خاموش؛ و نامی که روی حل‌کننده‌های مختلف پاسخ متفاوت می‌گیرد به دستکاری DNS. پیمودن این موارد به‌ترتیب، در راهنمای عیب‌یابی شرح داده شده است.

HushTunnel این‌ها را چگونه به کار می‌گیرد

HushTunnel از VLESS به همراه REALITY و XTLS استفاده می‌کند — همان طراحی‌هایی که در این راهنماها شرح داده شده‌اند — و هیچ سابقه‌ای از سایت‌هایی که بازدید می‌کنید نگه نمی‌دارد.

همهٔ راهنماها