Как организовать ddos в благих целях?

Введение

Сразу сделаю оговорку по поводу слова ddos, которое тут не совсем уместно, но я не придумал, как еще популярно объяснить о чем идет речь. От полноценной ddos атаки вы не сможете защититься в рамках настройки веб сервера. У вас просто будет забит весь канал и сервер перестанет отвечать. Если мощности сервера не достаточно для обработки и фильтрации входящих запросов, то он ляжет, чтобы вы там не делали. Для полноценной защиты от ddos нужны полноценные средства, которые стоят ощутимых финансовых затрат. Более подробно с теорией по защите от ddos читайте в отдельной статье.

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

Я приведу советы по защите от простых атак ботов или каких-то мелких вредителей и пакостников, которые без должных действий с вашей стороны могут положить ваш сайт или сервер без особых проблем. Вот простой пример. Есть не очень слабый виртуальный сервер от ihor, на борту которого 2 ярда, 8 гигов оперативы и ssd диск.

Сервер настроен по моей предыдущей статье, ссылку на которую привел в начале. На сервере развернут wordpress сайт с некоторым содержимым. И есть у нас вредитель, который на своем сервере запускает простой тест от apache на производительность веб сервера:

# ab -c 50 -n 30000 "https://hl.zeroxzed.ru/"

Всего лишь 50 параллельных потоков. Что мы видим на своем веб сервере:

Не очень приятная картина. Сервер загружен на 100%. И хотя он нормально обрабатывает запросы и в целом корректно работает. Даже не очень тормозит, но все равно это плохо. А если будет 3 сервера и по 100 потоков на каждом? Нет никаких проблем даже на тест взять у разных хостеров по виртуальной машине и запускать на них подобные штуки, имитируя ддос атаку.

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

Примеры крупнейших атак

Впервые серьезное нападение произошло в 2000 году. Жертвами стали серверы и сайты eBay, Amazon, CNN и Yahoo. Виновником стала самописная программа, созданная 16-летним хакером-энтузиастом. Вредоносный алгоритм под названием Sinkhole зафлудил машины жертв и обрушил их.

В 2013 году в результате конфликта между голландским хостинг-провайдером Cyberbunker и Spamhaus (организация занимается составлением списков спамеров) первые начали атаку на последних. Первый удар на себя приняла CDN CloudFlare, далее вредоносный трафик переключился на её провайдеров. Нагрузка на канал составила 300 Гбит/с.

Ещё один пример — DDoS-атака на Dyn (провайдера доменов), которая произошла произошла в октябре 2016 года. Мы уже упоминали эту атаку, когда рассказывали про ботнет Mirai. Её мощность составила один терабит в секунду, а, по некоторым сведениям, могла достигнуть и 1,5 терабит в секунду — очередной «рекорд» для данной индустрии. Из-за настолько серьёзного напора сервисы Dyn были отключены — вместе с этим упал целый ряд известных сайтов, среди которых GitHub, HBO, Twitter, Reddit, PayPal, Netflix и Airbnb.

Что такое современная ddos атака

DDoS расшифровывается как Distributed Denial of Service — атака на информационную систему с целью довести ее до такого состояния, когда она не сможет обслуживать запросы клиентов, для которых она работает. Ддос атака может проводиться как на отдельный сайт, так и на сервер или сеть, обслуживающую масштабную информационную систему (например, ЦОД).

В чем же сущность ddos атаки? По своей сути это распределенная DoS (Denial of Service) атака. Отличие DoS от DDoS как раз в том, что DoS это просто одиночная атака, а DDoS это масштабная атака, состоящая из множества дос атак, выполняемых из разных мест.

Виды ддос атак

Для проведения ддос атак чаще всего используют ботнет. От размера ботнета зависит мощность атаки. Из определения понятно, что ddos — это когда много запросов направляют на какую-нибудь цель. А вот цели и типы запросов могут быть принципиально разные. Рассмотрю основные варианты ddos атак, которые встречаются в современном интернете. Их можно разделить на 2 основных типа:

  1. Атака на уровне L7, то есть на седьмом уровне модели OSI. Нагрузка на приложение. Обычно это HTTP Flood, но не обзательно. Атака может быть и на открытую в мир MySQL или другую базу, почтовый сервер или даже SSH. Данная атака направлена на то, чтобы как можно меньшим трафиком напрягать наиболее тяжелое и уязвимое место сервиса. Обычно вредоносные запросы маскируются под легитимные, что осложняет отражение.
  2. Уровень L3 L4, то есть сетевой и транспортный уровни модели OSI. Чаще всего это SYN или UDP flood. С помощью ддос атак этого типа стараются загрузить все каналы связи, чтобы таким образом помешать работе сервиса. Как правило, вредоносный трафик легко отличим от легитимного, но его так много, что фильтрация просто не справляется. Все входящие каналы забиваются флудом.

Рассмотрим подробнее конкретные цели для описанных выше атак. Начнем с L7 атак. В качестве цели могут использоваться следующие объекты:

  • Какая-то тяжелая страница на сайте. Атакующий простым просмотром сайта с помощью DevTools определяет наиболее тяжелые страницы. Чаще всего это поиск, большие каталоги товаров или заполняемые формы. Определив узкое место, туда направляется шквал запросов, чтобы положить сайт. Для эффективности, можно нагружать сразу все, что показалось тяжелым. С таким подходом можно и десятью запросами в секунду уронить неподготовленный сайт.
  • Загрузка файлов с сайта. Если вы размещаете более ли менее крупные файлы непосредственно на веб сервере, то через них его будет очень легко положить, если не настроить ограничения на скачивание. Обычными параллельными загрузками можно так нагрузить сервер, что сайт перестанет отвечать.
  • Атака на публичный API. Сейчас это очень популярный инструмент из-за его простоты и легкости использования. Защищать его сложно, поэтому он часто может быть целью ddos атак.
  • Любые другие приложения, которые доступны из инетрнета. Часто это почтовые программы, ssh сервер, серверы баз данных. Все эти службы можно нагрузить, если они смотрят напрямую в интернет.

С уровня L3, L4 обычно делают следующие ддос атаки:

  • UDP-flood. Это вообще классика. С подобными атаками сталкивались практчески все, кто держит открытыми dns и ntp сервисы. В них постоянно находят уязвимости, позволяющие использовать эти службы для ddos атак на сервера. Злоумышленники сканируют интернет, находят неправильно настроенные или уязвимые сервера, отправляют туда запросы, подделывая адрес источника. В ответ эти серверы шлют несколько запросов по поддельным адресам. Таким способом злоумышленники в несколько раз усиливают свои атаки.
  • SYN-flood. Тоже старый вид атак типа отказ от обслуживания. Злоумышленник отправляет большое количество SYN запросов на установку соединения. В общем случае, с помощью syn запросов забивают всю очередь на подключения. В итоге легитимные трафик перестает ходить, сервис не отвечает клиентам.

На основе описания основных типов ddos атак рассмотрим простые и очевидные способы противодействия.

Как проводятся атаки

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

Так выглядит нормальная работа сервера, визуализированная в программе Logstalgia:

Эффективность одиночных DOS-атак не слишком высока. Кроме того, нападение с личного компьютера подвергает злоумышленника риску быть опознанным и пойманным. Гораздо больший профит дают распределенные атаки (DDoS), проводимые с так называемых зомби-сетей или ботнетов.

Так отображает деятельность ботнета сайт Norse-corp.com:

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

Так Logstalgia показывает DDoS-атаку:

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

Причины

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

  • Самообразование, развлечение – начинающие взломщики могут попытаться навредить небольшому ресурсу с целью попрактиковаться в организации DDoS или проверить свои силы на деле.
  • Личные мотивы – может быть местью кому-либо или какой-нибудь организации, например, после облав на группы хакеров веб-узлы американской спецслужбы ФБР и некоторых правительственных ведомств несколько недель не функционировали.

Схожими были и последствия блокировки крупного украинского файлообменника ex.ua.

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

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

Финансовая выгода – злоумышленник требует определённую пользу от владельца веб-ресурса, как правило, финансовую. Такими поступками известны группы ezBTC и RedDoor.

Объемные атаки

Объемные атаки направлены на превышение пропускной способности канала. Мощность объемных DDoS-атак измеряется в количестве бит за единицу времени. Наиболее эффективная защита от таких атак — очистка трафика на уровне, например, операторов связи. Наш сервис, Internet Umbrella, обеспечивает защиту от DDoS-атак мощностью до 5 Тб/с при грубой очистке и до 300 Гб/с при тонкой очистке.

HTTP flood перегружает сервер огромным количеством HTTP-запросов, например, для получения тяжёлых элементов сайта. Запросы подбираются таким образом, чтобы ответ был максимальным по объему. В результате обратный канал от сервера к клиентам перегружается трафиком HTTP-ответов.

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

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

Атака с усилением (DNS amplification) основана на отправке множества запросов с поддельными IP-адресами от имени жертвы на DNS-сервер. Такие запросы требуют объемных ответов, которые и направляются на сайт жертвы.

Защита от ddos с помощью iptables

Для защиты от простейшей атаки мы будем использовать firewall — iptables, модуль ядра ipset для хранения больших списков ip и самописные скрипты. По фаерволу смотрите мою статью — настройка iptables. Здесь я не буду на этом останавливаться.

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

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

# netstat -ntu | awk '{print $5}' | grep -vE "(Address|servers|127.0.0.1)" | cut -d: -f1 | sort | uniq -c | sort -n| sed 's/^*//'

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

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

#!/bin/sh

netstat -ntu | awk '{print $5}' | grep -vE "(Address|servers|127.0.0.1)" | cut -d: -f1 | sort | uniq -c | sort -n| sed 's/^*//' | awk '{if ($1 > 50 ) print$2}' > /root/ddos/much_conn.txt

sleep 3

list=$(cat /root/ddos/much_conn.txt)
for ipnet in $list
    do
	ipset -A much_conn $ipnet
    done

В принципе, комментировать тут особо нечего. Берем список подключений, который только что вывели, в нем сравниваем первую колонку, если она больше 50, то результат второй колонки, где записан ip адрес, передаем в файл.

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

# ipset -N much_conn iphash

Посмотреть содержимое списка можно командой:

# ipset -L much_conn

Теперь нужно добавить в iptables правило, по которому будут блокироваться все подключения из указанного списка ipset.

# iptables -A INPUT -m set --match-set much_conn src -j DROP

На всякий случай предупреждаю, чтобы вы проверили свой доступ к консоли сервера, прежде чем настраивать правила iptables. Всякое бывает, можно просто ошибиться, скопировать и вставить не то, что нужно.

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

Единственный момент, о котором хочу сказать. Сам я не проверял, сколько подключений открывают поисковые боты, когда приходят на сайт. Я подозреваю, что явно не 50 и даже не 30, но наверняка я не проверял. В общем, будьте аккуратны, когда используете это средство.

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

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

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

ipset -N much_conn iphash timeout 3600

В данном случае запись с забаненным ip в списке ipset будет храниться в течении 3600 секунд или 60 минут.

Нужно понимать, что в данном примере с 1 ip адресом использовать ipset нет никакого смысла, можно сразу банить средствами самого iptables. Ipset нужен только тогда, когда этот список хотя бы в сотни строк. Если там несколько десяткой адресов, хватит и одного iptables.

Как сделать ддос атаку самому

Рассмотрим на примерах, как в принципе можно провести ddos атаку. «Чтобы поймать преступника, нужно думать как преступник». По понятным причинам, я расскажу только немного теории, без практических примеров, во избежание, так сказать. Хотя у меня и примеров то нет. Я сам никогда всерьез не занимался ddos атаками.

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

Для того, чтобы сделать ddos атаку самому на неподготовленный сайт достаточно из 3-5 разных мест запустить Яндекс.Танк и указать в качестве целей набор наиболее тяжелых страниц. Обычному динамическому сайту сразу станет плохо. Когда владелец спохватится и начнет разбираться, он достаточно быстро забанит ваши ip адреса сам, либо с помощью хостера и на этом ваша ддос атака закончится.

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

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

Как сделать ddos (ддос) атаку?

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

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

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

Сейчас более популярным становится взламывать и всячески мешать работе сайтов с помощью DDOS-атак. Сейчас мы попробуем понять, как самому сделать DDOS-атаку. DDOS-атака производится с достаточно большого количества персональных компьютеров. Это могут быть не только «взломанные» компы, но еще и персональные компьютеры других злоумышленников.

  1. Первым делом написать специальный скрипт для DDOS трояна. Это, так сказать, не такая уж и сложная задача. В интернете имеются даже готовые DDOS-скрипты. Но если неверно прописать скрипт, вы можете навести атаку на себя, поэтому лучше найти проверенный DDOS-скрипт.
  2. Создать интернет-площадку (либо каким-либо образом получить полный доступ на площадку соседа), а затем «залить» туда сам троян;
  3. В зависимости от предполагаемого атакуемого сервера, ваш сайт должны посетить более 3000-6000 уникальных человек;
  4. Активировать написанный скрипт и просто наблюдать за желаемым результатом.

Но есть еще один из вариантов для проведения вышеуказанной атаки. Можно заказать DDOS-атаку. Но это достаточно затратный, но при этом очень эффективный способ. В среднем, за такую вирусную-атак просят от 19 тысяч — до 29 999 тысяч рублей.

Второй способ: Websploit

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

Набираем в консоли команду

Она продемонстрирует нам все модули, которые работают с этой утилитой. Там есть множество компонентов, работающих с Wi-Fi, но нас интересует конкретно модуль bluetooth/bluetooth_pod:

Теперь нужно настроить все параметры и указать сведения об атакуемом устройстве:

Чтобы точно и наверняка угробить Bluetooth, мы изменим размер отсылаемого пакета:

Все подготовительные действия завершены, можем запускать нашу «машину для убийств»:

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

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

Если колонка справляется с атакой, можно попробовать отправить пакеты на сам телефон, к которому она подключена. Лично я тестировал этот метод на довольно мощной портативной колонке (JBL Xtreme), и она более-менее справлялась с нагрузкой. Но дешевые китайские поделки такая атака вырубает на раз.

Что такое DoS-атака?

DoS-атака (Denial of Service) — буквально «отказ в обслуживании». Это тип атаки, в котором мошенники нападают с целью вызвать перегрузку подсистемы сервиса. В этом случае компьютер (или компьютеры) используется для заполнения сервера пакетами TCP и UDP. 

Особенности DoS-атак

  • Одиночная атака. Отправка вредоносных пакетов производится из одной сети.
  • Высокая заметность. Попытки «положить» сайт заметны по содержимому лог-файла.
  • Лёгкость подавления. DoS-атаки можно легко предотвратить, заблокировав источник. Это может сделать системный администратор или сетевые фильтры, анализирующие трафик.

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

Баним ботов с неправильным referer

Есть категория простых ботов, которые подставляют в referrer либо мусор, либо кривые урлы без http или https в начале. Например вот такие:

194.67.215.242 - - [30/Nov/2017:20:48:08 +0300] "POST /index.php HTTP/1.1" 200 913 "g0dfw4p1.ru" "Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0" "-"

Корректное поле referer должно содержать либо http, либо https, либо быть пустым. Все, что иначе, можно смело блокировать или возвращать статус ошибки. Добавляем примерно такую конструкцию в конфигурацию виртуального хоста, в раздел server {}.

if ($http_referer !~* ^($|http://|https://) ) {
return 403;
}

После этого проверьте конфигурацию nginx и перечитайте ее.

# nginxt -t
# nginx -s reload

Если вас достает какой-то бот с конкретным referer, можно забанить именно его. Для этого можно дополнить условие, или изменить. Например, вот так:

if ($http_referer = "https://bots.ru/dostanim_tebya.html") {
return 403;
}

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

Виды Ддос-атак

Даже у Ддос-атак есть собственная классификация. Вот как она выглядит:

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

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

  3. Массовое направление неправильных инструкций к серверу, что также увеличивает его нагрузку.

  4. Массовая атака ложными адресами, что приводит к «забиванию» каналов связи.

Обобщив, можно сказать, что Ddos-атака — это «массовость» каких-либо действий, которые могут сделать так, что сервер перестанет работать.