Москва
+7-929-527-81-33
Вологда
+7-921-234-45-78
Вопрос юристу онлайн Юридическая компания ЛЕГАС Вконтакте

Переполнение CAM-таблицы.

Обновлено 04.09.2025 07:21

Петухов Олег, юрист в области международного права и защиты персональных данных, специалист в области информационной безопасности, защиты информации и персональных данных.

Телеграм-канал: https://t.me/zashchitainformacii

Группа в Телеграм: https://t.me/zashchitainformacii1

Сайт: https://legascom.ru

Электронная почта: online@legascom.ru

 

#защитаинформации #информационнаябезопасность

Коммутатор имеет CAM-таблицу (Content Address Memory), где содержится привязка МАС-адресов к портам коммутатора. То есть в данной таблице указано, какие МАС-адреса на каком порту принимаются. САМ-таблица имеет ограниченный размер, например для коммутатора Cisco Catalyst 2960 таблица может хранить до 8192 МАС-адресов, а Catalyst 6000-й серии – до 128 000 МАС-адресов.

В случае если таблица будет полностью занята, новые записи не смогут добавляться, и весь трафик будет проходить на все порты. В таком случае коммутатор начнет работать как обычный концентратор, и весь трафик, проходящий через данный сегмент сети, можно будет прослушать тем же способом, который мы использовали в предыдущем разделе, с помощью утилиты Wireshark. Конечно, прослушать весь трафик в локальной сети злоумышленнику таким способом не удастся, но инсайдер, работающий в одном сегменте сети, к примеру с бухгалтерией, сможет перехватывать трафик и получать конфиденциальную информацию.

Реализовать данную атаку можно с помощью утилиты macchanger, которая позволяет менять МАС-адреса.

В качестве примера осуществим подмену MAC-адреса на машине, подключенной к коммутатору.

root@kali:~# ifup eth0

Internet Systems Consortium DHCP Client V3.1.1

Copyright 2004-2008 Internet Systems Consortium.

All rights reserved.

For info, please visit http://www.isc.org/sw/dhcp/

Listening on LPF/eth0/00:16:ec:f1:45:e8

Sending on LPF/eth0/00:16:ec:f1:45:e8

Sending on Socket/fallback

DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3

DHCPOFFER of 192.168.1.3 from 192.168.1.101

DHCPREQUEST of 192.168.1.3 on eth0 to 255.255.255.255 port 67

DHCPACK of 192.168.1.3 from 192.168.1.101

bound to 192.168.1.3 -- renewal in 42928 seconds.

if-up.d/mountnfs[eth0]: waiting for interface eth1 before doing NFS mounts

if-up.d/mountnfs[eth0]: waiting for interface eth2 before doing NFS mounts

if-up.d/mountnfs[eth0]: waiting for interface ath0 before doing NFS mounts

if-up.d/mountnfs[eth0]: waiting for interface wlan0 before doing NFS mounts

При включении был отправлен запрос на получение IP-адреса к серверу DHCP. Затем посмотрим текущее состояние сетевых интерфейсов.

root@kali:~# ifconfig -a

eth0 Link encap:Ethernet HWaddr 00:16:ec:f1:45:e8

inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: fe80::216:ecff:fef1:45e8/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:39 errors:0 dropped:0 overruns:0 frame:0

TX packets:16 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:3952 (3.9 KB) TX bytes:1780 (1.7 KB)

Interrupt:21 Base address:0xd800

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Настоящий МАС-адрес нашего сетевого интерфейса 00:16:ec:f1:45:e8. Сейчас именно этот адрес прописан в CAM-таблице коммутатора. Теперь изменим этот адрес.

root@kali:~# macchanger –r eth0

Current MAC: 00:16:ec:f1:45:e8 (unknown)

Faked MAC: 04:2f:11:65:fc:0a (unknown)

Перестартуем сетевой интерфейс:

root@kali:~# ifdown eth0

root@kali:~# ifup eth0

Internet Systems Consortium DHCP Client V3.1.1

Copyright 2004-2008 Internet Systems Consortium.

All rights reserved.

For info, please visit http://www.isc.org/sw/dhcp/

Listening on LPF/eth0/04:2f:11:65:fc:0a

Sending on LPF/eth0/04:2f:11:65:fc:0a

Sending on Socket/fallback

DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3

DHCPOFFER of 192.168.1.8 from 192.168.1.101

DHCPREQUEST of 192.168.1.8 on eth0 to 255.255.255.255 port 67

DHCPACK of 192.168.1.8 from 192.168.1.101

bound to 192.168.1.8 -- renewal in 42928 seconds.

if-up.d/mountnfs[eth0]: waiting for interface eth1 before doing NFS mounts

if-up.d/mountnfs[eth0]: waiting for interface eth2 before doing NFS mounts

if-up.d/mountnfs[eth0]: waiting for interface ath0 before doing NFS mounts

if-up.d/mountnfs[eth0]: waiting for interface wlan0 before doing NFS mounts

Снова посмотрим конфигурацию сетевых интерфейсов.

root@kali:~# ifconfig -a

eth0 Link encap:Ethernet HWaddr : 04:2f:11:65:fc:0a

inet addr:192.168.1.8 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: fe80::216:ecff:fef1:45e8/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:39 errors:0 dropped:0 overruns:0 frame:0

TX packets:16 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:5801 (5.9 KB) TX bytes:1100 (1.1 KB)

Interrupt:21 Base address:0xd800

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Как видно, МАС-адрес интерфейса eth0 изменился. При помощи несложного сценария можно заставить выполняться действия по смене МАС-адреса в цикле, который будет выполняться до переполнения САМ-таблицы. Написание такого сценария оставлю подписчикам канала в качестве домашнего задания. Я лишь замечу, что утилита macchanger нам еще неоднократно пригодится при реализации сетевых атак.

Обозначив угрозу, перейдем к способам защиты. Во многих руководствах по безопасности рекомендуется жестко привязать MAC-адрес рабочей станции к порту коммутатора или ограничить количество MAC-адресов, подключаемых к порту, одним адресом. Данные советы, конечно, правильны, но тут надо быть внимательным, так как очень часто один порт на коммутаторе может соответствовать нескольким MAC-адресам. Например, у коммутатора используются все порты, но вам необходимо подключить к нему еще несколько рабочих мест (в связи с расширением или, наоборот, сокращением). Наилучшим решением в такой ситуации было бы подключение еще одного коммутатора к данному и резервирование порта подключения нового коммутатора за соответствующим МАС-адресом. Однако в нынешних экономических условиях многие компании предпочитают сэкономить и используют для подключения те же концентраторы.

Также бывают случаи, когда к одному порту коммутатора могут подключаться поочередно несколько рабочих станций. Например, так часто делают в переговорных комнатах. Поэтому советую при настройке ограничений по подключениям по МАС-адресам не увлекаться чрезмерным «закручиванием гаек», чтобы избежать дополнительных трудностей в дальнейшем.

Теперь перейдем к практической части. В качестве примера рассмотрим настройку коммутатора Cisco Catalyst 2960 с операционной системой IOS. Данная модель имеет 24 порта, к которым и подключены пользователи. Необходимо сделать так, чтобы на каждом порту могло подключаться не более трех машин (другими словами, три МАС-адреса). Для этого необходимо подключиться к коммутатору удаленно или с помощью консоли и выполнить следующие команды:

Switch# conf t

Switch(config)# int range f0/1-24

Switch(config-if-range)# switchport mode access

Switch(config-if-range)# switchport port-security

Switch(config-if-range)# switchport port-security violation shutdown

Switch(config-if-range)# switchport port-security maximum 3

Switch(config-if-range)# switchport port-security mac-address sticky

Теперь вкратце о том, что делает каждая из команд. В первой строке мы переходим в режим глобального конфигурирования, во второй переходим в режим конфигурирования портов. В третьей мы явно указываем, что все

выбранные порты будут работать в режиме доступа. Далее включаем защиту порта port-security. В последующих трех строках мы указываем коммутатору, что делать в случае, когда к порту попытаются подключиться более трех рабочих станций. Сначала указываем, что необходимо отключить порт и послать соответствующее сообщение по snmp и syslog. К слову, данную опцию можно не включать принудительно, так как она действует по умолчанию. Кроме использованного нами режима shutdown, есть также protect и restrict. Смысл последних двух режимов заключается в том, что порт не будет выключаться (то есть переходить в состояние shutdown), а лишь будут блокироваться пакеты при обнаружении нарушения, связанного с МАС-адресами. Различие этих двух режимов - в том, что при возникновении внештатной ситуации restrict может послать snmp-trap и syslog сообщение о нарушении политики безопасности.

В следующей команде коммутатору мы указываем, сколько МАС-адресов готовы увидеть на этом порту. В нашем случае это три. И наконец, последняя команда переводит порт коммутатора в режим обучения, то есть первые три МАС-адреса, которые будут получены через этот порт, и будут автоматически сохранены в running-config.

Итак, подводя итог, скажу, что всех этих команд вполне достаточно для предотвращения атаки на переполнение CAM-таблицы.