Первоисточник: Void.ru, статья - 22/01/2001.
Автор: neo
Отдавая дань закрытому ныне серверу www.phrack.com я решил перевести одну
из статей Phrack# 55 думая, что многие могли бы присоединиться и перевести
те материалы что остались у них от Phrack-a.
Авторами статьи являются Brett <beldridg@best.com> и Variablek <variablek@home.com>
Перевод neo@matrix.ru
Предисловие
Большое число тем компьютерной безопасности посвящено защите хостов и
настройкам файрволов, но очень мало внимания уделяется построению схем
защиты маршрутизаторов от атак, которым они могут подверженны извне.
Роутеры, а в особенности роутеры фирмы Cisco очень часто применяются в составе файрвола для фильтрации и
ограничения прохождения определенных IP пакетов. В данной статье излагается простая методика повышения безопасности Cisco
роутеров, работающих под управлением своей операционной системы IOS. Особое
внимание будет уделено популярному семейству IOS версии 11.2 и 11.3 (все
вышеописанное также применимо к версиям 12.0, 11.Х и 10.Х)
Что такое защищенный маршрутизатор
Главная задача роутера: обеспечивать маршрутизацию IP пакетов. Однако, современные
маршрутизаторы также имеют особенности, которые позволяют использовать их
как статические фильтры пакетов, для организации VPN шлюзов и других
ключевых компонентов в системах защиты сетей .
Существует версия IOS, называющаяся Firewall Feature Set (отличается от файрвола PIX).В ней реализованы
некоторые механизмы IDS, динамическая фильтрация пакетов и некоторые другие особенности. Мы не будем рассматривать ее.
Мы описываем защиту маршрутизатора с помощью конфигурации, не требующей
специальных уровней в защиты в IOS и широко используемых в роутерах Cisco.
Под термином защищенный роутер мы будем подразумевать роутер специальным образом сконфигурированный для
отражения определенного класса атак.
Мы сосредоточим наше внимание на двух областях: защита самого маршрутизатора и защита хостов, находящихся за ним в подсети.
Основные понятия
Наша методология относительно проста. Мы хотим отключить сервисы и опции, включенные по умолчанию и не использующиеся.
Другими словами: если мы что-то не используем, то отключаем. Остаются
только те сервиcы/опции, которые осуществляют защиту маршрутизатора и охраняемых подсетей за ним.
Если нам необходим какия либо дополнительный сервис, то мы пытаемся
сделать его максимально безопасным, используя механизмы защиты предоставляемые IOS, например
VTY фильтры.
Мы используем ACL (Access Control Lists - списки доступа) для каждого интерфейса, которые
разрешают только определенные виды трафика и запрещают все остальные (спецификатор "default deny" ).
IOS обладает достаточно большим набором особенностей.Кроме того существует много различных ее версий,
каждой из которых присущи свои особенности. В наших примерах мы используем
IOS версии 11.2 или 11.3, которые поставляются с поддержкой IP Only feature set, при этом
по мере изложения мы укажем некоторые исключения (например, TCP TCP Intercept и Enterprise feature set).
Кроме того мы не сможем охватить все возможные способы конфигурирования - наша цель состоит в том, чтобы
практичеким опытом конфигурирования защищенных роутетов.
Базовые принципы, применяющиеся при конфигурировании:
1. Защита по паролю
2. Ограничение удаленного доступа
3. Ограничение локального доступа
4. Вид банера, приглашаущего ко входу в систему
5. Конфигурирование SNMP
6. Конфигурирование процедуры входа в систему и NTP
7. Другие механизмы защиты
8. Анти-spoofing
9. Меры против DoS атак
10. Защита хостов подсети
11. Тестирование конфигурации
В примерах будет использоваться типовая сеть со следующей топологией (предполагается, что
подсеть 192.168/16 маршрутизируема)
Eth0 192.168.0.0/16 |----------------| Eth1 172.16.1.0/30
private net ------------| Router | ----- ISP -----
access-list e0-in --> |----------------| <-- access-list e1-in
Окончательная конфигурация роутера приведена в Приложении A.
Краткое введение в интерфейс командной строки IOS
CISCO IOS (Internetworking Operating System) поддерживает интерфейс
командной строки с CLI, специальными вызовами Cisco. Работать с интерфейсом командной строки можно через
порт консол, модем и telnet. Сеанс командной строки называется сессией EXEC, процесс работы с
ним похож на работу с шелом Unix. Существует два различных уровня работы в сеансе EXEC:
пользователький и привилегированный. Пользовательский EXEC уровень
рассматривается как сеанс для не-корневой учетной записи в Unix, привилегированный подобен
сеансу суперпользователя(UID=0 в Unix). Подсказка в EXEC зависит от уровня привилегий пользователя(">" - обычный пользователь, "#" - привилегированный):
reeb>enable
Password:
reeb#
reeb#disable
reeb>
Вы можете также настроить уровни привилегий(рассмотрим это немного позже).
Также доступна контекстно-зависимая справка - вопросительный знак выдает список доступных
в данный момент команд и опций. Например,
reeb#debug ip r?
rip routing rsvp rtp
reeb#debug ip rip ?
events RIP protocol events
reeb#debug ip rip
Интерфейс командной строки CLI (Command Line Interface) также поддерживает
Emacs-совместимый режим редактирования и хронологию команд. Чтобы
перейти на следующую строку необходимо нажать Ctrl-n, на предыдущую - Ctrl-p, в начало строки - Ctrl-a, в конец строки Ctrl-e, стереть строку C-u, стереть предыдущее слово - C-w; работает реализован механизм табуляции для
завершения неполностью введенной команды.
Установка настроек
Одна из вещей, которая может показаться непривычной в IOS -
способ вывода параметров настройки конфигурации в консоль пользователя. Параметры настроек по
умолчанию не отображаются при выводе информации о текущей конфигурации маршрутизатора. Настройки по умолчанию меняются в зависимости от версии IOS. Например, в IOS 11.2 сервисы "udp-small-servers" и "tcp-small-servers"
включены по умолчанию. Когда Вы отключаете small servers UDP и TCP, то должны будете увидеть в информации о конфигурации следующие строки:
version 11.2
no service udp-small-servers
no service tcp-small-servers
По умолчанию Вы не видели бы никакой информации об этих сервисах. Однако, в версии в IOS 11.3 значения по умолчанию для UDP и TCP уже установленны как "no server". Таким образом, если никакая информация о конфигурации не отображается, то UDP и TCP "small servers" отключены. Иначе вы увидите следующее :
version 11.3
service udp-small-servers
service tcp-small-servers
Вы должны обратить внимание на данный момент при создании конфигурации.
Может требоваться некоторое время на исследование, чтобы определить, какие сервисы и опции включены.
Шаг 1. Защита паролем
Одна из первых вещей, которые необходимо сделать - парольная защита доступа к протоколам маршрутизации, синхронизации времени NTP.Кроме того - конфигурирование авторизации доступа по ACL, входа в систему и привилегированного пароля.
пароли и привилегии
Имеются много опций, предназначенных для настройки процесса авторизации пользователей.
Например, overriding access classes и поддержка TACACS, которую мы не будем рассматривать
здесь. Однако, есть некоторые важные вещи, которые необходимо упомянуть
относительно назначения привилегии и паролей. Во первых, различные типы
паролей требуют различных схемы их генерации и требования к длине.
Например, простой пароль для протокола OSPF в IOS 11.3
сеансов может быть любой последовательностью символов длиной до 8 байт, в то время как OSPF MD5 подерживает длину до 16 байт.
Длина простого пароля может быть до 80 байт в длину, включая алфавитно-цифровые символы и пробел.
Пароли типа "enable secret" и "username password" могут быть до 25 символов и включать пробелы.
В некоторых случаях требования к виду пароля явно не стандартны, поэтому придется экспериментировать, чтобы придумать "хороший" пароль в зависимости от "окружающей сетевой среды".
Ранее мы упоминали непривилегированный пользовательский EXEC и
привелигированный EXEC уровни сеанса работы в консоли. Существует 16 уровней
привилегий, от 0 до 15. Уровень 1 - обычный пользовательский EXEC режим
работы в консоли (CLI) , и 15 - по умолчанию привилегированный уровень.
Соответствующий пример:
reeb>show privilege
Current privilege level is 1
reeb>enable
Password:
reeb#show privilege
Current privilege level is 15
reeb#disable
reeb>show privilege
Current privilege level is 1
Мы будем использовать отдельные, уникальные псевдонимы для каждого из администраторов:
Сделаем для начала двух пользователей:
username variablek password st0rk
username brett password r0ddag
сервис шифрования пароля
По умолчанию, любой привилегированный пользователь может просматривать все пароли на маршрутизаторе. Кто-либо, наблюдая "из-за вашего плеча" за процессом конфигурирования может подсмотреть пароли.
Используя команду "service password-encryption", Вы можете закодировать видимую часть пароля в строке. Эти пароли имеют тип "7"(зашифрованный пароль), по числу символов в закодированном пароле.
Обратите внимание, что, несмотря на то, что пароли зашифрованы, это обеспечивает лишь
минимальную защиту и служит для защиты только от случайного перехвата.
Закодированные пароли могут быть относительно легко дешифрованы простым
шел скриптом или же помощью нехитрых преобразований буквально на салфетке, сидя
в баре и попивая Guinness.
Обратите внимание, что по понятным причинам сервис password-encryption не шифрует пароли SNMP
community names.
enable secret
В IOS эквивалент привилегированного доступа - привилегированный режим EXEC, защищенный паролем.
Существует два метода защиты доступа паролем. Первый метод состоит в том, чтобы использовать "enable password"
тривиальный метод кодирования паролей.
Кроме того можно дополнительно определить
Второй метод - команда "enable secret", алгоритм шифрования MD5(тип шифрованного пароля 5).
reeb(config)#enable secret s3kr3t
reeb(config)#no enable password
reeb(config)#exit
reeb#sh running-config
Building configuration...
enable secret 5 $1$k2gM$4W2tuuTUqxuRd.LQxsh/v.
Вы могли бы спросить, почему бы не защитить все пароли по MD5? К сожалению это не будет работать, потому что
MD5 - однопроходная хэш функция, а IOS необходимо иметь доступ к строкам в виде plain text, например для
доступа к MD5-based MAC secret,с помощью которых может быть реализована авторизация к NTP, или строкам, отвечающим за авторизацию к OSPF и т.д.
Шаг.2 Ограничение локального доступа
Маршрутизаторы Cisco удаленно управлятся через telnet . Практически всегда ограничивают или запрещают telnet.
Для ограничения доступа вводится класс доступа для VTY lines:
access-list 99 permit host mgmt_ip
access-list 99 deny any
!
line vty 0 4
access-class 99 in
login local
Дополнительно, если вы используете списки доступа ACL с правилом deny по умолчанию, то
необходимо разрешить доступ по порту 23/tcp для ограниченного числа IP адресов из внутренней подсети:
!
interface Ethernet0
ip access-group e0-in in
!
ip access-list extended e0-in
permit tcp host mgmt_ip host 192.168.0.1 eq 23
Если необходимо полностью отключить telnet доступ(в случае, если роутер слишком хорошо "виден" из внешних сетей), то
необходимо сделать следущее:
line vty 0 4
transport input none
"Сверхпараноидальные" настройки выглядят, например, так :
access-list 99 deny any
!
line vty 0 4
access-class 99 in
exec-timeout 0 1
login local
transport input none
Эта конфигурация слишком жестко ограничивает доступ, но зато :
* запрещен любой класс доступа к VTY
* запрещен доступ по telnet
* таймаут для CLI сеанса EXEC установлен равным 1 секунде
Начиная с какого-то момента возникли запросы на реализацию подержки SSH в IOS. Ходили
слухи, что в IOS 12.0 будет будет SSH добавлен, но этого не произошло. Тем не менее в IOS есть поддержка Kerberos и
соответствующих сессий telnet.
Шаг 3. Ограничение локального доступа
По умолчанию, когда Вы подсоединяетесь к консоли или порту AUX, вы работаете
в EXEC сессии без пароля, под аккаунтом обычного пользователя. Соответсвенно
Если Ваш маршрутизатор не защищен физически то лучше установить пароль
на работу в EXEC по этим портам. Если физический доступ к роутеру не может быть достаточно ограничен, то
необходимо установить установить пароль на работу в EXEC по этим портам.
Даже если маршрутизатор находится в закрытом помещении это также не повредит :
line con 0
login local
! Таймаут работы на консоли - 2 минут
exec-timeout 2 0
line aux 0
! Раскоментарьте ниже для запрета входа в роутер на AUX порт
! no exec
! Или разрешите вход с нормальной авторизацией через пароль
login local
Это не остановит целеустремленного хакера от дальнейших попыток взлома.
Если он имеет физический доступ к роутеру, то может использовать для получения доступа
хорошо известные методы восстановление паролей.
Шаг 4 : Системное приглашение
Неплохо было бы сконфигурировать login baner так, чтобы он предупреждал пользователей против
попыток неавторизованного доступа. Это может послужить в качестве доказательной базы в случае судебного разбирательства.
Мы используем что-то типа:
This is a private system operated for and by
Big Phreaking Bank (BPB).
Authorization from BPB management is required to use
this system.
Use by unauthorized persons is prohibited.
#
Шаг 5 : SNMP
(SNMP) Simple Network Management Protocol (SNMP) - протокол управления
сетью используется как наиболее популярное средство управления роутерами.
IOS поддерживает две версии SNMPv1 и SNMPv2,в которые изначально не была
реализована поддержка авторизации и защиты данных.
Некоторые реализации SNMPv2 включают повышенные средства безопасности,
версия SNMPv3 наиболее продвинутая в этом плане.
Мы обычно запрещаем использование SNMP на роутерах, требующих особой защищенности, но если вы
хотите использовать этот протокол мы рекомендуем следующие меры защиты :
* Использовать имя community, которое тяжело угадать
* MIB должен быть сконфигуренна только в режиме чтения (опция "ro")
* Разрещить доступ только с определенных хостов
Эти рекомендации приведены ниже:
:! разрешаем только чтение SNMP traps с хостов включенных в ACL 10
snmp-server community h4rd2gu3ss ro 10
!
! access list for SNMP reads
access-list 10 permit host snmp_mgmt_ip
access-list 10 deny any
!
! посылаем trap-s c общими именем
snmp-server trap-authentication
! посылаем все trap-ы на управляющий хост на внутренем интефейсе
snmp-server trap-source Ethernet0
snmp-server host snmp_mgmt_ip h4rd2gu3ss
!
interface Ethernet0
ip access-group e0-in in
!
ip access-list extended e0-in
! разрешаем доступ на определенную машину изнутри
permit udp host snmp_mgmt_ip host 192.168.0.1 eq snmp
Шаг 6 : Запись в логи
Если ваша политика безопасности требует, чтобы в логах зафиксировались
только попытки неудачной авторизации по спискам доступа (ACL) или другие события,
затрагивающие сетевую безопасность, вы можете использовать syslog daemon на
любом UNIX хосте для ведения записей событий на роутере.
Поскольку syslog использует UDP, который не гарантирует доставку данных, то хорошей идеей будет записывать сообщения в лог нескольких хостов, что добавит надежности в случае потери пакетов или
других непредвиденных событий.
Также используйте NTP для синхронизации времени записи логов, что
очень поможет при анализе логов в случае возможных удебных разбирательствах.
Конфигурация NTP
Без синхронизации времени на различных хостах, осуществляющих функции файрвола, роутеров и остальных,
реальное установление взаимосвязи событий по сообщениям в логах невозможно.
Протокол NTP и его реализация в Cisco поддерживают авторизацию с шифрованием по алгоритму MD5. Это позволяет
NTP клиенту получить точное время и предовращает от spoofing атакк на сервера NTP и неавторизованное изменение
информации на них. Если ваш бюджет позволяет то Вы можете установить выделенный NTP
сервер, поддерживающий MD5 авторизацию.
Ниже мы сконфигурим NTP сервер, которому разрешается получать обновления только с внутрених NTP серверов и
авторизация к которому производится с использованием MD5(MAC).
! Устнавливаем timezone
clock timezone PST -8
clock summer-time zone recurring
! Конфигурируем NTP
ntp authenticate
ntp authentication-key 1 md5 ntpk3y
ntp trusted-key 1
ntp access-group peer 20
ntp server ntp_server1_ip key 1 prefer
ntp server ntp_server2_ip key 1
!
! Разрешаем определенных хостам получать updates NTP
access-list 20 permit host ntp_server1_ip
access-list 20 permit host ntp_server2_ip
access-list 20 deny any
Установка syslog
В этом разделе мы посылаем на собщения syslog на два хоста и фиксируем местное время и дату пересылки этих сообщений
: ! Посылаем сообщения на хосты и записываем местное время и дату в логи
syslog.
logging syslog1_ip
logging syslog2_ip
По умолчанию роутер обычно посылает сообщения syslog в local7 facility.
Если Вы хотите сохранять сообщения роутера в выбранном файле, ваш
syslog.conf на UNIX хосте должен содержать следующую строчку :
# сообщения роутера
local7.* /var/adm/router.log
Вы можете изменить тип используемого facility:
logging facility facility-type
Шаг 7: Другие механизмы защиты
no ip source-route
Некоторые атаки направлены на использование опции IP source route.
Атакующий может определить путь, по которому будет передаваться пакет и послать
source routed пакет на хост-жертву, находящийся за роутером, который в ответ будет отсылать пакеты
по тому же пути. Это позволяет получать ответы на подделаные атакующим пакеты.
хакер. Многие современные ОС могут запретить данный обман путем запрета маршрутизации
таких пакетов. В Cisco IOS это включается командой:
no ip source route
Ограничение ICMP
Некоторые DoS атаки используют ICMP протокол, поэтому необходимо ограничиться
использованием только ICMP сообщений строго определенных типов.
Как минимум, чтобы надлежащим образом организовать использование Path MTU discovery (PMTU),
небходимо ограничить "packet-too-big" сообщения.
Остальные типы разрешенных ICMP сообщений будут зависеть от местной политики безопасности.
Оключение ненужных сервисов
Следующим шагом мы неиспользуемые сервисы. По умолчанию в IOS включены некоторые сервисы,
которые могут стать для атакующего источником дополнительной информации о системе, и при определенных
случаях он может осуществить DoS атаку на роутер(следует посмотреть на используемую версию вашей ISO, чтобы определить какие сервисы включенны по умолчанию).
Мы отключим следующее:
no service udp-small-servers
no service tcp-small-servers
no service finger
no ip bootp server
! по умолчанию http запрещен но параноидально было бы явно запретить его
:
no ip http server
no cdp run
CDP
Cisco Discovery Protocol (CDP) это платформенно-независимый протокол, который по умолчанию
работает рабоает на всем оборудовании Cisco. Этот протокол для управления сетями.
Этот протокол позволяет оповестить другие устройства Cisco о своем
присутсвии.Используя его можно получить информацию об устройстве, конфигурации, низкоуровневых протоколах, запущенных на соседних роутерах.
Для выключения CDP на одном интефейсе вы должны ввести :
interface Ethernet1
no cdp enable
Для запрещения использования CDP на всех интерфейсах введите :
no cdp run
no ip unreachables
По умолчанию когда пакет отбрасывается в соответсвии со списком доступа ACL, роутер
возвращает ICMP (тип 3 код 13 или "административно запрещенно") cообщение,
что дает потенциальному взломщику информацию о том, что роутер защищен с
использованием фильтрации списка доступа.
Чтобы хакер не смог получить вообще никакого ответа мы включаем :
no ip unreachables
no ip proxy-arp
По умолчанию IOS разрешает ARP proxy на всех своих интерфейсах.
Нам не требуется этот сервис, поэтому мы его отключаем:
interface Ethernet0
no ip proxy-arp
interface Ethernet1
no ip proxy-arp
no ip redirects
Здесь мы запрещаем редирект IP на Ethernet интерфесах:
interface Ethernet0
no ip redirects
interface Ethernet1
no ip redirects
Шаг 8 : Анти-spoofing
Основная идея, лежащая в основе данного механизма защиты состоит в том никто из
внешней сети не может слать пакеты, имеющие в поле адреса источника какой-либо адрес из вашей подсети или
зарезервированный адрес. Мы можем использовать списки доступа, чтобы фильтровать такие пакеты и соответственно фиксировать в логах такие события:
ip access-list extended e1-in
! Анти спуфинг : не пропускаем пакеты с адресом = адресам нашей
внутреней сети
! Этого может не быть в RFC 1918 net
deny ip 192.168.0.0 0.0.255.255 any log
!
! Запрещаем первый нулевой октут , только его и loopback сеть
deny ip 0.0.0.0 0.255.255.255 any log
deny ip host 255.255.255.255 any log
deny ip 127.0.0.0 0.255.255.255 any log
!
!Запрещаем зарезервированные классы сетей D и E
deny ip 224.0.0.0 15.255.255.255 any log
deny ip 240.0.0.0 7.255.255.255 any log
!
!Запрещаем адреса описанные в RFC 1918
deny ip 10.0.0.0 0.255.255.255 any log
deny ip 172.16.0.0 0.15.255.255 any log
! Включаем для примера
! deny ip 192.168.0.0 0.0.255.255 any log
!
! Запрещаем сеть test-net
deny ip 192.0.2.0 0.0.0.255 any log
!
! Deny end node autoconfig
deny ip 169.254.0.0 0.0.255.255 any log
Вам понадобится коммутатор, который будет отбрасывать пакеты, приходящие на интерфейс с адресом источника, который
не маршрутизируется на данном интерфейсе(пропускает входящие пакеты, но не отправляет их на интерфейс, с которого они пришли).
Некоторые версии ISO могут делать подобное с помошью команды "ip verify unicast
reverse-path" или как называют это грамотно - Cisco Express Forwarding (CEF) . Это требует симметричного роутинга пакетов и
реализовано в комутаторах 7500 Series (любые 7000 с IOS 11.3) или 12000 Gigabit.
Шаг 9 : Уменьшение риска DоS атак
За несколько прошедших лет появилось несколько DoS атак, использующий слабости TCP/IP стека.
Для предотвращения наиболее распространенных атак или по крайней мере повышения устоичивости роутера к ним используются ACL и другие механизмы описанные ниже.
Атака SYN flood
SYN flood происходит, когда нападающий посылает на открытый порт хоста большое количество SYN пакетов с заведомо
недостижимым адресом источника. Жертва отвечает пакетом SYN, ACK по недоступному IP и в результате трехступенчатая схема установления TCP соединения никогда не завершается. Очередь half-open сессий TCP со статусом SYN_RCVD хоста-жертвы быстро растет и достигает определенного предела. В итоге хост перестает принимать новые запросы на
установление соединения(SYN пакеты).
SYN flood подробно обсуждается в публикации CISCO "Defining Strategies to
Protect Against TCP SYN Denial of Service Attacks" [4].
В IOS реализован механизм названный TCP Intercept [5], защищающий от разновидностей данной атаки.
TCP Intercept впервые появился в IOS 11.3 и требует специфического конфигурирования роутера.
В Enterprise версии IOS добавлены дополнительные возможности.
Мы обнаружили что TCP Intercept на практике работает достаточно надежно (защищая от реальных SYN flood атак), однако, процесс конфигурирования достаточно специфичный и зависит о множества конкретных факторов в вашей сети.
В можете почитать документацию от Cisco, чтобы убедиться, что TCP Intercept как
минимум смягчит послдствия SYN flood атак.
Атака Land
Атакующая программа (land.c) послает пакет с идентичными портами и IP адресами источника и получателя.
Подобные пакеты вызывают исключительные во многих ОС, роутерах и т.д.
Мы рекомендуем использовать последние версии IOS, которые корректно обрабатывают такие ситуации.
Информации об уязвимости различных версий IOS для данной атаки можно найти на официальном сайте Cisco.
Если Вы не можете обновить версию IOS Вам необходимо сконфигурировать надлежащим образом ACL.
Защита от атак из внутренней подсети(фильтрация доступа)
Если во внутреней подсети есть подозрительные хосты или пользователи, Вы можете
использовать Ingress Filtering [7]. Запрещая пакеты c поддельным IP адресом источника Ingress
Filtering кроме того может противостоять DоS атаке идущей из внутренней подсети.
В нашем случае мы достигли это тем, что разрешаем работу только из внутренией сети и запрещаем остальные адреса.
! Ingress filter: разрешаем доступ только для исходящих адресов внутреней
сети
ip access-list extended e0-in
permit ip 192.168.0.0 0.0.255.255 any
deny ip any any log
!
! разрешаем входящие пакеты на внутренем интерфейсе
interface Ethernet0
ip access-group e0-in in
Атака Smurf
Smurf атаки по прежнему являются чумой Интернта. Более подробно Крайг
Хайген изложил ее описание и способы защиты от нее в свое статье [8].
Чтобы ваша сеть не выступала в роли распространителя данной атаки, необходимо
в обязательном порядке фильтровать пакеты перед их отправкой по
шировещательным адресам локальной сети по всем Ethernet интерфейсам :
interface Ethernet0
no ip directed-broadcast
interface Ethernet1
no ip directed-broadcast
Шаг 10 : Защита хостов находящихся за роутером
Роутер может обеспечить дополнительную защиту хостов находящихся за ним.
Это включает зашиту web, FTP,mail и DNS серверов.
Для примера мы приведем ACL для ограничения доступа к HTTP серверу(192.168.0.5)
Мы думаем, фильтровать необходимо как входящие так и исходящие пакеты по
списку доступа (используйте мнемонику "in" для обозначения входящего
трафика и "out" для исходящего трафика на каждом интерфейсе)
ip access-list extended e1-in
! открываем порт 80/tcp на наш сервер www
permit tcp any host 192.168.0.5 eq www
!
interface Ethernet1
ip access-group e1-in in
ip access-list extended e0-in
! разрешаем established соединения от нашего сервера
permit tcp host 192.168.0.5 eq www any established
!
interface Ethernet0
ip access-group e0-in in
Помните что это не защищает от нападений на доступные сервисы в вашей
сети (например на запущеный sendmail или http сервер, которые необходимо
конфигурировать правильно)
Шаг 11 : Проверка конфигурации
Прежде всего Вы должны убедиться что TCP и UDP small-servers выключенны
(команда sh runnig-config должна показать что они выключенны). Как минимум
просканируйте роутер сканером портов.
Мы используем для этих целей nmap[9].
[root@fuel src]# nmap -sT 192.168.0.1 -p 1-65535
Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
Interesting ports on (192.168.0.1):
Port State Protocol Service
23 open tcp telnet
Если VTY доступ запрещен, эти порты будут закрыты.
В нашем случае разрешено использование telnet сессий с хоста, откуда производится сканирование.
сканирование UDP
[root@fuel config]# nmap -sU 192.168.0.1
WARNING: -sU is now UDP scan -- for TCP FIN scan use -sF
Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
Interesting ports on (192.168.0.1):
Port State Protocol Service
123 open udp ntp
161 open udp snmp
387 open udp aurp
611 open udp npmp-gui
727 open udp unknown
910 open udp unknown
Обратите внимание: При использовании nmap для сканирования UDP портов на
роутере мы видим ложные открытые порты . Старайтесь проводить комбинированное
сканирование несколькими сканерами для получения более точной информации.
На самом деле при при сканирование SATANом показало, что порты 611/udp и 727/udp не
авляются открытыми .
[root@fuel bin]# ./udp_scan 192.168.0.1 1-1024
123:ntp:
161:snmp:
387:UNKNOWN:
910:UNKNOWN:
Также мы заметили что IOS версий 11.2 и 11.3 имеют открытыми 387/udp и
910/udp порты. Если кто-нибудь из Сisco может объяснить это, мы готовы его выслушать.
В версии IOS 12.0 данная неувязка исправлена.
Ссылки
Главные ссылки
Increasing Security on IP Networks is at http://www.cisco.com/univercd/cc/td/doc/cisintwk/ics/cs003.htm
Cisco Internet Security Advisories can be found at http://www.cisco.com/warp/public/707/advisory.html
Особые ссылки
[0] Marcus J. Ranum, "Thinking About Firewalls V2.0: Beyond Perimeter Security"
http://www.clark.net/pub/mjr/pubs/think/index.htm
[1] Decoding type 7 passwords
http://geek-girl.com/bugtraq/1997_4/0156.html
[3] CIAC bulletin on login banners
http://ciac.llnl.gov/ciac/bulletins/j-043.shtml
[4] "Defining Strategies to Protect Against TCP SYN Denial of
Service Attacks"
http://www.cisco.com/warp/public/707/4.html
[5] Information on TCP Intercept
http://www.cisco.com/univercd/cc/td/doc/product/software/ios113ed/
113ed_cr/secur_c/scprt3/scdenial.htm
[6] Information on land attacks
http://www.cisco.com/warp/public/770/land-pub.shtml
[7] RFC 2267: Network Ingress Filtering: Defeating Denial of
Service Attacks by P. Ferguson and D. Senie
ftp://ftp.isi.edu/in-notes/rfc2267.txt
[8] Craig Huegen's paper
http://users.quadrunner.com/chuegen/smurf.cgi
Cisco has a paper Minimizing the Effects of "Smurfing" Denial
of Service (DOS) Attacks
http://www.cisco.com/warp/public/707/5.html
[9] Fyodor's nmap
http://www.insecure.org/nmap/
Приложение А
Конфигурация роутера рассматриваемая в этой статье:
! Все реальные адреса изменены
!
! ntp_server1_ip: 192.168.1.100
! ntp_server2_ip: 192.168.1.101
! syslog1_ip: 192.168.1.102
! syslog1_ip: 192.168.1.103
! mgmt_ip: 192.168.1.104
! snmp_mgmt_ip: 192.168.1.105
!
version 11.3
service timestamps debug uptime
service timestamps log datetime localtime
!
! protect passwords
service password-encryption
enable secret 5 $1$k2gM$4W2tuuTUqxuRd.LQxsh/v.
!
username variablek password 7 110F0B0012
username brett password 7 15190E1A0D24
ip subnet-zero
!
hostname reeb
!
interface Ethernet0
description Inside Interface
ip address 192.168.0.1 255.255.0.0
ip access-group e0-in in
no ip directed-broadcast
no ip unreachables
no ip proxy-arp
no ip redirects
!
interface Ethernet1
description Outside Interface
ip address 172.16.1.1 255.255.255.252
ip access-group e1-in in
no ip directed-broadcast
no ip unreachables
no ip proxy-arp
no ip redirects
!
! выключаем неиспользуемые сервисы
no ip bootp server
no ip http server
no service tcp-small-servers
no service udp-small-servers
no service finger
no cdp run
!
! disable source routed packets
no ip source-route
!
! setup the clock
clock timezone PST -8
clock summer-time zone recurring
! setup NTP
ntp authenticate
ntp authentication-key 1 md5 151C1F1C0F7932 7
ntp trusted-key 1
ntp access-group peer 20
ntp server 192.168.1.100 key 1 prefer
ntp server 192.168.1.101 key 1
!
! configure logging
service timestamps log datetime localtime
logging buffered 4096 informational
logging console informational
logging 192.168.1.102
logging 192.168.1.103
!
! configure SNMP
! allow SNMP reads from hosts in access-list 10
snmp-server community h4rd2gu3ss ro 10
! send traps with community names
snmp-server trap-authentication
! send all traps to the management host on the inside interface
snmp-server trap-source Ethernet0
snmp-server host 192.168.1.105 h4rd2gu3ss
!
! simple static routing. default to the ISP
ip route 0.0.0.0 0.0.0.0 172.16.1.2
ip route 192.168.0.0 255.255.0.0 192.168.0.2
!
! standard ip access-lists
!
! allowed hosts for SNMP reads
no access-list 10
access-list 10 permit host 192.168.1.105
access-list 10 deny any
!
! ntp hosts
no access-list 20
access-list 20 permit host 192.168.1.100
access-list 20 permit host 192.168.1.101
access-list 20 deny any
!
! hosts allowed to telnet to the router
no access-list 99
access-list 99 permit host 192.168.1.104
access-list 99 deny any
!
! extended ip access-lists
!
no ip access-list extended e1-in
ip access-list extended e1-in
! Anti-spoofing
! Deny packets on outside with src address = our inside nets
! This normally wouldn't be a RFC 1918 network
deny ip 192.168.0.0 0.0.255.255 any log
!
! Deny first octet zeros, all ones, and loopback
deny ip 0.0.0.0 0.255.255.255 any log
deny ip host 255.255.255.255 any log
deny ip 127.0.0.0 0.255.255.255 any log
!
! Deny class D (multicast) and class E (reserved for future use)
deny ip 224.0.0.0 15.255.255.255 any log
deny ip 240.0.0.0 7.255.255.255 any log
!
! Deny RFC 1918 addresses
deny ip 10.0.0.0 0.255.255.255 any log
deny ip 172.16.0.0 0.15.255.255 any log
! included above in this example
! deny ip 192.168.0.0 0.0.255.255 any log
!
! Deny test-net
deny ip 192.0.2.0 0.0.0.255 any log
! Deny end node autoconfig
deny ip 169.254.0.0 0.0.255.255 any log
!
! ICMP allows
! Allow fragmentation needed messages (type 3 code 4)
permit icmp any 192.168.0.0 0.0.255.255 packet-too-big
! Allow outbound ping and MS style traceroute (type 0)
permit icmp any 192.168.0.0 0.0.255.255 echo-reply
! Uncomment to allow ping to the inside net (type 8)
! permit icmp any 192.168.0.0 0.0.255.255 echo
! Uncomment to allow traceroute
! permit icmp any 192.168.0.0 0.0.255.255 ttl-exceeded
!
! permit certain connections
! example: permit connections from the outside to a web server
permit tcp any host 192.168.0.5 eq 80
!
! explicit default deny
deny ip any any log
!
no ip access-list extended e0-in
ip access-list extended e0-in
!
! our policy is only allow replies from the inside web server,
! some ICMP and specific inside hosts to access the router.
!
! permit certain connections
! example: allow responses from the web server
permit tcp host 192.168.0.5 eq www any established
!
! allow connections from ntp, mgmt, etc. to the router
permit udp host 192.168.1.105 host 192.168.0.1 eq snmp
permit udp host 192.168.1.100 host 192.168.0.1 eq ntp
permit udp host 192.168.1.101 host 192.168.0.1 eq ntp
permit tcp host 192.168.1.104 host 192.168.0.1 eq telnet
!
! allow specific ICMP out
permit icmp 192.168.0.0 0.0.255.255 any packet-too-big
permit icmp 192.168.0.0 0.0.255.255 any echo
! Uncomment to allow inbound ping responses
! permit icmp 192.168.0.0 0.0.255.255 any echo-reply
! Uncomment to allow traceroute
! permit icmp 192.168.0.0 0.0.255.255 any ttl-exceeded
!
! Ingress filtering: uncomment to deny connections to router and
! then allow outbound if source address = our net. In this case,
! we don't allow any traffic out and go directly to explicit deny.
! deny ip any host 192.168.0.1 log
! permit ip 192.168.0.0 0.0.255.255 any
!
! explicit deny
deny ip any any log
!
!
line con 0
login local
! logout idle console access after two min
exec-timeout 2 0
line aux 0
! Uncomment below to disable logins on the AUX port
! no exec
! Or allow password access
login local
line vty 0 4
! uncomment to disable telnet listener
! transport input none
access-class 99 in
login local
end
neo