سلام دوستان . در پست قصد داریم در مورد DHCP Attack صحبت کنیم اما نه صرفا دنبال کردن مراحل حمله ! بلکه قرار است درکی نسبی از تک تک مراحل و مکانیزم کاری و سرویس DHCP داشته باشیم و در نهایت روش حمله را هم با بررسی کنیم . قبلا پستی را با نام نصب و راه اندازی DHCP server بر روی دبیان منتشر کردیم پس سناریو را همان فرض می کنیم تا دوستانی که قصد پیاده سازی مراحل را دارند راحت تر باشند .
توپولوژی فرضی :
ابتدا اجازه بدید فرایندی که طی آن یک سیستم با استفاده از DHCP آی پی می گیرد را به زبادی ساده در این سناریو بررسی کنیم :
1. DHCP Discover : در این مرحله سیستم هنوز هیچ IP ای ندارد و درخواست های خود را مبنی بر دریافت IP به سمت DHCP سرور می فرستد اما از آن جایی که خود IP ای ندارد و آدرس DHCP server را هم نمی داند , این پکت ها و درخواست های خود را به شکل Broadcast در شبکه منتشر می کند . با توجه به تعریف Broadcast می توان نتیجه گرفت که پکت های خود را به آدرس آی پی 255.255.255.255 می فرستد و آی پی خود را هم 0.0.0.0 در نظر می گیرد .
2. DHCP Offer : در این مرحله DHCP سرور فعال ما این پکت های Broadcast را دریافت می کند و یک IP از رنجی که براتش تعریف شده را انتخاب و همراه با دیگر کانفیگ های لازم به سمت کلاینت می فرستد . لازم به ذکر است که در این مرحله کلاینت را از طریق آدرس فیزیکی می شناسد .
3. DHCP Request : بعد از این که DHCP Offer دست کلاینت رسید . پیغامی مبنی بر قبول کردن این IP و کانفیگ به سمت DHCP سرور Broadcast می کند .
4. DHCP ack or DHCP nack : وقتی که DHCP سرور DHCP Request کلاینت را دریافت کرد , در صورتی که مشکلی و یا … وجود نداشته باشد , سرور مهر تایید بر روی آن می زند و این تاییده را در فرم پکت DHCP ack به سمت کلاینت ارسال می کند . لازم به ذکر است که اگر مشکلی به وجود آید و این تاییده از سوی سرور صورت نگیرد , پیغامی با مضمون DHCP nack به سمت کلاینت ارسال می شود و طبیعتا IP در نظر گرفته شده به کلاینت اختصاص داده نمی شود .
تمام ! حالا اجازه بدید همین مراحل را در log های سرور بررسی کنیم و به صورت شهودی این روند رو درک کنیم :
یاد آوری : همان طور که در این پست گفته شد , برای مشاهده ی log ها می توان به شکل زیر عمل کرد :
root@OSLearn:~# cat /var/log/syslog | grep dhcpd
اما از این هم می توان zoom تر شد و تمامی پکت هایی که دریافت و ارسال می شود را هم بررسی کرد . برای این منظور روی اینترفیس DHCP سرور آمده و با استفاده از یک برنامه ی پکت کپچر پکت های مورد نیازمون رو کپچر می کنیم :
[email protected]:~# tcpdump -i eth0 -nn
برای راحتی کار دوستان من خروجی خودم رو برای دانلود قرار داده ام :
تا به این جا درک نسبی ای از روند آی پی دادن از سوی DHCP server بدست آوردیم که البته برای فهمیدن حملات لازم است . اما یکی از روش های حمله به این صورت است که مرحله ی اول پشت سر هم تکرار شود ! یعنی فقط با مک آدرس های مختلف DHCP Discover پکت های زیادی را در شبکه به صورت Broadcast منتشر کنیم . در این صورت سرور به تمامی این درخواست ها یک DHCP Offer ارسال می کند .
با توجه به تعریف DHCP Offer بعد از یک مدت IP های اختصاص داده شده در مرحله ی دوم تمام شده و چون مرحله ی اول یعنی DHCP Discover توسط مهاجم بار ها تکرار می شود , اصطلاحا DHCP server با denial of service یا همان DOS مواجه می شود و عملا سرور دیگر پاسخو به کلاینت ها نیست !
برای پیاده سازی روند حمله ی گفته شده از برنامه ی yersinia استفاده می کنیم که به صورت پیش فرض در Kali Linux نصب می باشد . برای اجرای این برنامه به صورت گرافیکی یک ترمینال باز کنید و به صورت زیر عمل کنید :
همان طور که مشاهده می کنید وارد Graphical mode برنامه شده ایم . برای پیاده سازی حمله کافیست از منوی Launch attack تب DHCP را انتخاب و گزینه ی sending DISCOVER packet را انتخاب کنید :
بعد از اجرای حمله , همان طور که قبلا هم گفته شد برنامه شروع به ارسال DHCP Discover های متعدد با آدرس های مک جعلی می کند و در نهایت سرویس دهی DHCP Server را با اخلال مواجه می سازد .
می توان پکت های broadcast ای که در سطح شبکه پخش شده است را مشاهده کرد . برای این منظور به شکل زیر عمل می کنیم :
[email protected]:~# tcpdump -i eth0 -nn broadcast
هم چنین خروجی حمله را می توان در log های dhcp server مشاهده کرد :
[email protected]:~# cat /var/log/syslog | grep DHCPDISCOVER | more
همان طور که مشاهده می کنید بعد از مدتی dhcp server دیگر قادر به سرویس دهی نیست و اروری مبنی بر no free leases صادر می کند . برای تایید صحت این حرف کافیست در یکی از کلاینت ها اقدام به دریافت آی پی از سوی DHCP Server کنید .
موفق و موید باشید .
منبع : او اس لرن دات آی آر | http://OSLearn.ir
نویسنده : E2MA3N