‫ شناسايي آسيب پذيري Poodle بر روي مرورگرها

مقدمه

آسيب‌پذيري Poodle در تاريخ 14 اكتبر ۲۰۱۴ توسط تيم امنيت اطلاعات شركت گوگل منتشر اعلان شده است.

اين آسيب‌پذيري ناشي از مشكل در پياده سازي پروتكل نيست بلكه از يك ضعف ذاتي در پروتكل SSLv3 سرچشمه مي‌گيرد.بنابراين تنها راه برطرف كردن اين آسيب‌پذيري، غير فعال كردن كامل اين پروتكل است. اين آسيب‌پذيري به مهاجم اين  امكان  را مي‌دهد كه از محتواي حساس كاربر در حين يك اتصال  sslرمزگشايي نمايد (به عنوان نمونه به اطلاعات هويتي در كوكي دسترسي پيدا كند). اين امر امكان سواستفاده ازحساب هاي بانكي و... را فراهم مي‌نمايد.

SSLV3 يك پروتكل براي رمزنگاري ارتباط بين كلاينت و سرور است تا محتواي رد و بدلي بين آنها قابل مشاهده توسط بقيه نباشد. اما اين پروتكل منسوخ و ناامن است (بيش از 18 سال از عمر اين پروتكل مي‌گذرد). جايگزين اين پروتكل TLS(Transport Layer Secure) مي‌باشد كه چنين ضعف ساختاري در برقراري ارتباط امن در آن وجود ندارد. اما در برقراري ارتباط امن بينclient  و Server و به منظور سازگاري با تمامي نسخه هاي مرورگرها، پروتكل هاي قديمي‌تر همچنان پشتيباني مي‌گردند. بنابراين وقتي يك تلاش براي اتصال امن TLSبين client و server با مشكل روبرو مي‌شود، سرور از پروتكل قديمي‌تر مانند sslv3 استفاده مي‌نمايد. شخص مهاجم از اين ويژگي استفاده كرده و در فرايند مذاكره بين client و server با شبيه سازيشرايطي كه نشانگر عدم برقراري ارتباط امن بين client  و  server است، سرور  را مجبور مي‌كند از پروتكل SSLv3 استفاده نمايد  و آنگاه از ضعف ساختاري پروتكل SSLV3 با استفاده از حمله مرد مياني سودجويي مي‌نمايد.

شرايط اجراي حمله

به منظور بهره برداري موفق، مهاجم بايستي بتواند كدهاي مخرب javascript  را در مرورگر قرباني تزريق نمايد. همچنين بايستي توانايي مشاهده و دستكاري ترافيك رمز شده را داشته باشد (در حقيقت بايستي شرايط حمله مرد مياني مهيا باشد).

 

ريشه‌يابي آسيب‌پذيري

بيشتر الگوريتم‌هاي رمز نگاري مورد استفاده در SSL روي block هاي ۸ يا ۱۶بايتي از داده كار مي‌كنند (در ادامه فرض مي‌شود كه از يك الگوريتم ۱۶ بايتي استفاده مي‌شود). بنابراين بايستي داده‌ها به تكه‌هاي ۱۶ بايتي تقسيم شده و عمليات رمزنگاري روي اين بسته‌هاي ۱۶ بايتي انجام شود.

چون ممكن است طول داده مضربي از ۱۶ نباشد، ابتدا بايد با اضافه كردن چند كاراكتر اضافي به انتهاي داده (كه به آنpaddingمي‌گويند)، طول آن را به مضربي از ۱۶ تغيير داد. روش مورد استفاده در SSLv3 اين طور است كه آخرين كاراكتر نشان مي‌دهد كه چند كاراكتر padding وجود دارد. براي مثال، در شكل زير هر خط ۱۶ كاراكتر و بنابراين يك بلوك است:

 

در مثال فوق، كاراكترهاي مشكي رنگ خود درخواست(plaintext)و كاراكترهاي سبز سبز رنگ، مقدار درهم آن است (كه براي ما مهم نيست). مقدار 123 كه با رنگ زرد مشخص شده، مقداري است كه حمله كننده آنرا نمي‌داند و مي‌خواهد آن را بيابد.

 

كاراكترهاي قرمز padding هستند و آخرين كاراكتر كه 03 است، نشان مي‌دهد كه ۳ كاراكتر قبل آن نيز جزو paddingاست. در SSLv3 مقدار ۳ كاراكتر قبلي اصلا مهم نيست (براي همين با XX نشان داده شده است) در صورتي‌كه در نسخه‌هاي بعد، اين كاراكترها بايد مساوي با همان كاراكتر آخر باشند. همين تفاوت است كه باعث آسيب‌پذير شدن SSLv3 شده است.دقت كنيد كه در SSLv3 كاراكترهاي padding در hash محاسبه نمي‌شوند و اين نكته هم يكي از مباني اين آسيب‌پذيري است.

 

نحوه سوءاستفاده از آسيب‌پذيري

ابتدا حمله كننده بايد طول درخواست را به گونه‌اي تغيير دهد كه يك كاراكتر (مثلا آخرين كاراكتر كوكي) در آخر يك بلوك قرار بگيرد (طبق فرض، طول و جاي كوكي مشخص است). ضمناً بايستي طول درخواست به‌گونه‌اي باشد كه يك بلوك كامل به padding اختصاص داده شود.

 

هر بلوك رمزنگاري نشده از P1 تا P5 نام گذاري شده است.دقت كنيد كه حمله كننده با استفاده از جاواسكريپت مي‌تواندurlو body درخواست را تغيير دهد اما دسترسي‌اي به محتواي كوكي ندارد.

 

متن بالا براي ارسال به سرور در سمت كاربر (كلاينت) رمز مي‌شود و محتواي رمز شده به سمت سرور ارسال مي‌شود. حمله كننده در بين راه محتواي رمز شده را چيزي مانند شكل زير مي‌بيند:

 

هر بلوك رمزنگاري شده از C1 تا C5 نام گذاري شده است.البته او مي‌داند كه بلوك آخر متناظر padding و بلوك C2 هم متناظر با P2 است.

 

به صورت پيش‌فرض SSL از روش CBC براي زنجيه‌سازي بلوك‌ها استفاده مي‌كند

.

بنابراين حمله كننده مي‌داند كه اين روابط صادق هستند:

Encrypt(C1   P2) = C2

Encrypt(C4   P5) = C5

P5[16] = 0x0F

 


نظرات

بدون نظر
شما برای نظر دادن باید وارد شوید

نوشته

 
تاریخ ایجاد: 7 دی 1393

دسته‌ها

امتیاز

امتیاز شما
تعداد امتیازها:0