حملات در OSPF بطور معمول به حملاتی گفته میشود که بر روی آسیبپذیریهای الگوریتم Network LSA و پروتکل Hello صورت میگیرد. Network LSA ها توسط Designated Router (DR) ارسال میشود که این روتر در میان روترهای مجاور در شبکه توسط شاخصهایی که از پیش تعیین شده است (که گاها هم می توانند بصورت مقدار پیش فرض باشند)، اولویتبندی میشوند.
حملات OSPF بر روی DR
دو نوع کلی و اصلی از شبکه وجود دارد؛ Transit و Stub. شبکههای Transit اجازه میدهند تا پکتهای خارجی از طریق آنها به مکانهای دیگر انتقال یابد، در حالی که شبکههای Stub چنین امکانی ندارند.
وقتی که یک شبکه Transit از Network LSA های شبکه خود محروم شود، Stub محسوب خواهد شد. برای حملاتی که برروی DR انجام میشود، یکی از سناریوهای زیر ممکن است:
- خودمان بعنوان DR/BDR انتخاب شویم.
- انتخاب شدن یک روتر دیگر (که در شبکه موجود است) بعنوان DR/BDR با جعل پیامهای همان روتر.
- تغییر DR متغیر، به یک DR نامعتبر.
- ساخت یک روتر فانتوم به عنوان DR/BDR
در این یادداشت ۳ مورد اول از گزینههای بالا را به همراه ۳ نوع حمله مختلف بررسی میکنیم.
1. انتخاب شدن خودمان بعنوان DR
الگوریتم انتخاب DR/BDR با توجه به RFC2328 بخش ۹٫۳ میتواند توسط حالتهای یک اینترفیس انجام شود. با توجه به RFC ذکر شده، حالتهای یک اینترفیس توسط رویدادهایی تغییر کند که بدین صورت است:
- BackupSeen
- WaitTimer
- NeighboreChange
ما از حالت سوم استفاده خواهیم نمود، به نقل از RFC:
State(s): DR Other, Backup or DR
Event: NeighborChange
New state: Depends upon action routine.
Action: Recalculate the attached network’s Backup Designated
Router and Designated Router, as shown in Section
۹٫۴٫As a result of this calculation, the new state
of the interface will be either DR Other, Backup or DR.
نکته اصلی خطوط بالا این است که اگر همسایهای تغییر کند DR و BDR دوباره انتخاب خواهند شد.
این Election هنگامی اتفاق میافتد که یکی از همسایگان تغییر کند. برای انجام این کار میبایست خودمان را بعنوان DR به شبکه معرفی نماییم؛ بدین صورت که شناسه روتر را در فیلد Designated Router از Hello Packet قرار میدهیم و ارسال مینماییم (برای جزییات بیشتر میتوان به RFC2328 و بخش A.3.2 مراجعه نمود).
سپس تمامی روترها شروع به اجرای الگوریتم انتخاب DR/BDR خواهند نمود (RFC2328 بخش ۹٫۴). حال میبایستی روتر خودمان را با قرار دادن آخرین مقدار یعنی مقدار ۰xFF برای فیلد Router Priority در Hello Message کاندید کنیم. ممکن است یک روتر دیگر در شبکه همین مقدار را داشته باشد؛ به هرحال بالاترین مقدار ID بعنوان DR انتخاب خواهد شد. بعد از انتخاب شدن DR/BDR تمامی روترها با DR بایستی Convergence شوند. بعد از اینکه بعنوان DR انتخاب شدیم میتوانیم دو حمله را پیادهسازی نماییم.
- محرومیت از Network LSA : میتوانیم LSA ها را ارسال نکنیم و یا ارسال کنیم بدون اینکه روتری را در LSA هایمان ذکر نماییم. این مسئله در RFC بخش ۱۲٫۴٫۲ توضیح داده شده است که یک شبکه Transit بایستی دو یا چند روتر متصل داشته باشد. پس در غیر این صورت، بصورت Stub خواهد بود.
2. تکرار عملیات انتخاب: وقتی بعنوان DR انتخاب شویم، DR قبلی از دامنه Flush خواهد شد. اگر بعنوان DR انتخاب شویم ولی خودمان Hello Message را ارسال کنیم، بدین معنی است که نمیخواهیم DR شویم و باز دوباره عملیات انتخاب DR/BDR انجام خواهد شد. هنگامی که روتر DR انتخاب شود بایستی Adjacency جدیدی بین DR و دیگر روترها ایجاد شود که این کار با Sync نمودن LSDB صورت میگیرد و در این مدت شبکه قادر به انتقال ترافیک نیست.
2. انتخاب روتر مجاور بعنوان DR
این حمله شبیه به حمله قبلی است، اما دو مزیت دارد که باعث برتری خواهد شد:
- این حمله میتواند هر روتر مجاور را هدف قرار دهد.
- روتر نفوذگر در حمله مقصر شناخته نمیشود، چون پیامهای روتر دیگری را جعل میکند و به این ترتیب آن روتر مقصر شناخته خواهد شد.
اجرای این حمله بدین شرح است:
شبکه مورد حمله انتخاب شده است. روترمان (نفوذگر) بسته Hello معتبر ارسال میکند، همچنین یک پکت Malicious Hello برای تمامی روترهای Adjacent شده به جز روتری که میخواهیم مورد حمله قرار دهیم (روتر قربانی) میفرستد. Malicious Hello یک پیام Hello است که از سمت روتر قربانی جعل نمودهایم. در این پیام فیلد DR به ID روترهای قربانی تغییر پیدا میکند.
بنابراین روترهای Adjacent در شبکه دیتابیسهای خود را با DR به روز میکنند. پس روترهای متصل شده به شبکه بر این باورند که روتر حمله DR است. روتر قربانی نمیداند که نقش DR را در شبکه دارد، بنابراین Network LSA برروی شبکه ارسال نمیکند و اثر آن برروی شبکه مانند حمله شماره ۱ است.
3. تغییر DR معتبر به یک DR نامعتبر
این متد نفوذگر را قادر میسازد که یک روتر راه دور را مورد حمله قرار دهد که از طریق شبکههای مختلف به شبکه نفوذگرمان مرتبط است. با این حمله میتوانیم رفتارهای شبیه به حمله شماره دو داشته باشیم؛ یعنی به روتر با استفاده از پیام Hello اضافی حمله میکند که پیام ها را از سمت خودش برای روتر راه دور از طریق unicast ارسال می کند.
پیغام های Hello تغییر می کند : DR را ID خود روتر نفوذگر قرار میدهد و Priority را به صورت بالاترین مقدار ممکن تعیین میکند. محتوای پیام ها را طوری ایجاد می کند که بنظر برسد یکی از روترهای موجود در شبکه است.
این کار باعث می شود که روتری که می خواهیم مورد حمله قرار گیرد، فکر کند DR تغییر کرده است و روترمان DR است. تاثیر این حمله بدین صورت خواهد بود که شبکه فعالیت خود را از حالت Transit متوقف کرده و به حالت Stub عمل می کند. در این حمله ردیابی مهاجم راحتتر است، چرا که پیغام های Hello را به روتر مورد حمله می فرستد و با این پیغام ها راحت می توان ردیابی کرد و به منبع آن رسید.
تمامی حملات را میتوانید با یک روتر ایجاد شده و تحت کنترل در شبکه مثل Quagga و همچنین ایجاد پکت ها توسط Scapy انجام بدهید.