
ابزار mitmproxy یک پروکسی تعاملی و قدرتمند برای تحلیل، دستکاری و بازپخش ترافیک HTTP و HTTPS است. برخلاف بسیاری از ابزارهای مشابه که صرفاً بر شنود ترافیک متمرکزند، mitmproxy به ما این امکان را میدهد که به صورت زنده و تعاملی، محتوای درخواستها و پاسخهای وب را مشاهده، متوقف، ویرایش، و دوباره ارسال کنیم. این قابلیت، آن را به یک ابزار استاندارد و ضروری در تست نفوذ برنامههای وب، دیباگ توسعه API و تحلیل بدافزارها تبدیل کرده است.
ابزار mitmproxy در ابتدا به عنوان یک پروژه شخصی توسط Aldo Cortesi ایجاد و در سال 2010 به صورت عمومی منتشر شد. از آن زمان، این پروژه مسیر توسعه بلند و پرباری را طی کرده است. یکی از نقاط عطف مهم آن، در نسخه 0.18 (حدود اکتبر 2016) با "بازنویسی بزرگ" (Refactor) معماری داخلی آن به سیستم ماژولار مبتنی بر Addon ها رخ داد که قابلیت توسعهپذیری آن را به شدت افزایش داد. نقطه عطف دیگر، در نسخه 7 (اواخر 2020) با پیادهسازی یک هسته پروکسی کاملاً جدید بر پایه الگوی "Sans I/O" (بدون ورودی/خروجی) بود که پایداری و قابلیت اطمینان آن را به سطح جدیدی ارتقا داد، مخصوصاً در پشتیبانی از HTTP/2 و WebSocket
آدرس مخزن گیتهاب mitmproxy:
آدرس مخزن گیتهاب Aldo Cortesi:
ویژگی های اصلی mitmproxy عبارتند از:
پروکسی HTTP/HTTPS با قابلیت رهگیری (Interception): برخلاف ابزارهایی که فقط ترافیک را نمایش میدهند، mitmproxy به ما این امکان را میدهد که یک درخواست یا پاسخ را پیش از رسیدن به مقصد، "متوقف" کرده، محتوای آن را تغییر داده و سپس "ادامه" دهیم.
فیلتر کردن هوشمند (Filtering): به کمک یک زبان فیلترینگ قدرتمند، میتوانیم فقط ترافیک مورد نظر خود را مشاهده و پردازش کنیم. مثلاً:
~d example.com فقط نمایش درخواست های example.com
پشتیبانی از پروتکلهای مدرن: از HTTP/1.1، HTTP/2 و WebSocket پشتیبانی کامل میکند و امکان تحلیل ترافیک بلادرنگ (Real-Time) برنامههای تحت وب مدرن را فراهم میسازد.
حالتهای Proxy متنوع: از حالتهای مختلفی برای مسیریابی ترافیک پشتیبانی میکند:
Regular Proxy: حالت استاندارد که در تنظیمات پروکسی مرورگر یا سیستم عامل تنظیم میشود.
Transparent Proxy: ترافیک شبکه در سطح بستهها به سمت پروکسی هدایت میشود، بدون آنکه کلاینت از وجود پروکسی مطلع باشد.
Reverse Proxy: ترافیک ورودی را به یک سرور پشتیبان مشخص هدایت میکند که برای تست سرورهای وب کاربرد دارد.
ساخت گواهی TLS/SSL درجا (On-the-fly Certificates): mitmproxy برای رهگیری ترافیک HTTPS، به صورت خودکار برای هر دامنه یک گواهی دیجیتال معتبر صادر میکند که توسط گواهی ریشه (CA) mitmproxy امضا شده است. با نصب این CA بر روی کلاینت، تمام ترافیک HTTPS رمزگشایی میشود.
اسکریپتنویسی قدرتمند با Python: این مهمترین ویژگی تمایز دهنده mitmproxy است. ما میتوانیم اسکریپتهای پایتون بنویسیم که با "قلابها" (Hooks) به رویدادهای مختلف پروکسی (مانند شروع یک درخواست یا دریافت پاسخ) متصل شده و ترافیک را به صورت برنامهنویسیشده تحلیل یا دستکاری کنند.
از mitmproxy در موارد زیادی استفاده میشود، مثلا
تحلیل و دیباگ API: مشاهده و تحلیل تمامی درخواستها و پاسخهای HTTP(S) رد و بدل شده بین برنامهها و سرورها.
توسعه و تست امنیت برنامههای وب: دستکاری هوشمندانه ترافیک برای تست آسیبپذیریهایی مانند XSS، SQLi، و دور زدن منطق سمت کلاینت.
مهندسی معکوس API های موبایل: شنود و تحلیل ترافیک اپلیکیشنهای موبایل با نصب گواهی CA ابزار بر روی دستگاه.
ایجاد ابزارهای سفارشی: استفاده از اسکریپتنویسی Python برای ایجاد پروکسیهای هوشمند با قابلیت تغییر خودکار دادهها.
هنگامیکه mitmproxy را نصب میکنیم سه نرم افزار mitmproxy, mitmweb, mitmdump بر روی ماشین مان نصب میشود. درواقع mitmproxy یک مجموعه نرمافزار و سیستم است که از سه زیر ابزار داخلی تشکیل شده که هر کدام ویژگی خود را دارند:
واسط کاربری اصلی mitmproxy:
یک واسط کاربری تعاملی مبتنی بر ترمینال (کنسول) که برای کار در محیطهای بدون گرافیک و سرورها ایدهآل است و کنترل کامل و سریعی را با صفحه کلید فراهم میکند.
واسط کاربری وب mitmweb:
یک واسط کاربری تحت وب که تمام قابلیتهای ابزار را از طریق مرورگر گرافیکی در دسترس قرار میدهد و برای مرور و تحلیل بصری ترافیک بسیار مناسب است.
ابزار mitmdump:
یک نسخه غیرتعاملی و خط فرمان که خروجی ترافیک را به صورت جریانی (Stream) چاپ میکند. این ابزار برای پردازش خودکار ترافیک با اسکریپتها و یا ذخیرهسازی آنها در فایل برای تحلیلهای بعدی استفاده میشود.
مجموعه ابزار mitmproxy از چندین بخش اصلی تشکیل شده است.هر یک از این بخش ها وظیفه خود را دارند و همگی درکنار هم سیستم mitmproxy را پیش میبرند:
سیستم Addonها (ماژولها و پلاگینها):
معماری mitmproxy از نسخه 0.18 به بعد، به طور کامل ماژولار است. تمام قابلیتهای اصلی پروکسی، خود به صورت Addon هایی پیادهسازی شدهاند که از یک API مشترک پیروی میکنند. این سیستم است که به ما اجازه میدهد تا "پلاگینها" یا "ماژولهای" سفارشی خود را بنویسیم و بدون دست زدن به کد اصلی برنامه، قابلیتهای جدیدی را به آن اضافه کنیم. اسکریپتهای پایتون نیز در واقع در همین چارچوب اجرا میشوند.
قلابها (Hooks) و API اسکریپتنویسی:
ابزار mitmproxy مجموعه وسیعی از "Hooks" ها را ارائه میدهد که نقاط ورود خاصی در چرخه عمر یک درخواست هستند. برای نمونه، قلاب request قبل از ارسال درخواست به سرور و قلاب response بعد از دریافت پاسخ از سرور فراخوانی میشود. با استفاده از API قدرتمند mitmproxy.flow در اسکریپتهای پایتون میتوانیم به این رویدادها متصل میشویم.
فایلهای Flow (ذخیره و بازپخش):
ابزار mitmproxy میتواند تمامی جریانهای ترافیکی (Flows) را به همراه تمام جزئیات درخواست و پاسخ در فایلهایی با فرمت مخصوص خود ذخیره کند. این فایلها را میتوان بعداً برای تحلیل آفلاین بارگذاری کرده یا حتی ترافیک ذخیرهشده را "بازپخش" (Replay) کرد.
موتور Options:
تمامی تنظیمات mitmproxy از طریق یک موتور قدرتمند و یکپارچه به نام Options مدیریت میشود. این سیستم به ما اجازه میدهد رفتار ابزار را از طریق فایل config.yaml، خط فرمان، یا به صورت تعاملی در حین اجرا (با کلید O در mitmproxy) تغییر دهیم. این خود یک قابلیت پیشرفته و قابل توسعه توسط Addonهای شخصی است.