Дополнительные меры защиты от атак по TCP

В документации Microsoft описано пять способов изменения параметров TCP в реестре, которые позволяют повысить устойчивость систем Windows 2000 к атакам типа Denial of Service (DoS) — отказ в обслуживании, и другим видам атак. Эти методы эффективны на машинах Windows 2000, подключенных к территориально распределенным сетям (WAN) и Internet, и на сайтах с повышенными требованиями к безопасности. Для внесения столь сложных изменений необходимо вручную настроить многие центральные алгоритмы TCP, и я рекомендую вносить изменения в рабочие системы лишь после экспериментов на тестовой машине. Неправильные или неудачно выбранные параметры TCP/IP могут отрицательно повлиять на большинство служб и приложений Windows 2000. Эти методы затрагивают низкоуровневые алгоритмы, используемые операционной системой для управления и маршрутизации сообщений, поэтому тестовую систему следует подключить к нескольким подсетям с одним или несколькими маршрутизаторами.

Параметры TCP/IP в реестре

Экран 1. Генерируемые элементы управления для TCP/IP.

Вся информация о работающей системе Windows 2000 сохраняется в разделе реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSet. Подраздел Services этого раздела, в свою очередь, содержит по одному разделу для каждой настраиваемой службы Windows 2000 (даже для блокированных и не установленных служб). На Экране 1 показаны общие данные конфигурации TCP/IP из раздела HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services Tcpip Parameters. По умолчанию, данные конфигурации для каждой службы хранятся в разделе Parameters, в подразделе с соответствующим именем.

При работе с несколькими адаптерами (как аппаратными сетевыми адаптерами, так и программными портами Routing and Remote Access) в разделе HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services Tcpip Parameters Interfaces формируется соответствующий подраздел для идентификатора класса каждого адаптера. По щелчку на идентификаторе класса адаптера в правом окне редактора реестра отображаются сведения о конфигурации данного адаптера (см. Экран 2).

Экран 2. Элементы управления TCP/IP, специфичные для адаптера.

В разделе TcpipParameters содержатся элементы, определяющие поведение TCP/IP для всех интерфейсов. При настройке конфигурации адаптера, обеспечивающего связь через протокол TCP/IP, система копирует многие из этих параметров в раздел Interfaces данного адаптера. Если один и тот же элемент входит в TcpipParameters и в раздел конкретного адаптера, то можно изменить режим TCP/IP отдельного адаптера, отредактировав соответствующие параметры. Рассматривая изменения реестра, с помощью которых можно уменьшить уязвимость системы, следует помнить об общих параметрах и параметрах, специфических для каждого адаптера.

Если упомянутый мною элемент в соответствующем разделе отсутствует, его следует создать. Создавая элементы реестра, необходимо обратить внимание на корректность типа и значений вводимых данных. Невозможно предсказать, каким образом система отреагирует (если отреагирует вообще) на ввод некорректных данных. Измененные параметры конфигурации TCP вступят в силу после перезагрузки системы.

Защита от атаки типа SYN DoS

Нападения по TCP SYN DoS — излюбленное оружие взломщиков. Прежде чем рассматривать способы защиты от подобных атак, необходимо понять механизм работы TCP/IP.

Инициируя сеанс TCP в соединении IP, система A посылает системе B пакет синхронизации (SYN). Система B отвечает, посылая машине A в качестве подтверждения пакет SYN-ACK. Если система B не получает подтверждения о получении SYN-ACK от системы A, то отправка SYN-ACK повторяется до пяти раз. Не получив от системы А ответа, система B увеличивает интервал перед очередной попыткой послать SYN-ACK. Благодаря этим задержкам, системам удается установить соединение по медленным каналам связи.

Если система A не отвечает, то по истечении определенного времени система B разрывает соединение. Процесс тайм-аута может занять 3-4 мин, так как, прежде чем прекратить сеанс, система B должна определенное число раз обратиться к системе A. Когда система B разрывает соединение, TCP освобождает ресурсы, выделенные входящему соединению. Процесс освобождения ресурсов может занять еще от 3 до 5 мин.

В ходе типичной атаки с помощью SYN злоумышленник запускает на системе A программу, которая за короткий период времени посылает системе B множество запросов SYN. Каждый запрос SYN пересылается в IP-пакете, содержащем IP-адрес машины, пославшей пакет. Этот адрес может указывать на машину взломщика, но чаще ложный (spoofed) адрес указывает на другой компьютер или на несуществующую машину. В любом случае система B пытается послать подтверждение SYN-ACK по адресу источника в ответ на каждое сообщение SYN. Если система A не отвечает, то машина B вынуждена поддерживать соединение «полуоткрытым» и не может закрыть его, не выполнив определенного числа попыток. Очевидно, что атака с использованием SYN может быстро вызвать перегрузку системы.

Машины Windows 2000 обслуживают сотни одновременных соединений TCP/IP. Попав под атаку SYN, система может выделить до половины свободных TCP/IP-ресурсов для обслуживания запросов входящих соединений. Но процесс выделения, управления и повторного использования ресурсов TCP/IP в конечном итоге приводит к зависанию системы.

С помощью команды

netstat n p tcp

можно следить за системой, которая, возможно, подвергается атаке типа SYN. Ключ n указывает команде Netstat, что адреса и номера портов следует отображать в числовой форме; ключ p отображает только активные соединения TCP. На Экране 3 показана система со множеством соединений в состоянии SYN_RECEIVED (полуоткрытом). Для каждого соединения приводится адрес системы, предположительно пославшей пакет SYN. Если такие соединения остаются в состоянии SYN_RECEIVED дольше, чем несколько минут, то, вероятно, имеет место атака SYN. Как правило, состояние соединения изменяется на ESTABLISHED менее чем через минуту.

Экран 3. Идет атака типа SYN — DoS.

Windows 2000 автоматически контролирует три счетчика, отслеживающих число активных портов TCP/IP и число портов в полуоткрытом состоянии, обнаруживая потенциальные атаки SYN. Если значения счетчиков превышают определенные пороговые величины, Windows 2000 предполагает, что началась атака SYN DoS. Во время атаки SYN DoS механизм TCP направляет запрос в раздел HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services Tcpip Parameters, чтобы выяснить, какие ответные меры следует предпринять в данной ситуации. Элемент SynAttackProtect определяет число попыток и интервал времени между попытками. Эти величины задают условия тайм-аута соединения. Параметр SynAttackProtect имеет тип REG_DWORD и принимает значения 0, 1 или 2.

На системах, подключенных к Internet, этому параметру следует присвоить значение 1 или 2. В результате уменьшаются число повторных пересылок пакета SYN-ACK, интервал между ними и, как следствие, сокращается время, отведенное на ожидание нормальных и ложных запросов. Для наиболее надежной защиты от атак SYN DoS необходимо присвоить параметру значение 2.

Для систем, к которым можно напрямую обратиться из Internet (особенно не защищенных брандмауэром), элементу SynAttackProtect следует присвоить значение 1 или 2. Узнать о реализованных в брандмауэре мерах защиты от атак SYN и Ping of Death можно у поставщика. Следует иметь в виду, что при увеличении значения SynAttackProtect изменяется поведение системы при обработке как нормальных, так и DoS-запросов на установление соединений.

Защита от атак типа Dead-Gateway

Настраивая параметры TCP/IP вручную, необходимо указать адрес, маску подсети и выбираемый по умолчанию шлюз. Если система получает пакет с адресом назначения, не принадлежащим локальной подсети, то механизм IP пересылает пакет в шлюз. Затем шлюз направляет пакет другому маршрутизатору или конечному адресату. Нормально функционирующий шлюз всегда подтверждает получение таких пакетов. Если система не получает ответных сообщений о 25% пакетов, направленных в шлюз, то она считает шлюз неработающим, или «мертвым».

Чтобы предотвратить последствия отказа маршрутизатора, на закладке Advanced Settings диалогового окна TCP/IP Properties можно указать несколько маршрутизаторов. Если выбрано несколько маршрутизаторов, Windows 2000 автоматически активизирует функцию, которая обнаруживает «мертвый» маршрутизатор и выбирает следующий маршрутизатор из списка. Такая процедура динамической смены конфигурации повышает отказоустойчивость сети, но одновременно позволяет взломщику перенаправить сетевой трафик.

С «мертвыми» шлюзами связаны два элемента реестра. Первый, DeadGWDetectDefault, находится в разделе TcpipParameters и определяет стандартный режим обнаружения «мертвого» шлюза. Он используется для активизации и блокирования процедуры поиска «мертвых» шлюзов во всех интерфейсах TCP/IP. При необходимости можно воспользоваться вторым элементом, EnableDeadGWDetect из раздела Tcpip Parameters Interfaces adapterclassID, чтобы активизировать или блокировать режим обнаружения «мертвого» шлюза для конкретного адаптера. В режиме обнаружения «мертвого» шлюза механизм TCP передает в IP указание использовать резервный шлюз в случае, если TCP не получает ответа от шлюза после нескольких попыток передачи пакета. Если режим обнаружения отключен, то TCP не может пересылать пакеты в другой шлюз.

Чтобы вручную разрешить или запретить обнаружение «мертвых» шлюзов механизмом TCP, нужно присвоить параметру DeadGWDetectDefault значение 0 (запретить) или 1 (разрешить). Для отдельного сетевого адаптера с этой целью следует добавить или изменить параметр DeadGWDetect в разделе InterfacesadapterclassID.

Если режим обнаружения «мертвого» шлюза отключен, то в случае отказа основного шлюза механизм TCP не может динамически перенаправить пакеты на другие маршрутизаторы. Невозможность передать пакеты за пределы локальной подсети приводит к разрыву всех соединений, за исключением локальных. По этой причине, а также потому, что нападение через резервный шлюз — событие гораздо более редкое, чем атаки SYN DoS и Ping of Death, я рекомендую отключать режим обнаружения «мертвых» шлюзов лишь на тех участках сети, в которых требуется особо строгий режим конфиденциальности.

Защита от атак PMTU

Как видно из Таблицы 1, для сети каждого физического типа, например Ethernet и X.25, установлен максимальный размер кадра, называемый Maximum Transmission Unit (MTU) — максимальный размер передаваемого блока данных. Он определяет объем данных, который можно передать по сети отдельным блоком. Когда сообщения пересекают границу сетей различных типов (например, Ethernet и Token Ring), MTU сети-источника может быть меньше или больше, чем MTU сети-приемника.

Когда сетевой пакет размером 16 Кбайт пересекает границу сети с MTU 1500 байт, то между компьютерами в обеих сетях происходит обмен информацией MTU. Затем передающая машина разбивает (фрагментирует) сообщение на несколько пакетов, каждому из которых присваивается порядковый номер, определяющий последовательность малых пакетов в более крупном оригинальном сообщении.

Фрагментация пакетов — важный фактор снижения производительности. При делении пакета на несколько фрагментов передающая машина расходует такты процессора и память, вводит порядковый номер и передает уменьшенный пакет. Система-приемник расходует такты процессора и ресурсы памяти, сохраняя пакеты в буфере, упорядочивает пакеты по номеру и восстанавливает кадр.

В Windows 2000 реализован алгоритм Path MTU (PMTU), который обнаруживает самый малый MTU на пути между источником и приемником сообщения и преобразует сообщение в пакеты соответствующего размера. Таким образом, алгоритм оптимизации PMTU исключает процедуру фрагментации на нескольких маршрутизаторах вдоль пути, соединяющего сеть-источник с сетью-приемником.

В процессе определения PMTU машина становится уязвимой для атак. Теоретически взломщик может запрограммировать систему так, чтобы процедура определения MTU дала результат 68 байт (самый малый размер, предусмотренный TCP/IP). Windows 2000 использует это значение для упаковки и трансляции всех сетевых сообщений на целевую систему за пределами локальной подсети. Затем тот же взломщик может направить на систему лавину из сотен или тысяч пакетов. Если входящие сообщения прибывают быстрее, чем система успевает делить их на 68-байтовые фрагменты для пересылки на целевую машину, то могут быть исчерпаны все ресурсы на всех машинах, обрабатывающих сообщение.

Чтобы избежать подобной ситуации, следует блокировать процесс определения PMTU. Управлять процессом можно с помощью элемента EnablePMTUDiscovery раздела TcpipParameters. Параметр имеет тип REG_DWORD и может принимать значения 0 («ложь») и 1 («истина»). По умолчанию, процесс определения PMTU активизирован.

При разумном подходе запрет определения PMTU может помешать взломщику присвоить MTU, а следовательно, и PMTU, недопустимо малое значение. Но одновременно блокируется и важный алгоритм сетевой оптимизации. Ужесточив режим на системе, которая выполняет маршрутизацию сетевых сообщений, администратор задает одинаковый размер (576 байт) для всех пакетов, пересылаемых в подсети за пределами локальной подсети. Размер такого пакета составляет чуть больше трети стандартного пакета Ethernet (1500 байт).

Защита от обычных атак DoS

Система, инициировавшая TCP-соединение с другой машиной, периодически посылает на целевой компьютер пакет KeepAlive, который представляет собой просто сообщение ACK: она должна убедиться, что бездействующее соединение еще не разорвано. Если целевая система по-прежнему на связи, она посылает подтверждающее сообщение. Если связь прервана, то ответа не приходит, и система-передатчик завершает сеанс связи. По умолчанию Windows 2000 блокирует функцию KeepAlive, так как этот механизм создает существенную дополнительную нагрузку на ресурсы, особенно если сервер должен запрашивать информацию о состоянии сотни или тысячи потенциально бездействующих соединений.

Функцию KeepAlive имеет смысл активизировать на машинах, предоставляющих ресурсы ограниченному числу пользователей. Для управления запросами KeepAlive используется два элемента раздела TcpipParameters — KeepAliveTime и KeepAliveInterval.

Система с активизированной функцией KeepAlive посылает пакет ACK целевой машине в случае, если соединение не использовалось в течение периода времени, определяемого элементом KeepAliveTime. Стандартное значение KeepAliveTime — 7 200 000 мс (2 ч). Если удаленная машина отвечает на сообщение KeepAlive, но в остальном соединение не активно, система-источник пошлет очередной запрос ACK спустя 2 ч.

Если система-источник не получает ответа, она повторяет запрос ACK через интервал времени, определенный параметром KeepAliveInterval. Стандартное значение KeepAliveInterval — 1000 мс (1 с). Система-источник направляет удаленной системе до пяти запросов с интервалом в одну секунду (число повторов определяется элементом TCPMaxDataRetransmissions раздела TcpipParameters). Если удаленная система не отвечает после максимального числа попыток, система-источник закрывает соединение.

Значение KeepAliveTime можно уменьшить с 2 ч до 30-45 мин, чтобы поскорее закрыть неиспользуемые TCP-соединения и освободить ресурсы для других пользователей. Следует помнить, что этот параметр влияет на все соединения TCP, в том числе и локальные, поэтому необходимо тщательно взвесить последствия данного изменения. Для защиты от атак DoS разработчики Microsoft рекомендуют уменьшить значение KeepAliveTime до 300 000 мс (5 мин). За исключением особых случаев, рекомендуется использовать стандартное значение KeepAliveInterval (1 с).

Профилактика нападений по NetBT Name-Release

Сообщения NetBIOS over TCP/IP (NetBT) не подлежат аутентификации, поэтому любая система, в том числе используемая взломщиком, может посылать обычные пакеты NetBT любому другому компьютеру в сети. Для организации атаки с освобождением имени (name-release) используется логическая ошибка в алгоритме разрешения конфликтов имен NetBIOS. Как правило, Windows 2000 и Windows NT 4.0 обнаруживают конфликты имен, когда машина регистрирует свое имя в сети после начальной загрузки. В случае конфликта операционная система блокирует сетевые функции на машине, пытающейся зарегистрировать дублированное имя NetBIOS.

Воспользовавшись логической ошибкой, взломщик может послать датаграмму службы имен машине, уже успешно зарегистрировавшей свое имя NetBIOS. Датаграмма информирует систему о конфликте имен. Получив датаграмму, система выдает соответствующее сообщение, освобождает имя NetBIOS и перестает отвечать на запросы, направленные по этому имени. Освободив зарегистрированное имя, система теряет всю функциональность NetBIOS и не позволяет использовать имена NetBIOS для просмотра и доступа к машинам. Подобные действия не влияют на функциональность TCP/IP при обращении к системам по имени DNS или адресу TCP/IP.

С помощью команды Nbstat -n можно проверить, существует ли на самом деле конфликт имен. Эта команда отображает зарегистрированные в данное время имена NetBIOS с пометкой Conflict у конфликтующих имен.

Windows 2000 хранит сведения о конфигурации NetBT в разделе HKEY_LOCAL_MACHINE CurrentControlSet Services NetBT Parameters. Поведение механизма освобождения имен NetBIOS определяется элементом NoNameReleaseOnDemand. В документации Microsoft указывается, что элемент появился в пакете исправлений Windows 2000 Server Service Pack 2 (SP2), но по умолчанию отсутствует в разделе NetBTParameters. Его необходимо ввести туда вручную.

NoNameReleaseOnDemand имеет тип REG_DWORD. Стандартное значение, 0, заставляет систему освободить имя сразу же по получении датаграммы от службы имен. Если присвоить параметру NoNameReleaseOnDemand значение 1, то система освободит имя NetBIOS, только если конфликт произошел в процессе регистрации имени. Активизировав эту функцию, можно предотвратить нападение. Прием будет лишним, если в адаптере, обеспечивающем связь с Internet, уже отключен режим использования имен NetBIOS в соединениях TCP/IP. Метод можно применять только на машинах Windows 2000 и NT 4.0 с функциями безопасности, реализованными в пакете SP6a.

В бюллетене Microsoft Security Bulletin MS00-047 (Patch Available for «NetBIOS Name Server Protocol Spoofing» Vulnerability) содержится предупреждение, что при активизации элемента NoNameReleaseOnDemand в журнал событий записывается множество сообщений о событии ID 4320. Система будет регистрировать сообщение с этим идентификационным номером всякий раз при получении широковещательного запроса на освобождение имен типовых групп. Эти запросы поступают от систем, которые уже зарегистрировали имена групп и освобождают имена в ходе стандартного процесса завершения работы. Сообщения можно игнорировать.

Максимальная безопасность

Описанные в данной статье приемы ориентированы на системы специального назначения, содержащие конфиденциальную информацию. С их помощью можно повысить отказоустойчивость систем, но при этом есть опасность снижения быстродействия и ухудшения функциональности сети. После каждого изменения машину следует перезагружать.

Паула Шерик — редактор Windows & .NET Magazine и консультант по вопросам планирования, реализации и взаимодействия сетей. С ней можно связаться по адресу: paula@winnetmag.com.