Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Проходят годы, а DDoS остается мощным инструментом хакерских группировок. Ежедневно в мире происходит 500–1000 атак такого типа. Каждый раз злоумышленники находят новые уязвимости в популярных сервисах, которые позволяют проводить атаки «с усилением». Разработчики Windows активно борются с этим, усложняя жизнь хакерам и отсекая вредоносные запросы на системном уровне. Мы сегодня поговорим о том, как эти преграды обходят.
warning
Статья носит ознакомительный характер. Автор и редакция не несут ответственности за любой вред, причиненный с использованием полученной из нее информации. Прежде чем проводить нагрузочное тестирование веб‑сайта, необходимо заключить письменное соглашение с его владельцем. В противном случае нарушение работы системы может преследоваться по закону.
Как видно из статистики, наиболее распространенный вектор — это атаки на сервисы (или с использованием сервисов), которые используют протокол UDP.
Здесь все очень просто. UDP, в отличие от других протоколов, не требует сессии, а ответ на запросы отправляется немедленно. В этом основа атаки «с усилением». Мы можем формировать запросы к некоторым сервисам таким образом, чтобы ответ был в десятки раз больше, чем сам запрос. Соответственно, если эти ответы будут перенаправлены на машину жертвы, атакующий сможет генерировать трафик невероятной мощности.
Чтобы предотвратить такого рода атаки, разработчики из Microsoft установили ограничения на манипулирование пакетами.
www
Подробности в документации Microsoft.
Обрати внимание на этот пункт документации.
Прямо заявлено, что ОС не позволит отправлять UDP-пакеты с полем IP-адреса поддельного отправителя.
Зачем нам это нужно? Дело в том, что трафик, который мы получаем от уязвимых ответов служб, может быть каким‑то образом перенаправлен на серверы жертв. А этого можно добиться, просто изменив IP-адрес отправителя в заголовке UDP-пакета. Тогда уязвимый сервер подумает, что запрос поступил с компьютера жертвы, и отправит на него ответ.
Кто не знаком со структурой пакета UDP, может посмотреть на табличку ниже. Там ничего особенного нет, формирование самого пакета мы разберем позже.
User Datagram Protocol
Собственно, из документации понятно, что стандартные инструменты и библиотеки Windows не позволяют подделывать адрес отправителя. Для проведения DDoS это нужно обойти, и на помощь злодею или желающему провести нагрузочный тест приходит такая волшебная вещь, как WinPcap.
С WinPcap можно формировать пакеты отправки независимо от инструментов Windows. И это не просто библиотека для обработки пакетов для C++, а собственный драйвер NPF.
Если вкратце, то это работает так. Мы можем установить кастомный драйвер протокола, при написании программы мы будем ссылаться на него. Оттуда пакеты будут передаваться на драйвер Network interface card (NIC) и идти дальше по сети. Таким образом мы сможем полностью контролировать процесс создания и инкапсуляции пакетов.
Для поиска уязвимых серверов широко используется поисковик Shodan. Давай для примера попробуем найти серверы Memcached, которые использовались для атаки на Github несколько лет назад. Вводим product:"Memcached"
и видим, что серверов остается все еще очень много.
Разработчик исправил уязвимость и теперь порт, назначенный по умолчанию, заменен с 11211 на TCP. Но, несмотря на это, в интернете остались тысячи уязвимых серверов.
У Shodan есть фильтры, которые помогают искать необходимые сервисы и серверы. Для практики можно попробовать найти сервисы RDP с портом UDP/3389, которые также уязвимы для атак амплификации (с коэффициентом 85,9:1).
Мы можем создать программу для эксплуатации уязвимости серверов Memcached, DDoS с усилением. Прежде всего нужно настроить рабочую среду.
Файлы с заголовками
Макросы
В самом проекте я использовал следующие модули:
#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;
Перейдем к главной задаче программы — формированию пакетов. Пойдем по пунктам.
Источник: xakep.ru