Теория и практика DDoS-атак

digix

VIP member
Messages
421
Reputation
79
Reaction score
124
Points
43
Как же тебя достало это молодое поколение! Еще ничего не умеют, ничего не знают, но уже «валят» какие-то серверы. Опять зафлудили твой чат, повесили сервак с CS, «положили» форум. Детвора... Наверняка кто-то выложил в public свой флудер, вот молодежь и развлекается. Что там опять? Снова HTTP Get-запросы? Не страшно, эту ошибку мы сейчас исправим. Эффективно досить на прикладном уровне нельзя: в нем все вопросы решает грамотная фильтрация. А если бы они спустились ниже по стеку, то нашли бы просчеты в архитектуре транспортных и сетевых уровней. Тогда это было бы потрясением для всех, а так это просто баловство, правда, иногда очень опасное.

Dos – слово, которое набило оскомину

Про Dos-атаки не писал только ленивый. Тема «изъезжена». Ты столько раз про них читал в журналах и на форумах, что каждая новая статья воспринимается как следующая серия бесконечного бразильского сериала. Такие сериалы отупляют, а ты ведь не хочешь стать дополнением к телевизору? Может разберемся, по каким законам строятся все эти мыльные оперы? Тогда ты избавишься от необходимости смотреть их.

Рассмотрим Dos-атаки только сетевого и транспортного уровня. Почему только их? Потому что эти атаки не зависят от способов реализации протоколов более высоких уровней, а значит, применимы к любым системам, использующим стек протоколов TCP/IP. Это предоставит нам возможность не зависеть от того, с какими протоколами прикладного уровня работает
интересующая нас система. Что очень важно, поскольку ограничить, изменить или заменить протокол прикладного уровня можно практически всегда, а вот отказаться от протоколов сетевых и транспортных уровней — нет.

* «Кто владеет информацией, тот владеет миром» (Уинстон Черчилль)

Если тебе не надо еще раз повторять, почему Dos-атаки опасны, то можешь смело переходить к следующему абзацу. Этот абзац для тех, чей сервер не был в дауне от стопроцентной загрузки проца, у кого пользователи не бились в истерике по поводу недоступности их ресурса и чье начальство не грозилось оторвать кому-нибудь голову, если все снова не заработает через пять минут. Все банально. В современном мире доступность информационного ресурса является одним из основополагающих факторов, определяющих его стоимость. Ты и сам знаешь, что информацию не обязательно красть — ее достаточно сделать недоступной, пусть даже на некоторое время, и тогда она потеряет свою актуальность, следовательно, и ценность. Основную угрозу доступности информации в настоящее время как раз и представляют атаки класса отказа в обслуживании (Denial of Service - DoS), а точнее, их распределенный вариант Destributed Denial of Service(DDoS) – распределенные атаки отказа в обслуживании. Если говорить научным языком, то основной целью DoS/DDoS-атак является выведение информационного объекта из рабочего состояния, нарушение его нормального функционирования, снижение качества предоставляемых им услуг. Основной чертой DoS-атак является простота организации и высокая степень анонимности атакующего. Кроме того, против подобных атак нет стопроцентной защиты. Именно перечисленные выше факторы привлекают к DoS/DDoS-атакам внимание специалистов по безопасности по обе стороны сетевых баррикад. За примерами «страшных историй» далеко ходить не надо. Ноябрь 2002, семь из тринадцати корневых dns-серверов всемирной паутины выведены и строя спланированной Dos-атакой. Август 2003, серверы Osirusoft крупнейшего хранилища IP-адресов были отключены после большого количества распределенных на них Dos-атак (данная служба занималась ведением динамического списка IP-адресов, замеченных в спаме). Сентябрь 2005, американский подросток укладывает сеть интернет-магазинов, причиненные им убытки оцениваются в 1,5 миллиона долларов. Сейчас открой любой баг-трек, раздел новостей. Что? Опять? Снова? Да как же они это делают?

Немного теории.

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

1. используя уязвимости в программном обеспечении;
2. посылая сетевой трафик на атакуемую систему, превышающий ее пропускную способность;
3. захватывая критические системные ресурсы атакуемой системы: процессорное время и память.

Рассмотрим каждый из способов более подробно. Первый способ состоит в том, чтобы, используя уязвимости (ошибки) в программном или аппаратном обеспечении системы, нарушить ее работу. Вспомни land, ping-death. Такой способ самый легкий. Он не требует больших вычислительных и сетевых ресурсов нападающего, однако подобные атаки предполагают использование уязвимостей, что само по себе усложняет задачу, ведь сегодня уязвимость в атакуемой системе есть, а завтра она может быть устранена. Поэтому на сегодняшний день более популярны второй и третий способы, которым и уделяется основное внимание в данной статье.

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

Третий способ состоит в том, чтобы навязать атакуемому серверу действия, расходующие его системные ресурсы: процессорное время или память (то, что для него критично). Это могут быть многократные запросы на выполнение трудоемких операций с базами данных или запросы на выделение памяти под процессы, которые не будут использоваться. Рассмотрим более подробно разновидности атак, использующие второй и третий способы.

За ошибки в архитектуре приходится дорого расплачиваться.

Атак, основанных на протоколе TCP, больше всего (их целых три): TCP flood, TCP SYN Flood и reflection SYN flood.
TCP SYN Flood

Вдохни поглубже. Коротко об этой атаке не расскажешь. Она не сложная, нет. Просто в свое время была допущена ошибка в проектировании всего транспортного протокола TCP. Расплачиваться за нее пришлось долго и большой кровью. Ты спросишь, в чем ошибка? Не торопись, сейчас все поймешь сам. Давай вспомним, что происходит при установлении TCP-соединения согласно стандарту RFC-793. Происходит так называемое трехуровневое рукопожатие:

1. Клиент посылает серверу пакет с SYN-флагом и установленным начальным номером (SEQ) клиенткой последовательности пакетов(SEQ=ISN_C), который говорит о том, что мы хотим установить соединение: Client ----- (SEQ=ISN_C, CTRL=SYN). -----> Server;
2. Сервер отвечает клиенту SYN/ACK пакетом (ваш пакет с SYN= ISN_C получен, готов установить соединение, мой начальный номер последовательности пакетов (SYN) равен ISN_S):

Server ----- (SEQ=ISN_S, ACKN= ISN_C+1, CTRL=SYN, ACK)---> Client

3. Клиент на это отвечает серверу пакетом ACK, и соединение считается установленным:

Client -----(SEQ=ISN_С+1, ACKN= ISN_S+1, CTRL=ACK)-----> Server

Убрав из схемы трехуровневого рукопожатия шаг номер 3, можно реализовать атаку TCP SYN Flood. Тогда на втором шаге сервер посылает клиенту SYN/ACK-пакет, переводит сессию в состояние SYN_RECEIVED и заносит пакет в очередь. Добавление пакета в очередь означает, что если в течение установленного интервала времени сервер не получит подтверждения, что данный пакет дошел до адресата (шаг №3 и есть это подтверждение), то данный пакет будет считаться потерянным и потому будет послан снова. Если подтверждение в виде SYN/ACK-пакета будет получено, то пакет будет удален из очереди.

Представим, что произошла попытка установки еще одного соединения, и новый пакет из шага №2 добавляется в очередь. А потом еще одна попытка и еще один пакет. Очередь имеет свои известные пределы, поэтому рано или поздно должно произойти ее переполнение. После чего сервер перестает реагировать на всякие попытки установления соединения. Строго говоря, в различных системах работа с очередью реализована по-разному. После истечения некоторого времени система удаляет пакеты из очереди. Однако ничего не мешает атакующему послать новую серию запросов, чтобы вновь заполнить буфер атакуемой системы, тем самым и далее поддерживая ее в нерабочем состоянии. Реализация атаки SYN-flooding основывается на том, что жертве могут посылаться как пакеты от имени IP-адреса, которого реально не существует (IP-spoofing), так и пакеты с реального IP-адреса атакующего.
Обнаружить данную атаку довольно просто, ее характеризуют:

1. большое количество соединений в состоянии SYN_RECEIVED;
2. игнорирование попыток соединиться с данным портом.

Затопление SYN-пакетами - самый известный способ «загрузить» информационный канал. В результате этой атаки жертва перестает реагировать на попытки установления соединения, то есть попросту отбрасывает все приходящие пакеты. Этот вид DOS-атаки очень распространен — практически все известные порталы в свое время страдали от подобных атак.
Механизмы защиты от атаки SYN-flood:

* выбор оптимального таймаута, по истечении которого полуоткрытые соединения выбрасываются из буфера;
* очистка наиболее старых полуоткрытых соединений:
* SYN COOKIE. Это самый действенный способ защиты от SYN Flood-атак, поговорим о нем более подробно. В этом способе трехэтапное соединение TCP сводится к двум этапам: при получении SYN-пакета сервер отвечает пакетом SYN/ACK и не заносит никакую информацию в очередь (забывает о клиенте). Идея этого способа защиты заключается в следующем. Значение ISN_S формируется сервером в пакете SYN/ACK. Так вот, если зашифровать в значении ISN_S ip адрес клиента, то в случае корректной работы клиент возвратит Ack-пакет со значением ACKN= ISN_S+1, а сервер расшифрует его, извлечет из него начальный IP-адрес, сравнит его с IP-заголовком IP-пакета, и если адреса совпадают, то установит соединение. Если адреса из расшифрованного значения ACKN= ISN_S+1 и значения IP-заголовка совпадать не будут, значит, происходит syn flood-нападение. Существуют два механизма реализации SYN COOKIE. Один разработан Стивом Гибсоном, другой — Дэном Бэрнстейном (Dan Bernstein) и Эриком Шенком (Eric Schenk). Концепция Syn cookie соответствует стандарту RFC-793, она требует доработки только серверной части и не касается клиентской.

Ну что осилил? Все отложилось в голове? Теперь можешь немного расслабиться, Syn Flood позади. Все остальное проще.

TCP flood

TCP flood – это вид атаки, при котором с атакуемой системой устанавливается множество TCP-соединений, что приводит к связыванию ее системных ресурсов. При этом виде атаки происходят все три стадии установления TCP-соединения, описанные выше, но никакие данные после установки соединения не пересылается, а происходит установление следующего соединения и т.д. Количество Tcp соединений, которые может установить одна система, теоретически ограничивается цифрой в 65535, а на практике это еще меньше из-за портов, используемых системными службами и пользовательскими приложениями. С одной машины серьезную систему не повесишь, но вот израсходовать лимит установленных соединений (если он есть) можно. Израсходовав лимит на количество одновременно установленных соединений, атакуемая система не сможет устанавливать новые соединения с легитимными пользователями и предоставлять им свой ресурс. Если Tcp Flood используется при организованном DDos'е, то эффективной защиты против него нет.

Reflection SYN flooding

Как уже говорилось выше, TCP-соединение требует, чтобы любая TCP-служба, которая получает SYN-пакет, ответила SYN/ACK-пакетом. На определенные серверы в сети, называемые «отражателями», посылаются пакеты с исходным IP-адресом, указывающим на атакуемую машину. Сервер или router, который получает эти поддельные SYN-пакеты, посылает SYN/ACK-ответы на атакуемый хост. Любая TCP-связь с сервером общего назначения может использоваться для того, чтобы «отразить» SYN-пакеты. Довольно легко может быть построен список, в котором будут перечислены router’ы и серверы, отвечающие на SYN-пакеты. Наиболее популярные TCP-порты - 22 (Secure Shell), 23 (Telnet) и 80 (HTTP/web). Кроме того, многие router'ы подтвердят TCP-соединение по 179 порту. Имея большой список «SYN-отражателей», каждый злоумышленник может распределить поддельные SYN-пакеты равномерно через весь набор роутеров/серверов в списке. Компьютер, который получает SYN-запрос, ожидает SYN/ACK-ответ, а при его отсутствии посылает еще несколько SYN/ACK-пакетов. Поэтому «отражатели» отправят в три или четыре раза больше SYN/ACK-пакетов по сравнению с числом полученных. Это также означает, что SYN/ACK-пакеты продолжат атаковать целевой сервер в течение некоторого времени, даже после того, как злоумышленник прекратил нападение.

Старо как мир, но работает

Атак, основанных на протоколе ICMP две: ICMP flood и Smurf – ping.

ICMP flood

ICMP flood - это далеко не новый вид атаки, который, тем не менее, не теряет популярности. Здесь используется команда ping. Ping изначально задумывался для проверки качества соединения с удаленным компьютером. Принцип работы команды: отсылается сообщение ECHOREQUEST, на которое удаленный компьютер автоматически отвечает сообщением ECHOREPLY. Согласно RFC, операционная система всегда обязана при получении запроса ECHOREQUEST ответить сообщением ECHOREPLY, а значит, затратить на это часть своих ресурсов. ICMP – протокол для диагностики сетевых систем и зачастую от него нельзя отказаться. Он был, есть и будет, а с повсеместным внедрением ipv6 его роль возрастет еще больше. Но если ты думаешь, что старыми добрыми ECHOREQUEST-запросами уже ни одну систему не загрузишь, то ошибаешься. Посмотри, как им можно загрузить виндовый сервак в локальной сети:

Smurf - ping-запросы ICMP.

Едем дальше, атака SMURF. Экспертами ее относят к наиболее опасным разновидностям DoS-атак. Сейчас объясню почему. SMURF использует эффект усиления, являющийся результатом отправки широковещательных запросов рing к системам, которые всегда обязаны ответить на него. Запрос направляется либо на сетевой адрес, либо по адресу широковещательной рассылки сети. Прямая широковещательная рассылка обычно служит для диагностики, позволяя выявить работающие системы без рing-запроса каждого адреса из диапазона. В атаке smurf используются особенности широковещательной рассылки. Для ее проведения требуются как минимум три системы: атакующий, усиливающая сеть и атакуемый. Атакующий посылает поддельный пакет IСМР ЕСНО по адресу широковещательной рассылки усиливающей сети. Адрес источника этого пакета заменяется адресом жертвы, как будто именно целевая система инициировала запрос. После этого происходит следующее: поскольку пакет ЕСНО послан по широковещательному адресу, все системы усиливающей сети возвращают жертве свои ответы (если только конфигурация не определяет другого поведения). Послав один пакет IСМР в сеть из 100 систем, атакующий инициирует усиление атаки DoS в сто раз. Коэффициент усиления зависит от состава сети, поэтому атакующий ищет большую сеть, способную полностью подавить работу атакуемой системы.

Механизм защиты от Smurf - ping-запров ICMP.

Специалисты по сетевой безопасности рекомендуют предпринять следующие контрмеры:

1. чтобы предотвратить эффект усиления, нужно позволить запрет операций прямой широковещательной рассылки на все граничные маршрутизаторы;
2. установить в операционной системе режим «тихого» отброса широковещательных эхо-пакетов IСМР.

Без установки соединения. Roger that.

Атак, основанных на протоколе UDP две: UDP flood и UDP fraggle flood.
UDP flood

При проведении этой атаки происходит отправка на адрес атакуемой системы множества пакетов UDP, что приводит к «связыванию» сетевых ресурсов атакуемого. Данная атака является одним из способов затопления канала бесполезным сетевым трафиком (мусором). Если не можешь навскидку припомнить, какие известные тебе приложения используют udp-протокол, то вспомни про свой любимый CS. Сервер этой игры использует порт udp 27015. Знаешь, что такое дискретное перемещение? Это когда твои друзья играют на серваке, который ты в данный момент заваливаешь udp flood-ом. Между прочим, на протоколе UDP построены почти все нынешние сетевые игры, так что тебе есть на чем тренироваться.

UDP fraggle flood

Ну что, перед нами остался только UDP fraggle, который базируется на атаке smurf, но использует пакеты UDР вместо ICМР. Атакующий посылает специально сформированные пакеты UDР по адресу широковещательной рассылки усиливающей сети, обычно на порт 7 (echo). Каждая система сети, в которой разрешен ответ на эхо-пакеты, возвратит пакеты системе-жертве, в результате чего будет сгенерирован большой объем трафика. Если в системах усиливающей сети запрещены эхо-ответы, то системы будут генерировать сообщения IСМР о недостижимости, и полоса пропускания все равно будет захватываться ненужным трафиком.

Вместо послесловия.

Надеюсь, что в твоей голове все разложилось по полочкам, а перед глазами — целостная картина происходящего. О DoS можно говорить очень много (а о DDoS еще больше). Это как бесконечный сериал с продолжениями и ремэйками, но сейчас ты знаешь, как пишутся новые серии. Теперь все, что тебя может заинтересовать, – это игра актеров.

Все, что мы рассмотрели, применимо к любым системам, использующим стек протоколов TCP/IP, и не зависит от особенностей реализации протоколов высоких уровней. Если использовать все описанные атаки в комбинации, то им сможет противостоять только система, отключенная от сети, закопанная на пятиметровую глубину и залитая сверху бетоном для надежности. На этом прощаюсь. Удачи!


Хакер, номер #094, стр. 094-082-6
 
Top