Всем привет.
Хотя я уже далек от администрирования сетевого оборудования, но для тренировки мозга время от времени пользуюсь виртуальными лабораториями типа CSRv, FTDv, APIC-EM. Разумеется я не мог не обратить внимания на свежее издание Базаров М. М. "Сети глазами хакера", СПб.: БХВ-Петербург, 2025. Сразу видно что ввиду внешней политики страны издания в первую очередь страдают умные головы в той же стране. Так и здесь, знаменитое издательство "БХВ-Петербург" последние годы все чаще просто переиздает популярные книги прошедших лет, либо книги современных ИТ-писателей из Индии. В данном случае изданы "записки на полях" сетевого инженера-практика. Прошу прощения, но ниже главу из книги я вычитывал трижды, хотя опечатки могли все равно остаться.
Безопасность коммутационной матрицы САМ
У Cisco IOS есть несколько проблем сетевой безопасности. Давайте посмотрим, на какие из них стоит обратить внимание в первую очередь.
САМ (Content Addressable Memory) - это ассоциативная память коммутатора, внутри которой хранится таблица МАС-адресов и связанных с ними портов. Это несложный механизм, однако уже очень давно существует хулиганский вектор DоS-атаки, при которой атакующий переполняет САМ-таблицу с помощью рассылки Ethernet-кaдpoв с рандомизирующимися МАС-адресами источника, что перебивает коммутационную матрицу. Очень известный прием, но не упомянуть о нем я не могу.
Защитить САМ-таблицы своих коммутаторов очень просто, достаточно использовать Port Security. В нашем случае эта настройка подходит для ограничения количества МАС-адресов за портом коммутатора. Допустим, если мы настроим ограничение в 20 МАС-адресов на порту, а атакующий начнет в эфире флуд (каким-нибудь macof), то к порту будут уже применяться ограничения - в зависимости от настроенной политики. Вот пример конфигурации, при которой ставится ограничение в два МАС-адреса, а при нарушении этого ограничения порт будет выключен.
Router01(config)# interface range gX/X
Router01(config-if)# switchport port-security maximum <value>
Router01(config-if)# switchport port-security violation shutdown
При такой конфигурации в момент нарушения политики МАС-адресов порт будет переведен в состояние err-disabled. Чтобы настроить автоматическое восстановление порта из этого состояния, понадобится еще одна команда:
Router01(config)# errdisaЬle recovery interval 120
Router01(config)# errdisaЬle recovery cause psecure-violation
Защита DНСР-сервера от атак истощения
DHCP Exhaustion - это сетевая атака, позволяющая вызвать у DНСР-сервера отказ в обслуживании. Атакующий выполняет рассылку ложных сообщений DHCPDISCOVER с рандомными МАС-адресами источника, вынуждая DНСР-сервер отвечать на каждый такой DISCOVER и выдавать ему адрес.
Вообще, для защиты DНСР-сервера есть технология DHCP Snooping, разобранная в предыдущей главе. Мы тогда разобрали концепцию защиты именно от появления ложного DНСР-сервера, а сейчас поговорим про митигацию атаки истощения адресного пространства.
DHCP Snooping также позволяет настроить Limit Rate: это параметр, отвечающий за ограничение количества DНСР-сообщений на порту коммутатора. Обычно этот Limit Rate настраивается именно на портах доступа, куда подключаются конечные станции. Сами инженеры Cisco рекомендуют использовать ограничение не более 100 пакетов в секунду, однако тут уже стоит отталкиваться от особенностей своей инфраструктуры и подбирать значение вручную. Делайте это аккуратно, чтобы случайно не срезать легитимный трафик.
Router01(config)# interface range fO/X-XX
Router01(config-if)# ip dhcp snooping limit rate <count>
Также стоит включить опцию проверки МАС-адреса в кадрах внутри DНСР пакетов:
Router01(config)# ip dhcp snooping verify mac-address
Если на порту окажется больше DНСР-месседжей, он просто упадет в состояние ERR-DISAВLED, будет заблокирован на логическом уровне, и администратору придется самому поднимать его из этого состояния. Однако Cisco IOS предлагает автоматическое восстановление работы порта, если его заблокировал какой-нибудь механизм защиты. Вот пример команды для автоматического восстановления порта после срабатывания Limit Rate при DHCP Snooping:
Router01(config)# errdisable recovery cause dhcp-rate-limit
Еще обычно настраивают таймер и задают время, через которое порт вернется из состояния ERR-DISABLED. Тут отталкивайтесь от инфраструктуры и своего видения:
Router01(config)# errdisabe recovery interval <seconds>
Домены отказоустойчивости HSRP & GLBP
Это проприетарные протоколы Cisco, предназначенные для резервирования шлюзов. Домены HSRP/GLBP могут подвергнуться атакам спуфинга, и вы к ним должны быть готовы. Есть два метода защиты.
Первый метод - выставить максимальный приоритет 255. Если в сети уже существует ACTIVE/АVG-спикер с максимальным значением приоритета, то инъекции атакующего будут бесполезны и он не сможет перехватить эти роли для последующей МIТМ-атаки.
HSRP (Маstеr-спикер):
Router01(config-if)# stantby <group_number> priority 255
GLBP (для АVG-спикера отталкивайтесь от особенностей работы протокола GLBP, там все сложнее по сравнению с HSRP):
Router01(config-if)# glbp <group_number> priority 255
Второй метод - использовать криптографическую аутентификацию. Выберите стойкую парольную фразу для защиты НSRР/GLВР-доменов, чтобы компьютер атакующего не смог вмешаться в домен отказоустойчивости. К этой процедуре нужно отнестись серьезно, т. к. атакующий способен прослушать пакеты этих протоколов, выдернуть криптографический хеш и сбрутить пароль. Вы не должны этого допустить. Вот как настраивается аутентификация для этих протоколов.
HSRP:
Router01(config-if)# standby <group_numЬer> authentication md5 key-string <PHRASE>
GLBP:
Router01(config-if)# glbp <group_numЬer> authentication md5 key-string <PHRASE>
Кстати говоря, оборудование Cisco может похвастаться наличием Кеусhаin аутентификации. Эта настройка позволяет создать цепочку из нескольких ключей и даже настроить специальные временные промежутки, в рамках которых ключи будут транслироваться между спикерами, будь то домен отказоустойчивости или домен динамической маршрутизации. Использование Кеусhаin-аутентификации усложняет жизнь атакующему в несколько раз, ведь· необходимо сбрутить все ключи, угадать их порядок и тайминги.
Вот пример настройки Keychain:
Router01(config)# key chain Router01
Router01(config-keychain)# key 1
Router01(config-keychain-key)# key-string <PHRASE>
Router01(config-keychain)# key 2
Router01(config-keychain-key)# key-string <PHRASE>
Получилась цепочка из двух ключей. Вы можете применить ее, например, для домена отказоустойчивости GLBP или для домена маршрутизации EIGRP. Продемонстрирую два примера. Вместе с цепочкой ключей мы будем использовать МD5.
Настройка для защиты домена отказоустойчивости GLBP:
Router01(config-if)# glbp <group_number> authentication md5 key-chain Router01
Настройка для защиты домена маршрутизации EIGRP:
Router01(config-if)# ip authentication mode eigrp <ASN> md5
Router01(config-if)# ip authentication key-chain eigrp <ASN> Router01
Router01 в конце команды - это название созданной цепочки, не перепутайте.
Таким образом мы можем защитить домены отказоустойчивости и домены маршрутизации, реализованные на протоколах Cisco. Для EIGRP, кстати, не будет лишним использоватb пассивные интерфейсы. Они запрещают рассылку пакетов приветствия Hello на интерфейсах внутри сети, что лишает атакующего всех шансов воздействоватb на домен маршрутизации.
Router01(config)# router eigrp <ASN>
Router01(config-router)# passive-interface <interface>
Отключение DP
DP (Discovery Protocols) - протоколы, предназначенные для автоматического обмена служебной информацией между сетевыми устройствами. Это облегчает сетевому инженеру процесс устранения сбоев. Но бывают настройки, при которых рассылка протоколов DP (CDP/LLDP) происходит во все сетевые интерфейсы устройства. Внутренний нарушителb при анализе трафика может перехватитb эти пакеты и получитb достаточно чувствителbную информацию об устройстве: версию прошивки, тиn модели, адресацию и прочее.
Рекомендуется выключать DР-протоколы на портах конечных станций. Однако если в сегменте естb IР-телефония, необходимо с осторожностbю выключатb протоколы на этих портах, т. к. DP также исполbзуются для работы IР-телефонии (VoIP):
Router01(config)# interface range fX/-XX
Router01(config-if)# no cdp еnаЫе
Router01(config-if)# no lldp receive
Router01(config-if)# no lldp transmit
Выключение DTP и смена NVLAN
DTP - это, на мой взгляд, врожденная болезнь коммутаторов Cisco. Бесполезный протокол, предлагающий автоматическую систему транкинга, которая ухудшает дизайн сети. Сеть в резулbтате становится менее предсказуемой. Сетевой инженер сам должен решать, где должен быть транк-порт, и явно его настраивать. Использование этого протокола ставит под удар безопасностb сегмента, потому что если администратор прозевает наличие дефолтных портов коммутаторов Cisco (которые еще и включены по умолчанию), то атакующий может подключиться к коммутатору, отправить кадр DTP Desirabe и тем самым обойти VLАN-сегментацию на коммутаторе.
Также стоит упомянуть о специфическом векторе атаки DouЫe Tagging. Для современных инфраструктур эта атака скорее теоретическая и работает, если присутствует дефолтный Native VLAN 1. Поэтому всегда стоит менятb значение Native VLAN (NVLAN) на любое другое. Кстати говоря, Native VLAN - это специальный VLAN, куда падает нетегированный трафик. Чтобы выключитb DTP, нужно в первую очередb перевести порты коммутатора в режим доступа, а также выключитb сам DTP:
Router01(config)# interface range gO/X-XX
Router01(config-if)# switchport mode access
Router01(config-if)# switchport nonegotiate
Кроме того, рекомендуется провести перечисление неисполbзуемых портов коммутатора, создатb для них специалbный VLAN, а-ля «VLAN Shutdown 666», и переместить их туда, а затем перевести в выключенное состояние. Таким образом уменьшится вероятность несанкционированного подключения к сети.
Router01(config)# interface range gO/X-XX
Router01(config-if)# switchport mode access
Router01(config-if)# switchport nonegotiate
Риски при интеграции исполbзованных ранее коммутаторов Cisco
Если вам нужно установитb ранее исполbзованный коммутатор Cisco в другую сеть, обязательно проверbте состояние VTP на этом устройстве. VTP позволяет централизованно управлятb базой данных VLAN, и актуалbностb этой базы отслеживается по номеру ревизии. Если получится так, что на старом коммутаторе Cisco номер ревизии VTP больше, то кадр с номером ревизии мржет распространитbся по транковым каналам (а на коммутаторе могут быть другие сети VLAN). Из-за этого текущие коммутаторы обновят свои БД VLAN, и может возникнутb сетевой паралич. Всегда проверяйте настройки VTP на старом оборудовании, которое хотите поместитb в сетb. Вы можете сброситb номер ревизии, если измените имя VТР-домена на любое другое и поставите требуемое.
Router01(config)# vtp mode client
Router01(config)# vtp domain shadjfkshdfjaks
Router01(config)# vtp domain <necessary vtp domain name>
Также можно переключить коммутаторы в режим VTP Transparent, они не участвуют в процессах VTP.
Router01(config)# vtp mode transparent
Безопасность линии VТY
Терминальные линии VTY позволяют подключатbся к сетевому оборудованию удаленно (SSН/Winbox/НTTP/ API). Однако бывает, что VTY не защищены с помощью ACL, позволяющих фильтровать подключения к VTY толbко из определенных Management-noдceтeй, которые исполbзуют администраторы для управления оборудованием.
Хорошая практика - использовать концепцию fail2ban внутри инфраструктуры. Вдрут один из админских компьютеров будет заражен трояном, который найдет службы SSН/НТТР на оборудовании и начнет брутфорсить их? Также на службах SSH желателbно использовать аутентификации по ключу и запрет входа по паролю.
Вот пример простого ACL, который защищает линии VTY и разрешает подключение только из указанной подсети:
Router01(config)# access-list 10 permit <subnet> 0.0.0.255
Router01(config)# access-list 10 deny any log
Router01(config)# line vty О 15
Router01(config-line)# access-class 10 in
Строка access-class 10 in привязывает этот ACL к линиям 0-15.
Пароли Cisco IOS
У Cisco IOS есть проблемы с безопасностью хранения паролей внутри операционной системы. Не рекомендуется использовать типы паролей 4, 5 и 7, т. к. они подразумевают шифрование SНА-256, МD5 и Vigenere Cipher соответственно. Брутфорс таких паролей не составляет труда, а для типа 7 нужен просто дешифратор ciscot7 (https://github.com/theevilblt/ciscot7). Лучшая практика - использовать ТУРЕ 8, ТУРЕ 9 (PBKDF2, SCRYPT), а также ААА (Authentication, Authorization, Accounting) для централизованного управления учетными записями (RADIUS or TACACS+).
На примере ТУРЕ 8:
Router01(config)# еnаbе algorithm-type sha256 secret <password>
Router01(config)# username motor algorithm-type sha256 secret <password>
В ТУРЕ 8 исполbзуются SHA-256, 80-битная соль и 200000 итераций, что делает этот тип хеширования достаточно безопасным для защиты паролей. Сбрутить их будет очень сложно.
Безопасность при работе с SNMP
Если атакующий сбрутит строку SNMP RW, то это позволит ему прочитать настройки маршрутизатора и получить крайне чувствительную информацию об инфраструктуре (IР-адресация, конфигурация интерфейсов, учетные записи и пароли в хешированном виде). С этой информацией у атакующего есть все шансы проникнутb внутрь инфраструктуры и продолжить продвижение по сети.
Существуют два варианта решения этой проблемы:
□ установитb стойкую RW-фразу, которую будет крайне тяжело сбрутить.
□ ограничить сетевой доступ к UDP/161 путем настройки АСL-листов. Пусть этот порт участвует только во взаимодействии с легитимным SNМР-сервером.
Настройка новой RW-строки:
Router01(config)# snmp-server community <string> RW
Перед настройкой RW-строки обязателbно проверяйте связность между оборудованием Cisco и SNМР-сервером.
И второе решение - исполbзование ACL. Вот пример такого ACL, здесь разрешается только один адрес (адрес самого SNMP-cepвepa). Адаптируйте этот метод под, свой маршрутизатор, где наверняка есть ACL, т. к. на интерфейс роутера можно установить толbко один АСL-лист.
access-list 101 permit udp host <snmp_server_ip> any eq 161
access-list 101 permit udp host <snmp_server_ip> any eq 162
access-list 101 deny udp any any eq 161
access-list 101 deny udp any any eq 162
access-list 101 permit ip any any
Осторожность при фильтрации ICMP
Блокировать ICMP в сетевой инфраструктуре - грубая ошибка. Во-первых, из-за этого пропадет возможностb проводить диагностику: пинги и traceroute работатb не будут. Во-вторых, система PMTUD перестанет работатb, т. к. существует за счет работы ICMP Туре 3. Благодаря PMTUD можно избежать избыточной фрагментации, а это, в свою очередь, влияет на скорость передачи данных. Фильтруйте ICMP грамотно, отсекайте только ненужные типы.
No Full Cone NAT
NAТ в сетях настраивают часто, однако тут есть несколько подвидов настроек: Full Cone, Symmetric, Restricted и Port Restricted. Мы остановимся на первом варианте, т. к. он вызывает болbше всего проблем с безопасностbю.
При Full Cone NAТ входящие пакеты от любого внешнего хоста будут перенаправляться соответствующему хосту в локальной сети, если в таблице NAT присутствует соответствующая запись. Более того, номер порта источника в этом случае не имеет значения - он может бытb и 53, и 54, и вообще каким угодно, в этом виде NAТ проверяется толbко порт назначения, адрес назначения и L4-протокол.
Если атакующий находится за NAT, он сможет проникнуть внутрь инфраструктуры благодаря обычным статическим маршрутам сквозь пограничный роутер, т. к. из-за особенностей Full Cone NAТ его трафик будет маршрутизирован внутрь.
No Port Forward
Проброс портов, на первый взгляд, кажется оченb удобным решением, если нужно быстро организовать устройству доступ в Интернет. Однако это негативно сказывается на безопасности сети, т. к. проброшенный порт легко обнаружить, учитывая скорость современных порт-сканеров. Если такое устройство будет взломано, то атакующий сможет провести пивотинг внутрь инфраструктуры и эскалировать свое присутствие в скомпрометированной сети.
Рекомендую отказаться от проброса портов и вместо этого использовать VPN-cepвep.
Защита от UРnР-инъекций
UPnP (Universal Plug and Play) - группа протоколов, которые позволяют компьютерам с помощью специальных запросов получать доступ в Интернет. Использование UPnP - небезопасная практика, поскольку атакующий может найти порт UPnP и с помощью специальных запросов открыть для себя доступ к хостам за пограничным маршрутизатором (например, через Metasploit Framework).
Рекомендую отключить UPnP на сетевом оборудовании во избежание риска взлома внешнего периметра.
Выводы
Несмотря на то что я сделал акцент на Cisco IOS, все эти механизмы защиты реализованы у большинства вендоров сетевого оборудования. Применяйте эти техники у себя, но будьте осторожны: с настройками безопасности часто есть шанс «выстрелить себе в ногу» и нарушить нормальную работу сети.
No comments:
Post a Comment
А что вы думаете по этому поводу?