اعلام شکسته شدن پروتکل MSCHAPv2 که یکی از پروتکل های قابل استفاده برای تصدیق اصالت در PPTP است، امسال در کنفرانس بیستم Defcon یکی از خبرهای بسیار مهم بود. نقاط ضعف نگارش قبلی این پروتکل توسط schneier سال ها قبل منتشر شده بود (1999) و البته مایکروسافت هم بعضی از آنها را پوشش داده بود. اما یکی از آسیب پذیری های باقی مانده که در انتهای این یادداشت هم اشاره شده، امکان شکستن پسورد به صورت آفلاین بود. در واقع امکان استفاده از نقطه ضعفی که سال ها قبل منتشر شده، الان با ابزاری که در Defcon 20 معرفی شد (ChapCrack) در دسترس عموم قرار گرفته است. البته خروجی این ابزار باید به سایت Cloudcracker ارسال شود و با حدود 17 دلار هزینه، در کمتر از 24 ساعت، کلید رمز به شما داده خواهد شد تا مجدداً با استفاده از ChapCrack ، ترافیک رمز شده را رمزگشایی کنید!

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

1- مسأله بنیادی مورد مطالعه برای شکسته شدن MSCHAPv2 ، در واقع شکستن بخش محاسبه ChallengeResponse بوده که در طرف کلاینت محاسبه می شود. بقیه پیام های پروتکل، یا متن واضح (Clear text) بوده و شنود آنها کافی است. 

 

 

2- نحوه محاسبه ChallengeResponse در طرف کلاینت آن است که ابتدا پسورد کلاینت (یعنی همان پسوردی که برای کانکشن PPTP وارد می کنیم) با الگوریتم درهم ساز MD4 درهم ساخته (Hash) می شود. حالا مسأله تبدیل می شود به یافتن مقدار این Hash. نکته حیاتی این است که در اینجا، مقدار Hash کار همان پسورد را انجام می دهد. قابل توجه بسیاری از تولید کنندگان نرم افزار که فکر می کنند اگر پسورد را در طرف کلاینت Hash کرده و آن را روی شبکه برای سرور بفرستند، امنیت دارند! وقتی Hash را شنود کنیم همان استفاده پسورد را می شود از آن کرد، که به آن Replay Attack گویند!

3- مقدار Hash سپس به سه تکه 7 بایتی تقسیم شده و هر قسمت مستقلاً به عنوان کلید الگوریتم DES برای رمز کردن ChallengeHash استفاده می شود. ChallengeHash که در طرف کلاینت محاسبه می شود، خروجی SHA1 مقادیر Challenge کلاینت و سرور به همراه  username کانکشن PPTP است. 

4- حالا به جای Brute Force کردن خروجی 128 بیتی MD4 که “2 به توان 128” پیچیدگی آن است، از روش کلاسیک تقسیم و غلبه (Divide and Conqure) استفاده می شود. یعنی مسأله به سه زیرمسأله هر کدام با سایز 7 بایت تقسیم و جداگانه حل می شود. تا اینجا پیچیدگی مسأله از 2 به توان 128 به حدود 2 به توان 57 کاهش می یابد.

5-  حالا مسأله یافتن سه قطعه 7 بایتی است که در واقع خروجی MD4 مقدار Password هستند. این خروجی در واقع 16 بایت است و مایکروسافت، 5 بایت آخر را صفر در نظر گرفته، در نتیجه کل 7 بایت آخر به راحتی ظرف چند ثانیه با Brute Force به دست می آید و می ماند دو کلید هفت بایتی! 

6- دوکلید 7 بایتی باقی مانده، هر دو کلید الگوریتم DES هستند، با یک متن ورودی ثابت، که به این حالت، حمله Known Plain Text گفته می شود! یعنی متن واضحی داریم و خروجی رمز شده آن با الگوریتم DES، با چند کلید متفاوت هم موجود است! در نتیجه پیچیدگی مسأله به 2 به توان 56 می رسد که قابل مقایسه با 2 به توان 128 نیست!

7- حالا با داشتن سخت افزارهای بسیار قدرتمند که در cloudcracker فراهم شده (بردهای FPGA) می توان زیر بیست و چهار ساعت، با میانگین 15 ساعت هر کلید DES را به دست آورد. 

نتیجه گیری:

الف: در اینجا با یک مسأله واقعی در دنیای امنیت مواجه هستیم. برای حل این مسأله، حتی برای درک کردن نحوه حل آن به ترکیبی از مهارت های زیر نیاز داریم:

– درک نیازمندی ها و قدرت تحلیل پروتکل های امنیتی

– مهارت در روش های ریاضی علم معماشناسی (Cryptology)

– تسلط بر روش های طراحی الگوریتم

– آشنایی با طراحی سخت افزارهای خاص منظوره (که البته این بخش را می توان به عنوان محصول آماده استفاده در نظر گرفت)

بنابراین، مسائل بنیادی تری از مهارت در نصب فایروال یا دیفیس کردن وب سایت ها هم وجود دارد. (در همین زمینه)

ب: استفاده از PPTP در کاربردهای حساس به هیچ وجه توصیه نمی شود و باید ترافیک PPTP مبتنی بر MSCHAP را کلاً Clear Text فرض کنید! مایکروسافت پیشنهاد داده که از پیکربندی PEAP که فقط در ویندوز ویستا و 7 وجود دارد در کنار PPTP استفاده شود (نوعی تونلینگ مبتنی بر TLS). اما بهترین کار، صرفنظر کردن از PPTP و استفاده از پروتکل دیگری برای VPN است. حتی IPSec over PPTP هم در حالت کلید مشترک (PSK) پیشنهاد نمی شود.