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

UnixForum





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

Кибератаки в подробностях: DoS и DDoS

Оригинал: Cyber Attacks Explained: DoS and DDoS
Автор: Prashant Phatak
Дата публикации: 1 Ноября 2011 г.
Перевод: А.Панин
Дата перевода: 26 Ноября 2012 г.

С этой статьи мы начинаем серию статей, посвященных основным типам кибератак, ослабляющих безопасность IT-инфраструктуры организаций. С быстрым распространением Интернет-технологий и приложений число лиц, пытающихся получить доступ к системам также возрастает - обычно этим занимаются для того, чтобы прославиться, получить финансовую выгоду или подмочить чужую репутацию. В первой статье серии рассмотрим атаку отказа в обслуживании (Denial of Service attack, DoS) и ее распределенную версию (DDoS). Мы рассмотрим технические аспекты осуществления этих атак и обсудим пути остановки их на подходе к внутренней сети.

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

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

Давайте попробуем понять основы протокола TCP/IP, использующего рукопожатие между отправляющей и принимающей стороной. Рисунок 1 иллюстрирует процесс работы рукопожатия TCP в штатном режиме и в режиме "атаки сегментами SYN" (SYN flood).

Рукопожатие TCP
Рисунок 1: Рукопожатие TCP

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

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

Если какой-либо порт не предназначен для ответа на запрос, принимающая сторона отправляет пакет RST, что означает отказ в приеме запроса.

Как вы убедились, программное обеспечение, реализующее стек TCP/IP, реализует сложные механизмы обмена данными, поэтому на его работу затрачивается часть ресурсов центрального процессора и оперативной памяти. К этому стоит добавить, что на сервере производится множество рукопожатий TCP для различных исходных и целевых адресов, а также портов. Все протоколы, основанные на межсетевом протоколе (IP), такие, как ICMP ping, telnet, FTP и другие в действительности основываются на этих же принципах для выполнения своей работы, причем каждый из них работает на отдельном сокете и порте.

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

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

Существуют разные методы для осуществления таких атак, каждый из которых использует свое техническое решение. Обратитесь к таблице, приведенной ниже - она иллюстрирует соответствие различных атак отказа в обслуживании уровням базовой эталонной модели взаимодействия открытых систем (OSI).
Прикладной уровень Атаки отказа в обслуживании на вебсайты, рассылка спама по электронной почте
Представительский уровень Специально сформированные SSL-запросы
Сеансовый уровень Атаки отказа в обслуживании на telnet
Транспортный уровень Атака SYN-пакетами (SYN Flood), атака ICMP-запросами с измененными адресами (Smurf Attack)
Сетевой уровень Атака ICMP-запросами (ICMP Flooding)
Канальный уровень Атака пакетами с разными MAC-адресами (MAC Flooding)
Физический уровень Атака специально сформированными пакетами (Dummy Packet Attack)

Рассмотрим каждую из техник подробнее.

Атаки отказа в обслуживании уровня сетевого стека

Массовая рассылка пакетов с разными MAC-адресами (MAC flood)

Это редкая атака 1 уровня OSI при которой атакующий рассылает множество Ethernet-фреймов, имеющих разные MAC-адреса. Маршрутизаторы обрабатывают MAC-адреса по отдельности, поэтому им приходится резервировать часть ресурсов для обработки каждого запроса. Когда у маршрутизатора заканчивается память, он либо отключается, либо перестает отвечать на запросы.

В отношении нескольких типов маршрутизаторов эта атака может привести к полному сбросу таблиц маршрутизации и тем самым нарушить работу всей обслуживаемой ими сети.

Массовая рассылка SYN-пакетов (SYN flood)

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

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

В обоих примерах таблицы соединений и часть памяти на целевой системе заполняются недействительными записями. Когда таблица заполняется полностью, устройство перестает отвечать на запросы.

Атака с помощью пинг-пакетов (ping of death)

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

Атаки с помощью установления соединений TCP

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

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

Атака ICMP-запросами с измененными адресами (Smurf Attack)

Это очень известная атака 3 уровня OSI при которой атакующий отправляет поток пинг-запросов на широковещательные IP-адреса. При этом адрес источника пакетов подменен на адрес атакуемой системы. Таким образом, маршрутизаторы доставляют ответы системам, на которые направлена атака, а они отправляют пинг-ответы. В большой сети с большим количеством оборудования эта атака может произвести разрушительный эффект и привести к тому, что маршрутизаторы перестанут отвечать на запросы.

Существует похожая атака (Fraggle attack), при которой вместо TCP-пакетов отправляются эхо-пакеты UDP.

Атаки TCP RST-пакетами

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

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

Атаки отказа в обслуживании прикладного уровня

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

Атаки прикладного уровня эксплуатируют уязвимости в операционной системе и приложениях. Ниже приведены описания нескольких таких атак.

Переполнения буфера

Это очень известная атака, приводящая к тому, что операционная система начинает чрезмерно потреблять ресурсы до тех пор, пока не начнутся утечки памяти, замедление работы или система просто перестанет отвечать на запросы. Информация о том, что переполнениям буфера подвержена только ОС Windows, является мифом - фактически, дистрибутивы Linux также подвержены этой атаке. Приложения, такие как базы данных, сервера электронной почты и веб-сервера часто оказываются подвержены уязвимостям переполнения буфера.

Атаки на Web- и DNS-сервера

Web-сервера, работающие по протоколу TCP на порту 80 являются частой целью для атак отказа в обслуживании. Атакующие обычно отправляют множество HTTP-запросов (никаким образом не измененных) с целью получения чрезмерно больших объемов данных из базы данных сервера.

Такие потоки запросов загружают базу данных, заставляя Web-сервер ожидать данные из нее. Это препятствует нормальной работе обоих серверов и они перестают отвечать на запросы. Это также может случиться и непроизвольно, особенно в те моменты, когда на сайте выкладываются последние новости и все хотят ознакомиться с ними одновременно. В случае DNS-серверов методика проведения атаки аналогична, но атака имеет более серьезные последствия. Если DNS-сервер перестает отвечать на запросы, может перестать функционировать вся сеть предприятия.

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

Говоря простым языком, распределенная атака отказа в обслуживании (DDoS) сочетает в себе множество узлов, являющихся источниками атаки, с различными техниками, обсужденными нами ранее и может привести к катастрофическим последствиям. Посмотрите рисунок 2 для того, чтобы понять, как планируется типичная распределенная атака на сайт.

Типичная распределенная атака
Рисунок 2: Типичная распределенная атака

Летальная комбинация потока SYN-пакетов с подмененными адресами и классической атаки потоком модифицированных пинг-пакетов часто используется для нарушения работы сети с открытым доступом в Интернет.

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

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

Защита систем, основанных на свободном программном обеспечении

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

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

В системе мониторинга состояния сети должно отображаться большое количество отброшенных TCP-пакетов, необычные сбросы TCP-соединений, принятые поврежденные SYN-пакеты TCP или отправленные дубликаты ACK-пакетов. Обычно первым компонентом сети, подверженным атаке является маршрутизатор, за ним следует межсетевой экран и все остальные компоненты сети, такие, как свитчи. Межсетевые экраны не могут защитить маршрутизатор, но прошивки новых моделей маршрутизаторов (например, Cisco 7600 или x443) содержат патчи для защиты от атак отказа в обслуживании. Хотя современные межсетевые экраны и имеют множество функций для противодействия таким атакам, они не всегда помогают.

Межсетевые экраны, без сомнения, защищают от атак уровня сетевого стека, но обычно они не могут защитить от атак прикладного уровня, таких, как атака на HHTP-сервер на порту 80. В этом случае необходим межсетевой экран, работающий на уровне приложений и проверяющий каждый запрос на незлонамеренность.

Для дистрибутивов Ubuntu и RHEL существует прекрасный инструмент APF (Advanced Policy Firewall), способный сдерживать DoS-атаки. Свободные системы на основе Linux славятся высоким качеством драйверов сетевых карт, а также функциями и инструментами, например, межсетевым экраном для фильтрации пакетов, инструментами для исследования пакетов, инструментами для исследования состояния сети, системами повышения безопасности на уровне ядра и другими полезными вещами.

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

Для особо важных корпоративных сетей на основе Linux лучшим выбором является развертывание системы предотвращения проникновений (Intrusion Prevention System, IPS) в виде отдельного устройства. Эти устройства работают в promiscous-режиме и используют встроенные алгоритмы определения аномалий в пакетах для перехвата и декодирования каждого пакета. Поскольку возможности работы этих устройств включают в себя диапазон от 2 до 7 уровня OSI, они могут определить, является ли пакет относящимся к реальному соединению или нет. Эти устройства предоставляют замечательный механизм уведомления об атаках и их нейтрализации.

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

Следующая статья серии