Контрмеры: защита от прослушивания сети

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

Выявление факта прослушивания


Как уже говорилось, ICMP- и TCP-прослушивание является общепринятым методом исследования сети перед непосредственной попыткой проникновения в сеть. Поэтому выявление факта прослушивания очень важно с точки зрения возможности получения информации о потенциальном месте проникновения и источнике угрозы. Один из основных методов выявления прослушивания состоит в использовании сетевой программы выявления вторжений, такой как Network Flight Recorder (NFR), или программы, установленной на исследуемом взломщиком узле. Ниже приведен алгоритм, который можно реализовать в программе, предназначенной для выявления факта прослушивания.

# Обнаружение прослушивания с помощью ICMP/Ping
# Автор — Стюарт Мак-Клар (Stuart McClure)
# Эта программа предназначена для выявления
ping-сканера, изучающего вашу сеть
# Для получения наилучших результатов
# установите нужные значения maxtime и maxcount.
ping_schema = library_schema::new(1,["time", "ip",
"ip","ethmac", "ethmac" ],
scope());
count = 0;
maxtime =10; # Время в секундах
maxcount =5; # Количество ICMP-запросов ECHO или запросов ARP,
# которое рассматривается как допустимое
dest = 0;
source = 0;
ethsrc = 0;
ethdst = 0;
time = 0;
filter icmp_paskets icmp( )
{
if (icmp.type == 0x08) # Проверка на ICMP-пакеты ECHO.
{
if ((source == ip.src) && (dest != ip.dst)) # Попался!
{
count = count + 1;
time = system.time;
}
else
count = 1;
dest = ip.dest;
source = ip.src;
ethsrc = eth.src;
ethdst = eth.dst;
} .
on tick = timeout ( sec: maxtime, repeat) call checkit;
}
func checkit;
{
if (count >= maxcount)
{
echo ("Обнаружен.ping-сканнер! Время: ", time, "\n");
record system.time, source, dest, eth.src, eth.dst
to the_record_ping; count = 0; dest = 0;
} else
{
dest = 0; count = 0;
}
return;
}
the_record_ping=recorder("bin/histogram
packages/sandbox/pingscan.cfg",
"ping_schema" );

Что касается защиты на уровне отдельного узла, для этого можно с успехом применять утилиты UNIX, которые позволяют выявлять и регистрировать попытки прослушивания. Если, просматривая файл журнала, созданный такой утилитой, вы обнаружите массированные ICMP-запросы ECHO, исходящие из одной и той же сети или от одного и того же узла, это, скорее всего, означает, что вашу сеть кто-то исследует. На такие факты необходимо обращать самое пристальное внимание, так как после изучения сети обычно предпринимается реальная попытка проникновения.
К сожалению, найти аналогичные утилиты для платформы Windows достаточно сложно. Одним из немногих бесплатных или условно бесплатных пакетов, заслуживающих внимания, является Genius 3.1. Краткую информацию о новой версии этого программного продукта можно найти по адресу http://softseek.com/Internet/ General/Review_20507_index.html, а более подробные сведения о нем и загружаемый файл содержатся по адресу http: //www.indiesoft.com/. Эта программа не позволяет регистрировать попытки ping-прослушивания, а предназначена лишь для выявления TCP-сканирования определенного порта. Среди коммерческих пакетов аналогичного назначения можно отметить BlackICE от компании Network ICE (http://www.networkice.com). Этот программный продукт позволяет не только обнаруживать факты JCMP- и TCP-прослушивания, но и решать много других задач. В табл. 2.1 перечислены некоторые дополнительные утилиты, которые могут значительно облегчить выявление попыток прослушивания вашей сети.

Таблица 2.1.Некоторые утилиты UNIX, предназначенные для зашиты от прослушивания на уровне узла

Программа
Ресурс
Scanlogd
http : //www.openwall.com/scanlogd
Courtney 1 .3
ftp://ciac.llnl.gov/pubс/сiac/sectools /unix
Ippl1.4.10
http: //pltplp.net/ippl/
Protolog 1.0.8
http: //packet storm. securify.com/UNIX/loggers/protolog-1.0.8. tar.gz

Предотвращение прослушивания


Если обнаружение факта прослушивания имеет столь большое значение, то что тогда говорить о предупреждении таких попыток! Мы рекомендуем очень внимательно оценить, насколько важен для вашей организации обмен данными по протоколу 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 : OxFFFFFFEO

Далеко не все маршрутизаторы/узлы отвечают на ICMP-запросы TIMESTAMP или NETMASK. Поэтому с помощью утилит icmpquery и icmpush на различных узлах можно получить разные результаты.

Контрмеры: защита от ЮМР-запросов


Одним из самых лучших методов защиты является блокирование IOМР-запросов тех типов, которые способствуют разглашению информации о сети за ее пределами. Как минимум, на пограничном маршрутизаторе необходимо заблокировать прохождение во внутреннюю сеть пакетов TIMESTAMP (ICMP-сообщение тип 13) и ADDRESS MASK (тип 17). Например, если в качестве пограничного маршрутизатора используется маршрутизатор Cisco, запретите ему отвечать на указанные запросы, добавив следующие строки в список управления доступом.

access-list 101
deny icmp any any 13 ! timestamp request
access-list 101 deny icmp
any any 17 ! address mask request

Для выявления рассмотренных выше видов деятельности можно также воспользоваться сетевыми системами выявления вторжений V(NIDS), например, программой Марти Рош (Marty Roach) (http://www.snort.org/). При выявлении такого типа вторжений будет выведена следующая информация.

[**] PING-ICMP Timestamp [**]
05/29-12:04:40.535502 192.168.1.10 -> 192.168.1.1
ICMP TTL:255 TOS:0x0 ID:4321
TIMESTAMP REQUEST

Сканирование портов


С помощью ICMP- или TCP-прослушивания мы установили, какие компьютеры исследуемой сети подключены к Internet. Кроме того, вся требуемая информация собрана также и с использованием запросов ICMP. Теперь можно перейти к этапу сканирования портов этих компьютеров. Сканирование портов (port scanning) — это процесс пробного подключения к портам TCP и UDP исследуемого компьютера с целью определения, какие службы на нем запущены и обслуживаются ли ими соответствующие порты. Обслуживаемые порты могут находиться в работающем состоянии или в состоянии ожидания запроса (listening mode). Определение портов, находящихся в состоянии ожидания запроса, — этап, имеющий определяющее значение для последующего выяснения типа используемой операционной системы, а также работающих на компьютере прикладных программ. Активные службы, находящиеся в состоянии ожидания, могут предоставить взломщику возможность получить несанкционированный доступ. Это обычно происходит в том случае, когда система безопасности компьютера не настроена должным образом или в программном обеспечении имеются хорошо известные изъяны в системе защиты. За последние несколько лет средства и методы сканирования портов были значительно усовершенствованы. Учитывая ограниченный объем книги, мы рассмотрим лишь самые популярные из них, с помощью которых можно получить значительную часть важной информации. Теперь мы уже не будем пытаться определить, подключен ли тот или иной компьютер к Internet, как это делалось ранее. Для упрощения задачи будем считать, что мы это уже установили однозначно и сосредоточимся лишь на методике выявления портов, находящихся в состоянии ожидания, или возможных точек проникновения в исследуемую систему.
При сканировании портов решается несколько задач, связанных с изучением системы защиты соответствующего узла. Среди этих задач можно выделить следующие.

  •  Идентификация TCP- и UDP-служб, запущенных на исследуемом узле.
  •  Идентификация типа операционной системы, установленной на исследуемом узле. 
  •  Идентификация приложений или версий определенных служб.