Geek

روز نوشت هایی در مورد امنیت

Geek

روز نوشت هایی در مورد امنیت

پیوندهای روزانه

تست فازینگ پروتکل های مسیریابی – قسمت اول

يكشنبه, ۱۵ تیر ۱۳۹۳، ۰۸:۲۱ ب.ظ
یکی از مباحثی که به نظرم جذاب می اومد، تست فازینگ پروتکل های مسیریابی بود به همین دلیل تصمیم گرفتم یک پست راجع بهش بنویسم. البته باز کردن این مبحث به صورت خیلی ریز واقعا زمان بر هست و من فقط تیتر مطالب وحداقل پیش نیازهای ممکن رو در این پست میگم تا در صورتی که به این مبحث علاقه مند هستید ادامه راه براتون آسون تر باشه .در کل پروسه فاز کردن پروتکل های شبکه تقریبا میتونه یک روال ثابت رو طی کنه . اینکه پکتی تولید و ارسال بشه که سرویس یا اپلیکیشنی که مسئول رسیدگی به پکت هست ، قادر به مدیریت درست پکت نباشه. اگر به آسیب پذیری هایی که برای محصولات سیسکو گزارش شده ، دقت کنید ، مشاهده میکنید که اغلب آسیب پذیری های امنیتی به همین صورت هستند. یعنی در گزارش آمده که یک سرویس روتر با دریافت یک پکت خاص ، کرش میکند و این کرش گاه حتی منجر به Reload شدن کل دستگاه میشه. به عنوان مثال اگر به CVE-2013-5475 دقت کنیم ، چنین چیزی را مشاهده خواهیم کرد. در این گزارش آمده است که DHCP با دریافت پکت خاص کرش میکند که این کرش بر روی کل دستگاه تاثیر گذار خواهد بود و حتی منجر به Reload شدن دستگاه خواهد شد که در نهایت حمله DoS اتفاق می افتد . در این پست میخواهیم بررسی کنیم که این آسیب پذیری ها چگونه کشف و اکسپلویت می شوند.

همان طور که در عنوان پست ذکر شده میخواهیم تست را بر روی پروتکل های مسیریابی انجام دهیم. پروتکلی که برای فازینگ انتخاب کردم ، پروتکل OSPF است. برای راحتی کار و شبیه سازی آسان تر ، من از روتر نرم افزاری که پروتکل های روتینگ را پیاده سازی کرده اند استفاده میکنم و قصد دارم آسیب پذیری را تریگر کنم که قبلا گزارش شده است. من از روتر Quagga ( نسخه قدیمی ) استفاده میکنم و قصد دارم تا آسیب پذیری گزارش شده را تریگر کنم و سپس اسکریپتی بنویسم تا آسیب پذیری مشابه را در پیاده سازی مختلف OSPF بر روی محصولات مختلف پیدا کنم .برای انجام تست های فازینگ پروتکل OSPF پیاده سازی در Quagga از آسیب پذیری CVE-2012-0250 الهام گرفته شده است. ابتدا به تشریح این آسیب پذیری و سپس تریگر کردن آن می پردازیم .
آسیب پذیری به این صورت اتفاق می افتد که درصورتی که یک پکت OSPF از نوع LS update و حاوی دو LSA از نوع LSA Router یا  LSA Netwrok به روتر برسد و سپس فیلد length موجود در این 2 ساختار برابر صفر باشد ، آنگاه منجر به کرش کردن دایمون ospfd خواهد شد . حال میخواهیم شرایطی را تست کنیم که فیلد های موجود در این بسته ها را آزمایش کنیم تا ببینیم تحت چه شرایطی دایمون کرش میکند. این مسئله از این لحاظ حائز اهمیت است که مهاجم میتواند تنها با ارسال یک پکت جعل شده و malformed ،  باعث کرش کردن دایمون شود و عملیات مسیریابی OSPF را مختل کند.

نکته : برای اینکه پکت های LS update توسط روتر مورد نظر پذیرفته شود باید قبلا OSPF بر روی آن کانفیگ شده باشد و حداقل با یک روتر دیگر رابطه همسایگی برقرار کرده باشد . سپس میتوانیم یک پکت جعل شده از طرف روتر همسایه ارسال کنیم تا  عکس العمل روتر مورد آزمایش را مشاهده کنیم. یعنی عملا اگر از Authentication استفاده کرده باشیم آنگاه تست قابل انجام نخواهد بود زیرا بسته توسط روتر مقصد پذیرفته نمی شود.


برای تولید پکت OSPF از ابزارهای مختلفی می توان استفاده کرد. اگر کاربر ویندوزی هستید یکی از کامل ترین ابزار های ویندوزی ، xcap است که از لینک زیر قابل دانلود است . اما این پکت فیلد length  بسته های LSA Router / LSA Network را نمیتواند تغییر دهد.

http://xcap.weebly.com/

ابزار دیگری که برای تست های استرس و تولید پکت استفاده می شود ، ابزار T50 است که قابلیت تولید پکت OSPF را داراست ولی این ابزار هم قادر به تولید بسته ای نیست که بتوان فیلد length بسته های ذکر شده را تغییر دهد. این ابزار به صورت پیش فرض در Backtrack و kali  نصب و پیکربندی شده است.
فریم ورکی به نام scapy موجود است که به تنهایی قادر به تولید پکت OSPF نیست اما با وجود یک پلاگین میتوان پکت OSPF و همچنین پکت LS Update و LAS Router ای با فیلد length دلخواه تولید کرد. این ابزار نیز در backtrack و kali نصب و پیکربندی شده است. پلاگین تولید پکت های OSPF از لینک زیر قابل دریافت است. توجه کنید که Scapy به حروف کوچک و بزرگ حساس است و دستورات در آن باید دقیقا به شکل ذکر شده در داکیومنت ها وارد شوند.

http://bb.secdev.org/scapy/wiki/contrib/code/OSPF

و طبق راهنمای موجود در لینک ذکر شده ، اسکریپت را اجرا کنید.

حالا بد نیست نگاهی به ساختار پکت OSPF v2 بندازیم . در شکل زیر ساختار را مشاهده میکنید. ما در این تست با فیلد type سروکار خواهیم داشت که در شکل با فلش قرمز مشخص شده است.


همان طور که  می دانیم در OSPF ، میتوانیم 5 نوع Type مختلف داشته باشیم که همانطور که پیش تر توضیح داده شد ، در اینجا قصد بررسی ساختار LS update را داریم .در شکل زیر انواع Type های مختلف OSPF را مشاهده می کنید.




خود LS update نیز شامل type های مختلفی می شود که در شکل زیر مشاهده میکنید. در این پست قصد بررسی type های Router و Network را داریم .




  بررسی جزیی تر فیلد های این LSA ها به خواننده محترم واگذار میشود . پس از بررسی فیلدها ، قصد تولید پکت OSPF ی را داریم که حاوی این LSA ها باشد.  که قصد داریم این کار را با Scapy و پلاگین معرفی شده انجام دهیم .پس از اجرای محیط Scapy ، دستور زیر را وارد کنید تا یک پکت OSPF با پارامترهای دلخواه ایجاد کنید.



دستورات اسکریپت را در زیر مشاهده میکنید.

p1 = Ether()/IP(src="192.168.0.107",dst="224.0.0.5",ttl=1)/OSPF_Hdr(src="0.0.0.0")/OSPF_LSUpd(lsacount=2)/OSPF_Router_LSA(age=100,linkcount=0,flags="7",seq=0x0,len=0)/OSPF_Network_LSA(age=0,seq=0x0,len=0,mask="0.0.0.0")

نکته : در ابتدای پست هم اشاره کردم که 2 روتر آزمایشی که در این پست به آنها پکت ارسال می شوند از قبل یک کانفیگ ساده OSPF بر روی آنها انجام شده است و رابطه همسایگی بین آنها برقرار است که در اینجا روتر 192.168.0.107 و 192.168.0.109 با یکدیگر رابطه همسایگی دارند. در نتیجه فرض شده است که تسلط کافی به عملکرد پروتکل OSPF دارید و از ذکر کانفیگ ها خودداری کرده ام.

با اجرای این دستور ، یک پکت OSPF تولید می شود که از نوع LS update است و حاوی دو LSA از نوع Router و Network است. به کادرهای قرمز عکس بالا توجه کنید که در آن یک پکت LS update با محتوای Router و طول برابر صفر را مشاهده میکنید. این بسته از طرف مبدا 192.168.0.107  به سمت شبکه broadcast می شود و روتر مقصد با آدرس 192.168.0.109 آن را دریافت میکند و چون 107 به عنوان روتر معتبر شناخته می شود بسته را دریافت میکند و به دلیل صفر بودن طول Router LSA در پردازش آن دچار مشکل می شود و دایمون ospfd کرش میکند. در تصویر یک نمونه را مشاهده می کنید که پس از رسیدن پکت تولید شده با دستور بالا به روتر مقصد ، دایمون کرش میکند و گزارشاتی مبنی بر کرش نیز تولید می شود . 



حال که دیدیم چه طور در پروتکل OSPF میتواند کرش رخ دهد ، میتوانیم با استفاده از Scapy پکت هایی با مقادیر تصادفی ایجاد و ارسال کنیم تا عملکرد دایمون OSPF را بسنجیم . این مجموع تست ها میتواند به دیگر پروتکل های مسیریابی مانند BGP و RIP نیز گسترش یابد اما انجام تست ها به این شکل نیازمند شناخت کافی از پروتکل و فیلدهای آن است.
در قسمت دوم به تولید پکت با مقادیر تصادفی در Scapy را بررسی می کنیم تا در نهایت ببینیم به چه صورت میتوان یک اسکریپت فازینگ برای OSPF نوشت

نظرات  (۳)

۱۵ تیر ۹۳ ، ۲۱:۳۲ مصطفی ستاری
ایول، چه کامل!
پاسخ:
مرسی .البته هنوز کار داره که انشالله تو پست دوم قضیه رو بیشتر باز میکنم .
۱۶ تیر ۹۳ ، ۱۸:۱۷ ho3ein , lajevardi
eyval
پاسخ:
;)
کاش جزئیات رو هم حذف نمی کردید من تازه کارم و خیلی گیج شدم با خوندنش.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی