در این بخش میخواهیم انواع روشهای امنیتی را در لایه دوم شبکه پیادهسازی کنیم که یکی از جاهایی است که مهاجمان بیشتر حمله را دارند و اگر به درستی از آن جلوگیری نکنید میتواند ضربه سنگینی به پیکرهی شبکه شما وارد کند.
در این بخش به موضوعات گوناگونی خواهیم پرداخت که لیست آن را در زیر مشاهده میکنید:
- بررسی حفاظت از پروتکل Spanning Tree Protocol
- بررسی تکنولوژی BPDU
- بررسی تکنولوژی Root Gurd
- تحلیل و بررسی سرویس Port Security
- ایجاد امنیت در سرویس DHCP
- تحلیل و بررسی Spoofing MAC Addresses
- تحلیل و بررسی DHCP Snooping
- تحلیل و بررسی IP source guard
- تحلیل و بررسی Dynamic Arp Inspection
- تحلیل و بررسی تکنولوژی تشخیص (IDS)
- تحلیل و بررسی Private VLAN
بررسی حفاظت از پروتکل Spanning Tree Protocol
در این بخش نگاهی به پروتکل STP میاندازیم و روشهای محافظت از این پروتکل حیاتی را با هم بررسی میکنیم.
STP (Spanning Tree Protocol)
پروتکل STP توسط سازمان IEEE با شمارهی ۸۰۲.۱D استاندارد شده است و شرکت سازندهی آن DCE است.
کار این پروتکل این است که وقتی شبکه در Loop قرار میگیرد، بعضی از interface های اضافه را ShutDown میکند و فقط به یک طرف اجازهی ارسال و دریافت اطلاعات میدهد.
این پروتکل از طریق الگوریتمی به نام STA (Spanning Tree Algorithm) برای این کار استفاده میکند که کار این الگوریتم به این صورت است که کل ساختار شبکه را به صورت یک درخت درآورده و جاهایی را که Loop در آن ایجاد شده، مهار میکند. در شکل زیر، ۲ سوئیچ با دو لینک به هم متصل شدهاند و پروتکل STP برای جلوگیری از Loop، یکی از لینکها را از رده خارج کرده است.
نحوهی کارکرد الگوریتم STA
قبل از این کار به چند موضوع میپردازیم:
Bridge ID:
شناسهای است برای تمایز دادن سوئیچها در پروتکل STP، پس میتوان گفت با کمک این شناسه، سوئیچها در یک شبکه قابل تشخیص هستند و اجزای تشکیلدهندهی Bridgr Id دو چیز است:
- Priority: عددی است روی سوئیچهای شرکت سیسکو که به صورت پیشفرض ۳۲۷۶۹ است.
- Mac Address: آدرس Mac پورت مورد نظر در سوئیچ.
پس Bridge ID، جمع این دو گزینه میشود. به شکل صفحهی قبل توجه کنید؛ در سوئیچی که پروتکل STP روی آن اجرا شده است (که با جهتنما آن را مشخص کردیم) در مد Privileged دستور زیر را وارد کنید:
Switch# show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority ۳۲۷۶۹
Address ۰۰۰۱.C9A6.90A3
Cost ۱۹
Port ۱(FastEthernet0/1)
Hello Time ۲ sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority ۳۲۷۶۹ (priority 32768 sys-id-ext 1)
Address ۰۰۹۰.0C6C.EE69
Hello Time ۲ sec Max Age 20 sec Forward Delay 15 sec
Aging Time ۲۰
Interface Role Sts Cost Prio.Nbr Type
—————- —- — ——— ——– ——————————–
Fa0/1 Root FWD 19 ۱۲۸.۱ P2p
Fa0/2 Altn BLK 19 ۱۲۸.۲ P2p
Fa0/3 Desg FWD 19 ۱۲۸.۳ P2p
این اعداد به رنگ قرمز در نتیجه مشخص شدهاند.
Root Bridge:
برای انتخاب یک سوئیچ به عنوان root Bridge تمام Bridge ID های مختلف سوئیچها باهم مقایسه میشوند و هرکدام که کوچکتر بود، همان سوئیچ به عنوان Root Bridge انتخاب میشود.
BPDU:
فریمی در سوئیچ است که برای انتقال اطلاعات بین سوئیچها کاربرد دارد و یکی دیگر از ویژگیهای آن این است که تغییر ساختار شبکه را خیلی سریع به دیگر سوئیچها در شبکه اطلاع میدهد.
Root Port:
پورتی است که ارتباط مستقیم با Root Bridge دارد و از طریق آن انتخاب میشود.
Designated port:
پورتی از سوئیچ است که به عنوان Forwarding انتخاب میشود و کار ارسال و دریافت اطلاعات را انجام میدهد.
NonDesignated port:
برای جلوگیری از loopاین پورت shutdown میشود.
پس در کل در الگوریتم STA هر سوئیچ Bridge ID خود را محاسبه میکند و بعد، از طریق BPDU آن را در شبکه تبلیغ میکند، بعد Bridge ID خود را با دیگر سوئیچها مقایسه میکند، اگر Bridge ID خودش کمتر از دیگران باشد، Bridge ID خود را در شبکه تبلیغ میکند، اما اگر یکی کمتر از خود را پیدا کند آن را در قالب فریم BPDU به دیگر سوئیچها اعلام میکند تا در آخر کار بعد از مقایسه، Bridge ID کمترینBridge ID به دست آید که آخرین سوئیچ با کمترین Bridge Id به عنوان Root Bridge انتخاب میشود. بعد از این کار، نوبت به انتخاب وضعیت پورتها است که چه پورتی در چه وضعیتی قرار دارد.
در شکل صفحهی بعد، تمام مراحل بالا وجود دارد. اگر به شکل توجه کنید، Switch A به علت کوچکتر بودنMac Address نسبت به بقیهی سوئیچها، به عنوان Root bridge انتخاب شده است و هر دو پورت آن به حالت Forwarding رفته است. پورتهای سوئیچهای B و C که به سوئیچ A متصل هستند به عنوان Root Port انتخاب شدهاند. پورت بعدی سوئیچهای B و C به عنوان پورت Forwarding انتخاب شدهاند و به همین ترتیب بقیهی پورتها انتخاب میشوند. برای جلوگیری از loop یکی از پورتهای سوئیچ E به حالت Nondesignated رفته وBlock شده است که البته این پورت به نسبت پورت دیگر دارای cost بیشتر و پهنای باند کمتری بوده است.
پس اگر مراحل کار الگوریتم STA را طبق مراحل زیر در نظر بگیریم، متوجهی کار این الگوریتم خواهیم شد.
- سوئیچها، Bridge ID خود را مشخص میکنند.
- در این مرحله، هر سوئیچ Bridge ID خود را تحت فریم BPDU به دیگر سوئیچها تبلیغ میکند تا پایینترین Bridgr ID مشخص شود و بعدازآن، Root Bridge مشخص میشود.
- باید Designated Port انتخاب شود که پورتهای متصل به سوئیچ Root Bridge به عنوانDesignated Port انتخاب میشوند و کار ارسال و دریافت اطلاعات را انجام میدهند. در بین دو سوئیچ هم پورتی که کمترین cost را داشته باشد، به عنوانDesignated Port انتخاب میشود.
- در این مرحله که مرحلهی مهمی است در آن قسمت که loop ایجاد میشود، یکی از پورتها که پهنای باند کمتر و Cost بیشتر داشته باشد، به عنوان پورت NonDesignated Port انتخاب و Block میشود. اگر چنانچه هر دو فاکتور پهنای باند و cost یکی باشد، معیار انتخاب Bridge ID بزرگتر است.
تا به اینجا سرویس STP را بررسی کردیم و روش کار آن را آموختید، در ادامه روشهای محافظتی برای خرابکاری در این سرویس را میآموزیم.
بررسی BPDU Guard
یک شبکه را در نظر بگیرید که دارای چند سوئیچ میباشد و چندین سیستم به هر یک از سوئیچها متصل شده است، به صورت پیشفرض پورتهایی که از یک سوئیچ به سوئیچ دیگر متصل شده باشد در حالت Trunk قرار دارد و دستگاههای دیگر مانند کلاینتها در حالت Access قرار میگیرند، در شکل زیر سه سوئیچ را مشاهده میکنید، سوئیچ SW1 که به عنوان سوئیچ Root مشخص شده است با سوئیچ SW2 ارتباط دارد و پورت آنها در حالت Trunk قرار گرفته است، ولی پورت دیگر سوئیچ SW2 در حالت Access قرار دارد و اصولاً باید کلاینتها، سرورها، چاپگرها و… به آن متصل شوند، ولی اگر یک مهاجم یک سوئیچ را به این پورت متصل کند میتواند در شبکه اختلال ایجاد کند.
برای جلوگیری از این کار باید دستور زیر را در پورت G1/0/1 سوئیچ SW2 وارد کنید:
Switch(config)#int G1/0/1
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 1
Switch(config-if)#spanning-tree portfast
Switch(config-if)#spanning-tree bpduguard enable
با اجرای این دستور در پورت مورد نظر اگر چنانچه سوئیچ به آن پورت متصل شود و بخواهد فریم BPDU ارسال کند، با فعال بود BPDU Guard، پورت مورد نظر خاموش خواهد شد.
برای اینکه این موضوع بهتر برای شما جا بیفتد به مثال بعدی در این مورد توجه کنید.
در شکل روبرو سه سوئیچ و دو PC را به نرمافزار PacketTracer اضافه کردیم، سوئیچ SW1 که در قسمت شمارهی یک مشخص شده است، به عنوان سوئیچ اصلی در نظر گرفته شده است، و سوئیچها به همراه کلاینتها بدون هیچ مشکلی به آن متصل شدهاند، ولی برای ایجاد امنیت میخواهیم BPDU Guard را روی پورت سوئیچ شمارهی یک اعمال کنیم، ولی قبل از آن به این نکته اشاره کنیم که بهتر است همه پورتهای سوئیچ را در حالت BPDU Guard قرار دهید و فقط بر روی پورتهایی که به سوئیچ اصلی متصل میشوند این گزینه را فعال نکنید.
Switch(config)#interface range fastEthernet 0/2-24
با دستور بالا وارد تمام پورتهای سوئیچ شمارهی یک میشویم به جزء پورت Fa0/1 که به سوئیچ شمارهی دو متصل است.
Switch(config-if-range)#switchport mode access
Switch(config-if-range)#switchport access vlan 1
با این دستور پورت های سوئیچ در حالت Access قرار میگیرند
Switch(config-if-range)#spanning-tree bpduguard enable
با اجرای دستور بالا ارتباط بین سوئیچ شماره یک با سه به علت فعال سازی BPDU Guard قطع خواهد شد و با پیغام زیر مواجه میشوید
Switch(config-if-range)#%SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port FastEthernet0/2 with BPDU Guard enabled. Disabling port.
%PM-4-ERR_DISABLE: bpduguard error detected on 0/2, putting 0/2 in err-disable state
%LINK-5-CHANGED: Interface FastEthernet0/2, changed state to administratively down
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/2, changed state to down
در پیغام بالا، به این موضوع اشاره شد که از پورت FastEthernet0/2 فریم BPDU دریافت شد که به خاطر فعال بودن سرویس BPDU Guard پورت مورد نظر خاموش شده است.
همانطور که در شکل روبرو مشاهده میکنید، پورت Fa0/2 در سوئیچ شمارهی یک خاموش شده است و ارتباط را قطع کرده است.
اگر چنانچه بعد از خاموش شدن پورت نیاز باشد که آن را روشن کنید، راحتترین راه انی است که وارد آن پورت شوید و از دستورات Shutdown و No Shutdown استفاده کنید که این کار یک روش معمول برای تمام مدیران شبکه است؛ حال اگر در محل مورد نظر قرار نداشته باشد آن وقت چه باید کرد؟
برای حل این مشکل باید از مد Recovery استفاده کنید، برای این کار از دستور زیر استفاده کنید:
Switch(config)#errdisable recovery cause bpduguard
با دستور بالا مد Recovery برای سرویس BPDU فعال میشود.
Switch(config)#errdisable recovery interval 180
در این دستور هم زمان روشن شدن پورت ۱۸۰ ثانیه در نظر گرفته شده است.
پس نتیجه این کار این شد که کسی بدون اجازه نمیتواند سوئیچ غیر مجاز به شبکه اضافه کند و پروتکل STP را دستکاری کند.
تحلیل و بررسی Root Guard
یکی از دیگر روشهای منحصر به فرد سیسکو برای محافظت از پروتکل STP استفاده از Root Guard است، این سرویس قابلیت اطمینان، کنترل و امنیت را در شبکه افزایش میدهد، در این سرویس با انتخاب یک سوئیچ به عنوان Root به بقیهی سوئیچها اجازه نمیدهد که به عنوان سوئیچ Root فعالیت کنند، در ادامه این موضوع را به طور کامل بررسی میکنیم.
در این شکل چندین سوئیچ در نرمافزار Packet Tracer اضافه شده است، با توجه به ساختار شبکه، سوئیچ شمارهی یک باید به عنوان Root Bridge انتخاب شود، و همانطور که در درس قبلی به آن اشاره کردیم سوئیچ Root Brige از طریق شمارهی Priority انتخاب میشود.
به مانند شکل، برای اینکه متوجه شویم که آیا سوئیچ شمارهی یک به عنوان Root انتخاب شده یا نه از دستور show spanning-tree استفاده میکنیم؛ در قسمت اول شمارهی Priority و آدرس MAC سوئیچ Root مشخص شده است و در قسمت شمارهی دو مشخصات همین سوئیچی که انتخاب کردیم مشخص شده است، اگر توجه کرده باشید همین سوئیچ شمارهی یک به عنوان Root انتخاب شده است.
اگر دستور show spanning-tree را در سوئیچ شمارهی دو وارد کنید، نتیجه به صورت شکل روبرو مشخص شده است، در قسمت اول سوئیچ Root با MAC آدرس ۰۰D0.BC5A.B425 مشخص شده است که این آدرس مربوط به سوئیچ شمارهی یک میباشد و در قسمت Port هم FastEthernet0/1 نوشته شده است که نشان میدهد اطلاعات را از این مسیر از سوئیچ Root دریافت میکند.
همانطور که مشاهده کردید سوئیچ شمارهی یک به عنوان Root در این ساختار انتخاب شده است، حال اگر یک مهاجم Priority خود را در سوئیچ تغییر دهد، همه سوئیچها این سوئیچ را به عنوان Root قبول خواهند کرد.
اگر به شکل زیر توجه کنید یک سوئیچ جدید به شبکه ما اضافه شده که همان سوئیچ مهاجم است، با اضافه شدن سوئیچ آدرس Root به سوئیچ جدید تغییر کرده است که این میتواند بسیار خطرناک باشد.
برای جلوگیری از این نوع حملات میتوانیم در پورتهایی که احتمال بیشتری دارد تا مهاجم از آن طریق به شبکه حمله کند، دستور زیر را وارد کنید:
spanning-tree guard root
توجه داشته باشید این دستور باید در داخل Port مورد نظر که به بیرون متصل است اجرا شود.
همانطور که مشاهده میکنید، دستور spanning-tree guard root در سه سوئیچ اجرا شد و نتیجه ان این شد که مهاجمی که با Piority کمتر در لاش بود که خود را به عنوان Root معرفی کند بلاک شد و دوباره سوئیچ Root همان سوئیچ شمارهی یک شد.
تفاوتهای بین دو سرویس Root Guard و BPDU Guard
سرویس BPDU و Root تفاوت خاصی با هم ندارند و هر دو برای یک هدف ایجاد شدهاند، ولی اگر دقیقتر به موضوع نگاه کنیم، سرویس BPDU زمانی فعال میشود که یک مهاجم بخواهد یک سوئیچ را به شبکه شما متصل کند، که بعد از این کار چون سوئیچها به همدیگر فریم BPDU ارسال میکنند آن پورت خاموش میشود و مدیر شبکه باید به صورت دستی آن پورت را روشن کند و یا اینکه سرویس errdisable را برای آن فعال کند تا بعد از مدت زمان مشخص آن پورت روشن شود.
اما سرویس Root Guard تا زمانی که مهاجم سعی در تغییر Priority نکند واکنشی از خود نشان نمیدهد، ولی اگر Priority تغییر کند و سوئیچ Root تغییر کند، آن پورت بلاک خواهد شد.
در کل استفاده برای امنیت بیشتر سوئیچها در شبکه از هر دو سرویس به طور همزمان استفاده کنید تا از خطرات آن جلوگیری کنید.