Атака основана на недостатках маршрутизации в Internet и осуществляется на сетевом уровне. Как известно в сети Internet существует управляющий протокол ICMP, одной из функций которого является удаленное управление маршрутизацией на хостах внутри сегмента сети. Удаленное управление маршрутизацией необходимо для предотвращения возможной передачи сообщений по неоптимальному маршруту. Информация о маршрутах хранится в виде 2-х таблиц, одна из которых предназначена для маршрутов к хостам, а вторая - для маршрутов к сетям [33].
В сети Internet удаленное управление маршрутизацией реализовано в виде передачи с маршрутизатора на хост управляющего ICMP-сообщения: Redirect Message. Все сообщения, адресованные в другие сегменты сети, изначально направляются на “местный” маршрутизатор, который, в свою очередь, перенаправляет их далее по указанному в пакете IP-адресу, выбирая при этом оптимальный маршрут. В свою очередь хосты, адресующие эти сообщения, имеют таблицы маршрутизации, в которых содержится описание соответствующего маршрута (описание обязательно включает IP-адрес конечной точки и IP-адрес маршрутизатора). В этой связи, для осуществления удаленной атаки внедрения ложного доверенного объекта путем навязывания ложного маршрута злоумышленнику необходимо подготовить ложное ICMP сообщение, в котором указывается конечный IP-адрес навязанного маршрута и IP-адрес ложного маршрутизатора. Правильно сконструированный ICMP-пакет, который прошёл все проверки на достоверность вызовет добавление в таблицу машрутизации ложного хоста [40].
Условия прохождения проверки на достоверность:
1. Новый маршрутизатор должен находиться на непосредственно подсоединённой сети.
2. Перенаправление должно быть с маршрутизатора по умолчанию для данной точки назначения.
3. Переназначение не может быть назначено с самого хоста как маршрутизатора.
4. Вновь назначаемый маршрут должен быть непрямым маршрутом.
Возможно два варианта реализации данной атаки в зависимости от расположения субъекта и объекта атаки.
В первом случае атакующий находится в том же сегменте сети, что и цель атаки. Тогда, послав ложное ICMP-сообщение, он в качестве IP-адреса нового маршрутизатора может указать либо свой IP-адрес, либо любой из адресов данной подсети (рисунок 4.23). Это даст атакующему возможность изменить маршрут передачи сообщений, направляемых атакованным хостом на определенный IP-адрес, и получить контроль над трафиком между атакуемым хостом и интересующим атакующего сервером. После этого атака перейдет во вторую стадию, связанную с приемом, анализом и передачей пакетов, получаемых от «обманутого» хоста (рисунок 4.24).
Фазы атаки:
- Отправление на атакуемый хост ложного ICMP Redirect Host сообщения от имени маршрутизатора (рисунок 4.23);
- перенаправление пакетов от атакуемого хоста на настоящий маршрутизатор (рисунок 4.24);
- перенаправление пакетов от маршрутизатора на атакуемый хост (рисунок 4.24);
Во втором случае осуществляется внешнесегментная атака, которая усложняется множеством факторов.
Рисунок 4.23 - Отправка ложного ICMP redirect сообщения
Рисунок 4.24 - Работа сети во время атаки
Например, злоумышленнику будет не просто угадать IP-адрес «местного» маршрутизатора, но, в конечном счете, проводится аналогичным способом, с подбором недостающих данных [39].
Обнаружить данную сетевую атаку можно только в том случае если четко знать по какому маршруту должны идти пакеты до определенного заданного узла сети. И если при использовании traceroute появляется лишний узел, то можно сделать предположение что осуществляется этот тип сетевой атаки.
Для того чтобы защититься от этой удаленной атаки, необходимо либо фильтровать ICMP Redirect сообщение (используя Firewall или фильтрующий маршрутизатор), не допуская его попадания на конечную систему, либо соответствующим образом выбирать сетевую ОС, которая будет игнорировать это сообщение. Во многих сетях с простой топологией обычно устанавливают статические таблицы маршрутизации вручную, поэтому не зачем доверять изменение маршрутов протоколу ICMP. На любой ОС с открытыми кодами для запрета изменения маршрута и обработки ICMP Redirect сообщений, можно изменить исходные тексты и перекомпилировать ядро ОС. В Linux можно вообще очень просто запретить приём ICMP Redirect пакетов включением в какой-нибудь из стартовых скриптов следующей последовательности:
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo 0 > &f
done;
Что касается операционной системы FreeBSD, то реагирование данной ОС на пакеты ICMP redirect перекрывается следующим образом:
/etc/rc.conf icmp_drop_redirect="YES"
Одной из основных задач, возлагаемых на сетевую ОС, функционирующую на каждом из объектов распределенной ВС, является обеспечение надежного удаленного доступа с любого объекта сети к данному объекту. В общем случае, в распределенной ВС каждый субъект системы должен иметь возможность подключиться к любому объекту РВС и получить в соответствии со своими правами удаленный доступ к его ресурсам. Обычно в вычислительных сетях возможность предоставления удаленного доступа реализуется следующим образом: на объекте РВС в сетевой ОС запускаются на выполнение ряд программ-серверов (например, FTP сервер, WWW сервер и т. д.), предоставляющих удаленный доступ к ресурсам данного объекта. Данные программы-серверы входят в состав телекоммуникационных служб предоставления удаленного сервиса. Задача сервера - находясь в памяти операционной системы, постоянно ожидать получения запроса на подключение от удаленного объекта. В случае получения подобного запроса сервер должен по возможности передать на запросивший объект ответ, в котором либо разрешить подключение, либо нет. По аналогичной схеме происходит создание виртуального канала связи, по которому обычно взаимодействуют объекты РВС. В этом случае непосредственно ядро сетевой ОС обрабатывает приходящие извне запросы на создание виртуального канала (ВК) и передает их в соответствии с идентификатором запроса (порт или сокет) прикладному процессу, которым является соответствующий сервер.
Сетевая операционная система способна иметь ограниченное число открытых виртуальных соединений, а также отвечать на ограниченное число запросов. Значения этих ограничений зависят от различных параметров системы в целом, основными из которых являются быстродействие ЭВМ, объем оперативной памяти и пропускная способность канала связи (чем она выше, тем больше число возможных запросов в единицу времени). Основная проблема, возникающая в этом случае, состоит в том, что при отсутствии статической ключевой информации в РВС идентификация запроса возможна только по адресу его отправителя. Если в распределенной ВС не предусмотрено средств аутентификации адреса отправителя, то есть инфраструктура РВС позволяет с одного объекта системы передавать на другой атакуемый объект бесконечное число анонимных запросов на подключение от имени других объектов, числом на несколько порядков меньше пропускной способности канала (направленный «мини-шторм»), то это и будет реализацией типовой угрозы безопасности РВС «Отказ в обслуживании», так же известной, как DoS (Denial of Service).
Вторая разновидность реализации этой типовой угрозы состоит в передачи с одного адреса стольких запросов на атакуемый объект, сколько позволит трафик (направленный «шторм» запросов, flood). В этом случае, если в системе не предусмотрены правила, ограничивающие число принимаемых запросов с одного объекта (адреса) в единицу времени, то результат этой атаки лежит в пределах от возможного переполнения очереди запросов и отказа одной из телекоммуникационных служб, вплоть до полной остановки компьютера из-за невозможности системы заниматься ничем другим, кроме обработки запросов.
Целью атаки является создание DoS-условия, т.е. ситуации, когда легитимные (правомерные) пользователи компьютерной системы не могут получить доступа к ресурсам, предоставляемых системой или этот доступ затруднен.
Существуют различные причины, по которым может возникнуть DoS-условие:
- ошибка в программном коде, приводящая к обращению к неиспользуемому фрагменту адресного пространства, выполнению недопустимой инструкции или другой необрабатываемой исключительной ситуации, когда происходит аварийное завершение серверного приложения. Классическим примером является обращение по нулевому (англ. NULL) указателю;
- истощение канала связи, приводящего к скоплению большого количества необработанных сетевых пакетов. Современные параметры Internet серверов позволяют им с, достаточно большой скоростью разбирать поступающие из сети данные. Поэтому, вполне может возникнуть ситуация, когда сам атакуемый хост является вполне работоспособным сегментом, а канал данных, соединяющий его с внешней сетью, не располагает мощностями, позволяющими с достаточной скоростью подавать трафик для обработки;
- истощение ресурсов системы. Обратная проблема. Получается в результате ситуации, когда у атакуемого хоста быстродействие системы не хватает для обработки всего приходящего трафика, подаваемого через мощный канал связи.
Рисунок 5.1 - Схема DoS атаки на прикладной сервис
DOS атаки нацелены как на сети в целом, серверные кластеры, так и на конечные хосты. Обычно под чистыми DOS атаками понимают низкоскоростные DOS атаки, направленные на конкретные ошибки в реализации программ, что затрудняет их обнаружение средствами IDS.
Атака DDoS (Distributed Denial of Service), известная как распределенная атака на отказ в обслуживании, легко выполняется в большой сети, и может быть очень эффективной. DDoS можно рассматривать как усовершенствованную форму традиционной DoS атаки. Прежде всего, стоит отметить, что все способы атаки удалённого хоста, осуществляемые при обычной DoS, так же можно применить и для распределённого отказа в обслуживании. Но обычно они имеют более «грубую» специфику или применяются для усиления эффекта. Основной отличительной чертой DDoS атаки является вовлечение в нападение на жертву нескольких хостов.
Рисунок 5.2 - Схема DDoS атаки на удаленный хост
Рассмотрим процесс проведения типичной распределенной атаки. Взломщик получает доступ к множеству компьютеров, подсоединенных к Интернет (часто используя автоматизированные программы, известные как авторутеры) и устанавливает программное обеспечение DDoS. Это программное обеспечение позволяет атакующему удаленно управлять взломанным компьютером, делая его рабом (зомби). От устройства-хозяина взломщик информирует рабов о цели и направляет атаку. Тысячи машин могут контролироваться из одной точки. Время старта, время остановки, адрес цели и тип атаки – все можно передать рабам от хозяина через Интернет. Использованная для определенной цели одна машина может создать трафик в несколько мегабайт. Несколько сотен машин могут создать трафик в несколько гигабайт. Таким образом, эта атака может быть крайне разрушительна для практически любой цели.
5.2.1 ICMP-flooding и 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 байтов является наиболее оптимальным.