Защищаем сеть L2 коммутаторами
Доброго времени суток. В данной статье рассказ пойдет о нескольких возможных атаках на сетевое оборудование, защититься от которых поможет правильная конфигурация коммутаторов.
Вся терминология и конфигурационные команды приведены в соответствии с документацией компании Cisco, как негласный отраслевой стандарт. В начале описания каждой атаки содержится краткий экскурс в механизм работы атакуемого протокола. Рассчитана статья скорее на новичков, чем на сетевиков-профессионалов.
• Rogue DHCP Server
• DHCP starvation
• CAM-table overflow
• VLAN hopping
• MAC-spoofing
За основу взят видеоурок CBT nuggets из цикла CCNA security.
Rogue DHCP Server
Описание
Приведем упрощенную схему работы протокола DHCP:
Discover: клиент, не имеющий IP-адреса, посылает широковещательный запрос на адрес 255.255.255.255, в котором просит откликнуться имеющиеся в сети DHCP-серверы.
Offer: DHCP-серверы присылают ответ, в котором предлагают параметры конфигурации (IP-адрес, DNS-серверы, default gateway). Ответ отсылается на MAC адрес клиента.
Request: Клиент выбирает, с каким сервером (при наличии нескольких) ему удобнее работать и отправляет запрос адреса. Данный запрос также отправляется широковещательно, но в качестве одной из опций уже указывается IP-адрес конкретного сервера.
Acknowledgment: На данном этапе запрос подтверждается сервером. После получения этого пакета клиент конфигурирует свои сетевые параметры и процесс получения адреса можно считать состоявшимся.
Цель данной атаки – подмена DHCP-сервера. При одновременном нахождении в сети двух DHCP-серверов, один из которых «вражеский», некоторая часть клиентов сконфигурирует у себя неправильные адреса и прочие сетевые реквизиты.
Вследствие подмены шлюза по умолчанию неавторизованный DHCP-сервер получит возможность прослушивать весь трафик клиентов, перенаправляя в дальнейшем пакеты по назначению. Таким образом мы имеем простейшую реализацию атаки типа MitM (Man in the Middle), которая может быть осуществлена в большинстве современных сетей.
Стоит отметить, что чаще всего атака с подменой DHCP-сервера не является атакой, как таковой. Распространены случаи, когда по незнанию в сеть подключается SOHO роутер с настроенным DHCP-сервером, причем подключается он LAN-портом. После этого у клиентов, успевших получить у него IP-адреса, наблюдаются как минимум существенные потери скорости, а чаще всего полная невозможность использования локальных и глобальных ресурсов.
Методы защиты
Простейший способ защиты от атак подобного рода – включение на всех коммутаторах функции DHCP snooping. Далее необходимо определить два типа портов:
• Доверенные – порты коммутатора, к которым подключается DHCP-сервер, либо другой коммутатор.
• Недоверенные – порты для клиентских подключений, за которыми DHCP-сервер находиться не может, зато вполне может находиться атакующее устройство.
В данном случае DHCP snooping необходим для того, чтобы указать коммутатору, что следует обращать внимание на пакеты DHCP offer и acknowledgment, проходящие сквозь него, и не допускать прохождения данных пакетов с недоверенных портов. Также широковещательные запросы от клиента (discover и request) теперь будут перенаправляться только на доверенные порты. Выглядеть топология должна примерно так:
Для конфигурирования функции DHCP snooping необходимо:
1) Включить ее на коммутаторе:
SW(config)#ip dhcp snooping
2) Указать для каких VLAN требуется отслеживать пакеты:
SW(config)#ip dhcp snooping vlan
3) Указать доверенные порты на коммутаторе (все остальные по умолчанию становятся недоверенными):
SW(config-if)#ip dhcp snooping trust
Спасти трафик от прослушки также может шифрование на стороне клиента, например туннелирование в транспортном режиме.
DHCP starvation
Описание
Еще одна атака, осуществляемая при помощи протокола DHCP. DHCP-пул, из которого клиенты получают IP-адреса, ограничен. Например, это может быть 253 адреса (при маске 255.255.255.0). Для нормальной работы сети этого должно хватить всем клиентам, но атака DHCP starvation стремится изменить данную ситуацию. Как происходит действие:
1) Атакующее устройство запрашивает себе IP-адрес у DHCP-сервера и получает его;
2) MAC-адрес атакующего устройства изменяется и оно запрашивает следующий, уже другой IP-адрес, маскируясь под нового клиента;
3) Такие действия повторяются до тех пор, пока весь пул IP-адресов на сервере не будет исчерпан.
Далее возможны два последствия, в зависимости от того, что является целью атаки:
• Отказ в обслуживании. IP-адреса исчерпаны, и новые хосты не могут получить их. Таким образом, их взаимодействие с сетью на этом закончится.
• Подмена DHCP-сервера. DHCP starvation отлично комбинируется с предыдущей атакой. Так как на основном DHCP-сервере свободных адресов не осталось, он выбывает из игры, и 100% клиентов достается вражескому атакующему DHCP-серверу.
Методы защиты
Самый простой способ защиты – ограничение числа MAC-адресов на порту коммутатора. Реализуется это с помощью функции port-security:
1) Переводим порт в access режим:
SW(config-if)#switchport mode access
2) Включаем port-security на интерфейсе:
SW(config-if)#switchport port-security
3) Ограничиваем число MAC-адресов на интерфейсе:
SW(config-if)switchport port-security maximum
4) Выбираем способ изучения MAC-адресов коммутатором (статический, sticky): Отличие статического адреса от sticky адреса состоит в том, что статические адреса необходимо прописывать руками, а sticky выучиваются автоматически и сохраняются в конфигурационный файл.
SW(config-if)#switchport port-security mac-address
5) Задаем тип реагирования на превышение числа разрешенных MAC-адресов:
protect – после переполнения все пакеты, отправленные с других MAC-адресов отбрасываются.
restrict – то же самое, но с уведомлением в syslog или по SNMP.
shutdown – порт выключается до автоматического или ручного его поднятия, также отправляются уведомления.
SW(config-if)#switchport port-security violation
Таким образом атакующее устройство просто не сможет исчерпать лимит IP-адресов DHCP-пула, так как коммутатор не позволит ему безнаказанно изменять свой MAC-адрес.
Также здесь может помочь все тот же DHCP snooping, а именно команда
SW(config-if)ip dhcp snooping limit rate
Данная команда ограничивает количество DHCP пакетов в секунду на порт (рекомендуется не более 100 pps), а при превышении данного ограничения переводит порт в состояние err-disable, то есть временно выключает его. Обычный клиент не превысит данный лимит, а вот атакующее устройство, генерирующее сотни MAC-адресов в секунду, будет обнаружено.
СAM-table overflow
Описание
Для того, чтобы понять, как работает данная атака, необходимо понимать принцип работы коммутатора.
Представим новый коммутатор SW, к которому подключены два хоста PC1 (MAC 0000.1111.1111) и PC2 (MAC 0000.2222.2222). На них уже настроены IP-адреса (10.0.0.1 и 10.0.0.2) и они хотят общаться друг с другом. Так как они располагаются в одной подсети, наличие маршрутизатора не требуется и весь обмен пакетами будет происходить с помощью коммутатора. Итак, какова последовательность установления их общения:
1) PC1 хочет обратиться к PC2 по IP-адресу. Тем не менее MAC-адрес PC2 ему неизвестен, поэтому PC1 использует протокол ARP. Отправляется широковещательный запрос: «Компьютер с IP-адресом 10.0.0.2, сообщите пожалуйста свой MAC-адрес компьютеру с адресом 10.0.0.1, чтобы я мог общаться с вами».
2) Коммутатор пересылает запрос на все свои порты, но записывает соответствие MAC-адреса отправителя (0000.1111.1111) и порта, теперь все кадры, адресованные данному получателю он будет пересылать непосредственно, а не наугад во все доступные интерфейсы.
3) PC2 получает адресованный ему пакет, понимает что должен ответить, и сообщает свой MAC-адрес PC1. Коммутатор при этом заносит в CAM-таблицу (таблицу MAC-адресов) запись вида: (интерфейс gig1/2 – MAC 0000.2222.2222). Теперь, когда компьютеры будут обмениваться информацией, задействоваться будут только два порта, за которыми они расположены. На другие информация пересылаться не будет.
Основной смысл в том, что если коммутатор видит адрес получателя в своей CAM-таблице, он пересылает кадр в конкретный порт. Если не видит – устраивает широковещательную рассылку, в надежде, что кадр все-таки найдет адресата.
На основании этого правила и работает рассматриваемая атака. Дело в том, что размер таблицы MAC-адресов у любого коммутатора ограничен. При переполнении новые адреса реальных клиентов уже не смогут пробиться в таблицу.
Таким образом необходимо всего лишь сгенерировать большое количество адресов и заставить коммутатор записать их в свою таблицу, чтобы реальные адреса реальных устройств постепенно вышли из нее. В таком случае коммутатор начнет, рассылать кадры, адресованные конкретному получателю на все порты, находящиеся в том же VLAN, следовательно у атакующего устройства появится возможность перехватить и прочитать их.
Следует заметить, что все коммутаторы, подключенные к атакованному также подхватят фальшивые MAC-адреса и начнут вести широковещательную рассылку всех кадров.
Методы защиты
1) Port-security на всех access-портах с лимитированием максимального количество MAC-адресов.
2) Шифрование трафика – в таком случае хоть все кадры и будут рассылаться широковещательно, а производительность сети сильно ухудшится, информация, попавшая в чужие руки, не будет прочитана.
VLAN hopping
Описание
Следующая атака базируется на возможности коммутаторов автоматически согласовывать тип своего порта — access или trunk.
Немного теории о том, чем access порт отличается от trunk порта:
Как известно, протокол 802.1Q повсеместно используется во всех современных сетях. Суть его состоит в том, что он слегка расширяет ethernet кадр, добавляя туда несколько полей (в частности поле VLAN Identifier, VID). На основании данного поля коммутатор способен определить, какой группе портов адресован тот или иной кадр.
Благодаря полю VID, к одному коммутатору можно подключить клиентов из нескольких разных подсетей, тем самым ограничив широковещательный домен. Также появляется возможность объединить клиентов, подключенных к разным коммутаторам в одну логическую сеть.
По сути 802.1Q — очень гибкий механизм для создания необходимой логической топологии поверх уже существующей физической.
Рассмотрим процесс передачи кадра в сети с протоколом 802.1Q.
1) PC1 подключен к access-порту fa2/1 коммутатора SW1 в 10 VLAN’е. Это означает, что при попадании кадра на порт коммутатора, в него будет добавлен 802.1Q header с информацией о принадлежности к VLAN10.
2) SW1 пересылает тегированный кадр на SW2 через trunk-порт.
3) SW2 получает кадр, смотрит в свою CAM-таблицу и отправляет кадр в соответствующий access-порт, заголовок 802.1Q снимается.
При этом можно выделить следующие особенности:
• Клиенты ничего не знают о своей принадлежности к определенному VLAN и работают с нетегированными кадрами, заголовок 802.1Q появляется только при прохождении кадра через access-порт;
• Порт может быть нетегирован (access) только в одном VLAN (верно для коммутаторов Cisco);
• Через тегированный (trunk) порт можно передавать кадры, принадлежащие к разным VLAN.
• Существует так называемый native VLAN – при попадании на trunk-порт кадра без тега, он автоматически будет причислен к native VLAN. Как правило native VLAN’ом по умолчанию считается VLAN1 (изменяемо).
При этом кадры, принадлежащие native VLAN и попавшие в access-порт, передаваться через trunk-порт будут без тега.
Перейдем к самой атаке:
Как уже было сказано, VLAN hopping основан на том, что коммутаторы имеют возможность автоматически согласовывать тип порта. Используется для этого проприетарный протокол компании Cisco DTP (Dynamic Trunking Protocol). При его использовании (а он включен по умолчанию) возможны следующие состояния порта: dynamic auto, dynamic desirable, static access, static trunk. Предоставим сводную таблицу, как согласуются состояния двух портов, подключенных друг к другу:
Как мы видим, при определенных условиях, а именно в режимах dynamic auto и dynamic desirable порт коммутатора может согласовать свою работу в режиме trunk. Это значит, что если атакующее устройство будет вести себя как порт в режиме desirable оно согласует на себя trunk-порт и получит доступ к трафику всех VLAN’ов, которыми оперирует коммутатор.
Основная проблема заключается в том, что на коммутаторах Cisco все порты по умолчанию находятся в режиме auto. Поэтому даже если порт настроен в режиме access/auto при получении запроса на согласование его состояние может измениться на trunk/auto.
Методы защиты
Решение данной проблемы очень простое, но многие при конфигурировании коммутаторов забывают его использовать. Командой
SW(config-if)#switchport nonegotiate
мы просто отключаем возможность автоматического согласования и делаем атаку нереализуемой.
Описание
Еще один возможный вектор атаки VLAN hopping – использование native VLAN и добавление второго тега. Работает он только в том случае, если атакующее устройство находится в том VLAN, который является native VLAN для trunk-порта.
Исходя из определения native VLAN, кадр, пришедший на порт fa2/1, находящийся в VLAN1, будет передаваться через trunk-порт нетегированным, но, так как злоумышленник PC1 присвоил ему два заголовка, на выходе он окажется с тегом VLAN2 и дойдет до атакуемого клиента, чего при нормальной ситуации быть не должно.
Следует заметить, что такая атака является однонаправленной, так как невозможно по такой же схеме передать кадр обратно.
Методы защиты
Защититься можно следующим образом:
Назначаем на всех trunk-портах неиспользуемый VLAN в качестве native.
SW(config-if)# switchport trunk native vlan 999
Теперь атака неосуществима, так как VLAN 999 не относится ни к одному из access-портов.
MAC-Spoofing
Описание
Суть данной атаки заключается в подмене MAC-адреса на сетевой карте компьютера, что позволяет ему перехватывать пакеты, адресованные другому устройству, находящемуся в том же широковещательном домене.
В таблице MAC-адресов коммутатора запись с атакованным MAC-адресом будет соотнесена с интерфейсом, на котором в последний раз был идентифицирован кадр с данным source MAC. Таким образом, до поступления кадра с атакуемого устройства, все данные коммутатор, на основании своей CAM-таблицы, будет пересылать на атакующий компьютер.
Посмотрим атаку на практике. Использовать будем следующую топологию:
Добиться воспроизведения не удалось, т.к. коммутатор при включении порта на PC2 сразу перебивал MAC на интерфейс Eth0/1, и даже при пинге с PC1 на R в дебаге на SW наблюдалась такая картина:
Практически сразу после того, как пакет с MAC-адресом приходил с интерфейса Eth0/0 коммутатор вновь привязывал данный MAC к интерфейсу Eth0/1. Объяснение этому можно найти здесь:
SW# debug ethernet interface
Связано это, как я понимаю, с реализацией эмулятора IOU и является своеобразным аналогом keepalive сообщений. Как видно, обмен пакетами с интерфейсом Eth0/1 происходит позже, чем с интерфейсом Eth0/0, соответственно, в CAM-таблицу всегда попадает Eth0/1.
На реальных коммутаторах возможности опробовать атаку не появилось, но по сообщениям из достоверных источников она работает.
Методы защиты
Официально рекомендуемый метод – включение port-security на интерфейсе коммутатора:
SW(config-if)#switchport mode access
SW(config-if)#switchport port-security
SW(config-if)#switchport port-security mac-address 0000.1111.1111
Смотрим на таблицу:
И видим, что теперь MAC-адрес статически закреплен за интерфейсом Eth0/0. Теперь PC2, находящийся за портом Eth0/1 недоступен, и атаку можно считать отбитой.
- атаки
- защита локальной сети
Атака MAC-переполнением 1 мин для чтения
Уровень канала данных действует как среда для связи между двумя напрямую подключенными хостами. На передающем фронте он бит за битом преобразует поток данных в сигналы и передает их на оборудование. Напротив, как приемник он принимает данные в форме электрических сигналов и преобразует их в идентифицируемый кадр.
MAC можно классифицировать как подуровень уровня канала передачи данных, который отвечает за физическую адресацию. MAC-адрес — это уникальный адрес сетевого адаптера, выделенный производителями для передачи данных на целевой хост. Если устройство имеет несколько сетевых адаптеров, например Ethernet, Wi-Fi, Bluetooth и т. д., Для каждого стандарта будут разные MAC-адреса.
В этой статье вы узнаете, как манипулируют этим подуровнем для выполнения атаки MAC-лавинной рассылки и как мы можем предотвратить эту атаку.
Вступление
MAC (Media Access Control) Flooding — это кибератака, при которой злоумышленник заполняет сетевые коммутаторы поддельными MAC-адресами, чтобы поставить под угрозу их безопасность. Коммутатор не передает сетевые пакеты по всей сети и поддерживает целостность сети, разделяя данные и используя VLAN (виртуальная локальная сеть) .
Мотив атаки MAC Flooding заключается в краже данных из системы жертвы, которые передаются в сеть. Это может быть достигнуто путем принудительного удаления правильного содержимого таблицы MAC-адресов коммутатора и одноадресного поведения коммутатора. Это приводит к передаче конфиденциальных данных в другие части сети и, в конечном итоге, к превращению коммутатора в концентратор и к тому, что значительное количество входящих кадров пересылается на все порты. Поэтому это также называется атакой переполнения таблицы MAC-адресов.
Злоумышленник также может использовать атаку с подменой ARP в качестве теневой атаки, чтобы позволить себе продолжать иметь доступ к личным данным после того, как сетевые коммутаторы извлекут себя из ранней атаки MAC-лавинной рассылки.
Читать Почему компании выбирают выделенные прокси вместо общих?
Атака
Чтобы быстро заполнить таблицу, злоумышленник заполняет коммутатор огромным количеством запросов, каждый из которых содержит поддельный MAC-адрес. Когда таблица MAC достигает выделенного лимита хранилища, она начинает удалять старые адреса новыми.
После удаления всех допустимых MAC-адресов коммутатор начинает широковещательную рассылку всех пакетов на каждый порт коммутатора и берет на себя роль сетевого концентратора. Теперь, когда два допустимых пользователя пытаются связаться, их данные перенаправляются на все доступные порты, что приводит к атаке лавинной рассылки MAC-таблиц.
Все законные пользователи теперь смогут делать запись, пока это не будет выполнено. В этих ситуациях злоумышленники делают их частью сети и отправляют вредоносные пакеты данных на компьютер пользователя.
В результате злоумышленник сможет перехватить весь входящий и исходящий трафик, проходящий через систему пользователя, и сможет прослушивать содержащиеся в нем конфиденциальные данные. На следующем снимке инструмента сниффинга Wireshark показано, как таблица MAC-адресов заполняется поддельными MAC-адресами.
Предотвращение атак
Мы всегда должны принимать меры предосторожности для защиты наших систем. К счастью, у нас есть инструменты и функции, чтобы остановить проникновение злоумышленников в систему и отреагировать на атаки, которые подвергают нашу систему риску. Остановить атаку MAC-лавинной атаки можно с помощью защиты порта.
Мы можем добиться этого, включив эту функцию в безопасности порта с помощью команды switchport port-security.
Укажите максимальное количество адресов, разрешенных на интерфейсе, с помощью команды значения «switchport port-security maximum», как показано ниже:
switch port-security maximum 5
Определив MAC-адреса всех известных устройств:
switch port-security maximum 2
Указывая, что следует делать в случае нарушения любого из вышеуказанных условий. Когда происходит нарушение безопасности порта коммутатора, коммутаторы Cisco могут быть настроены на реагирование одним из трех способов; Защитить, ограничить, выключить.
Режим защиты — это режим нарушения безопасности с наименьшей степенью защиты. Пакеты с неопознанными исходными адресами отбрасываются, если количество защищенных MAC-адресов превышает лимит порта. Этого можно избежать, если увеличить количество указанных максимальных адресов, которые могут быть сохранены в порту, или уменьшить количество защищенных MAC-адресов. В этом случае не может быть обнаружено никаких доказательств утечки данных.
Читать Способы включения защитника на Win10
Но в ограниченном режиме сообщается об утечке данных, когда нарушение безопасности порта происходит в режиме нарушения безопасности по умолчанию, интерфейс отключается из-за ошибки и гаснет светодиод порта. Счетчик нарушений увеличивается.
Команду режима выключения можно использовать для вывода защищенного порта из состояния отключения из-за ошибки. Его можно включить с помощью команды, указанной ниже:
switch port-security violation shutdown
Для той же цели могут использоваться команды режима настройки интерфейса выключения, а также отключение. Эти режимы можно включить с помощью команд, приведенных ниже:
switch port-security violation protect switch port-security violation restrict
Эти атаки также можно предотвратить путем аутентификации MAC-адресов на сервере AAA, известном как сервер аутентификации, авторизации и учета. И отключив порты, которые используются нечасто.
Вывод
Эффекты атаки MAC-лавинной рассылки могут различаться в зависимости от того, как она реализована. Это может привести к утечке личной и конфиденциальной информации пользователя, которая может быть использована в злонамеренных целях, поэтому ее предотвращение необходимо. Атаку MAC-лавинной рассылки можно предотвратить многими методами, включая аутентификацию обнаруженных MAC-адресов на сервере «AAA» и т. д.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Безопасность в сетях, построенных на Layer2 коммутаторах. Часть 2: Переполнение CAM таблицы.
В первой части нашей статьи, мы уже рассказали о том, какие виды атак существует в Layer2 сетях. Сегодня мы познакомимся с первой из них.
Коммутатор имеет CAM таблицу, где содержится «привязка», какие MAC адреса на каком порту принимаются.
Разумеется CAM таблица не бесконечна и имеет свои размеры. Например коммутатор Catalyst 2960 может содержать 8192 MAC адресов, Catalyst 6000 серии 128000 MAC адресов.
Стоит подумать, а что же произойдет, когда вся таблица будет занята? Новые записи не смогут добавляться, весь трафик будет проходить на все порты.
Что это даст атакующему вполне очевидно. Он может «прослушать» весь сетевой трафик и получить конфеденциальную информацию.
Стоит отметить, что всё это действенно для VLAN’а, в котором находится злоумышленник. т.е. после переполнения данной таблицы атакующий не сможет прослушивать весь сетевой трафик, который «ходит» через коммутатор, а лишь своего VLAN, но и это не очень радостно.
Какие же существуют способы борьбы с данным видом атаки?
Логика подсказывает, что для подавления такой атаки, нам необходимо указать, что на порте коммутатора, к которому подключен пользователь может быть скажем не больше одного MAC адреса, а в случае если появляется более одного, перевести порт в отключенное состояние и отправить сообщение администратору о нарушении безопасности (например на syslog сервер).
Рассмотрим на примере.
Допустим, у нас есть коммутатор Cisco Catalyst 2960,24 порта к которым подключены пользователи. Нужно сделать так, чтоб на каждом порту мог быть только один хост (иными словами только один MAC адрес, какой? сейчас нас это не интересует).
Для этого делаем:
Заходим в режим глобального конфигурирования:
Затем перейдем к конфигурированию портов, выберем сразу все, с 1 по 24
Затем укажем что все эти порты являются портами доступа
switch(config-if-range)#switchport mode access
Включаем защиту порта : port-security
Выбираем реакцию на нарушения нашей политики безопасности. Т.е. что будет коммутатор делать, когда на порту появится больше MAC адресов чем нами указано. В данном случае мы хотим чтоб порт выключался и посылалось соответсвующее сообщение по SNMP trap и syslog. Данную опцию можно не указывать принудительно, она действует по умолчанию. Так же существуют режимы: protect и restrict . Смысл этих режимов заключается в том, что порт не будет выключаться (т.е. переходить в состояние shutdown), а лишь будут блокироваться пакеты, если обнаружено нарушение связанное с MAC адресами. Protect от Restrict отличается тем, что при возникновении внештатной ситуации restrict может послать snmp trap и syslog сообщение о нарушении политики безопасности.
switch(config-if-range)#switchport port-security violation shutdown
Соответсвенно указываем сколько MAC адресов мы готовы увидеть на этом порту. В данном случае 1 MAC адрес, значение 1, устанавливается по умолчанию.
switch(config-if-range)#switchport port-security maximum 1
Поставим порт коммутатора в режим обучения, т.е. первый MAC адрес, который будет получен через этот порт, будет прописан автоматически в running-config. Запись будет сохраняться до тех пор не будет перезагружен коммутатор. Либо если сделать copy running-config startup config (или просто wr) то, значения привязка MAC адреса к порту будет сохранена и в дальнейшем может использоваться даже после перезагрузки коммутатора.
switch(config-if-range)#switchport port-security mac-address sticky
Данной меры вполне достаточно чтобы избежать атаку на переполнение CAM таблицы.
Несколько команд для просмотра установок сделанных на портах, связанных с port-security.
catalyst#show port-security
Secure Port MaxSecureAddr CurrentAddr SecurityViolation Security Action
(Count) (Count) (Count)
—————————————————————————
Fa0/1 2 2 38174 Restrict
Fa0/2 2 2 21601 Restrict
Fa0/3 3 3 6346 Restrict
Fa0/4 2 2 34777 Restrict
Fa0/5 2 2 0 Restrict
skipped
Fa0/48 2 2 26 Restrict
—————————————————————————
Total Addresses in System (excluding one mac per port) : 35
Max Addresses limit in System (excluding one mac per port) : 8320
catalyst#
Команда покажет вам на каких портах включен port-security и как они сконфигурированы относительно безопасности port-security.
Безопасность в сетях, построенных на Layer2-коммутаторах
Рассмотрим эти атаки и меры борьбы с ними более подробно.
Коммутатор имеет CAM-таблицу, где содержится «привязка», какие MAC-адреса на каком порту принимаются.
Разумеется, CAM-таблица не бесконечна и имеет свои размеры. Например, коммутатор Catalyst 2960 может содержать 8192 MAC-адресов, Catalyst 6000 серии – 128000 MAC-адресов.
Стоит подумать, а что же произойдет, когда вся таблица будет занята? Новые записи не смогут добавляться, весь трафик будет проходить на все порты.
Что это даст атакующему вполне очевидно. Он может «прослушать» весь сетевой трафик и получить конфеденциальную информацию.
Стоит отметить, что всё это действенно для VLAN, в котором находится злоумышленник, т.е. после переполнения данной таблицы атакующий не сможет прослушивать весь сетевой трафик, который «ходит» через коммутатор, а лишь своего VLAN, но и это не очень радостно.
Какие же существуют способы борьбы с данным видом атаки?
Логика подсказывает, что для подавления такой атаки нам необходимо указать, что на порту коммутатора, к которому подключен пользователь, может быть, скажем, не больше одного MAC-адреса, а в случае если появляется более одного, перевести порт в отключенное состояние и отправить сообщение администратору о нарушении безопасности (например, на syslog-сервер).
Рассмотрим на примере. Допустим, у нас есть коммутатор Cisco Catalyst 2960 и 24 порта, к которым подключены пользователи. Нужно сделать так, чтобы на каждом порту мог быть только один хост (иными словами, только один MAC-адрес).
Для этого заходим в режим глобального конфигурирования:
Затем перейдем к конфигурированию портов, выберем сразу все, с 1 по 24:
switch(config)#int range f0/1
Затем укажем, что все эти порты являются портами доступа:
switch(config-if-range)#switchport mode access
Включаем защиту порта port-security:
Выбираем реакцию на нарушения нашей политики безопасности, т.е. что будет коммутатор делать, когда на порту появится больше MAC-адресов, чем нами указано. В данном случае мы хотим, чтобы порт выключался и посылалось соответствующее сообщение по SNMP trap и syslog. Данную опцию можно не указывать принудительно, она действует по умолчанию.
Также существуют режимы: protect и restrict. Смысл этих режимов заключается в том, что порт не будет выключаться (т.е. переходить в состояние shutdown), а лишь будут блокироваться пакеты, если обнаружено нарушение, связанное с MAC-адресами. Protect от Restrict отличается тем, что при возникновении внештатной ситуации restrict может послать snmp trap и syslog-сообщение о нарушении политики безопасности:
switch(config-if-range)#switchport port-security violation shutdown
Соответственно указываем, сколько MAC-адресов мы готовы увидеть на этом порту. В данном случае 1 MAC-адрес, значение 1, устанавливается по умолчанию.
switch(config-if-range)#switchport port-security maximum 1
Поставим порт коммутатора в режим обучения, т.е. первый MAC-адрес, который будет получен через этот порт, будет прописан автоматически в running-config. Запись будет сохраняться до тех пор, пока не будет перезагружен коммутатор. Либо если выполнить команду «copy running-config startup config» (или просто wr), то значение привязки MAC-адреса к порту будет сохранено и в дальнейшем может использоваться даже после перезагрузки коммутатора.
switch(config-if-range)#switchport port-security mac-address sticky
Данной меры вполне достаточно, чтобы избежать атаки на переполнение CAM-таблицы.
Команда для просмотра установок, сделанных на портах, связанных с port-security:
(Count) (Count) (Count)
Fa0/1 2 2 38174 Restrict
Fa0/2 2 2 21601 Restrict
Fa0/3 3 3 6346 Restrict
Fa0/4 2 2 34777 Restrict
Fa0/5 2 2 0 Restrict
Fa0/48 2 2 26 Restrict
Total Addresses in System (excluding one mac per port) : 35
Следующая команда покажет вам, на каких портах включен port-security и как они сконфигурированы относительно безопасности port-security:
show port-security interface имя_интерфейса
catalyst#show port-security in t
Port Security : Enabled
Port Status : Secure-up
Violation Mode : Restrict
Aging Time : 0 mins
Aging Type : Absolute
SecureStatic Address Aging : Disabled
Maximum MAC Addresses : 2
Total MAC Addresses : 2
Configured MAC Addresses : 0
Sticky MAC Addresses : 2
Last Source Address:Vlan : 001b.d491.4b1a:1
В отличие от предыдущей команды вывод покажет настройки конкретного интерфейса.
Рассмотрим более подробно данный вид атаки, способ реализации и как ее предотвратить.
Цель данной атаки в том, что пользователь может попытаться передать данные в другой VLAN. Давайте рассмотрим, как это сделать. Как подсказывает логика, это возможно, когда атакующий может инициировать trunk-режим.
В коммутаторах Cisco Catalyst по умолчанию порт работает не в режиме mode access и не в режиме mode trunk, таким образом, на порту работает протокол DTP (Dynamic Trunk Protocol).
В такой ситуации стоит атакующему «притвориться» коммутатором, как между ними будет установленно транковое соединение, и соответственно будут доступны VLAN, сконфигурированные на коммутаторе, и после чего передать данные в другой VLAN не составит труда. Бороться с этим не легко, а очень легко.
Для начала нужно все используемые интерфейсы коммутатора принудительно перевести в режимы access и trunk, где это положено. Неиспользуемые порты необходимо перевести в shutdown, и перенести их в несуществующий VLAN, который будет известен только данному коммутатору, т.е. не передаваться по trunk-портам другим коммутаторам.
Для перевода порта в режим доступа необходимо переключиться в режим глобального конфигурирования:
Заходим в настройку порта:
Принудительно указываем режим доступа:
switch(config-if)#switchport mode access
Для того чтобы перевести порт коммутатора в режим trunk, в режиме конфигурации интерфейса выполните следующую команду:
switch(config-if)#switchport mode trunk
Для неактивных портов создадим специальный VLAN, скажем, под номером 666, дадим ему имя unconnected и перенесем все неиспользуемые порты в этот самый VLAN и сделаем им shutdown.
Переносим необходимые нам порты (например, с 12 по 24) в созданный VLAN.
switch(conf)#int range f0/12 — 24
switch(config-if-range)#switchport access vlan 666
Описанные настройки позволят противостоять атакам типа VLAN Hopping.
Как известно, STP (Spanning Tree Protocol) – это протокол, предназначенный для предотвращения зацикливания пакетов в сети, при наличии дублирующих маршрутов. Расскажу вкратце, как он работает.
Сначала происходит обнаружение коммутаторов, которые связаны между собой. Затем выбирается так называемый Root Bridge, т.е. главный «корневой коммутатор». Далее по специальному алгоритму будут заблокированы порты коммутатора, которые создают петли в получившейся топологии. Более подробно работу STP мы не будем рассматривать.
Что может сделать атакующий?
Атакующий может также «притвориться» коммутатором, направить в сторону коммутатора BPDU-пакет, в котором он может подделать приоритет, MAC-адрес, для того чтобы стать «корневым коммутатором» и с его помощью перехватить сетевой трафик.
Корневым коммутатором становится тот, у которого самый высокий приоритет. Если приоритет у нескольких коммутаторов одинаковый, то для выбора корневого коммутатора используется MAC-адрес, у кого он меньше, тот и становится корневым.
Постараемся избавиться от этой уязвимости. Что для этого необходимо?
- Запретить хождение BPDU-пакетов с портов, в которых мы точно знаем, что там нет никаких коммутаторов. И в случае если такой пакет всё же пришёл, переводить этот порт в shutdown.
- Обезопасить наш корневой коммутатор, чтобы ни при каких условиях не мог быть выбран другой корневой коммутатор, в том числе и наш атакующий (атакующему не составит труда поставить приортитет лучше, чем у настояшего главного коммутатора, и MAC-адрес поменьше, что будет гарантировать, что атакующий представляется root).
Перейдем к реализации данной идеи непосредственно на коммутаторе.
Для начала на всех портах доступа поставим специальный режим STP, который называется portfast. После этого клиент, подключенный к такому порту, не будет принимать участия в разрешении маршрутов по алгоритму STP, и данные будут передаваться ему сразу. Если данная опция включена не будет, то сначала подключенный клиент инициирует пересчет маршрутов по алгоритму STP (это может занять достаточно много времени, десятки секунд и даже больше), и лишь после того будут начинать передаваться пользовательские данные через порт.
По умолчанию portfast на Cisco Catalyst отключен, и это нужно будет сконфигурировать вручную.
Будем конфигурировать Portfast на портах f0/1 – 24.
switch(config)#int range f0/1 — 24
Далее укажем, что на этих портах хождение BPDU-пакетов противопоказано, для этого в режиме глобальной конфигурации необходимо сделать следующее:
switch(config)#spanning-tree portfast bpduguard default
Теперь при появлении на портах, на которых указан режим STP portfast, BPDU-пакета, порт будет отключаться, т.е. переходить в режим shutdown.
И последнее, необходимо обезопасить наш Root Bridge. Для этого необходимо перейти в конфигурацию интерфейса, к которому подключен другой коммутатор, и сделать следующее:
switch(config)# int f0/1
switch(config-if)spanning-tree guard root
Теперь, в случае если появится злоумышленник и направит в сторону коммутатора пакет BPDU с максимальным приоритетом и меньшим MAC-адресом, это не позволит стать ему «корневым коммутатором»
MAC Spoofing – это атака, реализуемая путем подделывания MAC-адреса, например, атакующий может подделать MAC-адрес, который использовал другой хост сети. Что это может дать атакующему, зависит от политики безопасности сети. Для того чтобы предотвратить данный тип атаки, необходимо выполнить меры, которые описаны в разделе «Переполнение CAM-таблицы», т.е. необходимо указать максимальное количество MAC-адресов на порту, указать действие, которое будет выполнено в случае нарушения нашей политики (shutdown, restrict, protect).
Указать MAC-адреса статически, динамически либо в режиме обучения.
Для указания статического MAC-адреса, в режиме конфигурирования интерфейса необходимо выполнить:
switch(config-if)# switchport port-security mac-address 3234.2343.fa12
где 3234.2343.fa12 – MAC-адрес клиента.
Для указания динамического MAC-адреса ничего дополнительного не делается, необходимо только включить функцию port-security, как было описано выше.
Чтобы указать режим обучения MAC-адресов, необходимо выполнить в режиме конфигурирования интерфейса команду:
switch(config-if-range)#switchport port-security mac-address sticky
Указать время жизни записей ARP-таблицы. Рассмотрим пример, в котором установим максимальное количество адресов на порту равным 1, действие shutdown и укажем, что ARP-таблица имеет таймер в 60 секунд.
switch(config)#int range f0/1 — 24
switch(config-if-range)#switchport mode access
switch(config-if-range)#switchport port-security violation shutdown
switch(config-if-range)#switchport port-security maximum 1
switch(config-if-range)#arp timeout 60
В этом примере все порты коммутатора FastEthernet с 1 по 24 переведены в режим доступа, применена технология port-security. На каждом порту может находиться лишь один клиент одновременно, об этом говорит команда «switchport port-security maximum 1», данный параметр установлен по умолчанию, и поэтому в конфигурационном файле этой команды видно не будет. В случае если на порту появилось сразу два и более MAC-адреса, порт переводится в режим shutdown. Команда «arp timeout 60» говорит о том, что MAC-адрес будет находиться в ARP-кэше 60 секунд без обновления.
Атака на PVLAN (Private VLAN)
В технологии PVLAN в отличие от VLAN порты могут находиться в трёх режимах:
- Isolated;
- Promiscuous;
- Community.
Порты, которые отмечены как Isolated, не могут передавать данные в своем VLAN между клиентами. Данные передаваться могут только между портами Isolated и Promiscuous.
Порты Promiscuous – это порты в PVLAN, в которые можно передавать данные со всех портов Isalated и Community, как и в обычном VLAN.
Community – это группы портов, между членами которых можно передавать данные, можно назвать VLAN во VLAN.
Если атакующему доступно устройство Layer 3 (например, маршрутизатор либо коммутатор третьего уровня), он может установить связь между клиентами, которые находятся в одном PVLAN, между портами Isolated. Как это можно реализовать?
Пользователь может подделать пакет, в котором он укажет в IP-адресе назначения необходимое ему устройство (которое находится на другом порту Isolated), источник останется без изменения, а вот в качестве MAC-адреса назначения он укажет MAC-адрес устройства L3. L3-устройство получит данный пакет и может переправить его по указанному адресу. Принимающая сторона может сделать то же самое, тем самым обеспечив передачу данных между Isolated-портами.
Предотвращение такой атаки сводится к тому, что на устройстве L3 создается специальный Access List, в котором запрещается прямая передача данных между сегментом сети. Рассмотрим пример настройки .
router(config)#ip access-list extended pvlan
router(config-ext-nacl)#deny ip 10.0.0.0 0.0.0.255 10.0.0.0 0.0.0.255
router(config-ext-nacl)#permit any any
router(config-if)#ip access-group pvlan in
Таким образом был создан список управления доступом под названием PVLAN, в котором указывается, что с сети 10.0.0.0/24 запрещено передавать данные в 10.0.0.0/24, всё остальное разрешено. И этот список доступа последней командой был связан с интерфейсом f0/1.
Описанные выше настройки не позволят атакующему установить связь между клиентами одного PVLAN, между Isolated-портами используя L3-устройство.
Существуеет несколько способов атаковать DHCP-сервер.
1. Злоумышленник может сформировать и послать DHCP-серверу огромное количество DHCP-запросов с разными MAC-адресами. Сервер будет выделять IP-адреса из пула, и рано или поздно весь DHCP-пул закончится, после чего сервер не сможет обслуживать новых клиентов. Данный вид атаки можно классифицировать как DoS (Denial of Service – откзаз в обслуживании). Нарушается работоспособность сети.
Метод борьбы с такими атаками называется DHCP Snooping. Вкратце рассмотрим, как это работает. Когда коммутатор получает пакет, то он сравнивает MAC-адрес, указанный в DHCP-запросе, и MAC-адрес, который был прописан на порту коммутатора. Если адреса совпадают, то коммутатор отправляет пакет дальше. Если адреса не совпадают, то коммутатор отбрасывает пакет.
2. Злоумышленник может поставить свой DHCP-сервер и выдавать свои настройки пользователям сети (может указать любой DNS, Gateway и т. д.), и воспользоваться уже по своему усмотрению, начиная от прослушивания трафика до подделки DNS-ответов, и т. д.
Если в сети существует несколько DHCP-серверов, то на запрос будут отвечать все серверы, но клиентом будет обработан только первый ответ. Какой из DHCP-серверов ответит быстрее и чей ответ быстрее дойдет до клиента зависит от многих факторов, таких как: загрузка DHCP-сервера, загрузка сети и т. д.
Для того чтоб злоумышленник был уверен, что именно от его DHCP-сервера клиент получит ответ, атакующим может быть предварительно произведена DoS-атака на легальные DHCP-сервера способом, описанным в 1-м пункте.
В технологии DHCP Snooping существует понятие доверительных и недоверительных портов (trusted и untrusted соответственно). Доверительные порты – это порты, с которых может приходить ответ DHCP (DHCPOFFER и так далее), а недоверительные порты – это порты, с которых не могут приходить ответы DHCPOFFER.
Доверительные порты указываются вручную. Все порты, которые не указаны доверительными, автоматически становятся недоверительными. Порт, который непосредственно подключен к DHCP-серверу, должен быть объявлен как доверительный (trust порт).
DHCP Snooping настраивается для каждого VLAN. Для настройки DHCP Snooping необходимо сначала включить snooping в режиме глобальной конфигурации, затем включить на нужном VLAN, затем указать trust-порты. Рассмотрим на примере.
switch(config)# ip dhcp snooping
switch(config)# ip dhcp snooping vlan 10
switch(config-if)#ip dhcp snooping trust
В данном примере мы включили защиту DHCP на VLAN 10. Интерфейс f0/1 у нас подключен непосредственно к DHCP-серверу, поэтому на нем мы включили trust.
Также можно включить или выключить опцию 82 DHCP (которая отвечает за информацию relay, т.е. через какие коммутаторы прошёл данный пакет, аналогию можно провести с таблицей маршрутизации). Делается в режиме глобального конфигурирования командой:
switch(config)#ip dhcp snooping information option
Также есть возможность включить ограничение количества запросов DHCP в секунду. Делается это на интерфейсе, в нашем случае f0/1. К этому параметру нужно относиться с осторожностью. Если количество запросов в секунду будет больше, чем мы указали (в нашем примере 100), то запросы будут отклонены.
switch(config-if)#ip dhcp snooping limit rate 100
В статье мы рассмотрели основные виды Layer 2-атак, и рассмотрели, как с ними можно бороться. Описанные меры должны применяться комплексно, для повышения безопасности сети в целом.