Безопасная Cisco

в 8:00, , рубрики: Cisco, cisco ios, security, информационная безопасность, обучение, Сетевые технологии, системное администрирование

Всем привет!
Многие из вас видели и читали прекрасные материалы под общим названием «Сети для самых маленьких». Собственно, я не претендую на лавры, но решил написать нечто подобное в области безопасности сети на основе оборудования Cisco.

Первый материал будет посвящен BaseLine/L2 Security, т.е. тем механизмам, которые можно использовать при начальной конфигурации устройств а также на L2 коммутаторах под управлением IOS.
Всем, кому интересно, поехали!

Допустим, у нас brand-new [switch/router], для первой главы не принципиально. Мы подключаемся к нему с помощью консольного провода (более подробно описано Часть.1 Сети для самых маленьких). Т.к. мы не хотим, чтобы железка лежала у нас на столе или (если она уже в стойке) стоять и мерзнуть в серверной, сразу настроим на ней удаленное управление.

Remote control & credentials

Для того, чтобы подключаться удаленно нужно иметь собственные credentials. При подключении через консоль, мы можем попасть в привилегированный режим без ограничений. Это, как понимаете, не особо безопасно, хотя если злоумышленник уже смог физически получить доступ к железке, о какой безопасности в принципе можно говорить… Но с учетом подхода defense-in-depth установить пароль на привилегированный режим все-таки стоит.
В IOS имеется 4 варианта-уровней хранения паролей: 0, 4, 5, 7:

  • 0 уровень: enable password Qwerty!23 – хранение данных в открытом виде.
  • 4 уровень: enable secret Qwerty!23 – преобразование данных в SHA256 Encryption в IOS 15, т.к. «change to new encryption, md5 can be deprecated soon».
  • 5 уровень: enable secret Qwerty!23 – преобразование данных в MD5 Hash.

Рассмотрим их на примере команды enable с параметрами. Для эмуляции коммутатора используем IOU на GNS3v1.0, как сделать описано тут.
Посмотрим конфигурацию, как видим установить одинаковые пароли не удалось (т.к. у меня Version 15.1 на IOU Switch — используется уровень 4):
image
И 7 уровень: service password-encryption, после ввода этой команды, исключительно 0 уровень хранения преобразуется в 7 по протоколу шифрования Cisco:
image
Можно предположить, что 7 уровень надежнее 4 и 5 с точки зрения безопасности, но это не так, о чем можно почитать, например, в этом материале.
Чтобы дополнительно увеличить уровень безопасного подключения к устройству введем следующие команды (здесь команды вводятся на маршрутизаторе с IOS ver. 15.4, т.к. нужных команд на коммутаторе не оказалось из-за особенностей релиза):
image
Что сделали: установили требование о минимальной длине пароля в 10 символов, создали пользователя с максимальным уровнем привилегий и назвали его «NotAdmin».
Использовать имена пользователей типа cisco, admin, root и т.п. не рекомендуется. Как видите пароль Qwerty!23 не подошел из-за контроля его длины (если у вас трудности с паролями попробуйте что-то из такой практики (I can never remember my password = !cNrmp, Quarter pounder with cheese = .25#erwchz, How many times do I need to change my password? = hmtd!n2cmp?). Далее сгенерировали ключи для защищенного соединения и установили параметры подключения с использованием только ssh. Также с этим конфигом контролируем количество неудачных попыток входа в период времени, тем самым защищаем от brute-force.
При всем этом использоваться будет локальная база с именами пользователей. Аналогичным образом (local) настроим и консольный порт. Если мы будем использовать другую учетную запись, уровень привилегий которой не указан или ниже 15 (по умолчанию имеется три уровня привилегий: 0, 1, 15), вводить пароль нужно будет при входе для учетной записи и при активации привилегированного режима для enable.
При конфигурировании парольного доступа категорически не рекомендуется использовать команду password.
Осталось повесить IP-адрес на устройство (может быть еще и dg, зависит от того OOB management network у вас или нет), при этом желательно, чтобы сеть управления была выделена отдельно.
Все, устройство готово к удаленному употреблению.
Да, если вдруг вы забыли пароли, то помощь тут. Конечно, если вы не использовали no service password-recovery.
Существует, скажем так, два подхода к использованию безопасных механизмов удаленного управления устройствами Cisco. Без AAA мы рассмотрели выше. Теперь с использованием AAA.
Что такое AAA – аутентификация, авторизация, аккаунтинг или контроль над выделяемыми ресурсами. Как видно AAA очень гранулирована с точки зрения доступа, что как раз и повышает уровень безопасности. Насколько актуально ее использование зависит от конкретной архитектуры. Активируется все просто:
image
Итак, команды на скрине: создали 2 пользователей, активировали AAA и применили 2 метода (Method-List) с параметрами – default local, которые означают что, проверяться при аутентификации и авторизации будет локальная база на всей железке, за исключением авторизации на консольном порту, для этого ввести нужно aaa authorization console.
Собственно, аналогичным образом можно создавать кастомные Method-Lists и применим его на vty:
image
Как понимаете, дополнительно необходимо настроить radius/tacacs сервер: radius-server host 192.168.1.100.
Порядок проверки в Method-List: radius (yes/no), если не доступен, то проверить в enable. Логика Method-List такая, что сначала проверяются именные листы, а только потом лист по умолчанию.
Еще одна интересная security команда: aaa local authentication attempts max-fail 3. Если пользователь исчерпает положенные 3 попытки, его учетная запись блокируется.
Что еще, если честно много всего…
Удаленное управление через vty можно ограничить, используя ACL (что такое ACL и с чем их едят можно прочитать в самой первой ссылке, в части про NAT и ACL), делается это примерно так:
image
И в принципе сеть управления лучше отделить от остальной сети передачи данных.
Неиспользуемые порты управления нужно отключить на ввод команд:

line aux 0
no exec
no transport input
no transport output

И в дополнение установить время простоя интерфейса: exec-timeout 10 0.
Еще одной хорошей практикой является установка различных информационных сообщений – баннеров. Для чего? Ну, например, для того, чтобы уведомить «случайно» попавшего админа на управляющий интерфейс железки вот об этом:

banner login c Warning! Non Authorization Access Is Restricted c

Есть у Cisco такой хороший протокол как CDP, и нам с точки зрения ИБ, его нужно бы потушить или глобально no cdp run либо отдельно на интерфейсе interface <interface-id>, no cdp enable. Отнеситесь к отключению внимательно если у вас Cisco VoIP, т.к. по CDP передается конфигурация в телефоны.
Для управления (если возможно) не используем HTTP, только HTTPS:

no ip http server
ip http secure-server

Отключаем Gratuitous ARP – это из разряда «не ждали, а он приперся», такие пакеты могут использоваться при APR Poisoning, отключается командой no ip gratuitous-arps.
Также в IOS есть авто конфигурация безопасности: auto secure — Wizard для настройки базовых параметров безопасности.
Проинспектировать нужно и такие параметры, которые желательно было бы отключить (в последних версиях IOS они отключены по умолчанию и в большинстве относятся к L3): TCP/UDP Small-Servers, Finger, Identification (auth) Protocol, PAD, Autoloading Device Configuration, IP Source Routing, IP Directed Broadcast
И еще: отключите все ненужные сервисы и протоколы, административно погасите неиспользуемые интерфейсы, не забудьте про NTP (ntp server), журналирование и baseline config:

service tcp-keepalives in
service tcp-keepalives in out
snmp-server enable traps cpu threshold
.........
service timestamps log datetime
secure boot-image
secure boot-config

Вроде бы все, если что забыл, прошу отписаться в комментарии, по крайней мере JDima, всегда делал стоящие комментарии.

L2 Security

После того как разобрались с безопасным доступом приступим к L2 information security risk mitigation. Есть такой документ: CISCO LAYER 2 ATTACKS & MITIGATION TECHNIQUES, в котором отражено следующее:
image
Итак, что такое коммутатор, как он работает, широковещательный домен, VLAN и иная базовая теоретическая часть круто описана в… да-да-да «Сети для самых маленьких. Часть 2. Коммутация».
VLAN Hopping – тип атак, когда злоумышленник получает доступ к VLAN, например, при принудительном согласовании режима работы порта. Сделать это можно с помощью этой утилиты, она есть и в Kali. Вообще на новых коммутаторах это не очень проходит, но суть проблемы заключается в работе DTP в режиме auto умолчанию. Но если ввести команду switchport mode access на пользовательских портах (на транковых DTP должен работать, no negotiate), то согласовать режим у злоумышленника не получится.
Также переведите все неиспользуемые порты в какой-нибудь VLAN 2451, нигде не используйте или отключите интерфейс VLAN1 (interface vlan 1, shutdown) и еще задайте на транковом порту, например, native vlan 20, потому что по умолчанию native vlan имеет id=1.
image
Тоже самое делает команда vlan dot1q tag native из режима глобальной конфигурации, но у меня ее не оказалось…
Кроме обычных VLAN имеются вот такие (Keith Barker copyright):
image
Что можно увидеть из этой иллюстрации:

  • Vlans бывают: Primary и Secondary: Isolated или Community.
  • Vlans types: Isolated (может быть только в единственном экземпляре, связь внутри vlan отсутствует, только с Promiscuous), Community (много, связь внутри Vlan есть и с Promiscuous)
  • Ports Types: Promiscuous — Primary Vlan port что-то типа dg, также Isolated и Community
  • Private Vlans требуют включения VTP transparent: vtp mode transparent.

Повторяться сильно не буду, все подробно описано тут или тут. Небольшой пример:

vlan 101
private-vlan primary
vlan 201
private-vlan community
vlan 202
private-vlan community
vlan 301
private-vlan isolated
...........
vlan 101
private-vlan association 201-202,301

Применять или нет решать вам в зависимости от целей.
Вроде бы все ясно, однако если Promiscuous port маршрутизируем, то существует возможность попасть из ISOLATED в другие VLAN, путем посылки подкрафченного пакета до L3 устройства. Закрывается такая возможность с помощью ACL на маршрутизаторе.
Примерно схожий функционал c Isolated VLAN имеется при настройке PVLAN Edge или Protected port. Настраивается это на каждом интерфейсе отдельно командой: switchport protected.
Ну и в завершении с VLAN рассмотрим ACL для VLANs: VLAN ACL (VACL) или VLAN map а также MacSec.
Если возникает необходимость контролировать трафик внутри VLAN нужно определить трафик и повесить его на нужный VLAN, примерно вот так:

access-list 1 permit 192.168.1.0 0.0.0.255
access-list 2 permit any
vlan access-map mymap 10
match ip address 1
action drop
exit
vlan access-map mymap 20
match ip address 2
action forward
exit
vlan filter mymap vlan-list 5-10
end

Создаем обычный список доступа, который будет использоваться в VACL. Определим VLAN access map. Определим действие при совпадении трафика со списком. Применим к VLAN. 1 класс трафика будет останавливаться, весь другой пересылаться.
Интересная функция в IOS — MacSec.
Вот такой набор команд (к примеру на 2 устройствах):

int gig0/2
cts manual
sap pmk Qwerty123

Настроив на L2 устройствах, на портах через которые два коммутатора соединены между собой, получим симметрично зашифрованный канал (pmk на устройствах должен быть одинаковым).

CAM protection
Если взять утилиту macof (есть в Kali) и запустить ее на генерирование MAC адресов с клиента подключенного к коммутатору, то в зависимости от модели коммутатора через некоторое время он станет хабом. Почему? Из-за того, что место в CAM таблице закончится. Для того чтобы это предотвратить существует режим port security на интересующем нас интерфейсе:
image и image
Работает этот режим только на trunk или access port, но не на dynamic port.
У режима имеются параметры: Protect (no packets if violation, no log), Restrict (no packets if violation, log: snmp, sylog), Shut down port (default, max=1, log: snmp, sylog), Shut down Vlan. Есть режимы Dynamic (memorize 5 first mac), Static (manually write into running config static mac) и еще sticky (brand new network -> auto write in running config).
Да и в конце настройки нужно не забыть активировать сам режим.

Snooping table
Для того, чтобы обезопасить себя от атак на dhcp можно применять dhcp snooping table. Суть заключается в том, что коммутатор запоминает за каким портом у него легальный dhcp сервер, тем самым выполнить dhcp starvation attack (ну или кто-то просто принес из дома dlink) с портов доступа не получится.
image
Включается режим отдельно на всю железку и vlans:
image
Ограничить количество запросов dhcp можно командой ip dhcp snooping limit rate 20. И по необходимости посмотреть имеющиеся связи:
image
Изначально в этом режиме по умолчанию все порты являются не доверенными.

DAI
На основе snooping table работает DAI – dynamic arp inspection, т.е. динамически сравнивает MAC-IP и тем самым предотвращает ARP poisoning: ip arp inspection vlan 456.
Это тип атаки при которой рассылаются ARP пакеты с измененными MAC адресами, после обновления ARP таблицы проводится MITM.
image
Если же в инфраструктуре нет DHCP, то аналогичного функционала можно добиться с использованием arp access-list:

arp access-list NEW-ARP-ACL
permit ip host 10.1.1.11 mac host 0011.0011.0011
ip arp inspection filter arpacl vlan 456

Также есть функционал для сравнения ARP Validation Checks.

IP Spoofing/Source Guard
Опять же на основе snooping table функционирует IP Spoofing/Source Guard.
Яркий пример атаки с подменой IP, когда злоумышленник генерирует различные пакеты с разными IP DESTINATION и одинаковым IP SOURCE. В итоге все Destination пытаются ответить Source и проводят его DDoS.
image
Этот набор команд поможет защититься от атак типа IP Spoofing.
image

STP
Как вы знаете основной задачей STP является устранение петель в топологии, в которой есть избыточные соединения. Но возможно реализовать такую схему, когда нарушитель станет root bridge и опять же реализует MITM:
image
Для того, чтобы активировать защиту глобально на всех портах необходимо использовать команду spanning-tree portfast bpduguard default.
Далее переводим порт в режим portfast и получаем… Вместо тысячи слов:
image
Отдельно на интерфейсе это делается командой: spanning-tree bpduguard enable.

Storm Control
image
Это еще один механизм контроля за пересылаемыми пакетами при включенном STP, имеющий следующие параметры:

  • Производится мониторинг: Broadcast/Multicast/Unicast
  • Устанавливаются пороговые значения: %/PPS/BPS
  • Выбирается действие: Slow/Shutdown

storm-control broadcast pps 500 100
storm-control action shutdown
errdisable recovery cause storm-control
errdisable recovery interval 60

В дополнение к вышеописанному существуют такие технологии как: Root Guard, EtherChannel Guard, Loop Guard, Port Blocking.

За сим все, спасибо, что дочитали до конца. Надеюсь, информация окажется полезной.

Автор: kimssster

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js