Контрмеры: защита от прослушивания сети
Предотвращение прослушивания
Если обнаружение факта прослушивания имеет столь большое значение, то что тогда говорить о предупреждении таких попыток! Мы рекомендуем очень внимательно оценить, насколько важен для вашей организации обмен данными по протоколу ICMP между узлами вашей сети и Internet. Имеется много разнообразных типов сообщений ICMP, ECHO и ECHO_REPLY – лишь два из них. В большинстве случаев нет никакой необходимости разрешать обмен данными между узлами сети и Internet с использованием всех имеющихся типов сообщений.
Практически все современные брандмауэры обладают возможностью отфильтровывать пакеты ICMP, поэтому единственная причина, по которой они могут проходить во внутреннюю сеть,– та или иная производственная необходимость. Даже если вы твердо убеждены в том, что нельзя полностью заблокировать протокол ICMP, обязательно заблокируйте те типы сообщений, которые вам не нужны для работы. Как правило, вполне достаточно, чтобы с зоной DMZ можно было взаимодействовать посредством сообщений ECHO_REPLY, HOST UNREACHABLE И TIME EXCEEDED. Кроме того, с помощью списка управления доступом (ACL – Access Control List) можно разрешить обмен сообщениями по протоколу ICMP только с несколькими IP-адресами, например, принадлежащими вашему провайдеру Internet. Это позволит провайдеру, при необходимости, проверить качество связи, но при этом проникновение посторонних извне в компьютеры, подключенные к Internet, будет значительно затруднено.
Необходимо всегда помнить, что несмотря на удобство и мощь протокола ICMP с точки зрения диагностирования сетевых проблем, он с успехом может использоваться и для создания таких проблем. Разрешив неограниченный доступ по протоколу ICMP во внутреннюю сеть, вы тем самым предоставляете взломщикам возможность реализовать нападение типа DoS (например с помощью Smurf-метода). Более того, если взломщику удастся проникнуть в один из ваших компьютеров, он может через "потайной ход" в операционной системе с помощью таких программ, как loki, организовать скрытое тунеллирование данных, передаваемых по протоколу ICMP. Более подробная информация о loki приведена в журнале Phrack Magazine, том 7, выпуск 51 за 1 сентября 1997 года, статья 06(http://phrack.infonexus.com/search.phtml?view&article=p51-6).
Другая интересная концепция, предложенная Томом Пташеком (Tom Ptacek) и перенесенная в среду Linux Майком Шифманом (Mike Schiffman) заключается в использовании процесса pingd. Демон pingd, запущенный на компьютере пользователя, обрабатывает все поступающие на данный компьютер запросы ICMP_ECHO и ICMP_ECHOREPLAY. Для реализации такого подхода нужно отказаться от поддержки обработки запроса ICMP_ECHO на уровне ядра и реализовать ее на уровне пользователя с помощью служебного процесса, обеспечивающего работу сокета ICMP. Таким образом, появляется возможность создания механизма управления доступом на уровне отдельного компьютера. Утилита pingd имеется в версии BSD (http://www.enteract.com/~tqbf/goodies.html) и в системе Linux (http://www.2600.net/phrack/p52-07.html).
Запросы IСМР
Если говорить о возможностях протокола ICMP для сбора информации о сети, то прослушивание с помощью утилиты ping (или, другими словами, с помощью пакетов ECHO, пересылаемых по протоколу ICMP), – это только верхушка айсберга. Просто обмениваясь пакетами ICMP с интересующей вас системой, о ней можно получить любую информацию. Например, с помощью таких утилит UNIX, как icmpquery (http://packetstorm.securify.com/UNIX/scanners/icmpquery.с) или icmpush (http://packetstorm.security.com/UNIX/scanners/icmpush22.tgz), можно узнать системное время удаленного узла (т.е. часовой пояс, в котором он находится). Для этого нужно отправить по протоколу ICMP сообщение типа 13 (TIMESTAMP). Точно так же, обратившись к определенному устройству с ICMP-запросом типа 17 (ADDRESS MASK REQUEST), можно узнать маску подсети. Знание маски подсети сетевой карты позволяет определить все существующие подсети. Например, используя маску подсети, усилия можно сосредоточить на определенной подсети и избежать необходимости обращения к адресам рассылки широковещательных сообщений. Утилита icmpquery позволяет запрашивать как системное время, так и маску подсети.
icmpquery <query> [-B] [-f fromhost] [-d delay] [-T time] targets
Здесь параметр query принимает одно из следующих значений:
- -t: ICMP-запрос системного времени (по умолчанию);
- -m: ICMP-запрос маски подсети.
- delay – задержка между пакетами в миллисекундах,
- targets – список имен или адресов исследуемых узлов,
- time – время в секундах, в течение которого следует ожидать отклика. По умолчанию используется значение 5 с.
- -В – включение режима широковещательной рассылки. В этом режиме утилита ожидает в течение периода, определенного параметром time, а затем выводит отчет о поступивших ответах.
Если вы используете модем, установите значения параметров -d и -Т большими, чем установленные по умолчанию.
Например, чтобы с помощью icmpquery узнать системное время маршрутизатора, воспользуйтесь следующей командой.
[tsunami] icmpquery -t 192.168.1.1 192.168.1.1: 11:36:19
Запрос на получение маски подсети выглядит следующим образом.
[tsunami] icmpquery -m 192.168.1.1 192.168.1.1: 0xFFFFFFE0
Далеко не все маршрутизаторы/узлы отвечают на ICMP-запросы TIMESTAMP или NETMASK. Поэтому с помощью утилит icmpquery и icmpush на различных узлах можно получить разные результаты.