Rambler's Top100

Эффективная работа с RuNmap

Сетевой сканер RuNmap описан достаточно подробно в прилагаемой технической документации. Мы не ставили перед собой цель описать все функции RuNmap - для этого существует руководство пользователя. Также не стали подробно останавливаться на алгоритмах работы - об этом вы можете подробно прочитать в статьях "Определение операционной системы" и "Сканирование портов". В этой статье рассмотрены возможности программы RuNmap с точки зрения их практического использования.

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

Способы задания адресов для сканирования

Имеется возможность указать адрес или диапазон адресов непосредственно при запуске программы либо предварительно записав их в текстовый файл (в последнем случае необходимо указать имя файла после ключа -i). Для указания диапазона адресов дополнительно предусмотрен метод "имя/маска", т.е. диапазон 192.168.152.0-255 можно задать как host.ru/24 (если имени host.ru соответствует адрес 192.168.152.xx). Число 24 означает количество бит маски. Так, /32 означает "только указанный хост", /24 означает 256 адресов подсети класса С, /16 означает 65536 адресов подсети класса B, а /8 - 2^24 адресов подсети класса А. Если в качестве маски указать /0, то будут просканированы все 2^32 адреса IPv4.

Ping-опрос

Режим ping-опроса включается опцией -sP. По умолчанию RuNmap выполняет одновременно два типа ping-опроса: ICMP Ping (стандартный тип, используется в команде ping) и ACK TCP Ping (посылает ACK-пакет на 80 порт сканируемого объекта). Если последний метод будет обнаружен администратором сканируемой сети, это явно укажет на использование RuNmap в качестве инструмента сканирования.

Изменить настройки ping-опроса можно несколькими способами. Прежде всего, его можно совсем отключить, используя опцию -P0. Кроме этого, при опросе можно использовать только один метод по выбору. Стандартный режим опроса (ICMP Ping) включается опцией -PI. Однако если сканируемый объект защищен файрволлом, вероятнее всего, что ICMP Ping блокируется им, и пакетный фильтр подавляет такие запросы. Поэтому рекомендуется использовать режим TCP ACK Ping, который можно включить при помощи опции -PT. При этом RuNmap посылает ACK-пакет (подтверждение) на 80 порт сканируемого объекта и ожидает RST-пакет (сброс, поскольку соединение не создавалось).

Для режима TCP ACK Ping можно изменить номера порта по умолчанию, указав другой номер после опции, например -PT32523. Случайный выбор порта с большим номером обеспечивает гораздо более высокую эффективность опроса, чем выбранный по умолчанию 80-й порт. Это обусловливается правилами фильтрации большинства файрволлов: пакеты с установленным флагом ACK, предназначенные для порта с высоким номером, как правило, пропускаются файрволлом, тогда как порты с небольшими номерами (в том числе 80-й) могут фильтроваться на всех машинах, кроме, например, публичного веб-сервера. Помимо этого, можно изменить номер порта для TCP ACK Ping при опросе двумя методами. Для этого необходимо указать номер порта после опции, включающей оба режима ping-опроса, например -PB32773.

Если сканируемый объект защищен очень мощным файрволлом (такие, как правило, встречаются редко, поскольку существенно снижают производительность сети), который определил, что входящие ACK-пакеты не относятся ни к одному из созданных или создаваемых соединений, он блокирует эти пакеты. В этом случае используется третий метод - TCP SYN Ping, включаемый опцией -PS. В этом случае наоборот - выбор порта с большим номером скорей всего не принесет результатов, поскольку большинство из них могут быть защищены файрволлом и не пропускать SYN-пакеты (запрос на инициализацию соединения). Оптимальным вариантом будет выбор порта, закрепленного за доступной службой (как правило порт с маленьким номером), например ssh (порт 22).

Если есть необходимость использовать ping-опрос, с точки зрения незаметности на уровне человеческого фактора наиболее подходящим является ICMP Ping, поскольку системный администратор, как правило, очень редко (практически никогда) не обращает на это внимание. Если сканируемый объект предположительно защищен файрволлом, то необходимо поэкспериментировать с другими методами ping-опроса. Работает ли ICMP Ping со всеми адресами сканируемой сети? Можно ли осуществить ICMP Ping-опрос www-сервера этой сети? Если нет - можно попытаться опросить www-сервер с помощью TCP ACK Ping. Если и это не дало результата - поможет SYN Ping. Все стадии тестирования необходимо пройти в любом случае, поскольку это позволит иметь представление об уровне системы защиты сканируемого объекта.

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

Номера сканируемых портов можно задать, указав их номера или диапазон номеров после опции -p. Например, -p23,34-187,667. Имеется возможность проведения "быстрого" сканирования (опция -F) портов, перечисленных в файле services ОС.

Самый простой метод сканирования портов - TCP Connect - включается опцией -sT. Этот метод сканирования очень легко обнаружить, поэтому применять его на практике не рекомендуется. Тем не менее, существует метод ReverseIDENT-сканирования, позволяющий определить владельца демона, прослушивающего сканируемый порт. Этот режим работает только совместно с Connect-сканированием и включается опцией -I. Этот метод работает в том случае, если на сканируемом объекте запущен демон identd (порт 113/auth открыт) и не используется чего-нибудь вроде криптографического хэша (например, pidentd -C). Поэтому необходимо решить, что важнее - незаметность или ценная информация.

Метод сканирования SYN-флагом является основой для всех остальных методов и включается опцией -sS. При этом осуществляется передача на сканируемый объект TCP SYN-пакета и ожидается SYN|ACK пакет (подтверждение соединения) если сканируемый порт открыт, либо RST пакет, если порт закрыт. Некоторые порты могут быть защищены пакетным фильтром либо файрволлом и не пропускать SYN-пакеты. В этом случае отправленный пакет возвращается назад, и по этому признаку RuNmap определяет, что сканируемый порт является "фильтруемым". Сам факт SYN-сканирования обнаружить гораздо сложнее. Тем не менее, программа TCP Wrappers, а также некоторые пакетные фильтры (например, ipfwadm) и файрволлы способны отследить этот метод сканирования. В этом случае применяются следующие методы.

Методы FIN (-sF), NULL (-sN) и XMAS (-sX) сканирования схожи между собой. Они основаны на совместимости с рекомендациями RFC и будут работать, если на сканируемом объекте установлена операционная система Windows95/98/NT или IRIX. В качестве запроса отправляется пакет с установленным флагом FIN (завершение), пакет без флагов (NULL) либо пакет со всеми выставленными флагами (XMAS). В качестве ответа ожидается RST-пакет (порт закрыт) либо возвращенный пакет (порт открыт). Аналогичная ситуация, когда отправленный пакет возвращается объектом возникает, если сканируемый порт защищен файрволлом. В этом случае (и это является недостатком данного метода) получается "ложный" открытый порт.

Несколько лет назад данный метод невозможно было обнаружить. В настоящее время существуют защитные системы, способные это сделать. Поэтому имеется возможность использовать SYN, FIN, XMAS и NULL-сканирование совместно с опцией "фрагментированное сканирование" -f. При этом отправляемый пакет разбивается на два маленьких фрагмента, что иногда позволяет обойти системы защиты и предотвратить обнаружение сканирования.

UDP-сканирование (-sU) имеет ту же проблему, что и FIN-сканирование - фильтруемые порты воспринимаются как "ложные" открытые порты. Кроме того, данный метод работает очень медленно с объектами, чьи UDP-порты фильтруются.

Последний метод - "прорыв через FTP" (-b <ftp-хост>) является АБСОЛЮТНО незаметным, если есть ftp-сервер, позволяющий осуществить к нему подключение. Тем не менее, некоторые ftp-серверы не позволят осуществить данный вид сканирования.

Дополнительный метод - ACK-сканирование (-sA) - используется для определения набора правил (ruleset) файрволла. В частности, он помогает определит, защищен ли сканируемый объект файрволлом или просто пакетным фильтром, блокирующим входящие SYN-пакеты. Этот метод никогда не покажет состояние порта "открыт" в результатах сканирования. На сканируемый порт объекта отправляется ACK-пакет. Если в ответ пришел RST-пакет, порт классифицируется как "нефильтруемый". Если ответа не последовало (или пришло ICMP-сообщение о недоступности порта), порт классифицируется как "фильтруемый". RuNmap не выдает "нефильтруемые" порты в результатах, поэтому если не обнаружено ни одного фильтруемого порта, это будет означать, что все порты просканированы и являются нефильтруемыми.

Существует еще один метод определения типа защиты - TCP Window. Этот метод похож на ACK-сканирование, за исключением того, что иногда с его помощью можно определять открытые порты точно так же, как и фильтруемые/нефильтруемые. Это можно сделать, проверив значение поля Initial Window TCP-пакета, возвращаемого объектом в ответ на посланный ему запрос, ввиду наличия определенных особенностей обработки данного поля у некоторых ОС.

Подмена IP-адреса

Дополнительную выгоду с точки зрения маскировки сканирования можно извлечь, изменив реальный IP-адрес источника в отправляемых пакетах на любой другой (т.н. "спуффинг"). Самый простой способ - указать поддельный IP-адрес после опции -S <ip>. Если источник сканирования находится в широковещательном сегменте ethernet, можно указать абсолютно любой несуществующий адрес, перехватывать все входящие пакеты и отбирать из них пакеты, предназначенные этому несуществующему источнику.

Обнаружить реальный адрес сканирующего в этом случае довольно легко: для этого необходимо запустить программу traceroute с указанием адреса источника сканирования (если, конечно, его удалось отследить). Любая из машин любой сети, теряющая пакеты, проходящие через нее, будет являться источником сканирования.

Другой метод подмены IP-адресов - использование "ложных" хостов (-d <хост1>, <хост2> … ME,… <хостN>). При этом создается много ложных источников сканирования с различными IP-адресами, реальный источник сканирования (ME) "теряется" среди этого списка. На стороне сканируемого объекта создается впечатление, что его одновременно сканируют несколько (много) хостов, и определить, какой из них реально сканирует объект, не представляется возможным.

Для достижения более высокой степени маскировки можно подменить и реальный IP-адрес источника. Если реальный адрес источника не изменен, в качестве "ложных" хостов рекомендуется использовать реально существующие имена или адреса машин, подключенных к сети, и не использовать сайты типа www.microsoft.com. Лучше всего в качестве "ложных" хостов указывать адреса машин, на которых установлена ОС Linux. Чем больше ложных адресов указано, тем вероятность обнаружения меньше, однако скорость сканирования при этом существенно падает.

Определение ОС

Этот режим включается опцией -O. Для определения ОС необходимо наличие на сканируемом объекте одного закрытого и одного открытого порта. Закрытый порт выбирается случайным образом из портов с большими номерами. Определить ОС объектов, фильтрующих эти порты, несколько проблематично (некоторые системы защиты фильтруют пакеты, направленные к "высоким" портам, без установленного флага ACK). Потеря пакетов в сети также может вызвать проблемы при определении ОС. Для предотвращения подобных ситуаций при определении ОС рекомендуется выбрать открытый порт, не обслуживаемый identd, например, порт 22 (ssh) или 111 (portmap/rpcbind).

RuNmap также определяет закон изменения Initial Sequence Number операционной системы сканируемого объекта. Если порт 31337 открыт, эту информацию можно использовать для атаки на этот объект с использованием "доверенных" по отношению к нему машин (эта атака описана в Phrack 48-14). Однако осуществить эту атаку на практике нелегко, поскольку ее реализация требует от атакующего знания протокола ARP и умение оперировать им, а также создания соединения с атакуемой машиной путем фальсификации процедуры авторизации.


Алексей Волков <alex@cherepovets-city.ru>
AVS Hackers Technology, Inc.
http://www.cherepovets-city.ru/insecure

Оригинальный текст:
LAMONT NMAP GUIDE
Lamont Granquist <lamontg@genome.washington.edu>
Dept. of Molecular Biotechnology (206)616-5735 fax: (206)685-7344
Box 352145 / University of Washington / Seattle, WA 98195

Rambler's Top100 ???????@Mail.ru