این اولین نوشته من در ویرگول هست. شدیداً پذیرای نظرات شما در قسمت کامنتها هستم :)
اگر حوصله خوندن ندارید، خلاصهای که در آخر اومده رو بخونید.
پروتکل DNS برخلاف بسیاری از پروتکل هایی که در دنیای وب کاربرد زیادی دارن، هنوز از رمزنگاری پشتیبانی نمیکنه. این یعنی کسی که به ترافیک اینترنت کاربری دسترسی داره، میتونه بدون زحمت خاصی ببینه که اون کاربر به چه سایتهایی میره؛ یا حتی بدتر از این، میتونه ترافیک مربوط به DNS Query هاش رو دستکاری کنه! (حمله DNS Hijacking)
در بعضی از کشور ها، ISP ها برای اهداف خاصی از این حمله ها روی کاربران خودشون انجام میدن! یکی از این اهداف، فیلترینگ هست. به این صورت که وقتی یه کاربری DNS Query مربوط به یه سایت غیرمجاز رو ارسال میکنه، سرور DNS اون ISP، که به طور پیشفرض روی کامپیوتر اون کاربر تنظیم شده، یه آیپی الکی به کاربر برمیگردونه که هیچ ربطی به سایت مورد نظرش نداره و اونو به یه سایت دیگه میبره! مثلا تو ایران، این آیپی الکی، مربوط به سایت پیوندها هست. :)
در بیشتر موارد، استفاده از سرور DNS ای غیر از سرور پیشفرض ISP مشکل رو حل میکنه. اما مثلا در ایران، حتی عوض کردن DNS هم مشکلی رو حل نمیکنه! چون همونطور که بالاتر گفتیم، DNS رمزنگاری نمیشه و توسط کسی که به ترافیک اینترنت شما دسترسی داره قابل دستکاری هست؛ مثل ISP شما! درواقع اگر شما از هر سرور DNS دیگهای هم استفاده کنید، باز ISP میتونه با دستکاری جواب Query ای که کامپیوتر شما فرستاده، شما رو باز به همون آیپی الکی برسونه.
تقریباً به تازگی، چیزی معرفی شده به نام DNS over HTTPS یا DoH؛ که کارش رمزنگاری کردن ترافیک DNS هست. نتیجش اینه که دیگه ترافیک DNS قابل دستکاری نخواهد بود! تو این نوشته میخوایم درباره این DoH بصورت مختصر آشنا بشیم.
اول از همه، میخوایم ببینیم کوئری های DNS چه شکلی ان. برای این کار، DNS سیستم رو تنظیم میکنیم روی مثلا 1.1.1.1: (میشه از DNS های دیگه هم استفاده کرد)
اینجا از Wireshark استفاده میکنم تا همه پکتهایی که بین کامپیوترم و اینترنت رد و بدل میشه (مثل پکت های مربوط به DNS Query ها) رو با جزئیات ببینم. حالا Wireshark رو باز میکنم و در مرورگر آدرس یه سایتی رو وارد میکنم؛ مثل virgool.io. وقتی به Wireshark برگردیم، پکت های مربوط به DNS Query ها رو میبینیم. یکی از اونها، DNS Query مربوط به سایت ویرگول هست:
اما اگر همین کار رو برای یه سایت فیلتر شده مثل Youtube.com انجام بدم، به جای آیپی واقعی یوتیوب، به آیپی پیوندها میرسیم:
همونطور که میبینید، کوئری توسط ISP محترم دستکاری شد!
پروتکل DoH، چیزی شبیه همون DNS خودمون هست؛ با این تفاوت که ترافیک شما و سرور در اون رمزنگاری میشه. در این حالت، فقط سرور DNS و کاربر میتونن محتویات Query ارسال شده رو ببینن. نه ISP، و نه هیچ کس دیگه ای که ترافیک شما رو در کنترلش داره، نمیتونه ترافیک DNS شما رو حتی ببینه! چه برسه به این که بخواد دستکاریش کنه...
در DoH از پروتکل HTTPS استفاده میشه. HTTPS پروتکل امنی هست و دادهها توش رمزنگاری میشن. درواقع انگار کامپیوتر شما بجای اینکه خالی خالی (یا تکنیکیتر بخوایم بگیم، بصورت Plain Text) کوئری ها رو ارسال کنه، اون ها رو در قالب درخواست های HTTPS میفرسته که رمز نگاری میشن. عین وقتی که از یک سایت HTTPS بازدید میکنید. برای همین موضوع هست که به این پروتکل میگن DNS over HTTPS.
الان که این متن رو مینویسم، متاسفانه DoH به طور پیشفرض در سیستم عامل های امروزی پشتیبانی نمیشه (البته گویا در Android Pie این قابلیت به طور پیشفرض وجود داره). اما راهکار هایی هست که DoH رو در کامپیوتر یا موبایلمون فعال کنیم:
پروتکل DNS یک پروتکل رمزنگاری نشده هست. به همین دلیل ترافیکش توسط ISP ها قابل دستکاری هست. در واقع ISP ها با دستکاری کوئری های DNS مربوط به سایت های غیر مجاز، شما رو به یه آیپی الکی میرسونن که مثلا میتونه مربوط به صفحه پیوندها باشه! حتی اگر از سرور DNS مربوط به ISP تون استفاده نکنید، باز هم ISP میتونه جواب کوئری هایی که از سرور میاد رو دستکاری کنه و شما رو به همون آیپی الکی ببره. DoH که مخفف DNS over HTTPS هست، با رمزنگاری ترافیک DNS تون، باعث میشه که دیگه نشه کوئری ها رو دستکاری کرد و فقط شما و سرور DNS از محتویات کوئری ها باخبر باشید. DoH از پروتکل HTTPS برای ارسال کوئری ها استفاده میکنه که این یعنی کوئری ها رمزنگاری میشن. استفاده از DoH روی اکثر سیستم عامل های امروزی به طور پیشفرض ممکن نیست. اما ابزار هایی برای سیستم عامل های کامپیوتر و موبایل وجود دارن که به شما امکان استفاده از DoH رو میدن؛ که در متن اونها رو معرفی کردیم.