Брандмауэры и специальное программное обеспечение 8 Часть 4

Вид материалаРеферат

Содержание


Что такое атаки SYN DoS и как с ними бороться
Подобный материал:
1   ...   47   48   49   50   51   52   53   54   ...   101

Что такое атаки SYN DoS и как с ними бороться


Значительно более эффективными являются атаки, основанные на том факте, что основанные на IP системы используют последовательность SYN-ACK, для того чтобы установить соединение и покинуть очередь ожидания. Это достаточно старая атака, однако она до сих пор эффективна против некоторых систем. Если атака этой категории будет предпринята в отношении стандартной системы OpenLinux, для администратора этой системы это, скорее всего, будет не более чем легким раздражающим фактором.

Атака этой категории основана на том факте, что в прошлом (а также и в наши дни на некоторых системах) очередь ожидания обладала небольшим размером и ее можно было быстро заполнить. Подразумевается, что при создании каждого нового соединения серверный процесс некоторое время ждет в очереди, а затем покидает ее, однако это происходит только в случае, если завершается последовательность SYN-ACK. Только после завершения этой последовательности соединение TCP считается установленным. Нападающий может отправить запрос на установку соединения, а затем игнорировать адресованный ему пакет с установленным битом SYN (или сообщить серверу, что источник запроса вообще является совершенно другой системой, тогда пакет SYN будет направлен системе, которая не будет на него отвечать). В результате сервер будет ожидать в течение длительного времени, а запрос на подключение будет по-прежнему находиться в очереди ожидания. Пока сервер ждет, никто другой не сможет к нему подключиться. Нападающий может продолжать посылать серверу подобные запросы, создавая тем самым непреодолимое заграждение, связывая очередь ожидания и блокируя остальные попытки подключения к системе.


ПРИМЕЧАНИЕ

Модификация заголовка пакета с целью изменения адреса-источника — это одна из форм маскировки злоумышленников в Интернете. Маскировка в Интернете обозначается английским термином spoofing.

Когда Интернет впервые подвергся подобным нападениям, в первую очередь пострадали многие интернет-провайдеры. Единственным способом восстановить обслуживание был останов и перезапуск атакованной службы. Для некоторых операционных систем это означало полную перезагрузку системы. Однако если атака продолжалась, доступ к службе снова блокировался.

Чтобы снизить эффективность подобных атак, хакеры ядра Linux разработали несколько специально предназначенных для этой цели механизмов. Первый из способов противодействия предусматривает использование SYN cookies. Этот механизм позволяет обнаружить атаку SYN-ACK и блокировать попытку связать очередь ожидания. Данный метод по-прежнему может использоваться теми, кто подозревает, что его постоянно атакуют с использованием SYN DoS, однако в рамках данного метода расходуется достаточно большое количество системных ресурсов, к тому же благодаря появлению новых методов в настоящее время метод SYN cookies используется редко. Данный механизм, даже если он включен в состав ядра в процессе компиляции, по умолчанию выключен, поэтому вы должны включить его при помощи следующей команды:

echo 1 >/proc/sys/net/ipv4/tcp_syncookies

Механизм криптографически проверяет каждое из соединений. Если возникает подозрение, что с некоторых IP-адресов в отношении вашей системы осуществляется атака SYN DoS, механизм SYN cookies сообщает вам эти адреса. Однако вы должны учитывать, что эти IP-адреса извлекаются из поступающих к вам пакетов. Таким образом, это могут оказаться ложные подделанные IP-адреса или адреса систем, которые злоумышленник использует для атаки без ведома их владельцев. Общаясь с людьми, которые несут ответственность за данные IP-адреса, вы должны понимать, что это могут оказаться совершенно невинные люди.

Со времени появления SYN cookies размер очереди ожидания существенно увеличился, благодаря чему количество ожидающих в очереди запросов возросло. Само по себе это обстоятельство снизило эффективность небольших по масштабу атак или атак с использованием медленных соединений. Непреклонный и решительный взломщик все же может попробовать заполнить очередь ожидания и блокировать большое количество соединений от остальных клиентов, однако длинная очередь ожидания является более эффективным методом борьбы с подобного рода нападениями, чем SYN cookies. Для успешного нападения на систему, обладающую длинной очередью ожидания, злоумышленник может использовать одновременно несколько взломанных им систем (как в случае smurf).

Третьим средством борьбы с атаками SYN DoS является изменение времени в течение которого система ожидает завершения последовательности SYN-ACK прежде чем удалить незавершенный запрос из очереди ожидания. Также в кол ядра включен алгоритм, автоматически удаляющий из очереди «подвисшие» запросы на подключение в случае, если очередь заполнена. В подобной ситуации удаление запросов происходит даже раньше, чем истечет обычный таймаут, однако подобное происходит достаточно редко. Только чрезвычайно перегруженный сервер вынужден освобождать свою очередь от запросов подобным образом.

Если ваш сервер сильно загружен и подвергается атаке SYN DoS, при необходимости вы можете изменить значения некоторых параметров в самом ядре. Этс непростая задача. Значения всех настраиваемых параметров определяются в исходных файлах ядра, а именно в файле tcp.h (этот файл, как правило, можно обнаружить в /usr/src/linux/indude/net/tcp.h). Здесь определяется допустимое количество открытых соединений TCP, количество повторных попыток SYN, время ожидания между попытками и т. п.


ВНИМАНИЕ

Изменение значений, по умолчанию заданных в файле, может привести к нежелательным результатам. Например, количество повторных попыток (TCP_SYN_RETRIES) в настоящее время устанавливается равным 10. Если вы уменьшите это значение слишком сильно, некоторые клиенты не смогут подключиться к вашей системе. Это может произойти из-за отброшенных пакетов (по причине коллизий, слишком крупных фрагментов и установленного бита DNF — do not fragment— и т. п.) или из-за того, что выбранный верхний порт оказался занятым и его следует определить заново. Могут возникнуть также и другие причины. Если значение выбирается слишком большим, вы можете столкнуться с другими сложностями.

Если вы заглянете внутрь файла tcp.h, вы увидите множество ссылок на состояния TCP-соединения, например Fin Wait, Time Wait, Established, Listening, Closing и т. п. Вы также обнаружите, что код хорошо комментирован.


ПРИМЕЧАНИЕ

В коде, написанном на языке С, комментарии содержатся между комбинациями символов /* и */ и могут включать в себя строки, начинающиеся с символа звездочки (*). Не следует путать этот символ со знаком решетки (#), который используется для обозначения комментариев в сценариях оболочки. В языке С символ решетки (#) стоит в начале таких директив, как include, define и т. п. Начинающиеся с символа решетки строки не являются комментариями, и компилятор осуществляет их обработку.