چگونه ترافیک TLS را با استفاده از Wireshark رمزگشایی کنیم؟

اگر در حال خرید کردن از طریق وب‌سایت‌ها هستید، رمزنگاری چیز خوبی است، اما وقتی می خواهید یک شبکه را اداره کنید، این یک مشکل واقعی است. در این مقاله به بررسی نحوه رمزگشایی ترافیک HTTPs با استفاده از ابزار Wireshark می‌پردازیم.اگر تا به حال از Wireshark برای نظارت بر ترافیک وب استفاده کرده اید، احتمالاً با مشکل انتقال داده به صورت رمزگذاری شده روبرو شده اید. در حقیقت، بیشتر سایت ها برای ایمن نگه داشتن کاربران خود از رمزگذاری SSL یا Transport Layer Security (TLS) استفاده می کنند.استفاده از کلید pre-master secret key برای رمزگشایی TLSیکی از راه‌های که برای رمزگشایی TLS پیشنهاد می‌شود استفاده از pre-master secret key می‌باشد.یک pre-master secret key توسط کلاینت ایجاد می‌گردد تا سرور از طریق آن master key را جهت رمزنگاری ترافیک نشست منتقل کند. این استاندارد فعلی در رمزنگاری است و معمولاً از طریق Diffie-Hellman اجرا می‌شود.مرورگر شما می توان pre-master secret key را که Wireshark برای رمزگشایی جلسات SSL و TLS از آن استفاده می کند ،در یک فایل ذخیره کند.در اینجا مراحل رمزگشایی SSL و TLS با یک pre-master secret key آورده شده است: تنظیم یک متغییر محیطی (environment variable)اجرای مرورگر و باز کردن یک سایت Https پیکربندی Wireshark ضبط (capture) و رمزگشایی کلیدهای نشست (session keys)پس از اتمام کار، شما قادر خواهید بود بدون اینکه نیاز به دسترسی به سرور هدف داشته باشید نشست‌ای SSL و TLS را در Wireshark رمزگشایی کنید.تنظیم یک متغییر محیطی در سیستم‌عامل ویندوزدر سیستم‌عامل‌های ویندوز ، شما باید با استفاده از ابزار تنظیمات سیستم پیشرفته(Advanced system settings)، یک متغیر محیط را تنظیم کنید. این متغیر ، به نام SSLKEYLOGFILE ، حاوی مسیری است که pre-master secret key ذخیره می شوند.روی My Computer راست کلیک کنید و گزینه Properties را از منو انتخاب کنید، با این کار پنجره System به نمایش در خواهد آمد.سپس، بر روی Advanced system settings در منوی سمت چپ پنجره کلیک کنید تا پنجره System Properties باز گردد.در زبانه Advanced بر روی دکمه Environment Variables کلیک کنید.بر روی دکمه New در User variables کلیک کنید. در صورتی که بخواهید لاگ کلید SSL برای همه کاربران نمایش داده شود، شما می‌توانید در System variables این متغییر را بسازید. البته توصیه نمی‌کنم.در زمینه Variable name نام زیر بنویسید:SSLKEYLOGFILEدر زمینه Variable value، مسیر ذخیره فایل لاگ را مشخص کنید. همچنین میتوانید با استفاده از دکمه Browse file... فایل مدنظر خود را انتخاب کنید.نکته : در صورتی که بخواهید این متغییر را بر روی کل سیستم تعریف کنید، شما نیاز دارید که مسیر ذخیره فایل را به صورت wildcard تعیین کنید و یا در مکانی ذخیره کنید که تمامی کاربران به آن دسترسی داشته باشند. برای نمونه %USERPROFILE%\App Data\ssl-keys.log یا C:\ssl-keys.log.پس از اتمام کار بر روی دکمه Ok کلیک کنید.اجرای مرورگر و بررسی فایل لاگ قبل از اجرای wireshark و انجام پیکربندی آن شما باید یکبار مرورگر را باز کنید. این نکته خیلی مهم است که به منظور جمع‌آوری لاگ حتما یک سایتی که SSL آن فعال است را از طریق مرورر باز کنید. من اینجا از وب سرور خودم برای این کار استفاده کرده‌ام ولی محدودیتی برای انتخاب سایت وجود ندارد و سایتی که میخواهید را می‌توانید باز کنید.یکی از بزرگترین مزایای استفاده از یک pre-master shared key این است که شما نیازی به دسترسی به سرور برای رمزگشایی SSL ندارید.پیکربندی wireshark برای رمزگشایی TLSدر صورتی که مرورگر به درستی در فایل ایجادی pre-master keys لاگ می‌کند، حال زمانی است که می‌توانید wireshark را برای رمزگشایی پیکربندی کنید.ابزار wireshark را باز کنید و از منو Edit، سپس Preferences را کلیک کنید. در پنجره Preferences در لیست سمت چپ، منوی Protocols را انتخاب کنید و به دنبال منوی TLS باشید(در نسخه‌های قدیمی‌تر SSL بوده است).در لیست گزینه‌های پروتکل TLS، مسیر فایل ایجاد شده را در بخش(Pre)-Master-Secret log filename وارد کنید. سپس بر روی دکمه Ok کلیک کنید.ضبط نشست و رمزگشایی TLSمرحله آخر ضبط یک نشست آزمایشی و اطمینان از رمزگشایی Wireshark TLS با موفقیت است.یک ضبط نشست بدون فیلتر را شروع کنید ، پنجره آن را به کوچک کنید و مرورگر خود را باز کنید.برای تولید داده به یک سایت امن مراجعه کنید و فیلتر را روی پروتکل tls تنظیم کنید.روی بسته‌ای که داده رمز شده دارد کلیک کنید.در این مرحله، هر ترافیکی رمز شده(encrypted transmissions) که از pre-master secret یا private key استفاده کرده باشد، با این روش تمام داده‌های perfect forward enctyption (PFE) که از طریق Diffie-Hellman و یا comparable key تبادل می‌شوند، رمزگشایی می‌شود. پس از انتخاب یک frame داده رمزگذاری شده ، به packet byte view و به طور خاص زبانه های زیر packet byte view نگاه کنید. شما باید بتوانید Decrypted SSL را مشاهده کنید.همانطور که متوجه شدید همچنان نشست قابل خواندن نیست و هیچ کد html وجود ندارد. دلیل این امر وجود فشرده سازی پیش فرض Gzip در وب سرور‌هایی مانند Apache Server استزمانی که شما بر روی زبانه Uncompressed entity body کلیک می‌کنید، شما می‌توانید سورس کد سایت را مشاهده کنید.