Безопасность маршрутизаторов Cisco

Маршрутизатор — это «первая линия обороны» нашей корпоративной сети непосредственно соприкасающаяся с Internet. Они часто применяются в качестве ключевых элементов в системах защиты сетей (например, firewall для фильтрации пакетов и ограничения прохождения определенного IP -трафика). Наиболее широко распространенным сейчас является оборудование фирмы Cisco Systems, которое благодаря различной реализации своей «фирменной» операционной системы Cisco IOS может приобретать свойства, необходимые администраторам.

А как его (маршрутизатор Cisco) защитить?

Список команд

В этом разделе собраны все команды для напоминания о возможных способах защиты Cisco маршрутизаторов. Всегда читайте документацию по каждой команде перед ее использованием.

Используйте Чтобы
enable secret Задать пароль для привилегированного доступа.
service password-encryption Обеспечить минимальную защиту для паролей в конфигурации.
no service tcp-small-servers
no service udp-small-servers
Избегать использования простых сервисов для DoS и других атак.
no service finger Избегать распространения информации о пользователях.
no cdp runningno cdp enable Избегать распространения информации об этом маршрутизаторе на соседние устройства.
ntp disable Предотвратить атаки на сервис NTP.
no ip directed-broadcast Помешать атакующим использовать маршрутизатор для smurf атак.
transport input Указать какие протоколы могут быть использованы удаленными пользователями чтобы войти через VTY или получить доступ к его TTY портам.
ip access-class Указать с каких IP адресов пользователи могут подключаться к TTYs или VTYs. Зарезервировать один VTY для доступа с рабочей станции администратора.
exec-timeout Не занимать VTY бесконечно долго бездействующей сессией.
service tcp-keepalives-in Обнаруживать и удалять «зависшие» сесии, освобождая используемые VTY.
logging buffered buffer-size Сохранять логируемые данные в буфере оперативной памяти маршрутизатора. В последних версиях IOS этот размер может идти совместно с параметром urgency threshold.
ip access-group list in Отбрасывать пакеты с поддельным IP адресом. Отбрасывать входящиеICMP redirects.
ip verify unicast rpf Отбрасывать IP пакеты в с поддельным адресом источника в случае симметричной маршрутизации на маршуризаторах поддерживающих CISCO Express Forwarding (CEF). Данная проверка известна как reverse path forwarding (RPF).
no ip source-route Отбрасывать IP пакеты, в которых включена опция source routing. Таким образом злоумышленник не получит обратно ответ на посланный пакет, если он использовал поддельный IP адрес.
access-list number action criteria log
access-list number action criteria log-input
Включить логирование пакетов удовлетворяющих определенному условию из access-list. Используйте log-input если это возможно в версии вашего IOS.
scheduler-intervalscheduler allocate Защититься от флуда и позволить работать важным процессам.
ip route 0.0.0.0 0.0.0.0 null 0 255 Быстро удалять пакеты посланные на несуществующие адреса.
distribute-list list in Фильтровать получаемую информацию о маршрутах чтобы предовратить использование неверных маршрутов.
snmp-server community something-inobvious ro listsnmp-server community something-inobvious rw list Включить SNMP версии 1, настроить аутентификацию и разрешить доступ только с некорых IP адресов. Используйте SNMP версии 1 только, если версия 2 недоступна. Следите за наличием снифферов в сети. Включите SNMP только если он нужен в вашей сети. Не настраивайте доступ на запись, если он вам не нужен.
snmp-server party…
authentication md5 secret …
Сконфигурировать аутентификацию посредством MD5 для SNMP версии 2. Включайте SNMP только, если он нужен в вашей сети.
ip http authentication method Производить аутентификацию соединений по HTTP (если вы включили HTTP сервер на вашем маршрутизаторе).
ip http access-class list Дальнейшее управление доступом к HTTP серверу, разрешая его только с некоторых хостов (если вы включили HTTP сервер на вашем маршрутизаторе).
banner login Установить предупреждающее сообщение для показа всем пользователям, кто пытается залогиниться на маршрутизатор.

Заметки по увеличению безопасности маршрутизатора Cisco

Cпособы повышения защищенности маршрутизаторов CISCO

Пароли

Пароли (и другие секреты, например SNMP последовательности) обеспечивают защиту от НСД маршрутизатора. Наилучший путь для работы с базой данных паролей — хранить их на аутентификационных серверах типа RADIUS или TACACS+. Однако в большинстве случаев на каждом маршрутизаторе остаются пароли для привилегированного доступа и другие пароли.

enable secret
Данная команда используется для установки паролей, которые предоставляют привилегированный доступ администратору в IOS. Данный пароль должен быть всегда установлен. Нельзя устанавливать enable password , т.к. данная команда использует слабую криптографию.

service password-encryption
Данная команда позволяет зашифровать пароли, CHAP секреты и другие данные, находящиеся в конфигурационном файле.

 

Контроль доступа

Доступ к маршрутизатору предполагает возможность переконфигурирования его, в том числе и несанкционированному. Поэтому проблема защиты от НСД при доступе имеет большое значение.

Доступ через консольный порт 
Необходимо помнить, что консольный порт имеет специальные привилегии. Например, если выдать команду BREAK на консольном порте в течение первых нескольких секунд после перезагрузки, то можно легко провести процедуру восстановления пароля, что приведет к получению несанкционированного доступа к маршрутизатору. Это означает, что атакующий, если он сможет провести процедуру перезагрузки маршрутизатора и если он имеет доступ к консольному порту (посредством прямого подключения, модемное подключение и т.п.), может получить доступ к системе.

Основной способ доступа 
Существует достаточное количество способов для подключения к маршрутизатору. CISCO IOS в зависимости от конфигурации поддерживает соединения посредством telnet, rlogin, SSH, LAT, MOP, X.29, V.120. Локальные асинхронные терминалы и модемы используют стандартные линии — TTY. Удаленные сетевые соединения (независимые от протоколов) используют виртуальные TTY (VTY). Для защиты необходимо на все линии доступа установить пароли, для VTY возможна команда no password для защиты.

По умолчанию удаленный пользователь может установить соединение с TTY через сеть, так называемый «reverse Telnet», что позволяет данному пользователю работать с модемом или терминалом, подсоединенным к данному TTY. Для защиты необходимо работать с командой transport input none , которая запрещает принимать соединения из сети. Если есть возможность , то необходимо разнести dial-in и dial-out модемы и запретить использование reverse Telnet для линий, которые используются в dial-in.

Управляющий VTY
Любые VTY должны быть сконфигурированы для того, чтобы принимать соединения только по протоколам, которые нужны. Это можно сделать с помощью команды — transport input. Например, по VTY ожидается прием только сессии telnet, для этого используем команду transport input telnet. Для поддержки telnet и SSH необходимо ввести команду transprot input telnet ssh. Также можно ограничить доступ с определенных адресов с помощью ip access-class.

В СISCO IOS используется ограниченное количество VTY (обычно пять). Когда все VTY используются, больше никто подсоединиться не может. В этом и есть возможность использования DoS атаки. Способ защиты — ограничить доступ с помощью ip access-class. Например, для одного VTY используется общий доступ, а для четырех — только с одной рабочей станции.

Также можно использовать команду exec-timeout для ограничения времени атаки.

Можно использовать команду для TCP keepalive входящих соединений service tcp-keepalive-in для защиты от атак на хосты.

Желательно отключить возможность использования отличных от IP протоколов для доступа к VTY.

Предупреждающий баннер
Для предупреждения возможности несанкционированного доступа к системе целесообразно использовать ограничивающие (предупреждающие) заголовки. Данные заголовки можно сконфигурировать с помощью banner login.

 

Плохо сконфигурированные сервисы управления

Многие пользователи управляют маршрутизаторами с помощью специальных протоколов, например, HTTP или SNMP.

SNMP

Данный протокол широко используется для мониторинга и управления маршрутизаторами. К сожалению, версия 1 данного протокола использует очень слабую схему аутентификации, базирующуюся на «community string», при которой пароль может передаваться в открытом виде. Поэтому необходимо использовать версию 2 , которая работает с алгоритмом MD5 и не передает пароль по каналам связи.

Если все-таки необходимо использовать версию 1, то необходимо быть внимательным при выборе community string (нельзя использовать public или private). Необходимо избегать использования одних и тех же community string для различных устройств. Если возможно, то установить для periodic SNMP ver 1 polling в read-only community string.

Для версии 1 необходимо использовать ACL на команде snmp-server community для ограничения доступа на станции управления. Нельзя использовать команду snmp-server community в окружении, где используется версия 2 (переключает в версию 1).

Для версии 2 необходимо сконфигурировать защиту с помощью команд authentication и md5 в конфигурации snmp-server party. Если возможно, то лучше использовать различные секреты MD5 для каждого маршрутизатора.

HTTP
Для облегчения конфигурирования маршрутизатора есть возможность «поднять» на нем HTTP сервер. Пароль передается в открытом виде.

Для защиты необходимо ограничить перечень IP-адресов путем ip http access-class. Также можно использовать аутентификацию с использованием команд ip http authentication.

 

Управление и доступ через Интернет (или другие незащищенные сети)

Многие пользователи управляют своими маршрутизаторами удаленно, и часто через Интернет. Все схемы удаленного управления подвержены атакам, например, Packet Sniffers. Злоумышленники очень часто взламывают машины ISP или другие компьютеры в Сети и устанавливают программы-сниферы, которые мониторят весь трафик, пытаясь заполучить парольную фразу (если используется telnet, HTTP, snmp v.1). Защита — использование технологии S\Key, Kerberos, RADIUS, TACACS+. Для выявления сниферов можно использовать: http://www.l0pht.com/antisniff

 

Логировние

Способы ведения логов в CISCO

  • AAA logging — ведение записей о пользователях , которые подключаются.
  • SNMP trap logging — посылка данных об изменениях в системном статусе.
  • system logging — записывает огромное множество событий: logging console logging ip-address, logging trap logging monitor, termonal monitor logging buffered

Сохранение информации 
По умолчанию логируемая информация отсылается только на асинхронный консольный порт.

Почти все маршрутизаторы сохраняют информацию logging в local RAM buffer, имеющий конечный размер ( show memory, logging buffered buffer-size).

Также можно сохранять данные на syslog сервер, logging server ip-address, logging trap urgency.

Если маршрутизатор имеет real-time clock или запущен NTP, то можно записать лог с time-stamp — service timestamps log datetime msecs.

Запись нарушений списков доступа
Если используются списки доступа для ограничения трафика, есть возможность записи их нарушений. Команды — в старых версиях — log, в новых — log-input.

 

Защита IP-маршрутизации

Anti-spoofing
Множество сетевых атак проводятся с подмененными IP-адресами источника атаки, что снижает риск для атакующего быть замеченным.

Система защиты от спуфинга (anti-spoofing) должна быть использована на каждой точке, где существует возможность подобной атаки, обычно устанавливают данную защиту на границах сети, между большими блоками адресов или между доменами сетевого администрирования.

Защита с помощью ACL
К сожалению, нет общих примеров по конфигурации ACL, каждый раз поход различный. Однако основа одна: отбросить пакет, который пришел с интерфейса, с которого данный адрес прийти не может. Например, система имеет два интерфейса, один из них смотрит в сеть Интернет, а другой в сеть Интранет. Все пакеты, принятые из сети Интернет с адресами источника внутренней сети (адреса Интранет), будут отброшены. Если CPU позволяет, то anti-spoofing должен быть включен на каждом интерфейсе.

Пример:

Anti-spoofing with RPF checks
Практически во всех CISCO IOS , которые поддерживают CISCO Express Forwarding (CEF), существует возможность «заставить» маршрутизатор проверять source address каждого пакета. Это будет работать только в случае, если маршрутизация симметричная. Если сеть будет построена так, что путь трафика от хоста А до хоста В будет проходить другим путем, чем трафик от B до A, проверка всегда будет давать неверный результат, и связь между хостами будет невозможна. Данная асимметричная маршрутизация обычно используется на Internet core. Данная проверка известна как reverse path forwarding (RPF) и включается с помощью команды ip verify unicast rpf.

Controlling Directed Broadcasts
Для атаки типа «smurf» обычно используется IP directed broadcasts.

IP directed broadcast — это пакет, который посылается на адрес broadcast подсети, к которой посылающая машина напрямую не подключена. Directed broadcast маршрутизируется через сеть как обыкновенный пакет unicast пока не достигнет подсети назначения, где и будет конвертирована в link-layer broadcast. Согласно архитектуре протокола IP только последний маршрутизатор в цепочке, тот который напрямую подсоединен к подсети-назначения, может идентифицировать directed broadcast.

При атаке типа «smurf» атакующий посылает пакеты ICMP echo requests, используя сфальсифицированный адрес источника, и все хосты подсети отвечают на подмененный адрес источника.

Посылая поток таких запросов, атакующий может создать мощный поток ответов на подмененный адрес.

На интерфейсе маршрутизатора CISCO для защиты можно использовать команду no ip directed-broadcast, при этом необходимо сконфигурировать no ip directed-broadcast на каждом интерфейсе каждого маршрутизатора, который может быть подсоединен к подсети назначения.

http://users.quadrunner.com/chuegen/smurf.cgi

Path Integrity
Много атак проводятся с помощью обмана маршрутизации. Если злоумышленник контролирует маршрутизацию, он может переслать трафик куда угодно, подменить адрес источника и т.п.

IP Source Routing
Протокол IP поддерживает опцию source routing, которая позволяет отправителю IP-пакета контролировать путь пакета до получателя. Ранние реализации IP отрабатывали пакеты source-routed неправильно, что могло в результате посылки на нее пакета с опцией source routing привести в зависанию машины.

Маршрутизаторы CISCO с установкой no ip source-route не будут пересылать пакеты IP, в которые будет включена опция source routing.

ICMP Redirects
Сообщение ICMP redirect «заставляет» конечное СВТ использовать указанный маршрутизатор для достижения определенной точки в сети. В нормально функционирующей сети маршрутизатор посылает пакеты redirects только хостам, расположенным в локальной подсети, ни один конечный узел не посылает данные пакеты, и ни один такой пакет не проходит больше одного сетевого hop. Однако атакующий может обойти эти правила . Хорошая идея -отфильтровать входящие ICMP redirects на входящем интерфейсе любого маршрутизатора, находящегося на границе между административными доменами.

Необходимо отметить, что данное фильтрование защищает от атак redirect , которые начинаются удаленными злоумышленниками.

Routing Protocol Filtering and Authentication
Если используется динамическая маршрутизация, которая использует аутентификацию, то ее необходимо использовать. Это позволяет избежать проблемы подмены данных маршрутизации.

В части ISP или других больших сетях целесообразно использовать фильтрацию протоколов маршрутизации с использованием команды distribute-list in. Например, если вы используете динамическую маршрутизацию для связи с пользовательской «stub» сетью, вам не нужно принимать данные об обновлении маршрута с данной сети.

 

Защита от флуда

Множество атак типа «Отказ в обслуживании» (DoS) основаны на пересылке бесполезных пакетов. Данные действия занимают полосу пропускания, снижают время ответа хостов и могут привести к перезагрузке маршрутизаторов.

Правильная настройка маршрутизаторов снижает риск таких атак. Важной частью управления потоком является поиск узкого места пропускной способности.

Транзитный флуд
Существует возможность использования CISCO’s quality of service (QoS) для защиты хостов от данных атак. Можно использовать — weighted fair queueing (WFQ). WFQ устанавливается по умолчанию для низкоскоростных линий во многих версия ОС. Также можно использовать committed access rate (CAR), generalized traffic shaping (GTS) и custom queuing.

Если планируется использовать QoS для контроля трафика, очень важно понимать, как это работает. Например, WFQ более эффективен против floods, чем против SYN floods, потому что обычный ping flood для WFQ является одиночным трафиком, а для SYN flood каждый пакет является отдельным потоком.

CISCO обеспечивает два различных способа уменьшить опасность от атаки типа SYN flooding. Способ «TCP Intercept» используется в маршрутизаторах модели 4000 или выше. Например, CISCO IOS Firewall Feature Set включает различные способы защиты от SYN flood.

Самозащита маршрутизатора
Прежде всего необходимо защитить сам маршрутизатор от атак и после этого необходимо защищать хосты, стоящие после него. Switching Modes and CISCO Express Forwarding

Режим — CEF switching mode, являющийся доступным в версиях ПО 11.1CC, 11.1CT, 11.2GS, и 12.0. Позволяет быстрее переключать трафик, чем обычная маршрутизация.

Хотя многие атаки типа DoS пересылают все пакеты на один или несколько хостов, много атак типа SYN flooding используют изменяющийся адрес источника. Хост, который атакуют, отвечает на SYN flood пакеты, создавая трафик с различными адресами destinations. При этом рекомендуется использовать CEF.

Scheduler Configuration
Когда маршрутизатор CISCO находится в режиме fast-switching большого количества пакетов, есть возможность его «загрузить» только работой на ответ , другая работа не будет проводиться. Данный эффект может быть снижен путем использования команды scheduler interval. Типичная конфигурация использует команду scheduler interval 500, которая показывает , что задача будет выполняться каждые 500 milliseconds.

Новые платформы фирмы CISCO используют команду scheduler allocate вместо команды scheduler interval.

 

Возможно ненужные сервисы

Существует несколько сервисов, которые обычно не используются, а их наличие может привести к атаке со стороны злоумышленника.

TCP and UDP «Small Services»
По умолчанию CISCO, начиная с версии 11.3, поднимает «small services»: echo, chargen и discard. Данные сервисы , особенно их UDP версии, могут использоваться для DoS атаки на маршрутизатор.

Например, атакующий может послать DNS пакеты с подмененным адресом источника DNS сервера и портом (53). Если данные пакеты будут направлены на порт CISCO’s UDP echo port, то маршрутизатор будет посылать DNS пакеты на сервер с вопросом. Ни один ACL не будет это отслеживать.

Для отключения необходимо использовать команду no service tcp-small-servers и no service udp-small-servers.

Finger
Маршрутизатор CISCO обеспечивает сервис «finger», который позволяет уточнить, кто подключен из пользователей. Отключается командой no service finger.

NTP
Network Time Protocol (NTP) не является опасным сервисом, но любые не нужные сервисы потенциально опасны. Для отключения используйте команду no ntp enable.

CDP
CISCO Discovery Protocol (CDP) используется для обмена данными между устройствами CISCO. Отключение производится командой no cdp running. CDP может быть поднят на каком-то из интерфейсов, отключение — по команде no cdp enable.

 

Asterisk SNMP

We needed a better way to monitor and track performance of RF.com‘s Asterisk 1.6 boxes.  We learned quickly that the scarce documentation for configuring Asterisk to use Simple Network Management Protocol (SNMP) is conflicting and outdated.  So we decided to share our configuration and hopefully save others a lot of time and head-scratching.

Downloading the Asterisk 1.6 source code

Enabling SNMP support in Asterisk requires a rebuild of Asterisk.

If you already have the Asterisk source code on your Asterisk server, open a terminal session with the Asterisk box and navigate to the Asterisk source code directory, then skip to Installing Net-SNMP.

If you don’t have the Asterisk source code on your Asterisk server, open a terminal session with the Asterisk box and copy these instructions to the command line:

#get asterisk source
# create source dir
mkdir -p /usr/src/digium
cd /usr/src/digium/
wget http://downloads.digium.com/pub/asterisk/asterisk-1.6-current.tar.gz tar xzvf asterisk-1.6-current.tar.gz
cd asterisk-1.6.*

Installing Net-SNMP

Asterisk SNMP support is provided by the res_snmp module.  To build this module, you need to install the following packages:

  • net-snmp
  • net-snmp-devel
  • net-snmp-utils
  • bzip2
  • bzip2-devel
  • lm_sensors
  • lm_sensors-devel
  • newt
  • newt-devel

On a CentOS or Fedora box you can use the following command to install all the packages at once:

yum -y install net-snmp net-snmp-devel net-snmp-utils bzip2-devel newt-devel lm_sensors-devel ; # snmp support – res_snmp

Preparing the Asterisk box

Once the necessary packages are installed, run the following commands from the Asterisk source code directory:

./configure
make menuselect

Running make menuselect will launch a menu that looks something like the image below.

Asterisk Module and Build Options SelectionAsterisk Module and Build Options Selection

Select the Resource Modules option from the menu and press the Return key.  Then scroll down to res_snmp, if res_snmp is not selected, press the spacebar to enable res_snmp.  The selection should now look like the image below.

Asterisk resource modulesAsterisk resource modules

If you are unable to select res_snmp, it means the Net-SNMP package was not installed properly or the Asterisk configure tool was unable to find the Net-SNMP package. Try running .configure -with-netsnmp from the command line and then re-run make menuselect.

Press x to save your configuration changes.

Now we can build Asterisk with SNMP support and install it by runing the following commands:

make /etc/init.d/asterisk stop ; # make sure asterisk is stopped before installing
make install

Configuring the SNMP daemon

There are three versions of SNMP, but two are insecure and should not be used over an untrusted network.  We chose SNMPv3, which requires authentication and encryption from the asteriskUser when it connects to the server.

To create an SNMPv3 user account and to configure it to require authentication and encryption, run the commands below, replacing change_this_password with your own password.

Asterisk uses AgentX to communicate with the SNMP daemon.  Run the command below to configure the SNMP daemon for AgentX.  If your Asterisk daemon, does not run as a member of the asterisk group, replace asterisk in the agentXPerms command with an asterisk daemon group.

The commands below will install the Asterisk and Digium MIB files, configure the snmp daemon to start on boot, and launch the snmp daemon.

Let’s verify that the configuration is working so far by verifying that the snmp daemon set the file permissions correctly, run the following command:

Your permissions must look like:

If the file permissions on /var/agentx and /var/agentx/master don’t allow the asterisk daemon group to write tomaster, Asterisk will not be able to communicate with the SNMP daemon. We had problems with the /var/agentx directory permissions, you may need to run the following command to fix the permissions.

You can also check the logs to confirm that AgentX is running.

You should see lines like the following:

Jan 31 14:30:15 domU-12-31-39-00-55-E7 snmpd[27048]: Creating directory: /var/agentx
Jan 31 14:30:15 domU-12-31-39-00-55-E7 snmpd[27048]: Turning on AgentX master support.

Configuring the Asterisk res_snmp module

Now we configure Asterisk to use SNMP by running the following commands:

# configure res_snmp.conf
sed -e ‘s/;\(subagent\)/\1/’ -e ‘s/;\(enabled\)/\1/’ <configs/res_snmp.conf.sample >/etc/asterisk/res_snmp.conf

Start Asterisk from the command line:

asterisk -cvvvvvvvvvv

and look for the following Asterisk console output:

NET-SNMP version 5.4.1 AgentX subagent connected

The line above means that Asterisk is configured correctly and the res_snmp module has loaded.

You can now exit the asterisk console and then launch the Asterisk daemon, with the command below:

/etc/init.d/asterisk start

Final testing

You can now use the snmpwalk command to test that everything is configured correctly.  Replacechange_this_password with the password you created above for the snmp daemon configuration and run the commands below:

export MIBS=+ASTERISK-MIB
snmpwalk -v 3 -u asteriskUser -n “” -l authPriv -a SHA -A change_this_password -x AES -X change_this_password localhost asterisk

You should get a result like:

Congratulations, you’ve finished and your Asterisk server is now configured to use SNMP.