Встроенные механизмы защиты
Операционная система: Windows 2000
Наиболее важным параметром в Windows 2000 и в Windows Server 2003 является параметр SynAttackProtect. Включение этого параметра позволяет операционной системе более эффективно обрабатывать поступающие соединения. Защита может быть установлена, путем добавления значения SynAttackProtect, типа DWORD, в следующий ключ системного реестра:
HKLMSYSTEMCurrentControlSetServicesTcpipParameters В случае обнаружения SYN атаки, параметр SynAttackProtect изменяет режим работы стека TCP/IP, что позволяет операционной системе обрабатывать большее количество SYN запросов. Принцип работы заключается в отключении некоторые опций сокета, добавлении дополнительных задержек к показаниям соединения и изменении тайм-аута для запросов.
Когда значение SynAttackProtect равно 1, количество повторных передач уменьшено, а маршрутизация содержимого кеша отсрочена до создания соединения. Рекомендуемое значение SynAttackProtect - 2, при котором дополнительно задерживается признак соединения с Windows Socket до установления связи сервера с клиентом. В ходе нападения, лучшая производительность в обработке соединений достигается с помощью отключения нескольких параметров (эти параметры обычно используются системой в течение процесса создания новых соединений). Параметр TCPINITIALRTT, определяющий время первой перепередачи, больше не будет использоваться.
Как мы можем увидеть, включение параметра SynAttackProtect не изменяет режим работы стека TCP/IP до и при SYN атаке. Но даже при включенном параметре SynAttackProtect, операционная система может обрабатывать легальные поступающие соединения.
Операционная система автоматически включает защиту от SYN атак, когда обнаруживает превышение значений следующих трех параметров: TcpMaxHalfOpen, TcpMaxHalfOpenRetried и TcpMaxPortsExhausted.
Чтобы изменить значения этих параметров, сначала мы должны добавить их к тому же самому ключу системного реестра, как и в случае с SynAttackProtect.
Элемент системного реестра TcpMaxHalfOpen определяет максимальное количество состояний SYN RECEIVED, которые могут быть одновременно обработаны, прежде чем сработает SYN защита. Рекомендуемое значение этого параметра - 100 для Windows 2000 Server и 500 для Windows 2000 Advanced Server.
TcpMaxHalfOpenRetried определяет максимальное количество полуоткрытых подключений, для которых операционная система выполнила по крайней мере одну повторную передачу, прежде, чем сработает SYN защита. Рекомендуемое значение - 80 для Windows 2000 Server, и 400 для Advanced Server.
Элемент системного реестра TcpMaxPortsExhausted определяет число отклоненных SYN запросов, после которого сработает защита от SYN атак. Рекомендованное значение - 5.
Операционная система: Linux RedHat
В RedHat, как и в других Linux системах, осуществлен механизм SYN cookies, который включается следующим способом:
* ECHO 1 >/proc/sys/net/ipv4/tcp_syncookies
Обратите внимание, что для того чтобы сделать это изменение постоянным, мы должны создать загрузочный файл, который будет присваивать значение этой переменной. Мы должны проделать ту же самую операцию и для других UNIX переменных, описанных в этой статье, потому что значения этих переменных после перезагрузки системы вернуться к прежним значениям.
Защита SYN cookies особенно полезна, в случае, когда система подверглась SYN атаке, а исходные IP адреса пакетов - фиктивные (SYN спуфинг). Этот механизм позволяет структурировать пакеты с набором флагов SYN и ACK, которые имеют специально обработанный "начальный номер последовательности" (ISN), называемый cookie. Значение cookie это не псевдослучайное число, сгенерированное системой, а результат действия хеш-функции. Это значение генерируется хеш-функцией в зависимости от следующей информации: IP-адрес источника, порт источника, IP адрес получателя, порт получателя плюс некоторые секретные значения. В ходе SYN атаки, когда заполняется очередь соединений, система вместо отклонения запроса, генерирует ответ, посылая клиенту пакет с cookie. Когда сервер получает пакет с набором флажка ACK (последняя стадия процесса установления соединения с клиентом), тогда он проверяет значение cookie. Если это значение правильно, то сервер создает подключение, даже в случае если нет никакого соответствующего элемента в очереди соединений. В этом случае мы знаем, что это легальное соединение, и что исходный IP адрес не фиктивный. Важно обратить внимание на то, что механизм работы SYN cookie, вообще не использует очередь соединений, так что теперь мы не должны изменять её размер. Более подробную информацию об использовании SYN cookies можно найти здесь.
Также необходимо обратить внимание на то, что механизм SYN cookies работает только когда опция CONFIG_SYNCOOKIES установлена в ходе компиляции ядра системы.
В следующем разделе будут описаны другие полезные методы защиты от SYN атак. Я хотел бы подчеркнуть, что при более сложных видах SYN атак, эти методы могут помочь, но не решить проблему.
Увеличение размера очереди соединений
При SYN атаке, мы можем изменить размер очереди задач для поддержки большего количества полуоткрытых соединений так, чтобы не отклонять доступ к серверу легальным клиентам. В некоторых операционных системах, размер очереди задач очень маленький, поэтому производители рекомендуют увеличение этого значения, в случае если система подверглась SYN атаке.
Увеличение размера очереди задач требует, чтобы система резервировала дополнительные ресурсы памяти для входящих соединений. Если в системе отсутствует достаточное количество свободной памяти для этой операции, то пострадает производительность системы. Также мы должны удостовериться, что сетевые приложения (Apache, IIS и т.д.) смогут принимать большее количество подключений.
Операционная система: Windows 2000
Кроме описанных выше переменных TcpMaxHalfOpen и TcpMaxHalfOpenRetried, в Windows 2000 количество полуоткрытых подключений может быть установлено через динамическую очередь соединений. Конфигурирование этой очереди выполняется через драйвер AFD.SYS. Этот драйвер используется для поддержки Windows Socket приложений (FTP, Telnet и т.д.). Для увеличения количества полуоткрытых соединений, AFD.SYS поддерживает четыре элемента системного реестра. Все эти значения расположены в следующем ключе системного реестра:
HKLMSystemCurrentControlSetServices AFDParameters
Значение системного реестра EnableDynamicBacklog - глобальный переключатель, включающий или выключающий динамическую очередь соединений. Значение 1 - включает динамическую очередь.
MinimumDynamicBacklog - управляет минимальным количеством свободных соединений, разрешенных на каждом отдельном TCP порте. Если количество свободных соединений снижается ниже этого значения, то дополнительные свободные соединения будут созданы автоматически. Рекомендованное значение 20.
Значение MaximumDynamicBacklog определяет сумму активных полуоткрытых соединений и максимального количества свободных соединений. Если это значение будет превышено, то система больше не будет создавать свободные соединения. Рекомендованное значение не должно превышать 20000.
Последний параметр DynamicBacklogGrowthDelta управляет количеством свободных соединений, создаваемых в случае необходимости. Рекомендуемое значение: 10.
Ниже расположена таблица, показывающая рекомендуемые значения для драйвера AFD.SYS:
Значение подключа реестра | Формат | Значение |
EnableDynamicBacklog | DWORD | 1 |
MinimumDynamicBacklog | DWORD | 20 |
MaximumDynamicBacklog | DWORD | 20000 |
DynamicBacklogGrowthDelta | DWORD | 10 |
Операционная система: Linux
Переменная Tcp_max_syn_backlog определяет количество полуоткрытых подключений сохраняемых в очереди соединений. Например, 256 - общее количество полуоткрытых подключений, размещенных в памяти Linux RedHat 7.3. Переменные TCP/IP стека могут быть сконфигурированы с помощью команды sysctl или стандартными командами Unix. Ниже показан пример изменения заданного по умолчанию размера очереди соединений с помощью команды sysctl:
# sysctl -w net.ipv4.tcp_max_syn_backlog="2048"
Операционная система: Sun Solaris
В операционной системе Sun Solaris есть два параметра, управляющие максимальным количеством подключений. Первый параметр управляет общим количеством полных подключений. Второй параметр tcp_conn_req_max_q0, определяет при каком количестве полуоткрытых соединений, поступающие запросы не будут отклонены системой. Заданное по умолчанию значение этого параметра в ОС Sun Solaris 8 равно 1024. Мы можем изменять это значение при помощи команды ndd.
# ndd -set /dev/tcp tcp_conn_req_max_q0 2048
Операционная система: HP-UX
В операционной системе HP-UX, ответственной за управление максимальным количеством полуоткрытых соединений в состоянии SYN RECEIVED, является переменная TCP/IP стека tcp_SYN_rcvd_max. По умолчанию, в ОС HP-UX 11.00, значение этой переменной равно 500. Изменение этого значения, как и в ОС Sun Solaris, происходит с помощью команды ndd.
# ndd -set /dev/tcp tcp_syn_rcvd_max 2048