Рассмотрим подсеть (Рисунок 5.3), в которой будет реализована атака ICMP-flooding.
Узлы C1, C2, C3 – обычные пользователи. С4 – хост злоумышленника. Атака направлена на отказ в обслуживании узла C3.
Рисунок 5.3 - Организация подсети, в которой будет реализована DOS-атака
Рассмотрим вид атаки, при котором злоумышленник не изменяет свой IP-адрес. Заведомо известно, что на хосте C3 не функционирует служб брандмауэра.
Характеристики атакуемой машины:
Модель процессора: Intel Pentium 4 2.40 ГГц
Объем ОЗУ: 512 мб
Скорость подключения: 100 Мбит/с
OC: MS Windows XP SP2
Характеристики атакующей машины:
Модель процессора: AMD Turion 64 X2
Объем ОЗУ: 1024 мб
Скорость подключения: 100 Мбит/с
OC: OpenSuse 10.3 x64
Запуск атакующей программы осуществляется командой:
timur:/home/timur/testc/icmpf # ./icmpf 192.168.12.53 192.168.12.51
Первый аргумент сообщает программе адрес отправителя, второй аргумент – адрес получателя, который будет указан в заголовке пакетов.
Рисунок 5.4 - Показания загрузки сети
Так как атака направлена на исчерпание ресурсов канала связи атакуемого узла, нужно проанализировать показания загруженности сети (Рисунок 5.4).
Из графика на рисунке видно, что использование ресурсов подключения к сети стремится к 100%.
Из результатов выполнения команды ping (рисунок 5.2.1.2.3) на атакуемом хосте видно, что хост-жертва не может получить доступ к сервисам узла подсети C1. Соответственно и сервисы атакуемого стали недоступны для всей остальной подсети. Атака реализована.
Рисунок 5.5 - Результаты выполнения команды ping на атакуемой машине к хосту C1
Рассмотрим вариант атаки, в котором все условия остаются теме же. Но на атакуемой машине запущены службы брендмауэра, поставляемые в комплекте с ОС Windows XP.
Система показывает (рисунок 5.2.1.2.4) аналогичную первой атаке загрузку сети. Но брендмауэр по умолчанию настроен так, что бы блокировать все ICMP-пакеты.
По результатам выполнения команды ping на машине-жертве видно, что канал связи вполне работоспособен. И другие узлы подсети могут получить доступ к сервисам C3.
Рисунок 5.6 - Показания загрузки сети
Рисунок 5.7 - Результаты выполнения команды ping на атакуемой машине с запущенными службами брендмауэра, к хосту C1
По результатам выполнения команды ping на машине-жертве видно, что канал связи вполне работоспособен. И другие узлы подсети могут получить доступ к сервисам C3.
Рисунок 5.8 - Фрагмент дампа пакетов полученный программой tcpdump
Из рисунка 5.2.1.2.6 видно, что на атакующий хост уходят ICMP-пакеты, но ответных пакетов он отправляет. Таким образом можно сделать вывод, что в итоге отказ в обслуживании в целевой системе происходит в большей степени из-за генерации ответных пакетов. Так же можно предположить, что если усилить атаку еще одним хостом, то даже в ситуации с использованием брандмауэра на атакуемом узле может его не спасти и атака будет успешной.
Рассмотрим атаку ICMP-flooding с подделкой обратного адреса в пакетах (IP-spoofing). Заведомо известно, что на атакуемом узле не функционируют службы брандмауэра. В качестве обратного адреса будет использован адрес узла подсети C2 (192.168.12.58). Команда на запуск утилиты:
timur:/home/timur/testc/icmpf # ./icmpf 192.168.12.58 192.168.12.51
Рисунок 5.9 - Показание загрузки сети, при атаке с использованием IP-spoofing
Из рисунка 5.9 видно, что загрузка сети стремиться к 100%, а по результатам выполнения команды ping (рисунок 5.2.1.2.8) можно сделать вывод, что хост находится в состоянии недосягаемости, то есть произошел отказ в обслуживании.
Рисунок 5.10 - Результаты выполнения команды ping на атакуемом узле, при использовании злоумышленником подделки обратного адреса
Стоит заметить, что в данном случае обнаружение злоумышленника крайне затруднено, так как адрес отправителя указывает на законного пользователя. Данный вид атаки является более коварным, нежели атака рассмотренная выше.
В случае если на атакуемом узле запущены службы брендмауэра, то атака данная атака также не увенчается успехом, так все пакеты будут блокированы брандмауэром.
Таким образом можно сделать вывод, что любой узел сети может быть подвержен DOS-атаки на основе посылки большого числа ICMP-пакетов. А в случае если адрес отправителя будет искажен (IP-spoofing), то обнаружить злоумышленника будет практически невозможно. Следовательно для предотвращения, либо снижения эффективности такого рода атак, нужно запрещать прием-передачу всех типов ICMP-сообщений. В случае если в сети критически необходим обмен данного рода пакетами, следует вводить программные, либо программно-аппаратные методы анализа обмена ICMP-пакетами, на предмет выявления вышеописанных атак.
Атака Smurf — это одна из наиболее опасных атак DoS, поскольку при ее реализации на целевые узлы осуществляется усиленное воздействие. Эффект усиления возникает из-за рассылки направленных широковещательных ping-запросов на узлы сети, которые должны сгенерировать ответные сообщения. Направленный широковещательный запрос может передаваться либо на сетевой адрес, либо на сетевой широковещательный адрес, однако в любом случае требуется устройство, выполняющее преобразование данных уровня 3 (IP) к уровню 2 (сеть). Для сети класса «С» сетевым адресом будет .0, а широковещательным адресом — .255. Направленные широковещательные запросы обычно используются для диагностики, позволяя выявить функционирующие узлы без применения утилиты ping отдельно для каждого адреса используемого диапазона.
Атака Smurf позволяет воспользоваться преимуществами рассылки широковещательных направленных запросов и требует как минимум трех участников: взломщика, «усиливающей сети» (amplifying network) и цели. Злоумышленник отправляет ложные ICMP-пакеты ECHO на широковещательный адрес усиливающей сети. Исходный адрес пакетов изменяется так, как будто бы сама жертва сгенерировала запрос. Как только пакет ECHO передается на широковещательный адрес, все системы усиливающей сети сгенерируют ответ на запрос узла-жертвы (если не запланированы какие-нибудь другие действия). Если взломщик отсылает один ICMP-пакет в усиливающую сеть, в которой содержится 100 узлов, генерирующих ответные сообщения на широковещательный запрос, то можно считать, что взломщик в сто раз увеличил эффективность атаки DoS. Отношение количества переданных пакетов к числу узлов, генерирующих ответные сообщения, назовем «коэффициентом усиления» (amplification ratio). Таким образом, взломщик постарается найти усиливающую сеть с большим коэффициентом усиления, чтобы увеличить вероятность насыщения трафика целевой сети.
Для того чтобы лучше познакомиться с атакой такого рода, рассмотрим пример (Рисунок 5.11). Предположим, что взломщик отправил n данных ICMP на широковещательный адрес усиливающей сети со ста узлами. Сеть взломщика подключена к Internet через двухканальное соединение ISDN; усиливающая сеть — через линию связи ТЗ (100 Мбит/с); а целевая сеть — через канал Т1 (10 Мбит/с). Нетрудно подсчитать, что в данном случае взломщику удастся сгенерировать 100*n данных, которые будут отправлены в целевую сеть. Канал связи атакуемой сети будет быстро занят.
Рисунок 5.11 - Топология реализации Smurf атаки
Стоит заметить, что в данный момент вероятность реализация такого типа атак в различных сетях сведёна к минимуму, так как многие производители сетевого оборудования и сетевых операционных систем, в настройках «по умолчанию» закладывают запрет на ответ на широковещательные запросы.
5.2.2 UDP-storm и Fraggle
DoS-атака UDP-storm имеет еще другое название Chargen или Echo-Chargen так как эта атака использует службы с данными названиями. UDP-служба chargen (порт 19) в ответ на UDP-запрос выдает пакет с набором символов, а UDP-служба echo (порт 7) возвращает пришедший пакет обратно. Таким образом, отосланные пакеты с порта 19 на порт 7 приводят к зацикливанию UDP-пакетов. Причем такой цикл можно создать как на одном узле, так и между двумя удаленными узлами, главное, чтобы на них были включены службы chargen и echo. Следует отметить, что вместо порта 7 с теми же целями может быть использован другой порт, автоматически отвечающий на любой направленный на него запрос, например, 13 (daytime) или 37 (time).
DoS-атака Fraggle подобна атаке Smurf, только в ней используются UDP-пакеты. Атакующий посылает обманные UDP-пакеты от имени "жертвы" на широковещательный адрес усиливающей сети (обычно на порт 7 (echo)). Каждый узел сети, в которой разрешен ответ на эхо-пакеты, возвратит пакеты узлу-жертве, вызвав на нем наводнение.
Рассмотрим реализацию атаки ICMP-storm. Топология атакуемой подсети останется прежней (Рисунок 5.3). На хост C3 порт 7 будут отправляться UDP-пакеты с обратным адресом «жертвы» и портом 19. Атакующий – хост C4. Данный атака должна вызвать зацикливание пакетов (рисунок 5.13), а, следовательно, максимальную загрузку центрального процессора.
Атака инициализируется запуском атакующей утилиты:
timur:/home/timur/testc/udpstorm # ./udpstorm 192.168.12.51 19 192.168.12.51 7
Первый и второй параметр – IP-адрес и порт отправителя. Далее идет IP-адрес и порт получателя UDP-пакета. Для того, что осуществить зацикливание пакетов данная утилита подделывает адрес и порт отправителя.
В ходе атаки на атакуемом узле наблюдается максимальная загрузка центрального процессора (Рисунок 5.12).
Рисунок 5.12 - Уровень загрузки процессора при атаке UDP-storm
Рисунок 5.13 - Схема реализации атаки UDP-storm с зацикливанием пакетов между портами жертвы
В данном случае на обработка UDP-пакетов тратиться максимальное количество процессорного времени атакуемой системы. Таким образом, сервисы, запущенные на атакуемом узле начинают испытывать «дефицит» системных ресурсов и не могут нормально функционировать. Это может повлечь за собой невозможность их использования удаленными хоста, то есть вызвать отказ в обслуживании.
Подобно портам 19 и 7, для атаки, возможно использовать и другие порты, на которых запущены службы, использующие для обмена информацией UDP-пакеты. Определить номера портов открытых на прием UDP-дейтаграмм можно с помощью UDP-сканера портов.
Управление полосы пропускания в TCP осуществляется на 2-х временных шкалах. На малой временной шкале отметки времени прохождения пакетов по каналу связи до адресата и обратно (RTT), обычно от 10 до 100 миллисекунд, TCP-стек использует аддитивно-увеличительное мультипликативно-уменьшительное (в оригинале additive-increase multiplicative-decrease) управление (AIMD), передача каждого потока трафика на одинаковых скоростях через самое узкое место, так называемое «бутылочное горлышко». Когда канал связи начинает «забиваться», возникает большое количество потерь, TCP-стек начинает работать по 2-й, большей временной шкале с отметками таймаутов повторной передачи пакетов (RTO, рекомендованное минимальное значение 1 секунда). Что бы избежать «забивания» канала, поток трафика уменьшается до одного пакета и по прошествии времени RTO пакет пересылается заново. При последующих потерях, время RTO удваивается с каждым следующим таймаутом. В случае удачного получения пакета, TCP-стек начинает использовать AIMD-управление.
Для проведения низкоскоростной DoS-атаки будут использованы потоки трафика в виде импульсов и рассмотрены периодические импульсные «землеройные» атаки, состоящие из коротких со специально подобранной длительностью пиков, повторяющихся с определенной, специально выбранной, частотой по медленной временной шкале.
Рассмотрим первый поток TCP-трафика. Если общий трафик (DoS-атаки и обычный) в течение пика достаточен, чтобы произошли потери пакетов, то этот поток «отвалится» по тайм-ауту и будет произведена попытка отправить новый пакет по прошествии времени RTO. В случае если периодичность посылки DoS-трафика совпадает (даже примерно) с RTO нормального трафика, обычный трафик будет постоянно получать таймаут, как следствие, потери будут приближаться к 100% и пропускная способность приблизится к нулю. Кроме того, если период DoS-посылок примерно равен, но лежит вне диапазона RTO, то будет наблюдаться существенное (но не полное) снижение полосы пропускания. Как следствие, в основе «землеройных» атак лежат посылки пакетов с нулевой частотой (относительно шкалы RTO), что делает их сложными для обнаружения.
В упрощенной модели с разнотипными RTT и объединенными потоками, разделяющими «бутылочное горлышко» получается выражение для полосы пропускания, остающейся «атакованному» трафику, как функцию от временной шкалы трафика DoS и среднюю скорость трафика DoS-атаки. Кроме того, получим «оптимальные» образцы трафика DoS-атак (двухуровневая периодичная квадратная волна или, проще, двухуровневые импульсные пики), минимизирующие полосу пропускания, для указанного уровня TCP, атакуемого, включая сведение полосы пропускания к нулю.
В механизме TCP-reno пакет считается, потерян при следующих условиях: неполучении ACK или при получении 3-х дубликатов ACK. Если потеря пакета произошла и получено меньше 3-х дубликатов ACK, стек ждет окончания срока RTO, уменьшает количество пакетов в потоке до одного и отправляет его повторно.
Выбор значений таймаута лежит между 2-я пределами: если установлено слишком малое значение, тогда будут иметь место ложные повторные передачи из-за того, что пакеты будут считаться потерянными вследствие позднего принятия ACK. Аналогично, при установке большого времени, поток трафика будет ждать необоснованно долго разрешения прохода или повторной передачи в канале.
Стек TCP приближается к максимальной пропускной способности при существовании нижней границы RTO в 1 секунду. Эксперимент показал, что все потоки трафика должны иметь минимальное значение RTT равное 1 секунде, только при таких условиях достигается максимальная производительность передачи. Для выбора значения RTT отправитель TCP-пакета должен оперировать двумя переменными: SRTT (усредненное время прохождения пакетов по каналу связи до адресата и обратно, smoothed round-trip time) и RTTVAR (колебание времени прохождения пакетов по каналу связи до адресата и обратно, roundtrip time variation). Правила вычисления SRTT, RTTVAR и RTO следующие: пока измерение RTT не было сделано (т.е. не был отправлен ни один пакет), отправитель устанавливает RTO равным 3 секундам. Далее, когда сделано первое измерение (назовем его R) RTT, хост устанавливает