DoS/DdoS-атаки

Одной из самых страшных является DoS-атака. На мой взгляд, это самое глупое, что могли придумать хакеры. Когда не получается взломать сервер, его делают недоступным различными методами, вплоть до бессмысленного замусоривания канала связи. В этом разделе мы и рассмотрим основные из этих способов. 

Существует разновидность DoS-атаки — DDoS (Distributed DoS, Распределенная DoS), отличается она тем, что штурм производят сразу множество компьютеров. 

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

Ты спросишь, а как же Google, к которому обращаются каждый день миллионы пользователей, а может и миллиарды. У них не один сервер и даже не один центр данных. У них множество центров, которые расположены в разных странах и запросы пользователя перенаправляют на ближайший. Если попробовать узнать IP адрес сайта google.com, то вы можете увидеть, что DNS может возвращать разные. Таким образом вы не используете только один канал связи, и не используете только один центр данных. 

Но если все пользователи мира фиксировано будут работать только с один из центров – сможет ли он работать безболезненно, даже без задержек? Я не могу сказать, потому что это очень большая нагрузка. 

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

Ping of Dead

Мы уже знаем, что с помощью утилиты ping можно проверить соединение с удаленной системой. Для этого используется ICMP-протокол. Когда сервер получает ICMP-сообщение с кодом Echo Request, то он должен ответить таким же сообщением, с тем же количеством данных. 

В некоторых ОС обнаружились ошибки обработки ping-пакетов. Просто программисты, которые реализовывали ICMP-протокол, подразумевали, что пользователи будут использовать его правильно, и не станут посылать слишком большие пакеты. Надежда на добросовестность пользователей обернулась появлением атаки Ping of Dead (Ping смерти). Хакеры формировали такие пакеты, которые сервер обрабатывал неверно и зависал. Наиболее нашумевшая атака вылилась в посылку пакетов размером более 64 Кбайт. Программисты зарезервировали под принимаемые данные только 64 Кбайта, и этого не хватило для приема пакетов. На сервере это может выглядеть как переполнение буфера. 

Борьба с такими атаками может быть реализована средствами сетевого экрана. Можно запретить получение ICMP-пакетов с кодом Echo Request и атака Ping of Dead на вашу систему не принесет результата. После этого обновляем ОС. 

ICMP Flood

Когда не получается уничтожить сервер интеллектуальными способами, взломщики начинают использовать flood — засыпание сервера ICMP-пакетами. Вот это самый идиотский вид атаки, но легко загружает канал связи. Для его реализации достаточно половины канала штурмуемой системы. 

Допустим, что у сервера есть канал связи с пропускной способностью 64 Кбит/c. Вам достаточно половины, чтобы полностью его загрузить. Для этого непрерывно посылаем на сервер ping-запросы с большим размером пакета. Желательно, чтобы в качестве отправителя стоял не ваш адрес, а любой другой. Если вы своими ping-пакетами создадите нагрузку на канал сервера в 32 Кбита/с, то вторая его половина будет занята ответами на несуществующий или чужой адрес. 

Защита от этой атаки такая же, как и от Ping of Dead, а именно, запрет ICMP-трафика. Благо этот протокол не очень нужен, особенно входящий из Интернета ICMP-трафик. 

TCP SYN

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

Из названия атаки можно догадаться, что задача хакера — направить на сервер большое количество TCP-пакетов с установленным флагом SYN. Эти пакеты используются для установки подключения к серверу. Таким образом, достигнув ограничения, сервер больше не будет принимать новые подключения со стороны клиентов. 

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

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

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

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

TCP Flood

Эта атака аналогична ICMP Flood. Если не помогает смекалка, и хакер не может найти уязвимого места, то начинается засыпание сервера бессмысленными TCP-пакетами. Их эффективность иногда даже ниже ICMP-пакетов. Если в случае использования ping-запросов сервер обязан вернуть пакет с такими же данными, то в TCP-протоколе это не обязательно так. Таким образом, канал связи у хакера должен быть идентичным, а то и больше, чем у атакуемой системы. 

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

Можно использовать скачивание большого файла по протоколу HTTP. Множество таких запросов при неэффективном кэшировании на сервере также может привести к зависанию. 

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

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

UDP

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

Благо, UDP-протокол на публичных серверах используется редко, и есть возможность его запретить с помощью сетевого экрана. Если протокол необходим, то защиту может построить только программист, создав на основе UDP хотя бы какую-то проверку подлинности получаемых пакетов. 

DDoS

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

С другой стороны, реализовать действительно массовую атаку DDoS очень сложно, и большие компании были даже уверены, что это практически невозможно. Даже очень большая группа хакеров на самых быстрых каналах не сможет получить в свое распоряжение такие вычислительные ресурсы, как у серверов yahoo.com, google.com или microsoft.com. Но хакеры находят новые способы. Мало кто из пользователей добровольно отдаст мощность своего компьютера для проведения распределенной атаки на крупные серверы. Чтобы решить эту проблему, хакеры пишут вирусы, которые без разрешения занимаются захватом.

Ярким примером удачной распределенной атаки является червь MyDoom. Этот червь, начиная с 22 августа 2003 года, в течение трех дней атаковал сайт компании SCO со всех зараженных в Интернете компьютеров. Через некоторое время подобную атаку пытались реализовать через вирус MyDoom B, но на серверы компании Microsoft. Вторая атака оказалась менее эффективной, но я это связываю с тем, что меньшее количество компьютеров в Интернете было заражено этим вирусом, поэтому мощности не хватило для проведения полноценного налета, да и код червя был далек от идеала. 

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

В будущем можно ожидать новые атаки DDoS, которые окажутся более эффективными и оригинальными. Здесь уже администратор будет бессилен, и в данном случае на помощь должны приходить правоохранительные органы. 

DoS

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

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

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

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

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

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

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

Защита от DoS/DDoS

Самая эффективная защита от атак DoS, проводимых через ошибки в программах, — это своевременное обновление этих программ. А вот если хакер направил свои усилия на полное поглощение ресурсов сервера, то в данном случае защититься сложно, но необходимо сделать все возможное, чтобы усложнить задачу злоумышленнику.

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

Во время пиковой нагрузки необходимо проследить, каких ресурсов не хватает компьютеру. Обратите внимание на следующие компоненты:

пропускная способность сети;

пропускная способность сетевого оборудования;

загрузка процессора;

нагрузка на жесткий диск;

загрузка оперативной памяти.

Определите самые узкие места вашей системы, чтобы увеличить производительность. Нет смысла наращивать внешние каналы связи до 100 Мбит/с, если ваша внутренняя сеть работает только на скорости 10 Мбит/с. Это излишняя трата денег, а проблема останется. Хакеру достаточно будет направить на сервер любой трафик, чтобы забить канал в 10 Мбит мусором, и ресурсов вашей внутренней сети не хватит для обработки такого объема данных. Именно поэтому очень важно правильно определить слабое звено в вашей системе. 

Настройте сетевые интерфейсы и параметры ОС на максимальную производительность. Это значит, что не должно быть лишних затрат, особенно сетевых. Понизить расходы на обработку сетевых пакетов можно с помощью полного запрета ICMP-трафика. 

Есть компании, которые помогают за деньги защитить сайты от DDoS. Траффик идет через сеть такой компании и она анализирует этот траффик на предмет странной активности. Специальные алгоритмы ищут потенциальные угрозы и если с какого-то IP адреса замечена угроза, то этот адрес блокируется. Могут блокироваться целые сети. Мне доводилось работать с компанией Prolexic и они вполне эффективно защищали сайты. Хотя были и ложные срабатывания, на мой взгляд. Несколько раз отключался наш офис и мы не могли подключиться к серверу. Просто Пролексик решал, что проще отрубить весь траффик самого крупного канадского провайдера. 



Внимание!!! Если ты копируешь эту статью себе на сайт, то оставляй ссылку непосредственно на эту страницу. Спасибо за понимание

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповидания на русском или английском языке.

Пишите мне


Я в социальных сетях
Facebook Telegram Youtube
Програмысли Instagram Твитер