Атака на отказ в обслуживании

Сегодня одна из наиболее распространенных в мире форм хакерских атак - атака на отказ в обслуживании (Denial of Service - DoS). Между тем, это одна из самых молодых технологий - ее осуществление стало возможно только в связи с действительно повсеместным распространением Интернета. Не случайно о DoS-атаках широко заговорили только после того, как в декабре 1999 года при помощи этой технологии были "завалены" web-узлы таких известных корпораций, как Amazon, Yahoo, CNN, eBay и E-Trade. Хотя первые сообщения о чем-то похожем появились еще в 1996 году, до "рождественского сюрприза" 1999 года DoS-атаки не воспринимались как серьезная угроза безопасности в Сети. Однако спустя год, в декабре 2000-го, все повторилось: web-узлы крупнейших корпораций были атакованы по технологии DoS, а их системные администраторы вновь не смогли ничего противопоставить злоумышленникам. Ну а в 2001 году DoS-атаки стали уже обычным делом. Собственно говоря, DoS-атаки производятся отнюдь не для кражи информации или манипулирования ею. Основная их цель - парализовать работу атакуемого web-узла. DoS-атаки опасны еще и тем, что для их развертывания кибертеррористам не требуется обладать какими-то особенными знаниями и умениями - все необходимое программное обеспечение вместе с описаниями самой технологии совершенно свободно доступно в Интернете. К тому же от подобного рода атак очень сложно защититься. В общем случае технология DoS-атаки выглядит следующим образом: на выбранный в качестве мишени web-узел обрушивается шквал ложных запросов со множества компьютеров по всему миру. В результате, обслуживающие узел серверы оказываются парализованы и не могут обслуживать запросы обычных пользователей. При этом пользователи компьютеров, с которых направляются ложные запросы, и не подозревают о том, что их машина тайком используется злоумышленниками. Такое распределение "рабочей нагрузки" не только усиливает разрушительное действие атаки, но и сильно затрудняет меры по ее отражению, не позволяя выявить истинный адрес координатора атаки. Сегодня наиболее часто используются следующие разновидности DoS-атак:

· Smurf - ping-запросы протокола ICMP (Internet Control Message Protocol) по адресу направленной широковещательной рассылки. Используемый в пакетах этого запроса фальшивый адрес источника в результате оказывается мишенью атаки. Системы, получившие направленный широковещательный ping-запрос, отвечают на него и "затапливают" сеть, в которой находится сервер-мишень;

· ICMP flood - атака, аналогичная Smurf, только без усиления, создаваемого запросами по направленному широковещательному адресу;

· UDP flood - отправка на адрес системы-мишени множества пакетов UDP (User Datagram Protocol), что приводит к "связыванию" сетевых ресурсов.

· TCP flood - отправка на адрес системы-мишени множества TCP-пакетов, что также приводит к "связыванию" сетевых ресурсов;

· TCP SYN flood - при проведении такого рода атаки выдается большое количество запросов на инициализацию TCP-соединений с узлом-мишенью, которому, в результате, приходится расходовать все свои ресурсы на то, чтобы отслеживать эти частично открытые соединения.

В случае атаки трафик, предназначенный для переполнения атакуемой сети, необходимо "отсекать" у провайдера услуг Интернет, потому что на входе в Сеть сделать это уже будет невозможно - вся полоса пропускания будет занята. Когда атака этого типа проводится одновременно через множество устройств, говорится о распределенной атаке DoS (Distributed Denial of Service - DDoS). Угрозу DoS-атак можно снизить несколькими способами. Во-первых, необходимо правильно сконфигурировать функции анти-спуфинга на маршрутизаторах и межсетевых экранах. Эти функции должны включать, как минимум, фильтрацию RFC 2827. Если хакер будет не в состоянии замаскировать свою истинную личность, он вряд ли решится на проведение атаки. Во-вторых, необходимо включить и правильно сконфигурировать функции анти-DoS на маршрутизаторах и межсетевых экранах. Эти функции ограничивают число полуоткрытых каналов, не позволяя перегружать систему. Также рекомендуется при угрозе DoS-атаки ограничить объем проходящего по Сети некритического трафика. Об этом уже нужно договариваться со своим интернет-провайдером. Обычно при этом ограничивается объем трафика ICMP, так как он используется сугубо для диагностических целей.

Затопление ICMP-пакетами

Традиционный англоязычный термин - "ping flood". Появился он потому, что программа "ping", предназначенная для оценки качества линии, имеет ключ для "агрессивного" тестирования. В этом режиме запросы посылаются с максимально возможной скоростью и программа позволяет оценить, как работает сеть при максимальной нагрузке.

Данная атака требует от крэкера доступа к быстрым каналам в Интернет.

Вспомним, как работает ping. Программа посылает ICMP-пакет типа ECHO REQUEST, выставляя в нем время и его идентификатор. Ядро машины-получателя отвечает на подобный запрос пакетом ICMP ECHO REPLY. Получив его ping выдает скорость прохождения пакета.

При стандартном режиме работы пакеты выслаются через некоторые промежутки времени, практически не нагружая сеть. Но в "агрессивном" режиме поток ICMP echo request/reply-пакетов может вызвать перегрузку небольшой линии, лишив ее способности передавать полезную информацию.

Естественно, случай с ping является частным случаем более общей ситуации, связанный с перегрузкой каналов. Например, крэкер может посылать множество UDP-пакетов на 19-й порт машины-жертвы, и горе ей, если она, следуя общепринятым правилам, имеет на 19-м UDP-порту знакогенератор, отвечающий на пакеты строчками по 80 байт.

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

Одной из вариантов атаки - посылать ICMP echo request-пакеты с исходным адресом, указывающем на жертву, на broadcast-адреса (широковещательные) крупных сетей. В результате каждая из машин ответит на этот фальшивый запрос, и машина-отправитель получит больше количество ответов. Посылка множество broadcast-echo requests от имени "жертвы" на broadcast-адреса крупных сетей, можно вызвать резкой заполненение канала "жертвы".

Приметы затопления - резко возросшая нагрузка на сеть (или канал) и повышение количество специфических пакетов (таких, как ICMP).

В качестве защиты можно порекомендовать настройку маршрутизаторов, при которых они будут фильтровать тот же ICMP трафик, превышающие некоторую заданную заранее величину (пакетов/ед. времени). Для того, чтобы убедиться, что Ваши машины не могут служить источником ping flood'а, ограничьте доступ к ping.

Затопление SYN-пакетами

Пожалуй, затопление SYN-пакетами ("SYN flooding") - самый известный способ напакостить ближнему, с того времени, как хакерский электронный журнал "2600" опубликовал исходные тексты программы, позволяющие заняться этим даже неквалифицированным пользователям. Следует заметить, что впервые эта атака была упомянута еще в 1986 году все тем же Робертом Т. Моррисом.

Вспомним, как работает TCP/IP в случае входящих соединений. Система отвечает на пришедший C-SYN-пакет S-SYN/C-ACK-пакетом, переводит сессию в состояние SYN_RECEIVED и заносит ее в очередь. Если в течении заданного времени от клиента не придет S-ACK, соединение удаляется из очереди, в противном случае соединение переводится в состояние ESTABLISHED.

Рассмотрим случай, когда очередь входных соединений уже заполнена, а система получает SYN-пакет, приглашающий к установке соединения. По RFC он будет молча проигнорирован.

Затопление SYN-пакетами основано на переполнении очереди сервера, после чего сервер перестает отвечать на запросы пользователей. Самая известная атака такого рода - атака на Panix, нью-йоркского провайдера. Panix не работал в течении 2-х недель.

В различных системах работа с очередью реализована по разному. Так, в BSD-системах, каждый порт имеет свою собственную очередь размером в 16 элементов. В системах SunOS, напротив, такого разделения нет и система просто располагает большой общей очередью. Соответственно, для того, что бы заблокировать, к примеру, WWW-порт на BSD достаточно 16 SYN-пакетов, а для Solaris 2.5 их количество будет гораздо больше.

После истечение некоторого времени (зависит от реализации) система удаляет запросы из очереди. Однако ничего не мешает крэкеру послать новую порцию запросов. Таким образом, даже находясь на соединение 2400 bps, крэкер может посылать каждые полторы минуты по 20-30 пакетов на FreeBSD-сервер, поддерживая его в нерабочем состоянии (естественно, эта ошибка была скорректирована в последних версиях FreeBSD).

Как обычно, крэкер может воспользоваться случайными обратными IP-адресами при формировании пакетов, что затрудняет его обнаружение и фильтрацию его трафика.

Детектирование несложно - большое количество соединений в состоянии SYN_RECEIVED, игнорирование попыток соединится с данным портом. В качестве защиты можно порекомендовать патчи, которые реализуют автоматическое "прорежение" очереди, например, на основе алгоритма Early Random Drop. Для того, что бы узнать, если к Вашей системе защита от SYN-затопления, обратитесь к поставщику системы.

Другой вариант защиты - настроить firewall так, что бы все входящие TCP/IP-соединения устанавливал он сам, и только после этого перебрасывал их внутрь сети на заданную машину. Это позволит Вам ограничить syn-затопление и не пропустить его внутрь сети.

Локальная буря

Сделаем небольшое отступление в сторону реализации TCP/IP и рассмотрим "локальные бури" на пример UDP-бури. Как правило, по умолчанию системы поддерживают работу таких UDP-портов, как 7 ("эхо", полученный пакет отсылается назад), 19 ("знакогенератор", в ответ на полученный пакет отправителю выслается строка знакогенератора) и других (date etc).

В данном случае крэкер может послать единственный UDP-пакет, где в качестве исходного порта будет указан 7, в качестве получателя - 19-й, а в качестве адреса получателя и отправителя будут указаны, к примеру, две машины вашей сети (или даже 127.0.0.1). Получив пакет, 19-й порт отвечает строкой, которая попадает на порт 7. Седьмой порт дублирует ее и вновь отсылает на 19 и так до бесконечности.

Бесконечный цикл съедает ресурсы машин и добавляет на канал бессмысленную нагрузку. Конечно, при первом потерянном UDP-пакете буря прекратиться. Как недавно стало известно, данная атака временно выводит из строя (до перезагрузки) некоторые старые модели маршрутизаторов.

Очевидно, что в бесконечный разговор могут быть вовлечены многие демоны (в случае TCP/IP может быть применен TCP/IP spoofing, в случае UDP/ICMP достаточно пары фальшивых пакетов).

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

Наши рекомендации