Брандмауэры и специальное программное обеспечение 8 Часть 4

Вид материалаРеферат

Содержание


Программа nmap
Параметры сканирования nmap
Общие параметры nmap
Вывод программы nmap
Подобный материал:
1   ...   93   94   95   96   97   98   99   100   101

Программа nmap


Первое публично доступное средство сканирования сетей — программа с названием SATAN — было очень популярно и чрезвычайно эффективно при идентификации открытых портов на подключенных к сети системах. Сегодня программа SATAN утратила былую популярность по ряду причин, среди которых сложности при компиляции в среде Linux, а также проблемы получения работающих исполняемых файлов. На смену SATAN пришли многочисленные аналогичные программные средства, так же как и SATAN, осуществляющие сканирование сетевых систем. Одной из наиболее популярных программ этой категории является программа с именем nmap, написанная человеком по прозвищу Fyodor (fyodor@dhp.com). Эта программа позволяет осуществлять сканирование несколькими разными способами, кроме того, пользователи, у которых возникли вопросы, для решения проблем могут воспользоваться списком рассылки. Web-узел, посвященный программе nmap, располагается по адресу ure.org/nmap/.

В данной книге я не собираюсь обсуждать преимущества nmap и сравнивать эту программу с другими популярными в настоящее время средствами сканирования, такими как SAINT (дальнейшее развитие SATAN), NESSUS, GtkPortScanner и проч. Большинство подобных программ обладают сходными возможностями и выполняют одну и ту же базовую функцию: сканирование сетевых узлов в поисках открытых портов. Чтобы сформировать свое собственное мнение об этих программах, вы можете попробовать каждую из них самостоятельно. Программа nmap является рядовым представителем этой категории программных средств, я выбрал ее из-за того, что эта программа является достаточно простой в использовании.


ВНИМАНИЕ

Программа nmap в состоянии выполнять действия, которые могут привести к деградации производительности сети (Denial of Service) и нарушению работы жизненно важных серверов вашей сети. По этой причине программу nmap следует использовать с осторожностью.

Программу nmap можно запускать от лица любого пользователя системы. Если вы установили nmap, но не хотите, чтобы ею мог воспользоваться любой желающий, вы должны настроить разрешения на доступ таким образом, чтобы ограничить доступ к этой программе. Следует учитывать, что некоторые из возможностей программы доступны только в случае, если она запущена от лица пользователя root. Это связано с тем, что программа выполняет запись в «чистый» сокет (raw socket) или формирует свой собственный сетевой пакет. В общем случае в среде Linux подобные действия разрешается выполнять только привилегированным пользователям.

В комплекте nmap присутствует графическая оболочка этой программы с названием xnmap (разработанная также человеком по прозвищу Foydor), которую могут использовать те, кто не любит работать с командной строкой. Приятной особенностью этой графической оболочки является отображение командной строки nmap, которая будет использована в процессе работы. Автор программы эффективно использует цветовое оформление для того, чтобы отобразить статус пользователя: фоновый цвет диалогового окна становится розовым в случае, если программа запускается на уровне привилегий root, при этом в текстовом окне отображается сообщение о том, что доступны все возможности программы (all options granted); если же программа запускается от лица непривилегированного пользователя, фоновый цвет диалогового окна становится зеленым, а в текстовом окошке выводится сообщение о том, что некоторые из возможностей программы недоступны. Графический интерфейс программы nmap показан на рис. 25.1.

Диалоговое окно xnmap разделено на четыре части: раздел идентификации сетевого узла (Hosts), раздел параметров сканирования (Scan Options), раздел общих параметров (General Options) и раздел текстового вывода (Output). В строке адреса сканируемого узла Host(s) по умолчанию указывается адрес локального сетевого узла 127.0.0.1. В этой строке можно указать список сетевых узлов, идентифицировать которые можно при помощи имени, IP-адреса или диапазона IP-адресов. Диапазон IP-адресов указывается в виде номера сети и сетевой маски, например 123.34.67.00/24. Любое число можно заменить специальным символом звездочки (*), например 123.*.67.00/24. При этом будет выполнено сканирование всех сетей в IP-домене 123, однако в каждой из этих сетей будет сканироваться только подсеть 67. Диапазон адресов можно указывать также в виде начального и конечного значения, например 1-33. Такую форму можно указывать вместо любого из октетов IP-адреса, например 123.1-33.67.00/24. Наконец, интересующие вас численные значения можно указать через запятую, например 123.1,3,7,10.76.00/24. Имейте в виду, что в зависимости от используемой вами командной оболочки вы должны будете для указания символа звездочки использовать esc-последовательность. Вы также можете указать имя сетевого узла и маску.



Указав в графе Host(s) интересующие вас сетевые узлы, вы можете щелкнуть на кнопке Scan для того, чтобы инициировать сканирование. Помните, что в некоторых случаях сканирование может потребовать достаточно много времени. Если вы хотите остановить процесс сканирования, достаточно будет еще раз щелкнуть на кнопке Scan.

Параметры сканирования nmap

Программа nmap позволяет осуществлять сканирование девятью разными способами. Шесть из них перечислены в разделе Scan Options диалогового окна xnmap. Вариант connect() обеспечивает сканирование самым обычным способом. В этом случае программа nmap подключается к целевому узлу так, как будто для этого используется клиент telnet. При этом формируется соединение TCP, поэтому такое сканирование является сканированием TCP. Попытку сканирования, осуществляемую подобным образом, можно обнаружить даже самыми примитивными средствами обнаружения сканирования.

Способ сканирования SYN stealth работает несколько иначе. Вспомним последовательность создания соединения TCP: клиент посылает пакет по адресу узел: порт. В этом пакете установлен бит SYN. Целевой узел в ответ посылает клиенту пакет, в котором установлены биты SYN и АСК. Клиент отвечает на этот пакет, и процедура создания соединения успешно завершается. Однако в нашем случае вместо того, чтобы ответить на пакет SYN-ACK, программа nmap отправляет целевому узлу пакет с установленным битом RST, при этом соединение немедленно разрывается. Если соединение не было создано, значит, попытку сканирования нельзя обнаружить. Почти. На самом деле подобные попытки сканирования могут быть обнаружены с использованием утилит courtney и Synlogger.

При сканировании способом Ping Sweep программа nmap отправляет целевому узлу запрос ping и ожидает поступления ответа. Если целевая система блокирует запросы ping при помощи IPChains или NetFilter, программа nmap думает, что целевой узел не работает или отсутствует в сети. Следует учесть, что некоторые из методов сканирования, поддерживаемые программой nmap, предусматривают предварительную отправку целевому узлу запроса ping для того, чтобы убедиться, что целевой узел находится в рабочем состоянии. То есть в начале сканирования при помощи запросов ping программа nmap проверяет работоспособность узла и только после этого отправляет ему сканирующие запросы TCP. Как несложно догадаться, если запросы ping блокируются целевой системой, целевой узел не будет отвечать на запросы ping и программа nmap не будет выполнять его сканирование. Позже я расскажу о том, как можно сканировать узлы, блокирующие ping-запросы.

Способ сканирования UDP Port Scan работает несколько иначе. Вместо того чтобы пытаться установить соединение TCP, программа nmap пытается проверить наличие открытого порта UDP, для этого в этот порт посылается пакет UDP нулевой длины. Если сервер ожидает поступления пакетов через этот порт, он примет пакет, и ничего больше не произойдет. Если же сервер не ожидает поступления каких-либо данных через этот порт, целевой узел отправляет клиенту пакет RST (reset). Этот пакет сообщает клиенту, что необходимо разорвать соединение, так как данный порт не является открытым.

При использовании метода FIN Stealth программа nmap формирует специальный пакет, который в нормальных условиях используется клиентом для того, чтобы сигнализировать о разрыве соединения TCP. Помните состояния TCP-соединения, отображаемые утилитой netstat? Передача или получение пакета FIN переключает соединение из состояния FIN_WAIT в состояние FIN_WAIT1 или FIN_WAIT2. Пакет FIN обычно посылается при завершении TCP-соединения для того, чтобы сигнализировать о его разрыве. Но если на момент приема этого пакета никакого соединения не существует? Если сервер ожидает поступления пакетов через данный порт, тогда он просто отбрасывает данный пакет, предполагая, что пакет был неправильно передан или произошла какая-либо другая ошибка. Однако если данный порт закрыт (в системе отсутствует серверная программа, ожидающая поступления данных через этот порт), целевая система отправит клиенту пакет RST.

Последний вариант сканирования, предлагаемый диалоговым окном xnmap, называется Bounce Scan (сканирование с отражением). Этот способ позволяет использовать дыру (и очень большую дыру) в системе безопасности FTP-серверов, используя их в качестве proxy. Таким образом, данный вариант было бы точнее назвать FTP Proxy Scan. К счастью, FTP-сервер, входящий в комплект поставки Caldera OpenLinux, блокирует захват привилегированных портов. Однако если вас мучает любопытство, вы можете попробовать сканировать адрес 127.0.0.1/24 и указать в графе адреса Bounce Scan адрес наподобие 127.1.1.1.

Из шести вариантов сканирования, предлагаемых в диалоговом окне xnmap, только два — connect() и Ping Sweep — могут быть выполнены обычными, непривилегированными пользователями.

Помимо шести способов сканирования, предлагаемых xnmap, существуют еще три, которые можно инициировать из командной строки nmap. Два из них являются разновидностями сканирования FIN stealth. Первый из этих двух способов называется Christmas Tree Scan (сканирование рождественской елки). Он подразумевает, что помимо бита FIN в сканирующем пакете устанавливаются еще два бита: URG и PUSH. Второй способ называется Null Scan — в сканирующем пакете сбрасываются все биты.

Последним методом сканирования, поддерживаемым программой nmap, является RPC Scan — специализированный способ сканирования, позволяющий искать открытые порты RPC. Этот метод можно использовать совместно с другими способами сканирования.

Общие параметры nmap

При помощи раздела General Options диалогового окна xnmap вы можете влиять на поведение программы nmap. Если не учитывать пару исключений, программу nmap можно запустить, не выбирая ни одного из параметров группы General Options. Параметры этой группы позволяют вам модифицировать порядок работы nmap, используемый этой программой по умолчанию. Параметр Don't Resolve (не осуществлять разрешение) предотвращает разрешение имен DNS для сканируемых узлов — это несколько ускоряет процесс сканирования, однако совсем незначительно.

При использовании параметра Fast Scan (быстрое сканирование) для сканирования используется файл служб с именем ../lib/nmap/nmap-services. В этом файле перечисляются 1975 портов TCP и UDP (1022 портов TCP и 953 порта UDP). Благодаря этому сканирование выполняется значительно быстрее, чем при проверке всех портов из диапазона 64 Кбайт. Параметр Range of Ports (диапазон портов) аналогичен параметру Fast Scan, однако при его использовании вы можете самостоятельно определить, какие именно диапазоны портов вас интересуют.

Параметр Use Decoy(s) позволяет выполнять перезапись адреса-источника. Если вы используете этот параметр, у сканируемого вами узла возникает ощущение, что он подвергается атаке одновременно с нескольких узлов. В графе Use Decoy(s) указывается перечень разделенных запятыми сетевых узлов. Сетевые узлы можно идентифицировать как при помощи IP-адреса, так и при помощи имени. В качестве одной из позиций в списке можно указать английское местоимение ME — вместо него программа nmap подставит ваш собственный узел. Если местоимение ME в списке отсутствует, программа nmap располагает ваш узел в случайной позиции списка.


ВНИМАНИЕ

Все сетевые узлы, указываемые вами в списке Use Decoy(s), должны реально существовать и функционировать в сети, в противном случае в результате сканирования в подобном режиме вы станете причиной атаки SYN DoS в отношении сканируемого вами узла. Иными словами, сканируемый вами узел окажется «затопленным» многочисленными SYN-пакетами. Кроме того, использование несуществующих IP-адресов будет способствовать обнаружению реального IP-адреса вашего узла.


К счастью, ядро OpenLinux можно скомпоновать так, чтобы пакеты с подделанным обратным адресом отбрасывались.

Параметры, перечисленные в следующей колонке, взаимосвязаны между собой, (за исключением последнего). Каждый из этих параметров указывает на тип ping-пакета, который используется программой nmap. Пакеты ICMP являются стандартными «реальными» пакетами ping. При использовании ICMP через сеть отправляется эхо-запрос ICMP и программа ожидает, что в ответ на этот запрос целевой узел вернет эхо-ответ ICMP. Вы можете отключить использование ping-пакетов ICMP или использовать их совместно с ping-пакетами TCP. На самом деле протокол TCP официально не поддерживает стандартного механизма проверки связи, аналогичного механизму ICMP ping. Однако в качестве замены ICMP ping можно использовать одну из особенностей протокола TCP. Дело в том, что при получении TCP-запроса, адресованного закрытому порту, система отправляет обратно клиенту пакет RST в знак того, что интересующий этого клиента порт на самом деле закрыт. Таким образом, если программа nmap отправляет целевому узлу TCP-запрос на подключение и если на этот запрос не получено ответа, это может означать одно из двух: либо порт открыт, либо целевой узел не существует. Однако получение в ответ на запрос пакета RST — это то же самое, что получение от целевого узла эхо-ответа ICMP.

Последним параметром в этой колонке является графа Input File, в которой можно указать имя файла, в котором содержится список сканируемых узлов. Таким образом, вместо того чтобы перечислять узлы в графе Host(s) диалогового окна xnmap или в командной строке утилиты nmap, вы можете внести их в файл. Эта возможность может оказаться полезной в случае, если вы регулярно выполняете сканирование вашей внутренней сети, однако при этом вас интересуют только несколько избранных систем.

В последней колонке раздела General Options диалогового окна xnmap содержатся другие параметры командной строки. Первым параметром является параметр Fragmentation (фрагментация). Этот параметр предписывает программе nmap намеренно выполнять фрагментацию заголовков пакетов в надежде, что в этом случае они смогут быть переданы целевому узлу. Большинство брандмауэров по умолчанию пропускают фрагменты, если только им не предписано обратное. Ядро Linux можно откомпилировать таким образом, чтобы не пропускать фрагменты (параметр CONFIG_IP_ALWAYS_DEFRAG), и этот параметр должен всегда использоваться в системе, которая выполняет функции брандмауэра. Имейте в виду, что данный параметр в ядрах серии 2.4.x больше не используется, так как дефрагментация является встроенным в ядро режимом работы по умолчанию.

Параметр Get Identd Info используется для получения дополнительной информации о системах, на которых запущен демон identd. Если на целевом узле работает этот демон, при помощи данного параметра вы можете получить имя пользователя, от лица которого работает некоторая сканируемая служба. Пользователь может быть как любым непривилегированным пользователем, так и пользователем root. Ранее я уже неоднократно указывал вам на необходимость отключения демона inetd в файле /etc/inetconf, сейчас вы получили еще один аргумент в пользу отключения этого демона.

Параметр Resolve All является параметром, обратным параметру Don't Resolve, однако программа nmap его больше не поддерживает, так как она работает в этом режиме по умолчанию.

Параметр OS Detection (определение операционной системы) предписывает программе nmap попытаться идентифицировать операционную систему, работающую на целевом узле. Для этой цели используется отпечаток стека TCP/IP (TCP/IP fingerprinting). Отпечаток стека — это набор тестовых запросов к целевому узлу и ответов на эти запросы. На основании этой информации программа nmap пытается идентифицировать ОС, работающую на целевом узле. Такой метод нельзя считать на 100 % надежным. Если вы попробуете использовать его для идентификации ОС локального узла и при этом воспользуетесь адресом 127.0.0.1/24, вы получите несколько ответов, на основании которых nmap не сможет идентифицировать ОС вашего узла. Возможно, для корректного определения ОС вам потребуется повторить эту процедуру два или три раза.

Параметр Send on Device (отослать через устройство) позволяет указать сетевую карту, через которую будут отсылаться в сеть сканирующие пакеты. Этот параметр предназначен для компьютеров, оснащенных несколькими NIC.

Некоторые любопытные параметры доступны также из командной строки nmap. Здесь я не буду рассматривать все поддерживаемые параметры, а остановлюсь лишь на самых интересных. Первым таким параметром является параметр -S . Этот параметр позволяет вам использовать в качестве адреса-источника вместо адреса вашего узла указанный в параметре IP-адрес. Параметр можно использовать как для обмана целевого узла, так и в случае, если nmap не может самостоятельно определить ваш собственный IP-адрес и вы намерены указать его вручную. В отличие от рассмотренной ранее возможности Use Decoy(s) параметр -S создает у целевого узла ощущение, что сканирование осуществляется только с одного узла, однако адрес этого узла вы задаете самостоятельно, и он может быть ложным.

Еще одним весьма интересным параметром является параметр -g <номер_порта>. Этот параметр позволяет подделать номер порта, из которого исходят сканирующие пакеты, подобно тому как параметр -S подделывает IP-адрес сканирующего узла. Подделав номер порта-источника, вы можете преодолеть защиту некоторых из брандмауэров.

Последним из рассматриваемых здесь параметров является параметр -Т, который позволяет настроить временной режим сканирования. При помощи этого параметра вы можете установить уровень сканирования от 0 до 5. Уровни сканирования обозначаются следующими именами: Paranoid (параноидальный), Sneaky (трусливый), Polite (обходительный), Normal (нормальный), Aggressive (аргессивный) и Insane (бешеный). Сканирование в параноидальном режиме выполняется чрезвычайно медленно и позволяет избежать обнаружения такими программами, как Courtney. В режиме Insane сканирование выполняется параллельно и настолько быстро, насколько это возможно. При этом пропускная способность самого медленного канала связи между источником и целью полностью исчерпывается. Очевидно, что сканирование в таком режиме привлечет к себе внимание администраторов сканируемой системы.

Вывод программы nmap

Непосредственно над окном вывода располагается командная строка, которая будет выполнена в момент щелчка на кнопке Scan в диалоговом окне xnmap. Благодаря этому пользователь графической оболочки xnmap получает возможность освоить работу с nmap из командной строки. Однако полную информацию обо всех параметрах командной строки, последних изменениях и способах сканирования можно получить только из электронной документации man pages. Благодаря использованию nmap вы получаете представление о том, как осуществляется сканирование ваших узлов, и можете проверить, позволяет ли courtney или другая программа обнаружения попыток сканирования зафиксировать сканирование или ее можно обмануть.

В листинге 25.4 показан вывод программы nmap при выполнении сканирования всех портов локального узла с использованием метода SYN Stealth. Такое сканирование в отношении локального узла выполняется существенно быстрее, чем сканирование локальной сети Ethernet.


Листинг 25.4. Программа nmap сканирует узел localhost

Starting nmap V. 2.3ВЕТА6 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)

Interesting ports on localhost (127.0.0.1):

Port State Protocol Service

21 open tcp ftp

22 open tcp ssh
25 open tcp smtp
80 open tcp http

110 open tcp pop-3

111 open tcp sunrpc
901 open tcp unknown
3306 open tcp mysql
6000 open tcp Xll

TCP Sequence Prediction: Class=random positive increments

Difficulty=599840 (Good luck!)

Remote operating system guess: Linux 2.1.122 - 2.2.12

Nmap run completed -- 1 IP address (1 host up) scanned in 1 second

Время, которое требуется программе nmap для того, чтобы отобразить результаты сканирования на экране, определяется пропускной способностью каналов, количеством сканируемых узлов и тем, используете ли вы режим Fast Scan или нет. Во многих случаях крупные сети эффективнее сканировать из командной строки и запускать процесс сканирования в фоновом режиме.

Вывод программы nmap, показанный в листинге 25.4, вполне соответствует набору служб, предлагаемых целевой системой. Обратите внимание на графу TCP Sequence Prediction (предсказание последовательности TCP). В этой графе указывается, насколько сложно будет имитировать подключение TCP. Для Linux значение этого параметра, как правило, лежит в диапазоне от 500 000 до 2 500 000. Чем больше значение этого параметра, тем выше расхождение. У операционной системы Sun Solaris значение этого параметра обычно еще выше, чем у Linux. Меньшие значения соответствуют меньшему расхождению. В листинге 25.5 показаны примеры значений этого параметра для одного и того же сетевого узла Linux.


Листинг 25.5. Значение параметра TCP Prediction Sequence для узла localhost с 30-секундным интервалом

TCP Sequence Prediction: Class=random positive increments

Difficulty=2177514 (Good luck!)

Remote operating system guess: Linux 2.1.122 - 2.2.12

TCP Sequence Prediction: Class=random positive increments

Difficulty=4453284 (Good luck!)

Remote operating system guess: Linux 2.1.122 - 2.2.12

TCP Sequence Prediction: Class=random positive increments

Difficulty=871237 (Good luck!)

Remote operating system guess: Linux 2.1,122 - 2.2.12

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


Листинг 25.6. Программа nmap запускается из командной строки с использованием комбинации параметров, недоступной из графической оболочки xnmap

[root@chiriqui /root]# nmap -sFUR local host

Starting nmap V. 2.3BETA6 by Fyodor (fyodorPdhp.com, www.insecure.org/nmap/)

Interesting ports on localhost (127.0.0.1):

Port State Protocol Service (RPC)

21 open tcp ftp

22 open tcp ssh

25 open tcp smtp

67 open udp bootps

80 open tcp http

110 open tcp pop-3

111 open udp sunrpc
111 open tcp sunrpc
177 open udp xdmcp
514 open udp syslog
901 open tcp unknown
3306 open tcp mysql
6000 open tcp X11

Nmap run completed -- 1 IP address (1 host up) scanned in 3 seconds

В листинге 25.6 присутствует информация о нескольких портах, о которых не сообщалось ранее, при использовании xnmap. Речь идет о портах UDP — при использовании xnmap вы должны сканировать UDP-порты отдельно. В листинге показан перечень всех портов, как TCP, так и UDP. Обратите внимание, что порт с номером 901 является портом swat (Samba Web Administration Tool). Точно такое же сканирование (все 64 Кбайт портов в режиме TCP/UDP/RCP) в отношении другого узла, подключенного к тому же сегменту Ethernet, потребовало бы

1586 секунд, или более 26 минут.

-