Содержание статьи
warning
Статья носит ознакомительный характер. Автор и редакция не несут ответственности за любой вред, причиненный с использованием полученной из нее информации. Прежде чем проводить нагрузочное тестирование веб‑сайта, необходимо заключить письменное соглашение с его владельцем. В противном случае нарушение работы системы может преследоваться по закону.
Как видно из статистики, наиболее распространенный вектор — это атаки на сервисы (или с использованием сервисов), которые используют протокол UDP.
Здесь все очень просто. UDP, в отличие от других протоколов, не требует сессии, а ответ на запросы отправляется немедленно. В этом основа атаки «с усилением». Мы можем формировать запросы к некоторым сервисам таким образом, чтобы ответ был в десятки раз больше, чем сам запрос. Соответственно, если эти ответы будут перенаправлены на машину жертвы, атакующий сможет генерировать трафик невероятной мощности.
Чтобы предотвратить такого рода атаки, разработчики из Microsoft установили ограничения на манипулирование пакетами.
Обрати внимание на этот пункт документации.
Прямо заявлено, что ОС не позволит отправлять UDP-пакеты с полем IP-адреса поддельного отправителя.
Зачем нам это нужно? Дело в том, что трафик, который мы получаем от уязвимых ответов служб, может быть каким‑то образом перенаправлен на серверы жертв. А этого можно добиться, просто изменив IP-адрес отправителя в заголовке UDP-пакета. Тогда уязвимый сервер подумает, что запрос поступил с компьютера жертвы, и отправит на него ответ.
Кто не знаком со структурой пакета UDP, может посмотреть на табличку ниже. Там ничего особенного нет, формирование самого пакета мы разберем позже.
Собственно, из документации понятно, что стандартные инструменты и библиотеки Windows не позволяют подделывать адрес отправителя. Для проведения DDoS это нужно обойти, и на помощь злодею или желающему провести нагрузочный тест приходит такая волшебная вещь, как WinPcap.
С WinPcap можно формировать пакеты отправки независимо от инструментов Windows. И это не просто библиотека для обработки пакетов для C++, а собственный драйвер NPF.
Если вкратце, то это работает так. Мы можем установить кастомный драйвер протокола, при написании программы мы будем ссылаться на него. Оттуда пакеты будут передаваться на драйвер Network interface card (NIC) и идти дальше по сети. Таким образом мы сможем полностью контролировать процесс создания и инкапсуляции пакетов.
Ищем уязвимые серверы
Для поиска уязвимых серверов широко используется поисковик Shodan. Давай для примера попробуем найти серверы Memcached, которые использовались для атаки на Github несколько лет назад. Вводим product:
и видим, что серверов остается все еще очень много.
Разработчик исправил уязвимость и теперь порт, назначенный по умолчанию, заменен с 11211 на TCP. Но, несмотря на это, в интернете остались тысячи уязвимых серверов.
У Shodan есть фильтры, которые помогают искать необходимые сервисы и серверы. Для практики можно попробовать найти сервисы RDP с портом UDP/3389, которые также уязвимы для атак амплификации (с коэффициентом 85,9:1).
Разработка
Мы можем создать программу для эксплуатации уязвимости серверов Memcached, DDoS с усилением. Прежде всего нужно настроить рабочую среду.
- Устанавливаем необходимый драйвер (есть версия для Windows 10, она поддерживает больше интерфейсов).
- Скачиваем библиотеку Winpcap Developers Pack.
- Подключаем библиотеку в проект.
В самом проекте я использовал следующие модули:
#define _ALLOW_KEYWORD_MACROS // Отключить предупреждение#include <winsock2.h> // Здесь нужные нам функции, такие как htons() htonl()#pragma comment (lib,"WS2_32.lib")#include <Iphlpapi.h>// Поможет нам найти информацию про сетевые адаптеры и их характеристики#pragma comment (lib,"Iphlpapi.lib")#include <pcap/pcap.h> // Собственно, WinPcap#pragma comment (lib,"wpcap.lib")#include <iostream> // Здесь нам нужна функция sprintf()#include <stdio.h>#include <thread>#define HOST sin_addr.S_un.S_addr // Переменные для пакетаusing namespace std;
Перейдем к главной задаче программы — формированию пакетов. Пойдем по пунктам.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»