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

در پروتکل‌های سنتی مانند IPsec IKEv2 یا OpenVPN، دریافت یک بسته دست‌دهی سرور را وادار به تخصیص بافرهای حافظه، ارزیابی زنجیره گواهی‌های دیجیتال و انجام محاسبات سنگین ریاضی می‌نماید. هجوم بسته‌های تکراری (Replay Attack) منابع پردازنده و حافظه رم را به سرعت مصرف کرده و موجب بروز شرایط عدم پاسخگویی (DoS) برای کاربران عادی می‌شود.

پروتکل WireGuard این چالش را با تکیه بر معماری کارآمد خود برطرف ساخته است. در هر بسته آغاز دست‌دهی، یک برچسب زمانی یکنواخت ۱۲ بایتی طبق استاندارد TAI64N درون داده‌های رمزنگاری‌شده قرار می‌گیرد. سرور با ارزیابی این برچسب زمانی در زمان ثابت و پیش از ثبت وضعیت نشست، بسته‌های بازپخش‌شده را بدون اتلاف منابع پردازشی حذف می‌نماید.

مدل تهدید ناشی از بازپخش بسته‌های آغازین دست‌دهی

برای درک اهمیت برچسب‌های زمانی رمزنگاری‌شده، ساختار تبادل داده‌ها در الگوی Noise_IK را بررسی می‌کنیم:

تبادل پیام‌های دست‌دهی در پروتکل وایرگارد (Noise_IKpsk2):
کلاینت (آغازگر)                                        سرور (پاسخ‌دهنده)
  |                                                           |
  |--- پیام نوع ۱: آغاز دست‌دهی (Handshake Initiation) ------->|
  |    - کلید عمومی موقت به صورت سرراست (۳۲ بایت)            |
  |    - کلید عمومی ثابت رمزنگاری‌شده (۴۸ بایت AEAD)          |
  |    - برچسب زمانی TAI64N رمزنگاری‌شده (۲۸ بایت AEAD)       |
  |    - تگ‌های اعتبارسنجی mac1 (۱۶ بایت)، mac2 (۱۶ بایت)     |
  |                                                           |
  |<-- پیام نوع ۲: پاسخ دست‌دهی (Handshake Response) ---------|

در پیام نوع ۱، شناسه کلید ثابت کاربر و برچسب زمانی با الگوریتم ChaCha20-Poly1305 محافظت می‌شوند.

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

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

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

ساختار باینری برچسب زمانی TAI64N

وایرگارد به جای زمان مرسوم یونیکس از استاندارد TAI64N طراحی‌شده توسط دانیل برنشتاین استفاده می‌کند. زمان متداول یونیکس به دلیل درج ثانیه‌های کبیسه ممکن است دچار پرش به عقب شود که این مسئله پنجره‌های زمانی نامنظمی ایجاد می‌کند.

زمان اتمی بین‌المللی (TAI) مقیاسی پیوسته از ثانیه‌هاست که هیچ‌گاه به عقب بازنمی‌گردد. قالب TAI64N این زمان را با دقت نانوثانیه در ساختاری فشرده به اندازه ۱۲ بایت ذخیره می‌کند:

قالب دودویی TAI64N در وایرگارد (۱۲ بایت):
 ۰                   ۱                   ۲                   ۳
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      بخش ثانیه TAI64 (بخش بالا)               |
|                   (عدد صحیح ۶۴ بیتی Big-Endian)               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      بخش ثانیه TAI64 (بخش پایین)              |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     بخش کسر نانوثانیه (Nano)                  |
|                   (عدد صحیح ۳۲ بیتی Big-Endian)               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

۱. ثانیه‌های TAI64 (۸ بایت): شمارنده پیوسته ثانیه‌ها از مبدا تاریخ است که از خطای سرریز سال ۲۰۳۸ جلوگیری می‌کند. ۲. کسر نانوثانیه (۴ بایت): مقداری در بازه $0$ تا $999,999,999$ است. دقت در سطح نانوثانیه تضمین می‌کند اتصال‌های مجدد پی‌درپی همواره مقادیر اکیداً صعودی تولید کنند.

این ۱۲ بایت پس از رمزنگاری به یک قطعه ۲۸ بایتی تبدیل می‌شود. با توجه به محرمانه بودن برچسب زمانی، امکان تحلیل رفتار سخت‌افزاری کاربر از روی زمان در شبکه وجود ندارد.

اعتبارسنجی در هسته لینوکس و حذف در زمان ثابت

هنگامی که ماژول هسته وایرگارد بسته آغاز دست‌دهی را دریافت می‌کند، مراحل زیر را به ترتیب طی می‌نماید:

ورود بسته آغاز دست‌دهی (نوع ۱)
         |
         v
[بررسی MAC1: محاسبه هش SipHash بسته با کلید عمومی سرور]
         |
         +--> نامعتبر؟ حذف آنی بسته (بدون مصرف حافظه)
         v
[محاسبه کلید موقت DH]
         |
         v
[رمزگشایی کلید ثابت و برچسب زمانی TAI64N با مکانیزم AEAD]
         |
         +--> خطای تگ اعتبارسنجی؟ حذف آنی بسته
         v
[مقایسه زمان‌ثابت با مقدار last_sent_handshake ذخیره‌شده]
         |
         +--> زمان دریافتی <= last_sent_handshake؟
         |         |
         |         v
         |    حذف آنی (شناسایی بسته تکراری! عدم ثبت نشست)
         v
[بروزرسانی: last_sent_handshake = زمان دریافتی جدید]
         |
         v
[ادامه روند تولید پاسخ دست‌دهی نوع ۲]

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

این بررسی در زمان ثابت انجام می‌شود و مانع از شکل‌گیری حملات کانال جانبی می‌گردد.

معیار سنجش زمان سنتی یونیکس برچسب زمانی TAI64N وایرگارد چالش تصادفی (Nonce)
حجم اضافی در بسته ۴ تا ۸ بایت ۱۲ بایت ۱۶ تا ۳۲ بایت
تاخیر رفت‌وبرگشت (RTT) ۱ رفت‌وبرگشت صفر RTT (تایید در نخستین بسته) ۱ رفت‌وبرگشت کامل
تاب‌آوری در برابر ثانیه کبیسه آسیب‌پذیر به دلیل پرش ایمنی کامل (مقیاس پیوسته TAI) ایمن (مقدار تصادفی)
ردیابی ساعت دستگاه آشکار در هدر پیام پنهان در بسته رمزگذاری‌شده بدون افشای زمان
درگیری حافظه سرور بالا (ثبت مقادیر پیشین) صفر (تنها یک متغیر به ازای کلاینت) متوسط (حافظه موقت توکن)

بررسی سناریوهای کاربردی: اختلاف ساعت و حالت خواب دستگاه

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

اختلاف ساعت میان کاربر و سرور

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

خروج گوشی‌های هوشمند از حالت خواب

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

بازنشانی اتفاقی ساعت دستگاه

چنانچه باتری داخلی دستگاه تمام شود و ساعت به سال ۱۹۷۰ بازگردد، سرور بسته‌ها را به دلیل کوچکتر بودن زمان رد می‌کند تا زمانی که ساعت از طریق شبکه اصلاح شود.

راهکارهای مدیریت زمان در هسته ارتباطی RiceGuard

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

  • شمارنده یکنواخت در حافظه امن: در دستگاه‌های همراه، RiceGuard شمارنده‌ای مستقل را در بخش امن نگهداری می‌کند. در صورت بازگشت ساعت سیستم به عقب، سامانه با اعمال آفست جبرانی مانع از کاهش برچسب زمانی ارسالی می‌شود.
  • انتقال ایمن متغیرها در جابه‌جایی نودها: در زمان تعمیرات سرورها، مقادیر معتبر برچسب‌های زمانی میان خوشه‌ها جابه‌جا می‌شوند تا کاربران با خطای ناهماهنگی مواجه نشوند.
  • ترکیب با مکانیزم Cookie MAC2: در شرایط حملات توزیع‌شده سنگین، فیلتر زمانی TAI64N در هماهنگی با مکانیزم کوکی‌های بدون حالت، میلیون‌ها بسته جعلی را در سطح هسته و بدون درگیر کردن پردازنده فیلتر می‌کند.

با بهره‌گیری از ویژگی‌های استاندارد TAI64N، پروتکل وایرگارد و ساختار RiceGuard پیوندی ایمن و پایدار در برابر انواع نفوذهای مبتنی بر بازپخش پیام‌ها ارائه می‌دهند.

دریافت VPNRice.\n