АнтиDoS: защита от DoS-атаки средствами маршрутизатора
О DoS-атаках (атаках на отказ в обслуживании — Denial of Service) всерьез заговорили только в 1999 году, когда были «завалены» web-сайты известных корпораций: Amazon, Yahoo, CNN, eBay, E-Trade и других. Хотя сама техника DoS-атак известна с 1996 года. Позже появились распределенные DoS-атаки (Distributed Denial of Service или DDoS). В этом случае атака производится несколькими узлами, что усложняет ее пресечение и обнаружение источника.
Что же такое DoS-атака? Цель – захватить все ресурсы компьютера-жертвы, чтобы другие пользователи не имели к ним доступа. К ресурсам относятся: память, процессорное время, дисковое пространство, сетевые ресурсы и т.д.
Рассмотрим наиболее распространенные виды DoS-атак:
* Smurf — злоумышленником отправляются широковещательные echo-пакеты (протокол ICMP), в заголовках которых в качестве источника указывается адрес жертвы. В результате, все системы, получившие ping-запрос, «заваливают» жертву echo-ответами. * ICMP-flood — похожа на Smurf, но отправляет ICMP-запросы напрямую на узел-жертву без использования широковещательного адреса. * UDP-flood — отправка на узел-мишень огромного количества UDP-пакетов, что приводит к «связыванию» сетевых ресурсов. * TCP-flood — аналогична предыдущей, но используются TCP-пакеты. * TCP SYN-flood — злоумышленник отправляет на открытый порт много SYN-пакетов с недостижимым адресом источника. Атакуемый маршрутизатор должен ответить пакетом <SYN, ACK>, но узел, указанный в качестве источника, недоступен, и поэтому трехступенчатая схема установления TCP-соединения не завершается. А поскольку таких SYN-пакетов очень много, лимит на количество открытых соединений быстро превышается и жертва отказывается принимать запросы на установление соединения от обычных пользователей сети.
Далее посмотрим, как обнаружить DoS-атаку и как защититься от нее средствами маршрутизатора. Для защиты от DoS мы будем использовать перехват TCP-соединений (TCP Intercept), пакетный фильтр, NBAR и ограничение потока ICMP-пакетов. Нужно отметить, что далеко не всегда можно уберечься от DoS-атаки, но при правильной настройке всегда можно свести старания злоумышленника к нулю. Обнаружение DoS-атаки
Основные симптомы DoS-атаки:
* Огромное количество ARP-запросов; * Огромное количество записей в NAT/PAT-таблице; * Повышенное использование памяти маршрутизатора; * Повышенное использование процессорного времени маршрутизатора.
Причем мы рассматриваем управляемые маршрутизаторы, оснащенные собственной операционной системой. Для обнаружения симптомов DoS-атаки вам нужно подключиться к своему маршрутизатору и, используя диагностические утилиты операционной системы маршрутизатора, выяснить, имеет ли место DoS-атака. Например, в Cisco IOS просмотреть использование процессора можно с помощью команды «show processes cpu». Обнаружение с помощью ACL
Для обнаружения DoS-атаки можно использовать ACL (Access Control List). Сначала обнуляем счетчики ACL, затем просматриваем статистику ACL — интересует количество запрещенных с помощью ACL пакетов. Запоминаем это количество и повторно вводим команду вывода статистики. Опять смотрим на число запрещенных пакетов. Если оно сильно отличается от первого числа, значит, в данный момент на сеть производится DoS-атака. В Cisco IOS все вышесказанное можно реализовать двумя командами: «clear access-list counters» (сбрасывает счетчики) и «show access-list» (показывает статистику ACL).
При обычной настройке маршрутизатор показывает, сколько пакетов было запрещено, но он не предоставляет подробной информации об этих пакетах. Чтобы была возможность отслеживать DoS-атаки, нужно специальным образом настроить ACL. Это позволит нам не только увидеть, сколько пакетов отброшено, но и проанализировать причину запрещения пакетов. Например, можно добавить в ACL следующие правила:
# access-list 100 deny icmp any any echo # access-list 100 deny icmp any any echo-reply
В результате, при просмотре статистики увидим, сколько было запрещено echo-запросов (первое правило) и сколько echo-ответов. Например:
# show access-list 100 ... deny icmp any any echo (1938 matches) deny icmp any any echo-reply (358687 matches)
Обратите внимание: echo-запросов запрещено 1938, а echo-ответов — 358687. Это похоже на Smurf-атаку, когда IP-адрес нашего маршрутизатора указан в качестве источника широковещательного ping-запроса. NetFlow для Cisco
Технология NetFlow используется для получения статистики по потокам данных, проходящих через оборудование Cisco. NetFlow использует потоки для идентификации трафика. Cisco идентифицирует каждый поток по следующим параметрам: IP-адресам отправителя и получателя, типу протокола (TCP, UDP), номерам портов протоколов TCP и UDP, типу сервиса, номеру входящего физического интерфейса и т.д. Все это позволяет получить полную информацию о трафике, проанализировав которую можно определить тип DoS-атаки. Отдельно рассматривать NetFlow в статье не будем — в интернете достаточно информации об этой технологии: www.informit.com/articles/printerfriendly.asp?p=345618&rl=1 и www.opennet.ru/docs/RUS/netflow_bsd/. Перехват TCP-соединений
Некоторые маршрутизаторы поддерживают технологию перехвата TCP-соединений (в Cisco она называется TCP Intercept). Данная технология успешно используется против TCP SYN-атак.
Маршрутизатор, находящийся между клиентом и сервером, перехватывает все запросы TCP-соединений (1 на картинке), то есть все пакеты <SYN>. После этого маршрутизатор завершает соединение вместо клиента, принимая ответ сервера <SYN, ACK> и отправляя ему пакет <ACK> (4, 5, 6 на картинке). В то же время маршрутизатор посылает ответ сервера (<SYN, ACK>) клиенту (2 на картинке). Если клиент ответил пакетом <ACK> (3 на картинке), то маршрутизатор выполняет связывание двух соединений («клиент-маршрутизатор» и «маршрутизатор-сервер») в одно соединение (7 на картинке). Если клиент не ответил вовремя, то маршрутизатор разрывает оба соединения - и с мнимым клиентом, и с сервером.
Данная технология весьма эффективно зарекомендовала себя при борьбе с TCP SYN-атаками. Для включения TCP Intercept в Cisco IOS используется команда:
ip tcp intercept list <номер ACL> Пакетный фильтр
Современные маршрутизаторы имеют встроенный фильтр пакетов (например, в Cisco фильтр пакетов называется CBAC — Context-Based Access Control). Фильтр пакетов позволяет определить, какой трафик должен быть разрешен на основании списков доступа (ACL). То есть позволяет проанализировать пакеты, убедиться в их безопасности, а только потом передать их во внутреннюю сеть.
Возникает логичный вопрос — зачем нужен пакетный фильтр вроде CBAC, если уже есть списки доступа? ACL не обеспечивает должного уровня безопасности, поскольку списки доступа являются статическими, а их редактирование выполняется вручную администратором. CBAC позволяет динамически создавать (или, наоборот, удалять) списки доступа, обеспечивая более высокий уровень безопасности. Если CBAC заподозрил неладное, он добавит нужный ACL, который предотвратит распространение трафика злоумышленника. Причем все это делается автоматически, без вмешательства администратора. Администратору нужно лишь задать начальную конфигурацию ACL и CBAC.
Подробно настройка CBAC описана в документе www.informit.com/articles/article.asp?p=26533&rl=1, а если интересует настройка в общих чертах, тогда прочитайте документ www.unixdoc.ru/index.php?mode=2&podmode=1&arcicle_id=175&theme=cisco. Ограничение частоты ICMP
Представим следующую ситуацию. Есть внутренняя сеть, и есть маршрутизатор, через который осуществляется связь внутренней сети с внешним миром. Некто посылает запрос в нашу сеть, но обращается к несуществующему узлу. Вроде бы ничего страшного — маршрутизатор просто ответит ICMP-сообщением о недоступности заданного узла. А теперь представим, что таких запросов очень много и все они поступают с разных источников. Понятно, что маршрутизатор только и будет отправлять ICMP-пакеты, а на полезную работу времени у него не останется. Поэтому нам нужно ограничить частоту ICMP-сообщений средствами маршрутизатора. А можно вообще запретить отправку ICMP-сообщений о недоступности того или иного узла.
Ограничить частоту отправки сообщений можно с помощью IOS-команды:
ip icmp rate-limit unreachable <миллисекунды>
Так, командой «ip icmp rate-limit unreachable 1000» разрешаем одно ICMP-сообщение «unreachable» в секунду. Для запрета всех сообщений «unreachable» используется IOS-команда:
access-list <номер ACL> deny icmp any any unreachable
Если вы решили ограничить ICMP-сообщения с помощью rate-limit, стоит знать о главной проблеме этой команды: она может работать только с сообщениями «unreachable». Если вы хотите ограничить трафик другого вида, в том числе и «unreachable»-сообщения, нужно использовать CAR (committed access rate). Настройка CAR подробно рассмотрена в статье www.informit.com/articles/printerfriendly.asp?p=345618&rl=1. NBAR для ограничения Smurf-атаки
Технология NBAR (Network-Based Application Recognition) используется для более детального анализа сетевого трафика. К сожалению, NBAR можно использовать только для трафика, который может быть переадресован с помощью технологии CEF (Cisco Express Forwarding), то есть NBAR — это технология Cisco и для Cisco. Но поскольку маршрутизаторы Cisco широко распространены, это не так страшно.
С помощью NBAR вы можете, например, отправить весь нежелательный трафик на нулевой интерфейс, а также ограничить частоту входящих пакетов. NBAR очень удобно использовать для ограничения Smurf-пакетов. Smurf-атака использует echo-запрос и echo-ответ, поэтому для ограничения подобной атаки достаточно ограничить эти два типа пакетов. В документе www.informit.com/articles/printerfriendly.asp?p=345618&rl=1 подробно раскрывается принцип защиты от Smurf-атаки с помощью NBAR и рассматривается защита от сетевого червя W32.Blaster. IDS
Использование системы обнаружения вторжения IDS (Intrusion Detection System) позволяет уберечься от многих видов атак, в том числе и от DoS. Система IDS может быть установлена как на сервере, так и на маршрутизаторе. Некоторые модели маршрутизаторов оснащены встроенными IDS. О настройке Cisco IDS (кстати, есть версия Cisco IDS для UNIX) можно прочитать в документе www.informit.com/articles/article.asp?p=24696&rl=1, а о настройке IDS для сервера - здесь: www.dkws.org.ua/index.php?page=show&file=a/hacker/lids-2 и www.dkws.org.ua/index.php?page=show&file=a/hacker/-hacker. Дополнительная настройка серверов
Не нужно надеяться, что маршрутизатор полностью защитит вашу сеть от DoS-атак. Защита должна быть комплексной. Компьютеры и особенно серверы также должны быть под контролем. WWW
www.informit.com/articles/printerfriendly.asp?p=345618&rl=1 - пошаговое руководство по защите от DoS-атак с помощью маршрутизатора Cisco
www.unixdoc.ru/index.php?mode=2&podmode=1&arcicle_id=175&theme=cisco - Context-Based Access Control: настройка и принципы функционирования