Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
mr.save

СТРЕСС ТЕСТИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ DNS AMPLIFICATION DDOS

Recommended Posts

DNS Amplification это один из видов DDoS атак, который основан на усилении атаки с помощью сторонних, легитимных, DNS серверов. Принцип атаки построен на том, что злоумышленник создаёт короткий запрос к стороннему DNSсерверу, но этот запрос отправляется от имени жертвы (IP spoofing, протокол UDP не проверяет отправителя), а DNS сервер отправляет ответ в сторону жертвы, который в несколько раз больше запроса. Это и позволяет провести атаку DNS Amplification, увеличив объём трафика в разы с помощью чужих DNSсерверов.

В рамках нагрузочного тестирования можно извлечь из данной атаки пользу. Например для проверки оборудования, которое должно защищать от DoS атак. Естественно для этого в качестве усиливающих DNS серверов нужно использовать только те сервера, владельцы которых дали согласие на подобное «использование» их серверов.

Для проведения тестирования нам потребуется:

Рабочая станция с установленной ОС Linux (в примерах используется Linux Debian);

Python 2.x;

Scapy;

Внешний IP адрес(проведение тестирования не возможно через NAT, т.к. UDPпакеты с подменённым адресом будут отфильтрованы при передаче их через NAT).

Поставим все требуемые пакеты:

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Теоритическая часть

Для начала, попробуем вручную сделать несколько запросов к DNS серверу, для этого запустим утилиту манипулирования пакетами — Scapy (пакеты нужно отправлять из-под root пользователя):

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Сформируем пакет с DNS запросом:

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Использованные параметры:
Секция IP.
dst — получатель пакета;
Секция UDP (используются UDP пакеты).
sport — порт отправителя;
dport — порт получателя;
Секция DNS.
rd — требуется рекурсия;
qname — DNS запрос;
qtype — тип DNS запроса.

Отправим его:

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

sr1 — отправить один пакет и ждать ответа.

В мы получили ответ от DNS сервера с которым можем ознакомиться.

 

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Теперь посмотрим размер отправленного запроса и полученного пакета, для этого получим ответ в переменную, а не в STDOUT:

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Сравним размеры пакетов.
Отправленный пакет:

1 len(packet)

2 56 байт

Полученный пакет:

1 len(packetr)

2 152 байта

Мы получили ответ в 2,71 (152/56) раза больше чем запрос.

Если мы найдем маленький запрос с большим ответом, то коэффициент может получиться гораздо больше (10 и более раз).
DNS запросы с большим размером пакета:

запрос корневой зоны DNS (.);

запрос доменного с множеством «A» записей (A);

запрос больших «TXT» записей;

и т.д.

Другие варианты запросов вы можете поискать самостоятельно.
В случае успешно подобранного запроса мы получим разницу в 11 раз (из потока в 10 мб/с мы можем получить 110 мб/с, но правда часть уйдёт на накладные расходы так что коэффициент усиления будет немного ниже). На этом и строится атака DNS Amplification.

Теперь нужно проверить не блокирует ли нас DNS сервер после множественных запросов (это один из методов защиты). Для этого сделаем отправку 500 пакетов без ожидания ответа и после этого отправим контрольный пакет с ожиданием ответа.

Отправка 500 пакетов:

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Использованные параметры:
send — отправить без ожидания;
inter — интервал между отправкой пакетов (0-минимальный);
verbose — без отображения;
count — количество пакетов.

Отправляем контрольный пакет:

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Использованные параметры:
timeout — время ожидания ответа в секундах.

Если сервер ответил то, скорее всего, он может использоваться для DNS Amplification.

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

для этого создадим новый пакет:

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Использованные параметры:
src — IP адрес отправителя.

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

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Использованные параметры:
loop — бесконечная отправка пакетов.

Остановить отправку можно с помощью комбинации Ctrl—C.

У нас получилось создать усиление нашего трафика в 2,71 раза с помощью DNS Amplification.

Автоматизация процесса

Нужно автоматизировать 3 процесса:

Поиск DNS серверов с большим коэффициентом усиления;

Проверка найденных серверов на отсутствие защиты от множественных запросов;

Автоматическая, многопоточная отправка пакетов на множество серверов.

Для автоматизации я написал 3 скрипта.

Скачать их можно на GitHub (https://github.com/BlackDiverX/DNSAmplification):

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.


dnsamplscan.py — скрипт сканирования сети для поиска уязвимых DNSсерверов;
dnsamplcheck.py — скрипт проверки DNS серверов на возможность DNS Amplification;
dnsamplification.py — скрипт для многопоточной отправки DNS запросов с возможностью спуфинга IP адреса.

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

dnsamplscan.py сканирует сегмент сети и создает список серверов с большим коэффициентом усиления.

Синтаксис:

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Параметры:
-ip — диапазон IP адресов для поиска DNS серверов;
-query — DNS запрос (По умолчанию: .) (требуется);
-querytype — тип DNS запроса (A,MX,PTR и т.д.) (По умолчанию: A);
-timeout — время ожидания ответа от DNS сервера (По умолчанию: 10 сек.);
-aratio — требуемый коэффициент усиления (По умолчанию: 0);
-output — файл со списком найденных серверов (требуется).

Пример запуска:

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

На выходе мы получим файл servers.txt со списком серверов у которых DNSответ в разы больше чем запрос.

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

dnsamplcheck.py проверяет список серверов на возможность использования для DNS Amplification.

Синтаксис:

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Параметры:

-input — входной файл со списком DNS серверов для проверки (требуется);
-timeout — время ожидания ответа от DNS сервера (По умолчанию 2 сек.);
-output — выходной файл со списком проверенных серверов (требуется).

Пример:

 

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Этот скрипт возьмет список серверов из файла servers.txt (который создан с помощью скрипта dnsamplscan.py), проверит на возможность использования в DNS Amplification и запишет подходящие сервера в файл good-servers.txt.

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

dnsamplification.py запускает нагрузочное тестирование с использованием DNS Amplification. Для проведения атаки требуется список серверов.

Синтаксис:

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Параметры:

-target — IP адрес тестируемого сервера (требуется);
-servers — файл со списком DNS серверов для усиления (требуется);
-timeout — время тестирования (в секундах) (По умолчанию: 10 сек.);
-threads — количество потоков для отправки DNS запросов (По умолчанию: 10).

Пример:

Скрытый контент

    Дайте реакцию на этот пост, чтобы увидеть скрытый контент.

Непосредственное начало атаки для стресс тестирования. В примере запускается тестирование в 20 потоков для адреса 192.168.1.2 с использованием серверов из файла good-servers.txt на 100 секунд.

Не стоит использовать чужие DNS сервера для проведения тестирования. Используйте для этого только сервера, которые разрешили использовать их владельцы.

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...