Статьи Безопасность в сетях, построенных на Layer2 коммутаторах.

Discussion in 'Статьи' started by AlexSatter, 29 May 2009.

  1. AlexSatter

    AlexSatter Member

    Joined:
    29 Jan 2009
    Messages:
    303
    Likes Received:
    92
    Reputations:
    33
    В этой статье будет рассмотрено, как можно произвести атаки на Layer2 сети и как можно защитить такую сеть от нападения с помощью оборудования Cisco Systems.

    Типы Layer2 аттак

    • Vlan Hopping Смысл атаки заключается в том, что злоумышленник может получить доступ к другому устройству в сети не из своего VLAN
    • Атака на STP Смысл атаки заключается в том, что злоумышленник, с помощью программных средств может отправить коммутатору пакет BPDU, в котором указать высокий приоритет и меньший MAC адрес и тем самым стать «корневым коммутатором» с целью перехвата сетевого трафика.
    • MAC спуфинг Злоумышленник может подменить MAC адрес, с целью захватить трафик необходимого ему устройства.
    • Атака на PVLAN Private Vlan, это виланы, которые составляют одну подсеть (как правило) и между хостами этого вилана связи быть не должно. Но злоумышленник может получить доступ к соседнему устройству PVLAN посредством устройства L3 (роутера).
    • Атака на DHCP Злоумышленник может заполнить весь пул DHCP с помощью генерации большого количества запросов с несуществующими MAC адресами. Что приведет к DOS атаке, т.е. отказу в обслуживании, т.к.. так как после заполнения пула сервер не сможет выделять адреса реальным хостам. После чего атакующий может поднять собственный, DHCP сервер и хосты сети будут получать от недоверительного сервера все настройки, которые укажет злоумышленник. Например, он может направить весь трафик через свой хост и таким образом перехватить и просканировать его на предмет служебной информации.

    Рассмотрим эти атаки и меры борьбы с ними более подробно.

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

    Коммутатор имеет CAM таблицу, где содержится "привязка", какие MAC адреса на каком порту принимаются.
    Разумеется CAM таблица не бесконечна и имеет свои размеры. Например коммутатор Catalyst 2960 может содержать 8192 MAC адресов, Catalyst 6000 серии 128000 MAC адресов.
    Стоит подумать, а что же произойдет, когда вся таблица будет занята? Новые записи не смогут добавляться, весь трафик будет проходить на все порты.
    Что это даст атакующему вполне очевидно. Он может "прослушать" весь сетевой трафик и получить конфеденциальную информацию.
    Стоит отметить, что всё это действенно для VLAN'а, в котором находится злоумышленник. т.е. после переполнения данной таблицы атакующий не сможет прослушивать весь сетевой трафик, который "ходит" через коммутатор, а лишь своего VLAN, но и это не очень радостно.
    Какие же существуют способы борьбы с данным видом атаки?
    Логика подсказывает, что для подавления такой атаки, нам необходимо указать, что на порте коммутатора, к которому подключен пользователь может быть скажем не больше одного MAC адреса, а в случае если появляется более одного, перевести порт в отключенное состояние и отправить сообщение администратору о нарушении безопасности (например на syslog сервер).
    Рассмотрим на примере.
    Допустим, у нас есть коммутатор Cisco Catalyst 2960,24 порта к которым подключены пользователи. Нужно сделать так, чтоб на каждом порту мог быть только один хост (иными словами только один MAC адрес, какой? сейчас нас это не интересует).
    Для этого делаем:

    Заходим в режим глобального конфигурирования:


    Code:
    switch# conf t
    Затем перейдем к конфигурированию портов, выберем сразу все, с 1 по 24

    Code:
     switch(config)#int range f0/1 
    Затем укажем что все эти порты являются портами доступа

    Code:
     switch(config-if-range)#switchport mode access
    Включаем защиту порта: port-security

    Code:
    switch(config-if-range)#switchport port-security
    Выбираем реакцию на нарушения нашей политики безопасности. Т.е. что будет коммутатор делать, когда на порту появится больше MAC адресов чем нами указано. В данном случае мы хотим чтоб порт выключался и посылалось соответсвующее сообщение по SNMP trap и syslog. Данную опцию можно не указывать принудительно, она действует по умолчанию. Так же существуют режимы: protect и restrict. Смысл этих режимов заключается в том, что порт не будет выключаться (т.е. переходить в состояние shutdown), а лишь будут блокироваться пакеты, если обнаружено нарушение связанное с MAC адресами. Protect от Restrict отличается тем, что при возникновении внештатной ситуации restrict может послать snmp trap и syslog сообщение о нарушении политики безопасности.

    Code:
    switch(config-if-range)#switchport port-security violation shutdown
    Соответсвенно указываем сколько MAC адресов мы готовы увидеть на этом порту. В данном случае 1 MAC адрес, значение 1, устанавливается по умолчанию.

    Code:
    switch(config-if-range)#switchport port-security maximum 1
    Поставим порт коммутатора в режим обучения, т.е. первый MAC адрес, который будет получен через этот порт, будет прописан автоматически в running-config. Запись будет сохраняться до тех пор не будет перезагружен коммутатор. Либо если сделать copy running-config startup config (или просто wr) то, значения привязка MAC адреса к порту будет сохранена и в дальнейшем может использоваться даже после перезагрузки коммутатора.

    Code:
    switch(config-if-range)#switchport port-security mac-address sticky
    Данной меры вполне достаточно чтобы избежать атаку на переполнение CAM таблицы.

    Несколько команд для просмотра установок сделанных на портах, связанных с port-security.

    Code:
    show port-security
    Пример:

    Code:
    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.

    show port-security interface имя_интерфейса.
    Пример:

    Code:
    catalyst#show port-security int f0/1
    
    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
    Security Violation Count   : 38176
    catalyst#
    
    В отличии от предыдущей команды, покажет вывод настроек конкретного интерфейса.
     
    4 people like this.
  2. AlexSatter

    AlexSatter Member

    Joined:
    29 Jan 2009
    Messages:
    303
    Likes Received:
    92
    Reputations:
    33
    2. Vlan Hopping

    Рассмотрим более подробно данный вид атаки, способ реализации и как ее предотвратить.
    Цель данной атаки в том, что пользователь может попытаться передать данные в другой vlan.
    Давайте рассмотрим, как это сделать. Как подсказывает логика, это возможно когда атакующий может инициировать trunk режим.
    В коммутаторах Cisco Catalyst, по умолчанию порт работает не в режиму mode access и не в режиме mode trunk, таким образом на порту работает протокол DTP (Dynamic Trunk Protocol).
    В такой ситуации стоит атакующему "претвориться" коммутатором, как между ними будет установленно транковое соединения, и соответсвенно будут доступны vlan'ы сконфигурированные на коммутаторе и после чего передать данные в другой Vlan не составит труда.

    Бороться с этим не легко, а очень легко.
    Для начала нужно все используемые интерфейсы коммутатора перевести принудительно в режимы access и trunk, где это положено.
    Неиспользуемые порты необходимо перевести в shutdown, и перенести их в несуществующий VLAN, который будет известен только данному коммутатору, т.е. не передавался по trunk портам другим коммутаторам.

    Первый этап был рассмотрен нами выше.
    Для перевода порта в режим доступа необходимо:
    Переключиться в режим глобального конфигурирования

    Code:
    switch# conf t
    Заходим в настройку порта:

    Code:
    switch(conf)#int f0/1
    Указываем принудительно режим доступа:

    Code:
     switch(config-if)#switchport mode access
    Для того чтобы перевести порт коммутатора в режим trunk,в режиме конфигурации интерфейса выполнить следующую команду:

    Code:
    switch(config-if)#switchport mode trunk
    Для неактивных портов, создадим специальный VLAN, скажем под номером 666, дадим ему имя unconnected и перенесем все неиспользуемые порты в этот самый VLAN и сделаем им shutdown.
    Создаем VLAN.

    Code:
    switch(conf)#vlan 666
    Даем ему имя:

    Code:
    switch(config-vlan)#name Unconnected  
    switch(config-vlan)#exit
    Переносим необходимые нам порты (например с 12 по 24) в созданный VLAN.

    Code:
     switch(conf)#int range f0/12 - 24
     switch(config-if-range)#switchport access vlan 666
     switch(config-if-range)#shut
    Описанные настройки позволят противостоять атакам типа Vlan Hopping.

    3. Атака на STP.

    Как известно, 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.

    Code:
     switch# conf t
     switch(config)#int range f0/1 - 24
     switch(config-if-range)#spanning-tree portfast
    Далее укажем что на этих портах хождение BPDU пакетов противопоказано, для этого в режиме глобальной конфигурации необходимо сделать следующее:

    Code:
     switch(config)#spanning-tree portfast bpduguard default
    Теперь, при появлении на портах, на которых указан режим STP portfast, BPDU пакета, порт будет отключаться, т.е. переходить в режим shutdown.
    И последнее, необходимо обезопасить наш Root Bridge. Для этого необходимо перейти в конфигурацию интерфейса, к которому подключен другой коммутатор и сделать следующее:

    Code:
     switch(config)# int f0/1
     switch(config-if)spanning-tree guard root
    Теперь, в случае если появится злоумышленник и направит в сторону коммутатора пакет BPDU с максимальным приоритетом и меньшим MAC адресом, это не позволит стать ему «корневым коммутатором»
     
  3. AlexSatter

    AlexSatter Member

    Joined:
    29 Jan 2009
    Messages:
    303
    Likes Received:
    92
    Reputations:
    33
    4. MAC Spoofing.

    MAC Spoofing, это атака, реализуемая путем подделывания MAC адреса, например атакующий может подделать MAC адрес, который использовал другой хост сети. Что это может дать атакующему зависит от политики безопасности сети. Для того чтобы предотвратить данный тип атаки необходимо выполнить меры, которые описаны в пункте 1. «Переполнение 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 секунд.


    Code:
    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 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 секунд без обновления.

    5. Атака на PVLAN (Private VLAN).

    В технологии PVLAN в отличии от VLAN порты могут находиться в трёх режимах:

    • Promiscuous
    • Community
    • Isolated

    Порты которые отмечены как Isolated, не могут передавать данные в своем VLAN между клиентами. Данные передаваться могут только между Isolated и Promiscuous портами.
    Promiscuous порты это порты в PVLAN, в которые можно передавать данные со всех Isalated и Community портов. как и в обычном VLAN.
    Community это группы портов, между членами которых можно передавать данные, можно назвать vlan в vlan'е.
    Если атакующему доступно устройство Layer 3 (например маршрутизатор, либо коммутатор третьего уровня), он может установить связь между клиентами, которые находятся в одном PVLAN, между Isolated портами.
    Как это можно реализовать?
    Пользователь может подделать пакет, в котором IP назначения он укажет необходимое ему устройство (которое находится на другом порту Isolated), источник останется без изменения, т.к. ip атакающего, как и MAC адрес, а вот в качестве MAC адрес назначения он укажет MAC устройства L3. L3 устройство получится данный пакет и может переправить его по указанному адресу. Принимающая сторона может сделать тоже самое, тем самым обеспечив передачу данных между Isolated портами.
    Предотвращение такой атаки сводится к тому, что на устройстве L3 создается специальный Access List в котором запрещается прямая передача данных между сегментом сети.
    Рассмотрим пример настройки.


    Code:
    router#conf t
    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-ext-nacl)#exit
    router(config)#int f0/1
    router(config-if)#ip access-group pvlan in
    
    Таким образом был создан список управления досутпом под названием pvlan, в котором указывается что с сети 10.0.0.0/24 запрещено передавать данные в 10.0.0.0/24, всё остальное разрешено. И этот список доступа, последней командой был связан с интерфейсом f0/1.
    Описанные выше настройки не позволят атакующему установить связь между клиентами одного PVLAN, между Isolated портами используя L3 устройство.


    6. Атака на DHCP

    Существуеет несколько способов атаковать DHCP сервер.

    1.Злоумышленник может сформировать и послать DHCP серверу огромное количество DHCP запросов, с разными MAC адресами. Сервер будет выделять IP адреса из пула и рано или поздно весь DHCP pool закончится, после чего сервер не сможет обслуживать новых клиентов. Данный вид атаки можно классифицировать как 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 порты. Рассмотрим на примере.


    Code:
     switch(config)# ip dhcp snooping
     switch(config)# ip dhcp snooping vlan 10
     switch(config)#int f0/1
     switch(config-if)#ip dhcp snooping trust
    В данном примере, мы включили защиту DHCP на vlan 10. Интерфейс f0/1 у нас подключен непосредственно к DHCP серверу, поэтому на нем мы включили trust.
    Так же можно включить или выключить опции 82 DHCP (которая отвечает за информацию relay, т.е. через какие коммутаторы прошёл данный пакет, аналогию можно провести с таблицей маршрутизации). Делается в режиме глобального конфигурирования командой:


    Code:
     switch(config)#ip dhcp snooping information option
    
    Так же есть возможность включить ограничение количество запросов DHCP в секунду. Делается это на интерфейсе, в нашем случае f0/1. К этому параметру нужно относиться с осторожностью. Если количество запросов в секунду будет больше чем мы указали (в нашем примере 100), то запросы будут отклонены.

    Code:
     switch(config)#interface fa0/1
     switch(config-if)#ip dhcp snooping limit rate 100
    
    В статье мы рассмотрели основные виды Layer 2 Атак, и рассмотрели как с ними можно бороться.
    Описанные меры должны применяться комплексно, для повышения безопасности сети в целом.
     
  4. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    Layer2 коммутаторы/сети? Прошу пояснить.
     
  5. SpangeBoB

    SpangeBoB Elder - Старейшина

    Joined:
    12 Jul 2008
    Messages:
    1,680
    Likes Received:
    393
    Reputations:
    102
    ссылку на авторство ставить не будем?
     
  6. AlexSatter

    AlexSatter Member

    Joined:
    29 Jan 2009
    Messages:
    303
    Likes Received:
    92
    Reputations:
    33
    автортство мое.
    публиковал статью в журнале "Системный администратор" в декабре.

    есть концентратоы (точнее были, которые работали на Layer 1, обычные хабы)
    есть коммутаторы, которые работают на Layer 2 (грубо говоря понимает MAC адресацию)
    Есть Layer 3 (которые разбирают до уровня IP в OSI)
    Есть MLS (Multilayer Switch), которые могут работать на 3,4 и др уровнях.
    В данной статье я расмотрел настройку оборудования Layer2.
     
  7. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    Ок, я просто обычно встречаю терминологию физический-канальный-сетевой-... уровни
     
  8. AlexSatter

    AlexSatter Member

    Joined:
    29 Jan 2009
    Messages:
    303
    Likes Received:
    92
    Reputations:
    33
    при описании оборудования, редко, когда можно встретить, оборудование канального уровня, употребляется Layer2 оборудвание :)
    рад, что мы разрешили этот вопрос. :)