Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
493.doc
Скачиваний:
18
Добавлен:
30.04.2022
Размер:
8.68 Mб
Скачать

5.2.1.1 Описание утилиты для реализации icmp – флуда и атаки Smurf

DoS-атака ICMP-flooding вызывает истощение ресурсов сети отправкой ог­ромного числа ICMP эхо-запросов. Поэтому программа, реализующая эту DoS-атаку, не сильно отличается от работы утилиты ping. Главное отличие в том, что для реализации DoS-атаки нужно только отправлять эхо-запросы, а получать ответы не требуется. Кроме того, не требуется задержка между отправками пакетов, наоборот, пакеты должны отправляться с максимальной скоростью. Для большей эффективности пакеты можно сделать увеличенного размера. Надо заметить, что стандартная утилита ping позволяет осуществить DoS-атаку ICMP-flooding с помощью параметра командной строки -f, который заставляй утилиту ping посылать эхо-запросы с максимально возможной скоростью, а параметр -s, позволяет увеличить размер отправляемых пакетов. Например, следующая команда отправляет беспрерывный поток пакетов размером в 3 Кбайт узлу example.ru:

# ping -f -s 3072 example.ru

После каждого отправленного пакета ping выводит на экран точку (''•"), а в случае получения эхо-ответа точка стирается.

Однако утилита ping не дает возможности осуществить подмену адреса отправителя, то есть IP-spoofing.

Суть Smurf-атаки состоит в следующем: злоумышленник посылает широковещательный ICMP эхо-запрос компьютерам локальной сети, указывая в качестве адреса отправителя адрес узла "жертвы". В результате все компьютеры локальной сети вышлют эхо-ответ на адрес узла "жертвы", вызывая на нем наводнение.

Для реализации IP-spoofing’а, нужно программно заполнять все поля IP-заголовка при этом в поле "IP-адрес" отправителя программа будет подставлять поддельный адрес. Для сборки собственного пакета необходимо создать raw-сокет:

sd = socket(PF_INET, SOCK_RAW, IPPROTO_RAWJ;

Для raw-сокета задается опция: p_hdrincl с помощью функции setsockopc (). Если этого не сделать, стек TCP/IP сам будет генерировать заголовок IP при посылке пакета.

Чтобы можно было отправлять широковещательные сообщения, с помощью еще одного вызова setsockopt() мы устанавливаем параметр сокета so_broadcast. Это необходимо для реализации атаки Smurf.

Для отправляемого пакета в программе определяется буфер следующим образом:

char sendbuf[sizeof(struct iphdr) + sizeof(struct icmp) + 1400];

To есть размер каждого отправляемою пакета будет определяться длиной IP-заголовка, длиной ICMP-заголовка и дополнительными 1400 байтами. Определение структуры IP-заголовка берется из заголовочного файла /netinet/ip.h, а ICMP-заголовка из /netinei/ip_icmp.h. Значение 1400 выбрано произ­вольно исключительно только для того, чтобы увеличить размер отправляе­мого пакета. Этот участок буфера будет просто заполнен мусором.

Конечно, можно сделать размер отправляемого пакета до 65 535 байтов. Этот предел устанавливается 16-разрядным полем общей длины IP-заголовка. Но в таком случае нужно дополнительно реализовывать алгоритм фрагмен­тации пакетов, в том случае если MTU сети меньше размера посылаемого пакета. Например, размер MTU для Ethernet равен 1500 байтам. Попытка по­слать в сеть Ethernet пакет больше 1500 байтов вызовет ошибку в функции отправки, a perror () выведет: "Message too long".

Размер ICMP-заголовка составляет 8 байтов, размер IP-заголовка 20-60 бай­тов, поэтому размер пакета не превысит 1468 байтов. Такой пакет пропустит большинство сетей без фрагментации.

Таким образом, особого смысла нет посылать пакет слишком большого раз­мера, так как он все равно будет фрагментирован на мелкие пакеты, поэтому размер пакета около 1400 байтов является наиболее оптимальным.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]