Статья Обзор атак на канальный уровень и защита от них

  • 14
  • 7
Здравствуй, читатель, сегодня обсудим атаки на один из уровней модели OSI – канальный уровень. Надеюсь, ты знаешь хотя бы немного о том, что такое OSI? Если не врубаешься совсем, тогда почему ты всё ещё здесь? Не медли, мужик, узнай о этом всё. Ну ладно, от слов к делу приступаем, но только с ведающими.

Дисклеймер

Наш план:
  • О первых двух уровнях модели OSI
  • Переполнение CAM таблицы: просто и со вкусом
  • VLAN Hopping
  • Вооружившись топором, рубим STP дерево
  • Подделка MAC-адреса
Про первые два уровня модели OSI

Почему нет статьи про физический уровень?

Как по мне не обязательно писать об этом. Или я не прав?


На физическом уровне у нас работает концентратор (hub). Эта вещь получает пакет на один порт и отправляет его на все остальные. Все в сети получат этот пакет - никакой приватности, банально включите wireshark и просматривайте трафик!

И зачем нам тогда этот концентратор? Выкинем его?

Не стоит, он не пригоден в локальных сетях, но для отказоустойчивых сетях это сетевое устройство как нельзя кстати. Узлам кластера нужно всегда общаются друг с другом, а именно говорить 'Я живой' (I'm alive). Концентратор не составляет CAM таблиц и шлёт пакеты напрямую. В тех случаях, если один из узлов сети "умер", другой узнает о "смерти" первого.

Коммутатор (Switch) трудится на канальном уровне. Эта вещь умнее концентратора, поэтому отсылает пакеты не на все порты, а только на тот к которому подключен получатель этого пакета. Также коммутатор составляет CAM таблицы, а у них уже есть срок жизни. Если один из узлов "умрёт", то об этом узнают позднее, в отличии от концентратора.

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

Теория


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

Атака

Утилита macof в помощь нам, установим и рассмотрим простой пример использования:


Код:
git clone https://github.com/WhiteWinterWolf/macof.py.git

cd macof.py

install -m 755 -D -t /usr/local/bin ./macof.py

mkdir -p /usr/local/share/man/man1

gzip -c ./macof.py.1 >/usr/local/share/man/man1/macof.py.1.gz

Переполним CAM таблицу коммутатора случайными MAC-адресами, предназначенными для 192.168.0.1:

Код:
macchanger -r

macchanger --mac XX:XX:XX:XX:XX:XX

Защита

Один из способов - ограничить количество подключаемых mac-адресов к порту. Рассматривать дальше всё будем на примере коммутаторов cisco, у которого есть 24 порта. Задача такова: чтобы только два mac-адреса могли подключиться к одному порту.

Подключимя к коммутатору с помощью консоли или удалённо. Вводим:

Код:
conf t
int range f0/1-24
switchport mode access
switchport port-security
switchport port-security violation shotdown
switchport port-security maximum 2
switchport port-security mac-address sticky


Теория

Всезнающая википедия расскажет нам о VLAN и DTP

VLAN (Virtual Local Area Network, виртуальная локальная сеть) — это функция в роутерах и коммутаторах, позволяющая на одном физическом сетевом интерфейсе (Ethernet, Wi-Fi интерфейсе) создать несколько виртуальных локальных сетей.

DTP (англ. dynamic trunking protocol — динамический протокол транкинга) — проприетарный сетевой протокол канального уровня, разработанный компанией Cisco для реализации транкинговой системы для связи в сети VLAN между двумя сетевыми коммутаторами и для реализации инкапсуляции.
Рекомендую для лучшего пониманию ознакомиться со статьёй на хабре.

Если режим коммутатора один из этих трёх: dynamic desirable, dynamic auto или trunk, коммутаторы могут отправлять DTP пакеты. Эти пакеты нужны для VLAN в режиме trunk, а по умолчанию коммутаторы Cisco в режиме dynamic desirable. Задачей нашей есть перевести этот коммутатор в режим TRUNK.

Создайте в вашей голове воображаемого друга воображаемую сеть с тремя компьютерами. Злоумышленник c IP-Адресом 192.168.0.100 и VLAN 100, жертва 1 192.168.0.102 с VLAN 100, жертва 2 10.0.0.1 c VLAN 200. VLAN 100 не может общаться с VLAN 200.

Атака

Мы можем использовать Yersinia, PackETH или Scapy. Рассмотрим первую утилиту.

Утилита работает в консоли и с графическим интерфейсом (-G):

Код:
yersinia -G

Нажимаем «Launc Attack», выбираем протокол DTP, нажимаем «enabling trunking».
Окей, коммутатор в режиме trunk, далее вводим:
Код:
modprobe 8021q
vconfig add eth0 200
ifconfig eth0.200 up
ifconfig eth0.200 10.0.0.6 up

Сейчас мы можем отправлять пакеты в VLAN 200.


Защита

Давайте-ка настроим коммутатор, чтобы такие "кузнечики" не попрыгали в другие VLAN'ы:

Код:
conf t
int range f0/1
switchport mode access
vlan 880
vlan World
exit
int range f0/2-24
switchport access vlan 880
shut

Вооружившись топором, рубим STP дерево

Теория

Задача STP - предотвращение зацикливания пакетов в сети при наличии дублирующихся маршрутов.
  1. Производиться обнаружение коммутаторов связанных между собой
  2. Выбирается корневой, главный коммутатор (Root switch). Выборка идёт по наименьшему значению идентификатора или заданному администратором. (Это число из восьми байт, шесть младших - MAC адрес блока управления, а два старших - конфигурируются вручную.
  3. По специальному алгоритму блокируются порты которые создают петли.
По умолчанию протокол STP выбирает порты с наименьшим MAC. Нам необходимо отправить BDPU-пакет, в котором будет указан наш идентификатор, остальные коммутаторы тоже их отправят. Наш идентификатор должен быть наименьшим и мы станем корневым узлом .

Атака

Включаем Yersinia. Нажимаем «Launch Attack», затем выбираем «Sending conf BDPU».

Мы видим, что появился коммутатор. Опять нажимаем «Launch Attack», но сейчас выбираем «Claiming Root Role».

Вы корень дерева STP. Этим можно гордиться!

Защита

Вначале запретим BPDU пакеты с портов, на которых нет никаких коммутаторов. Ну, если же пакетик пришёл, тогда переводим порт в shutdown режим. Переключим все порты в режим portfast, а после, клиент подключенный к порту, не будет принимать участия в разрешении маршрутов по STP:

Код:
conf t
int range f0/1-24
spanning-tree portfast
spanning-tree portfast bpguard default
int f0/1
spanning-tree guard root

Подделка MAC-адреса

Атака

Тут всё просто. Меняем наш mac на другой с помощью macchanger, тем самым можем представиться другим хостом.

Напомню:

Код:
macchanger -r
macchanger --mac XX:XX:XX:XX:XX:XX


Защита

Команды для защиты почти одинаковы как в ситуации с переполнением CAM таблицы:


Код:
conf t
int range f0/1-24
switchport mode access
switchport port-security
switchport port-security violation shotdown
switchport port-security maximum 2
arp timeout 60

Также можем указать статический mac-адрес. (указываем статический mac-адресс в формате XXXX.XXXX.XXXX)

Код:
switchport port-security mac-address XXXX.XXXX.XXXX
 
Сверху Снизу