Здравствуй, читатель, сегодня обсудим атаки на один из уровней модели OSI – канальный уровень. Надеюсь, ты знаешь хотя бы немного о том, что такое OSI? Если не врубаешься совсем, тогда почему ты всё ещё здесь? Не медли, мужик, узнай о этом всё. Ну ладно, от слов к делу приступаем, но только с ведающими.
Дисклеймер
Вся информация, описываемая далее, не побуждает к действию и несёт исключительно информативный характер! Используйте добытые знания с умом.
Наш план:
Почему нет статьи про физический уровень?
Как по мне не обязательно писать об этом. Или я не прав?
На физическом уровне у нас работает концентратор (hub). Эта вещь получает пакет на один порт и отправляет его на все остальные. Все в сети получат этот пакет - никакой приватности, банально включите wireshark и просматривайте трафик!
Переполнение CAM таблицы
Теория
В CAM таблицах храниться информация о том, какие MAC-адреса к каком портам привязаны. Таблицы имеют ограничения, если мы переполним таблицу - коммутатор станет концентратором.
Атака
Утилита macof в помощь нам, установим и рассмотрим простой пример использования:
И зачем нам тогда этот концентратор? Выкинем его?
Не стоит, он не пригоден в локальных сетях, но для отказоустойчивых сетях это сетевое устройство как нельзя кстати. Узлам кластера нужно всегда общаются друг с другом, а именно говорить 'Я живой' (I'm alive). Концентратор не составляет CAM таблиц и шлёт пакеты напрямую. В тех случаях, если один из узлов сети "умер", другой узнает о "смерти" первого.
-i Интерфейс для отправки.
-s IP-адрес источника.
-d IP-адрес назначения.
-e Целевой аппаратный адрес.
-x Порт источника TCP.
-y Порт назначения TCP.
-n Количество отправляемых пакетов.
Переполним CAM таблицу коммутатора случайными MAC-адресами, предназначенными для 192.168.0.1:
Немного macchanger:
Один из способов - ограничить количество подключаемых mac-адресов к порту. Рассматривать дальше всё будем на примере коммутаторов cisco, у которого есть 24 порта. Задача такова: чтобы только два mac-адреса могли подключиться к одному порту.
Подключимя к коммутатору с помощью консоли или удалённо. Вводим:
Всезнающая википедия расскажет нам о 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.
Внутри коммутатора:
Интерфейсы (G0/0, G0/1) назначаются VLAN 100, которые являются (Kali и PC-1), а интерфейс (G0/2) назначается VLAN 200.
Administative Mode: dynamic desirable.
Атака
Мы можем использовать Yersinia, PackETH или Scapy. Рассмотрим первую утилиту.
Утилита работает в консоли и с графическим интерфейсом (-G):
Что на данный момент в коммутаторе:
Окей, коммутатор в режиме trunk, далее вводим:
Защита
Давайте-ка настроим коммутатор, чтобы такие "кузнечики" не попрыгали в другие VLAN'ы:
Теория
Задача STP - предотвращение зацикливания пакетов в сети при наличии дублирующихся маршрутов.
Атака
Включаем Yersinia. Нажимаем «Launch Attack», затем выбираем «Sending conf BDPU».
Мы видим, что появился коммутатор. Опять нажимаем «Launch Attack», но сейчас выбираем «Claiming Root Role».
Вы корень дерева STP. Этим можно гордиться!
Защита
Вначале запретим BPDU пакеты с портов, на которых нет никаких коммутаторов. Ну, если же пакетик пришёл, тогда переводим порт в shutdown режим. Переключим все порты в режим portfast, а после, клиент подключенный к порту, не будет принимать участия в разрешении маршрутов по STP:
Атака
Тут всё просто. Меняем наш mac на другой с помощью macchanger, тем самым можем представиться другим хостом.
Напомню:
Команды для защиты почти одинаковы как в ситуации с переполнением CAM таблицы:
arp timeout 60
conf t # перевод в режим глобального конфигурирования
Теория
Защита
Нам поможет DHSP Snooping или ограничение запросов. Коммутатор получает пакет, затем сравнивает MAC-адрес в запросе с MAC-адресом, который был прописан на порту. В этой технологии существуют доверительные порты (trasted) и недоверительные (untrasted).
Теория
Воспользуемся этой атакой для получения доступа к соседнему PVLAN через маршрутизатор. PVLAN использует три вида портов: isolated, promiscuus, community. Данные клиентов можно передать только с помощью двух последних.
Если у нас в сети есть маршрутизатор, он может установить связь с клиентами в одном PVLAN на isolated портах. Можно изменить IP-адрес назначения на цель находящуюся на другом порту isolated, а MAC-адрес назначения на адрес маршрутизатора.
Защита
Что-бы такого не случилось на маршрутизаторе создадим access list, где запрещается прямая передача данных между сегментом сети:
Дисклеймер
Вся информация, описываемая далее, не побуждает к действию и несёт исключительно информативный характер! Используйте добытые знания с умом.
Наш план:
- О первых двух уровнях модели OSI
- Переполнение CAM таблицы: просто и со вкусом
- VLAN Hopping
- Вооружившись топором, рубим STP дерево
- Подделка MAC-адреса
- Нападаем на DHCP
- Проникаем в PVLAN
- Arp spoofing и с чем его едят
Почему нет статьи про физический уровень?
Как по мне не обязательно писать об этом. Или я не прав?
На физическом уровне у нас работает концентратор (hub). Эта вещь получает пакет на один порт и отправляет его на все остальные. Все в сети получат этот пакет - никакой приватности, банально включите wireshark и просматривайте трафик!
Переполнение CAM таблицы
Теория
В CAM таблицах храниться информация о том, какие MAC-адреса к каком портам привязаны. Таблицы имеют ограничения, если мы переполним таблицу - коммутатор станет концентратором.
Атака
Утилита macof в помощь нам, установим и рассмотрим простой пример использования:
И зачем нам тогда этот концентратор? Выкинем его?
Не стоит, он не пригоден в локальных сетях, но для отказоустойчивых сетях это сетевое устройство как нельзя кстати. Узлам кластера нужно всегда общаются друг с другом, а именно говорить 'Я живой' (I'm alive). Концентратор не составляет CAM таблиц и шлёт пакеты напрямую. В тех случаях, если один из узлов сети "умер", другой узнает о "смерти" первого.
git clone
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
macof [-i interface] [-s src] [-d dst] [-e tha] [-x sport] [-y dport] [-n times]
-i Интерфейс для отправки.
-s IP-адрес источника.
-d IP-адрес назначения.
-e Целевой аппаратный адрес.
-x Порт источника TCP.
-y Порт назначения TCP.
-n Количество отправляемых пакетов.
Переполним CAM таблицу коммутатора случайными MAC-адресами, предназначенными для 192.168.0.1:
Это всё равно, если мы сменим mac-адресс утилитой macchanger, перезагрузим интерфейс, затем подключимся к коммутатору, который добавит новый mac в таблицу, затем всё по новой.macof -i eth0 -d 192.168.0.1
Немного macchanger:
Защитаmacchanger -r
macchanger --mac XX:XX:XX:XX:XX:XX
macchanger -r # сменить на рандомный mac-адрес
macchanger --mac XX:XX:XX:XX:XX:XX # меняем mac на указанный
Один из способов - ограничить количество подключаемых mac-адресов к порту. Рассматривать дальше всё будем на примере коммутаторов cisco, у которого есть 24 порта. Задача такова: чтобы только два mac-адреса могли подключиться к одному порту.
Подключимя к коммутатору с помощью консоли или удалённо. Вводим:
conf t # перевод в режим глобального конфигурирования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 Hoppingint range f0/1-24 # перевод в режим конфигурирования всех портов
switchport mode access # указываем, что все выбранные порты будут работать в режиме доступа
switchport port-security # включаем функицию port-security
switchport port-security violation shotdown # указываем коммутатору что нужно отключить порт (shutdown)
switchport port-security maximum 2 # указываем сколько mac-адресов можно подключиться к порту
switchport port-security mac-address sticky # Переводим в режим обучения. Будет сохранять в running-config первые подключившиеся mac-адреса (в нашем случае 2 mac'a)
Всезнающая википедия расскажет нам о 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.
Внутри коммутатора:
Интерфейсы (G0/0, G0/1) назначаются VLAN 100, которые являются (Kali и PC-1), а интерфейс (G0/2) назначается VLAN 200.
Administative Mode: dynamic desirable.
Атака
Мы можем использовать Yersinia, PackETH или Scapy. Рассмотрим первую утилиту.
Утилита работает в консоли и с графическим интерфейсом (-G):
Нажимаем «Launc Attack», выбираем протокол DTP, нажимаем «enabling trunking».yersinia -G
Что на данный момент в коммутаторе:
Окей, коммутатор в режиме trunk, далее вводим:
Сейчас мы можем отправлять пакеты в VLAN 200.modprobe 8021q
vconfig add eth0 200
ifconfig eth0.200 up
ifconfig eth0.200 10.0.0.6 up
modprobe 8021q # добавим модуль VLAN в ядро
vconfig add eth0 200 # добавим интерфейс VLAN с ID 200
ifconfig eth0.200 up # включаем новый интерфейс
ifconfig eth0.200 10.0.0.6 up # добавим новый IP и включим его
Защита
Давайте-ка настроим коммутатор, чтобы такие "кузнечики" не попрыгали в другие VLAN'ы:
conf t # перевод в режим глобального конфигурирования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 деревоint range f0/1 # перевод в режим конфигуратора
switchport mode access # указываем, что порт будет работать в режиме доступа
vlan 880 # даём ID новому VLAN
vlan World # имя нового VLAN
exit # выходим
int range f0/2-24 # выбираем все остальные порты
switchport access vlan 880 # переводим порты в vlan 800
shut # выключаем эти порты
Теория
Задача STP - предотвращение зацикливания пакетов в сети при наличии дублирующихся маршрутов.
- Производиться обнаружение коммутаторов связанных между собой
- Выбирается корневой, главный коммутатор (Root switch). Выборка идёт по наименьшему значению идентификатора или заданному администратором. (Это число из восьми байт, шесть младших - MAC адрес блока управления, а два старших - конфигурируются вручную.
- По специальному алгоритму блокируются порты которые создают петли.
Атака
Включаем Yersinia. Нажимаем «Launch Attack», затем выбираем «Sending conf BDPU».
Мы видим, что появился коммутатор. Опять нажимаем «Launch Attack», но сейчас выбираем «Claiming Root Role».
Вы корень дерева STP. Этим можно гордиться!
Защита
Вначале запретим BPDU пакеты с портов, на которых нет никаких коммутаторов. Ну, если же пакетик пришёл, тогда переводим порт в shutdown режим. Переключим все порты в режим portfast, а после, клиент подключенный к порту, не будет принимать участия в разрешении маршрутов по STP:
conf t # перевод в режим глобального конфигурированияconf t
int range f0/1-24
spanning-tree portfast
spanning-tree portfast bpguard default
int f0/1
spanning-tree guard root
Подделка MAC-адресаint range f0/1-24 # перевод в режим конфигурирования всех портов
spanning-tree portfast # включаем portfast
spanning-tree portfast bpguard default # запрещаем "гуляние" bdpu пакетов
int f0/1 # выбираем 1 порт
spanning-tree guard root # указываем что порт - корневой
Атака
Тут всё просто. Меняем наш mac на другой с помощью macchanger, тем самым можем представиться другим хостом.
Напомню:
Защитаmacchanger -r
macchanger --mac XX:XX:XX:XX:XX:XX
macchanger -r # сменить на рандомный mac-адрес
macchanger --mac XX:XX:XX:XX:XX:XX # меняем mac на указанный
Команды для защиты почти одинаковы как в ситуации с переполнением CAM таблицы:
urity maximum 2conf t
int range f0/1-24
switchport mode access
switchport port-security
switchport port-security violation shotdown
switchport port-sec
arp timeout 60
conf t # перевод в режим глобального конфигурирования
Нападаем на DHCPint range f0/1-24 # перевод в режим конфигурирования всех портов
switchport port access # указываем, что все выбранные порты будут работать в режиме доступа
switchport port-security # включаем функицию port-security
switchport port-security violation shotdown # указываем коммутатору что нужно отключить порт (shutdown)
switchport port-security maximum 2 # указываем сколько mac-адресов можно подключиться к порту
arp timeout 60 # если в течении минуты подключиться больше максимума, тогда отключаем порт
Также можем указать статический mac-адрес. (
switchport port-security mac-address XXXX.XXXX.XXXX
Теория
- Dos атака. Пентестер посылает огромное количество DHCP пакетов с разными MAC-адресами. Сервер выделяет ip-адрес из нула, а нул имеет ограничения и может закончиться. После такого сервер не сможет обслуживать клиентов больше.
- Можно развернуть свой собственный сервер и выдавать наши настройки сети клиентам. Затем появляются возможности от прослушивания трафика до подделки DNS ответов и т.д. Для этого способа требуется вывести настоящий сервер, используя 1 способ.
Защита
Нам поможет DHSP Snooping или ограничение запросов. Коммутатор получает пакет, затем сравнивает MAC-адрес в запросе с MAC-адресом, который был прописан на порту. В этой технологии существуют доверительные порты (trasted) и недоверительные (untrasted).
conf t # перевод в режим глобального конфигурированияconf t
ip dhcp snooping
ip dhcp snooping vlan 5
int f0/1
ip dhcp snooping trust
Или ограничение запросов:ip dhcp snooping # включаем dhcp snooping
ip dhcp snooping vlan 5 # # указывем vlan 5
int f0/1 # выбираем порт, подключенный напрямую к DHCP
ip dhcp snooping trust # включаем режим trust для этого порта
conf t
int f0/24
ip dhcp snooping limit range 125
conf t # перевод в режим глобального конфигурирования
Проникаем в PVLANint f0/24 # выбираем все порты
ip dhcp snooping limit range 125 # устанавливаем ограничение в 125 запросов в секунду
Теория
Воспользуемся этой атакой для получения доступа к соседнему PVLAN через маршрутизатор. PVLAN использует три вида портов: isolated, promiscuus, community. Данные клиентов можно передать только с помощью двух последних.
Если у нас в сети есть маршрутизатор, он может установить связь с клиентами в одном PVLAN на isolated портах. Можно изменить IP-адрес назначения на цель находящуюся на другом порту isolated, а MAC-адрес назначения на адрес маршрутизатора.
Защита
Что-бы такого не случилось на маршрутизаторе создадим access list, где запрещается прямая передача данных между сегментом сети:
conf t # перевод в режим глобального конфигурированияconf t
ip access list extended vlan
deny ip 192.168.0.0 0.0.0.255
permit any any
exit
int f0/1
ip access group pvlan in
ip access list extended vlan # создаём access list
deny ip 192.168.0.0 0.0.0.255 # указываем подсети для запрета (в нашем случае наши)
permit any any # указываем, что всё остальное передавать разрешено
exit # выходим
int f0/1 # выбираем 1 порт
ip access group pvlan in # привязываем к нашему списку с названием pvlan