حمله CAM table overflow در سوئیچهای سیسکو

معرفی CAM table و کاربرد آن

سوئیچهای سیسکو برای هدایت فریم‌های داده به پورت مورد نظر از جدولی به نام جدول 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 می‌کند اما هیچ گونه پیامی ارسال نمی‌کند.

انجام حمله CAM table overflow

برای انجام این حمله می‌توان از ابزار 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<link>
        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<host>
        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

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *