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

Если процесс предварительного сбора данных можно сравнить со скрытым наблюдением, цель которого — добыть как можно больше информации, не выдавая себя, то сканирование — это "разведка боем". Цель сканирования — выявить открытые "окна" и "двери". В предварительно собранной информации содержатся сведения об адресах подсетей и отдельных компьютеров, полученных с помощью запросов whois и переноса зоны. Информация, собранная на этом этапе, очень ценна для взломщика, поскольку содержит такие данные, как имена и фамилии сотрудников, номера телефонов, диапазоны IP-адресов, адреса DNS-серверов и почтовых серверов. Теперь можно приступать к выявлению тех компьютеров, которые подключены к сети и достижимы из Internet. Для этого будут использоваться разнообразные средства и приемы, такие как ping-прослушивание, сканирование портов и различные методы, позволяющие автоматизировать выполнение этих задач.
Необходимо отметить, что факт наличия IP-адреса в перенесенной зоне еще не означает, что к соответствующему узлу можно получить доступ через Internet. Необходимо проверить каждый конкретный компьютер в отдельности и выяснить, подключен ли он к Internet и имеются ли на нем порты, находящиеся в состоянии ожидания запросов. Нам приходилось встречать немало неправильно настроенных DNS-серверов, которые предоставляли всем желающим адреса обслуживаемых ими частных сетей (например, 10.10.10.0). Поскольку такие адреса не маршрутизируются по Internet, вы понапрасну будете тратить время, пытаясь связаться с ними. Более подробная информация о том, какие адреса являются маршрутизируемыми, приведена в RFC 1918(http://www.ietf.org/rfc/rfcl918.txt).
Теперь давайте перейдем ко второму этапу сбора информации — сканированию.

Прослушивание сети с помощью утилиты ping


Одним из основных этапов в определении структуры сети является ее автоматизированное прослушивание с помощью утилиты ping по диапазону IP-адресов или адресам подсетей. Цель такого прослушивания — определить, имеется ли у отдельных компьютеров подключение к Internet. Утилита ping отправляет пакеты ICMP ECHO (тип 8) указанному компьютеру и ожидает ответного пакета ICMP ECHO_REPLY (тип 0). Получение такого ответа говорит о том, что компьютер в данный момент подключен к Internet. Хотя при некоторой настойчивости с помощью утилиты ping можно определить количество постоянно подключенных к Internet компьютеров в небольшой и даже средней сети, ручной перебор сетевых адресов будет малоэффективен, если необходимо обследовать корпоративную сеть крупной организации.
Для выполнения ping-прослушивания можно воспользоваться любым из .G® \*-» многочисленных средств, разработанных как для системы UNIX, так и для i-""""" Windows NT. В мире UNIX одним из самых надежных и проверенных методов такого прослушивания является использование утилиты fping (http:/ packetstorm security.com/Exploit_Code_Archive/fping.tar.gz). В отличие от других подобных утилит, которые перед переходе к тестированию следующего компьютера ожидают ответа на ранее посланный запрос, утилита fping рассылает все запросы одновременно, а затем ожидает ответа сразу от всех узлов. Именно поэтому утилита fping обеспечивает гораздо более высокую скорость прослушивания большого диапазона IP-адресов, чем обычная утилита ping. Утилита fping была написана специально для использования в сценариях оболочек совместно с утилитой gping (http://www.hacking-exposed.com/tools/tools.html), которая входит в пакет, распространяемый вместе с fping. Утилита gping генерирует список IP-адресов, передаваемых на вход fping для прослушивания. Листинг использования утилиты gping для сетей класса А, В или С может показаться слегка непонятным, поэтому рассмотрим его подробнее.

[tsunami ]'$ gping
usage: gping aO aN bO bN cO cN dO dN
gping a bO bN cO cN dO dN
gping a b cO cN dO dN
gping a b с dO dN
gping abcd

В качестве параметров утилите gping необходимо передать диапазон IP-адресов. На основании этого диапазона будет генерироваться листинг, в котором адреса перебираются друг за другом. Каждый октет передаваемого IP-адреса должен отделяться от остальных пробелами. Например, если мы собираемся генерировать IP-адреса для сети класса С, нам необходимо просто добавить 254 в качестве последнего параметра. Это позволит утилите перебрать все адреса от 192.168.1.1 до 192.168.1.254. Предположим, что эта сеть не содержит подсетей и использует маску подсети 255.255.255.0. Кроме того, мы не будем проверять адрес самой сети 192.168.1.0 и адрес широковещательной рассылки 192.168.1.255. Следует избегать применения утилиты ping к адресам широковещательной рассылки, поскольку это может привести к отказу, или так называемому состоянию DoS (denial of service), если ответный пакет одновременно будет сгенерирован многими узлами (более подробная информация о том, как установить маску подсети узла, приведена в документации по запросам ICMP). С использованием утилиты gping можно сгенерировать перечень адресов, которые затем будут использоваться утилитой fping.

[tsunami] gping 192 168 1 1 254
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.251
192.168.1.252
192.168.1.253
192.168.1.254

Теперь в нашем распоряжении имеется список всех узлов, которые могут находиться в исследуемой сети класса С. Осталось лишь перенаправить вывод утилиты gping на вход утилиты fping, которая выполнит прослушивание сети и определит, какие компьютеры в данный момент подключены к сети.

[tsunami]? gping 192 168 1 1 254 | fping -a
192.168.1.254 is alive
192.168.1.227 is alive
192.168.1.224 is alive
192.168.1.3 is alive
192.168.1.2 is alive
192.168.1.1 is alive
192.168.1.190 is alive

Параметр -а утилиты fping предназначен для включения режима, в котором выводится информация обо всех активных в данный момент компьютерах сети. Если нужно, утилита может выводить и информацию об именах узлов. Этот режим включается с помощью параметра -d. По нашему мнению, параметр -а лучше всего использовать в сценариях оболочки, а параметр -d — при исследовании сети на предмет поиска определенных узлов. Среди других параметров необходимо упомянуть -f, который позволяет вводить адреса из заранее подготовленного файла, а также -h, с помощью которого можно получить перечень всех параметров утилиты и режимов их использования. Еще одной утилитой, о которой мы будем много говорить в этой книге, является утилита nmap, созданная хакером по имени Федор (Fyodor) (www.insecure.org/nmap). Более подробно эта утилита будет рассматриваться ниже в этой главе, однако будет нелишним упомянуть, что, кроме всех остальных возможностей, данная утилита также позволяет выполнить прослушивание сети. Для включения соответствующего режима необходимо указать параметр -SP.

[tsunami] nmap -sP 192.168.1.0/24
Starting nmap V. 2.53 by fyodor@insecure.org
( www.insecure.org/nmap/)
Host (192.168.1.0) seems to be a subnet broadcast
address (returned 3 extra pings).
Host (192.168.1.1) appears to be up.
Host (192.168.1.10) appears to be up.
Host (192.168.1.11) appears to be up.
Host (192.168.1.15) appears to be up.
Host (192.168.1.20) appears to be up.
Host (192.168.1.50) appears to be up.
Host (192.168.1.101) appears to be up.
Host (192.168.1.102) appears to be up.
Host (192.168.1.255) seems to be a subnet broadcast
address (returned 3 extra pings).
Nmap run completed — 256
IP addresses (10 hosts up) scanned in 21 seconds

Что касается приверженцев Windows, они также не остались без внимания. В частности, имеется такая бесплатная утилита, как Finger (рис. 2.1), написанная хакерами из группы Rhino9 (http://www.nmrc.org/files/snt/). Эта утилита является одной из самых быстрых в своем классе. Как и fping, утилита Finger одновременно рассылает несколько ICMP-пакетов ECHO, а затем ожидает поступления ответов. Кроме того, Finger позволяет также получать имена узлов и сохранять результаты своей работы в файле. Такой же скоростью, как и Finger, обладает коммерческий продукт Ping Sweep, предлагаемый компанией SolarWinds (www.solarwinds.net). Поразительная скорость работы Ping Sweep объясняется тем, что данная программа позволяет устанавливать время задержки между передаваемыми пакетами (delay time). Установив это значение равным 0 или 1, можно просканировать всю сеть класса С и получить имена ее узлов менее чем за 7 секунд. Однако при использовании этих средств соблюдайте осторожность, поскольку в этом случае можно значительно снизить пропускную способность какого-нибудь низкоскоростного канала, например канала ISDN с пропускной способностью 128 Кбит/с или Frame Relay (не говоря уже о спутниковом или инфракрасном канале).
Среди других утилит Windows, предназначенных для прослушивания сети, можно отметить WS_Ping ProPack (www.ipswitch.com) и Netscan Tools (www.nwpsw.com). Хотя возможностей этих утилит вполне достаточно для прослушивания небольших сетей, они значительно медленнее Finger и Ping Sweep. Кроме того, не забывайте, что утилиты с графическим интерфейсом, несмотря на удобство их использования, лишают вас возможности их применения в сценариях и автоматизированных процедурах.
Возможно, вы хотите спросить, как поступать, если исследуемый узел блокирует сообщения ICMP? Хороший вопрос. Такой подход зачастую применяется на тех узлах, администраторы которых заботятся о безопасности. Однако, несмотря на блокировку пакетов ICMP, существуют дополнительные средства и методы, позволяющие определить, подключен ли такой узел к сети или нет. Вместе с тем необходимо отметить, что все эти средства оказываются не такими точными и эффективными, как обычные утилиты семейства ping.



Рис. 2.1. Утилита finger — одна из самых быстрых утилит ping-прослушивания, которая к тому же распространяется бесплатно

В тех случаях, когда обмен данными по протоколу ICMP заблокирован, в первую очередь применяется метод сканирования портов (port scanning), который более подробно рассматривается ниже в этой главе. Просканировав стандартные порты каждого потенциального IP-адреса сети, можно определить, какие узлы подключены к сети. Если порт открыт (opened mode) или находится в режиме ожидания (listening mode), значит, по данному адресу находится подключенный к Internet узел сети. Недостатками этого метода являются большие временные затраты и некоторая неопределенность результата (если по какому-то адресу не удалось обнаружить ни одного порта, то это еще не означает, что соответствующий узел не подключен к Internet). Одной из утилит, которые можно использовать для сканирования портов, является nmap. Как уже упоминалось, с помощью этой утилиты можно проводить ICMP-прослушивание, однако этим перечень ее возможностей далеко не исчерпывается. В частности, эта утилита позволяет выполнять так называемое TCP-прослушивание сканированием (TCP ping scan). Данный режим включается с помощью параметра -рт и указания номера порта, например 80. Выбор порта с номером 80 обусловлен тем, что в подавляющем большинстве случаев именно он используется узлами сети для обмена данными через пограничные маршрутизаторы или брандмауэры с компьютерами, расположенными в так называемой демилитаризованной зоне (DMZ — demilitarized zone). При использовании указанного параметра утилита рассылает узлам исследуемой сети пакеты АСК, а затем ожидает поступления пакетов RST, что свидетельствует о том, что узел подключен к Internet.

[tsunami] nmap -sP -PT80 192.168.1.0/24
TCP probe port is 80
Starting nmap V. 2.53
Host (192.168.1.0) appears to be up.
Host (192.168.1.1) appears to be up.
Host shadow (192.168.1.10) appears to be up.
Host (192.168.1.11) appears to be up.
Host (192.168.1.15) appears to be up.
Host (192.168.1.20) appears to be up.
Host (192.168.1.50) appears to be up.
Host (192.168.1.101) appears to be up.
Host (192.168.1.102) appears to be up.
Host (192.168.1.255) appears to be up.
Nmap run completed (10 hosts up) scanned in 5 seconds

Как видно из приведенного выше листинга, этот метод определения подключенных к Internet узлов очень эффективен, даже если на них блокируется передача пакетов ICMP. С помощью утилиты nmap имеет смысл провести несколько подобных проверок, тестируя такие стандартные порты как SMTP (25), POP (110), AUTH (110), IMАР (143) или другие порты, которые, по вашим сведениям, могут быть уникальными на каком-либо компьютере исследуемой сети.
Еще одной утилитой, специально предназначенной для TCP-прослушивания, является утилита hping (http://www.kyuzz.org/antirez/). По возможностям она даже превосходит утилиту nmap. Утилита hping позволяет пользователям управлять параметрами протокола TCP, что может обеспечить проникновение отправляемых пакетов даже через некоторые устройства управления доступом. Так, установив порт назначения с помощью параметра -р, можно обойти некоторые устройства управления доступом точно так же, как это было сделано с применением утилиты traceroute в главе 1. Поэтому утилита hping может с успехом служить не только для TCP-прослушивания, но и преодолевать преграды некоторых устройств управления доступом благодаря возможности фрагментации пакетов.

[tsunami] hping 192.168.1.2 -S -p 80 -f
HPING 192.168.1.2 (ethO 192.168.1.2):
S set, 40 data bytes
60 bytes from 192.168.1.2:
flags=SA seq=0 ttl=124 id=17501 win=0 time=46.5
60 bytes from 192.168.1.2:
flags=SA seq=l ttl=124 id=18013 win=0 time=169.1

В некоторых случаях простые устройства управления доступом не могут корректно обрабатывать фрагментированные пакеты, что позволяет им проходить через такие устройства и достигать интересующего взломщика адреса. Обратите внимание, что в случае, когда порт открыт, возвращаются флаги TCP SYN (s) и дек (А). Утилиту hping очень легко использовать в сценариях оболочки с параметром счетчика пакетов -cN, где N — это количество пакетов, которые нужно отправить в Internet, прежде чем переходить к выполнению следующей команды сценария. Хотя данный метод и не обладает такой скоростью, как описанные выше методы ICMP-прослушивания, в некоторых случаях только он может помочь выяснить конфигурацию сети. Более подробно утилита hping рассматривается в главе 11, "Брандмауэры".
Последним из средств прослушивания рассмотрим утилиту icmpenum хакером Симплом Номадом (Simple Nomad) (http://www.nmrc.org/files/sunix/icmpenum-1.1.tgz). Эту утилиту удобно использовать для определения архитектуры сети. Утилита icmpenum позволяет быстро выявить подключенные к сети компьютеры, передавая стандартные ICMP-пакеты ECHO, а также ICMP-запросы TIME STAMP REQUEST и INFO. Если входные пакеты ECHO не пропускаются пограничным маршрутизатором или брандмауэром, то подключенные узлы можно по-прежнему идентифицировать с помощью альтернативных пакетов ICMP.

[shadow] icmpenum -i2 -с 192.168.1.0
192.168.1.1 is up
192.168.1.10 is up
192.168.1.11 is up
192.168.1.15 is up
192,168.1.20 is up
192.168.1.103 is up

В приведенном примере сеть класса С (192.168.1.0) была протестирована с использованием ICMP-запроса TIME STAMP REQUEST. Однако реальная мощь утилиты icmpenum заключается в возможности идентификации узлов с помощью ложных пакетов, что позволяет избежать обнаружения злоумышленника. Это возможно благодаря тому, что утилита icmpenum позволяет генерировать ложные пакеты с использованием параметра -s и пассивно ожидать отклика при указании параметра -р.
Подводя итог, можно отметить, что IСМР- или TCP-прослушивание позволяет точно установить, какие компьютеры сети подключены к Internet. Так, в рассматриваемом примере мы установили, что из 255 потенциальных адресов сети класса С к Internet подключены лишь несколько компьютеров. Выявленные узлы становятся предметом первоочередного внимания в дальнейших исследованиях. Таким образом, мы значительно сузили область поиска, что позволяет сэкономить время и силы для более эффективных действий.