Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Безопасная эксплуатация Apache, часть 8: атаки DoS и DDoS

Оригинал: Securing Apache, Part 8: DoS & DDoS Attacks
Автор: Arpit Bajpai
Дата публикации: 1 Апреля 2011 г.
Перевод: А.Панин
Дата перевода: 2 Февраля 2013 г.

В данной статье серии рассматриваются атаки отказа в обслуживании (DoS и DDoS), являющиеся одними из самых опасных угроз для веб-серверов с начала эры Web 2.0.

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

Целью атаки отказа в обслуживании (Denial of Service) является нарушение выполнения предусмотренных приложениями операций, таких, как просмотр веб-страниц, обмен сообщениями электронной почты или перевод средств с вашего банковского счета. В ходе данных атак веб-сервер может быть даже отключен. Этот эффект отказа в обслуживании достигается с помощью отправки сообщений целевой системе с расчетом на то, что после приема этих "сообщений" будут использованы особенности процесса их обработки, что в свою очередь приведет к ошибке, краху приложения, перезагрузке сервера или выполнению бесполезной работы.

В большинстве случаев целью взломщика является лишение клиентов доступа к необходимым им функциям сервера. Одним вариантом атаки является выполнение корректных операций с целью эксплуатации уязвимостей на целевой машине или в приложении с помощью отправки специально сформированных для этого запросов (обычно это делается с помощью таких инструментов, как Metasploit). Другим вариантом является отправка большого количества сообщений, при обработке которых будет затрачен какой-либо ключевой ресурс целевой системы, в качестве которого может выступать время ЦП, оперативная память, и.т.д. Целевое приложение, система или сеть тратит все доступные ресурсы на обработку трафика, сгенерированного во время атаки, и не может обработать запросы реальных клиентов.

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

Сценарий атаки

Рассмотрим простой сценарий: взломщик отправляет большое количество запросов веб-серверу - например, поддерживающему работу веб-сайта с изображениями высокого разрешения, доступными с помощью определенной строк и URL, скажем, www.example.com/images/HD_images.html. Давайте также предположим, что на странице 50-60 таких изображений. Теперь каждый раз, когда пользователь будет перезагружать страницу, потребуется значительная часть пропускной способности сети, используемой веб-сервером, для передачи данных. В данном случае взломщик может создать отдельную HTML-страницу с встроенным элементом iframe таким образом, как показано ниже:
<html>
    <iframe src=http://www.example.com/images/HD_images.html width=2 height=2></iframe>
</html>
Предположим, что вместо одного элемента iframe взломщик скопировал и вставил код около 1000 раз на одной и той же странице, а также добавил тэг meta для обновления:
<html>
    <head>
        <meta http-equiv="refresh" content="2">
    </head>
    <iframe src=http://www.example.com/images/HD_images.html width=2 height=2></iframe>
    <iframe src=http://www.example.com/images/HD_images.html width=2 height=2></iframe>
    :
    :
    : (1000 раз)
</html>

Эта страница при загрузке будет отправлять один и тот же запрос 1000 раз каждые 2 секунды и занимать большую часть пропускной способности сети веб-сервера. Поэтому целевой сервер будет не в состоянии ответить другим клиентам и, в итоге, действительным клиентам будет отказано в обслуживании сервером.

Теперь давайте предположим, что взломщик захочет организовать DoS-атаку на сайт example.com путем загрузки его огромным количеством сообщений. Также предположим, что в распоряжении сайта example.com обширные ресурсы и сетевое соединение с достаточно высокой пропускной способностью (что встречается достаточно часто). Исходя из этих условий, взломщикам становится очень сложно сгенерировать необходимое количество сообщений, используя одну систему (как в сценарии выше) для того, чтобы исчерпать эти ресурсы.

Однако, можно представить последствия атаки в том случае, если взломщики возьмут под контроль 100000 систем, одновременно отправляющих запросы сайту example.com. Каждая из систем, участвующих в атаке (скомпрометированная система, инфицированная с помощью вредоносного кода), может иметь низкую производительность (иметь медленный процессор и соединяться с сетью через простое модемное соединение), но вместе они организуют мощную сеть для атаки, которая при правильном использовании может вывести из строя даже высокопроизводительные сайты. В данном случае организуется распределенная атака отказа в обслуживании (DDoS), а системы, контролируемые взломщиком, называются зомби-системами или агентами.

Распределенные атаки отказа в обслуживании (DDoS)

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

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

Типичная DDoS-атака
Рисунок 1: Типичная DDoS-атака

При DDoS-атаках в пакетах генерируемого трафика используются подмененные исходные IP-адреса. Взломщики предпочитают использовать эти поддельные исходные IP-адреса по двум наиболее важным причинам: во-первых это делается для сокрытия адресов зомби-систем, чтобы жертва атаки не смогла отследить путь пакетов до них. Во-вторых это делается для того, чтобы свести на нет любую попытку фильтрации вредоносного трафика со стороны жертвы атаки.

Типы DoS-атак

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

Атаки с использованием потока SYN-сегментов TCP

DoS-атаки обычно используют сетевые протоколы с контролем состояния соединения, так как реализации этих протоколов затрачивают ресурсы для поддержания состояния соединения. Атака с использованием потока SYN-сегментов TCP является примером такого подхода и значительным препятствием корректной работе многих систем. Когда клиент собирается установить TCP-соединение с сервером, он в первую очередь отправляет SYN-сегмент серверу. Сервер подтверждает прием, отправляя сообщение из сегментов SYN-ACK клиенту. Клиент завершает установление соединения, отвечая сообщением с сегментом ACK серверу. После этого соединение между клиентом и сервером считается открытым и может производиться обмен специфичными для службы данными.

Атака реализуется в в ходе создания соединения, находящегося в "полуоткрытом" состоянии и ожидающего сообщения с сегментом ACK от клиента после отправки ему сообщения с сегментами SYN-ACK. Серверу необходимо зарезервировать память для хранения информации о полуоткрытом соединении и эта память не будет освобождена до тех пор, пока сервер либо получит сообщение с сегментом ACK, либо время ожидания для полуоткрытого соединения истечет (закончится период ожидания передачи данных).

Взломщики могут легко создавать полуоткрытые соединения либо с помощью подмены исходных IP-адресов сообщений с SYN-сегментами, либо просто игнорируя сообщения с сегментами SYN-ACK. Завершающее сообщение с ACK-сегментом никогда не будет отправлено жертве атаки в последствии данных действий. Так как жертва атаки обычно резервирует ограниченный объем памяти для таблицы процессов, большое количество полуоткрытых соединений приведет к исчерпанию данной памяти.

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

Атаки с использованием пакетов ICMP

Протокол управляющих сообщений (Internet Control Message Protocol) используется для обработки ошибок и обмена управляющими сообщениями. Протокол ICMP может использоваться для того, чтобы установить, отвечает ли узел сети Интернет. Для этого узлу отправляется пакет с эхо-запросом ICMP. В случае, если узел принимает этот пакет, он должен отправить пакет с эхо-ответом ICMP. Стандартная реализация данного процесса представлена в приложении ping.

В ходе данной атаки пакеты с эхо-запросами ICMP и исходными IP-адресами, подмененными на адрес целевой системы, отправляются на широковещательный адрес промежуточной сети. (Широковещательными адресами являются специально выделенные адреса во всех подсетях, используемые для отправки сообщений всей подсети. Все узлы выбранной подсети получают пакеты, отправляемые на эти широковещательные адреса и в некоторых случаях, к примеру, при использовании протокола ICMP, отвечают на них.)

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

Атаки с использованием потока пакетов UDP

В ходе усовершенствования и повторного проектирования реализаций протоколов TCP и ICMP были применены новые функции для повышения безопасности работы существующих сетей и защиты их от атак с использованием этих протоколов. Несмотря на это, у взломщиков осталась возможность просто отправить большое количество UDP-пакетов на адрес жертвы атаки. Так как промежуточная сеть может доставить большие объемы трафика, чем сеть жертвы атаки в состоянии обработать, данный трафик позволяет исчерпать пропускную способность сети жертвы атаки.

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

Распределенные отраженные атаки отказа в обслуживании (DRDoS)

В отличие от обычных DDoS-атак, в случае DRDoS-атак армия взломщика состоит из первичных зомби-узлов, вторичных зомби-узлов и отражающих узлов. Процесс данной атаки идентичен процессу DDoS-атаки до определенного момента. Взломщики контролируют первичные замби-узлы, которые, в свою очередь, контролируют вторичные зомби-узлы.

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

Типичная DRDoS-атака
Рисунок 2: Типичная DRDoS-атака

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

Продолжение статьи: "Безопасная эксплуатация Apache, часть 8: атаки DoS и DDoS (продолжение)"