وایرگارد: تونل شبکه مبتنی بر کرنل نسل بعد

تونل امن شبکه نسل بعدی وایرگارد
تونل امن شبکه نسل بعدی وایرگارد


چکیده: وایرگارد یک تونل شبکه امن است، که در لایه ۳ عمل می‌کند، و به عنوان یک رابط شبکه مجازی هسته برای لینوکس اجرا می‌شود، که هدف آن جایگزینی هر دو نوع IPsec برای بیشتر موارد استفاده، و همچنین راه‌حل‌های محبوب مبتنی بر TLS و یا فضای کاربرمانند OpenVPN است، در حالی که امنیت بیشتر، کارایی بالاتر، و استفاده راحت‌تری را ارایه می‌کند. رابط تونل مجازی براساس یک اصل اساسی پیشنهادی برای تونل‌های امن است: یک ارتباط بین کلید عمومی مشابه و آدرس IP منبع تونل. این روش از یک تبادل کلید رفت و برگشت، براساس NoisIK، استفاده می‌کند، و تمام نیازمندی‌های ایجاد نشست (session) را با استفاده از یک مکانیزم ماشین حالت زمان‌دار جدید به طور شفاف برای کاربر کنترل می‌کند. کلیدهای ایستای از پیش تبادل‌شده کوتاه - Curve۲۵۵۱۹ - برای اعتبارسنجی متقابل به سبک OpenSSH استفاده می‌شوند. این پروتکل، علاوه بر نهان‌سازی بالا، پنهان‌کاری رو به جلو قوی و کاملی را فراهم می‌کند. سرعت انتقال با استفاده از رمزگذاری ChaCha20Poly1305 تایید شده برای انکپسولاسیون بسته‌ها در UDP انجام می‌شود. برای کاهش حملات انکار سرویس، کوکی‌های بهبودیافته مبتنی بر IP مورد استفاده قرار می‌گیرد که تا حد زیادی مکانیسم‌های کوکی IKEv۲ و DTLS را برای اضافه کردن رمزگذاری و تصدیق‌هویت بهبود می‌بخشند. طراحی کلی این امکان را فراهم می‌سازد که هیچ منبعی در پاسخ به بسته‌های دریافتی تخصیص داده نشود، و از دیدگاه سیستم‌ها، چندین تکنیک اجرای جالب لینوکس برای صف‌ها و موازی‌سازی‌ها وجود دارد. در نهایت، می‌توان وایریگارد را به سادگی در کم‌تر از ۴۰۰۰ خط کد برای لینوکس پیاده‌سازی کرد، در نتیجه می‌توان به سادگی آن را بررسی و تایید کرد. ​

مقدمه و انگیزه ​

در لینوکس، راه‌حل استاندارد برای تونل‌های رمزنگاری شده IPsec است، که از لایه تبدیل لینوکس (‏xfrm) ‏استفاده می‌کند. کاربران یک ساختار هسته را تنظیم می‌کنند که تعیین می‌کند کدام مجموعه رمز و کلید، یا دیگر تبدیل‌ها مانند فشرده‌سازی، برای استفاده برای کدام انتخابگر بسته‌ها در حال عبور از زیرسیستم مورد استفاده قرار گیرد. به طور کلی، یک دیمون در فضای کاربر مسوول به‌روزرسانی این ساختارهای داده براساس نتایج یک تبادل کلید است، که معمولا با IKEv۲ انجام می‌شود، که خود یک پروتکل پیچیده با انتخاب‌ها و انعطاف‌پذیری بالا است. پیچیدگی این راه‌حل، و همچنین مقدار محض کد آن، قابل‌توجه است. مدیران یک مجموعه کاملا جداگانه از تعاریف دیواره آتش و برچسب گذاری امن برای بسته‌های IPsec دارند. در حالی که جداسازی لایه تبادل کلید از لایه رمزنگاری انتقال - یا تبدیل - جدایی عاقلانه از یک دیدگاه معنایی است، و به طور مشابه در حالی که جداسازی لایه انتقال از لایه رابط از دیدگاه شبکه صحیح است، این رویکرد لایه گذاری کاملا صحیح، پیچیدگی را افزایش داده و پیاده‌سازی صحیح و گسترش را ناممکن می‌سازد. ​

وایرگارد این جداسازی لایه‌ای را کنار نهاده است. به جای پیچیدگی IPsec و لایه‌های xfrm، وایرگارد به سادگی یک رابط مجازی - برای مثال wg0 - ارایه می‌دهد که پس از آن می‌تواند با استفاده از برنامه‌های استاندارد نظیر ip ‏و ifconfig مدیریت شود. بعد از پیکربندی رابط با یک کلید خصوصی (‏و به طور اختیاری یک کلید متقارن از پیش به‌اشتراک‌گذاشته‌شده همانطور که در بخش V - B توضیح داده خواهد شد) ‏و کلیدهای عمومی مختلف مقاصدی که با آن‌ها به طور ایمن ارتباط برقرار خواهد کرد، تونل به سادگی کار می‌کند. تبادل کلید، برقراری اتصال، قطع اتصال، اتصالات مجدد، کشف و غیره در پشت صحنه به صورت شفاف و قابل‌اطمینان رخ می‌دهد و مدیر نیازی ندارد نگران این جزئیات باشد. به عبارت دیگر، از دیدگاه مدیریت، رابط وایرگارد بدون state به نظر می‌رسد. سپس قوانین دیواره آتش را می توان با استفاده از زیرساخت معمول برای پیکره‌بندی واسط‌های دیواره آتش تنظیم کرد، با این تضمین که بسته‌های رسیده از یک رابط وایرگارد تصدیق و رمزگذاری خواهند شد. ساده و مستقیم، وایرگارد نسبت به IPsec کم‌تر مستعد شکست فاجعه‌بار و بدپیکربندی است. با این حال مهم است که تاکید کنیم لایه‌بندی IPsec صحیح و سالم است. همه چیز با IPsec در جای درست و در حالت کمال علمی است. اما، همان طور که اغلب در مورد صحت انتزاع اتفاق می‌افتد، فقدان عمیق قابلیت استفاده وجود دارد و دستیابی به یک پیاده‌سازی ایمن و اثبات‌پذیر بسیار دشوار است. در مقابل، وایرگارد از پایه با نقض لایه‌بندی آغاز می‌شود و سپس تلاش می‌کند تا مسائل ناشی از این نقص را با استفاده از راه‌حل‌های عملی مهندسی و تکنیک‌های رمزنگاری که مشکلات دنیای واقعی را حل می‌کنند، اصلاح کند. اجرای OpenVPN در فضای کاربر درست است، زیرا ASN1 و پارسرهای x509 در هسته از نظر تاریخی بسیار مشکل‌ساز بوده‌اند (‏CVE - ۲۰۰۸ - ۱۶۷۳، CVE - ۲۰۱۶ - ۲۰۵۳)‏، و اضافه کردن یک پشته TLS تنها باعث بدتر شدن اوضاع خواهد شد. TLS همچنین یک ماشین حالت بزرگ و همچنین یک ارتباط کم‌تر واضح بین آدرس‌های IP منبع و کلیدهای عمومی باخود به همراه می‌آورد. ​

برای توزیع کلید، وایرگارد از OpenSSH الهام می‌گیرد، که برای کاربردهای معمول شامل یک رویکرد بسیار ساده نسبت به مدیریت کلید است. از طریق مجموعه متنوعی از مکانیزم‌های خارج از باند، دو هم‌کار معمولا کلیدهای عمومی ثابت خود را مبادله می‌کنند. گاهی اوقات این کار به سادگی ایمیل امضا شده با PGP، و گاهی اوقات یک مکانیزم توزیع کلید پیچیده با استفاده از LDAP و مقامات گواهی است. نکته مهم اینکه برای بیشتر بخش‌ها، توزیع کلید OpenSSH کاملا ندانم‌گرا است. وایرگارد نیز از این امر پیروی می‌کند. دو همتای وایرگارد کلیدهای عمومی خود را از طریق یک مکانیزم نامشخص مبادله می‌کنند، و پس از آن قادر به برقراری ارتباط هستند. به عبارت دیگر، دیدگاه وایرگارد نسبت به توزیع کلید این است که این یک لایه اشتباه برای رسیدگی به آن مشکل خاص است، و بنابراین رابط به اندازه کافی ساده است که هر راه‌حل توزیع کلید بتواند با آن استفاده شود. به عنوان یک مزیت دیگر، کلیدهای عمومی تنها ۳۲ بایت طول دارند و می‌توانند به راحتی در کدگذاری Base64 در ۴۴ کاراکتر نمایش داده شوند، که برای انتقال کلیدها از طریق انواع واسطه‌ها مفید است. وایرگارد از انواع نویز تروور پرن (Trevor Perin Noise) - که در طول توسعه خود مقدار زیادی اطلاعات از نویسندگان مقاله مربوطه برای اهداف استفاده در وایرگارد دریافت داشته - برای تبادل کلید ۱ - RTT، از Curve۲۵۵۱۹ برای ECDH، برای توسعه نتایج ECDH از HKDF، برای ساخت ChaCha20 از RFC 7539، برای رمزنگاری تایید شده از Poly1305، و از BLAKE2 برای درهم‌سازی استفاده می‌کند.​ ​

به همین ترتیب، ویرگارد هم فقط لایه ۳ است؛ همانطور که در بخش ۲ توضیح داده شد، این روش پاک‌ترین روش برای اطمینان از صحت و قابلیت انتساب بسته‌ها است. نویسندگان معتقدند که لایه ۳ راه درستی برای پل زدن به شبکه‌های IP چندگانه است، و اعمال این روش بر روی وایرگارد، ساده‌سازی بسیاری را ممکن می‌سازد، که منجر به یک پروتکل پاک‌تر و ساده‌تر می‌شود. لایه ۳ هم برای IPv۴ و هم برای IPv۶ پشتیبانی می‌کند و می‌تواند هر دو حالت نسخه ۴ در نسخه ۶ و نسخه ۶ در نسخه ۴ را کپسوله کند. ​

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

این متن ترجمه‌ای نیمه‌خودکار (همراه با پس‌ویرایش انسانی) از مقاله WireGuard: Next Generation Kernel Network Tunnel ارایه‌شده در NDSS Symposium 2017 می باشد.
برای مطالعه کامل این مقاله به همراه ترجمه‌ به این لینک مراجعه فرمایید.​