راه‌کارهایی برای جلوگیری از سوء‌استفاده از آسیب‌پذیری پودل

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

آسیب‌پذیری Poodle در تاریخ 14 اکتبر 2014 توسط تیم امنیت اطلاعات شرکت گوگل منتشر اعلان شده است. به منظور برطرف سازی این آسیب‌پذیری، راه حل اساسی از کار انداختن پروتکل SSLV3 بر روی مرورگر و سرور است.

به گزارش پایگاه خبری بانکداری الکترونیک،به نقل از مرکز ماهر آسیب‌پذیری Poodle در تاریخ 14 اکتبر 2014 توسط تیم امنیت اطلاعات شرکت گوگل منتشر اعلان شده است.

height=1

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

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

height=274

 

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

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

 

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

بیشتر الگوریتم‌های رمز نگاری مورد استفاده در SSL روی block های 8 یا 16بایتی از داده کار می‌کنند (در ادامه فرض می‌شود که از یک الگوریتم 16 بایتی استفاده می‌شود). بنابراین بایستی داده‌ها به تکه‌های 16 بایتی تقسیم شده و عملیات رمزنگاری روی این بسته‌های 16 بایتی انجام شود.

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

 

 height=68

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

 

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

 

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

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

 

 data-src=http://www.certcc.ir/parameters/maher/modules/cdk/upload/content/news/Image/poodle4.png

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

 

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

 

 data-src=http://www.certcc.ir/parameters/maher/modules/cdk/upload/content/news/Image/poodle5.png

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

 

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

data-src=http://www.certcc.ir/parameters/maher/modules/cdk/upload/content/news/Image/poodle6.png.

 

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

Encrypt(C1 ⊕  P2) = C2

Encrypt(C4 ⊕  P5) = C5
 

P5[16] = 0x0F

 

در این حال حمله کننده (که بین کلاینت و سرور قرار گرفته است)، بلوک C5 را )که متناظر با padding است) دستکاری می‌کند و آنرا مساوی C2 قرار می‌دهد:

 

 data-src=http://www.certcc.ir/parameters/maher/modules/cdk/upload/content/news/Image/poodle7.png

در این صورت خواهیم داشت:

C5 = C2 ⇒   Encrypt(C1 ⊕  P2) = Encrypt(C4 ⊕  P5) ⇒   C1 ⊕  P2 = C4 ⊕  P5 ⇒   

P2 = C1 ⊕ C4 ⊕ P5
سپس حمله کننده رشته‌ی جدید را به سرور ارسال می‌کند.

حمله کننده مقدار C5 (که رمز شده‌ی padding بوده) را دستکاری کرده و بنابراین مقدار padding را به رشته نامعلومی تغییر داده است. اما می‌داند که سمت سرور،تنها آخرین کاراکتر padding مهم است. در بیشتر موارد مقدار کاراکتر آخر مخالف  x0F0 است و سرور تشخیص می‌دهد که پیام ارسال شده خراب شده و ارتباط را قطع می‌کند. اما از هر 256 مورد، یک مورد امکان دارد که کاراکتر آخر دقیقا برابر x0F0 باشد. در این صورت پیام، صحیح تلقی شده و پاسخ به کلاینت برگردانده می‌شود. حمله کننده به راحتی (مثلاً با بررسی اندازه پاسخ) می‌تواند تشخیص دهد که آیا این دستکاری، پیام را خراب کرده است یا خیر.

اگر پیام خراب نشده باشد، حمله کننده یک کاراکتر از کوکی را فهمیده است، چون می‌داند که:

P2[16] = C1[16] ⊕ C4[16] ⊕ P5[16]

و مقدار P5[16] = 0x07 بوده و مقدار C1 و C4 نیز جزء درخواست رمز شده است.

به این ترتیب حمله کننده حدوداً با 256 تلاش می‌تواند یک کاراکتر از کوکی کاربر را استخراج کند. حال کاربر با اضافه کردن یک کاراکتر بهurlو حذف یک کاراکتر از body می‌تواند مقدار کوکی را یک کاراکتر به جلو شیفت کند و با تکرار روند بالا (حدودا 256 درخواست)، کاراکترهای کوکی را یک به یک استخراج نماید.

 

 data-src=http://www.certcc.ir/parameters/maher/modules/cdk/upload/content/news/Image/poodle8.png

بنابراین حمله کننده برای یافتن یک کوکی به طول 40 کاراکتر، بایستی حدوداً 10،000 درخواست از سمت کاربر ارسال کند. این تعداد بسیار کم بوده و با سرعت 20 درخواست در ثانیه، در کمتر از 10 دقیقه قابل انجام می‌باشد.

شناسایی آسیب‌پذیری در مرورگر و سرور

  • افراد عادی برای تست آسیب‌پذیری مرورگر خود می‌توانند به وب سایت زیر مراجعه کنند:

https://www.poodletest.com

  • به منظور تست آسیب‌پذیری سرورها می‌توان به وب سایت زیر مراجعه نمود:

https://www.ssltest.com

راه‌کارهایی برای جلوگیری از سوء‌استفاده از آسیب‌پذیری پودل

به منظور برطرف سازی این آسیب‌پذیری، راه حل اساسی از کار انداختن پروتکل SSLV3  بر روی مرورگر و سرور است. در ادامه نحوه غیرفعال کردن SSLV3 بر روی سرورها و مرورگرهای مختلف نشان داده شده است.

 

مرورگر فایرفاکس

با وارد کردن about:config  در نوار آدرس، صفحه زیر مشاهده خواهد شد.

height=253

 

گزینه I’ll be careful, I Promise! را اتخاب نموده و سپس در نوار جستجو مقدار security.tls.version را وارد می‌نماییم. با انجام این کار، چهار مقدار نمایش داده خواهند شد (شکل زیر). حال کافی است که مقدار value را برای security.tls.version.min برابر با 1 قرار داد.

 

height=277 

مرورگر گوگل کروم

با راست کلیک بر روی آیکن مرورگر و ورود به بخش propertiesو سپس وارد نمودن دستور –ssl-version-min=tls1 در انتهای مسیر (قسمت مشخص شده در شکل)، می‌توان موجب غیرفعال سازی SSL  بر روی مرورگر شد.

data-src=http://www.certcc.ir/parameters/maher/modules/cdk/upload/content/news/Image/poodle11.png

 

مرورگر اینترنت اکسپلورر

در مسیر Tools/Internet Options/Advanced بایستی گزینه Use SSL 3.0 غیرفعال گردد:            

 

 data-src=http://www.certcc.ir/parameters/maher/modules/cdk/upload/content/news/Image/poodle12.png

همچنین در مقاله [1] به استفاده از شاخص TLS_FALLBACK_SCSVبرای جلوگیری از استفاده از پروتکل‌های قدیمی‌تر (مانند sslv3  )در زمان عدم برقراری ارتباط بین کلاینت و سرور اشاره شده است.

شرکت گوگل این ویژگی را در گوگل کروم و وب سایت خود از ماه  February امسال پیاده‌سازی کرده است. فایرفاکس نیز اعلام کرده این شاخص را در ابتدای سال 2015 پیاده سازی خواهد کرد.

 

غیرفعال سازی SSLV3 در سمت سرور

height=150

 

به منظور غیرفعال سازی sslv3  بر روی IISمی‌توانید به آدرس زیر مراجعه کنید:

https://www.digicert.com/ssl-support/iis-disabling-ssl-v3.htm

 

 

 

لینک کوتاهلینک کپی شد!
ممکن است شما دوست داشته باشید
ارسال یک پاسخ

91  −    =  90