Опубликован: 20.02.2007 | Уровень: специалист | Доступ: платный
Лекция 1:

NETCAT и CRYPTCAT

Незаметное сканирование портов

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

[root@originix nc]#./nc target 20-80

Но это не сработает. Запомните, что Netcat не предназначен специально для сканирования портов. В указанной ситуации Netcat соединится с 80-м портом, и будет пытаться установить TCP-соединение до тех пор, пока не дождется ответа. Как только по этому порту придет ответ, Netcat будет ожидать получения информации по стандартному входу, установленному перед соединением. Это не совсем то, чего вы добивались.

Решением будет опция -z. Эта опция указывает программе на необходимость передать минимальное количество данных для получения ответа от открытого порта. Используя эту опцию, не следует ожидать от Netcat получения каких-либо данных на вход или ждать вывода какой либо информации (таким образом вы заставите перейти программу в режим "нулевого ввода/вывода"). Поскольку опция -v дает возможность получать более подробную информацию о работе программы, вы можете использовать ее для просмотра результатов сканирования портов. Иначе вы ничего не увидите.

[root@originix nc]#./nc -z 192.168.1.100 20-80
[root@originix nc]#./nc -v -z 192.168.1.100 20-80
originix [192.168.1.100] 80 (www) open
originix [192.168.1.100] 23 (telnet) open
originix [192.168.1.100] 22 (ssh) open
originix [192.168.1.100] 21 (ftp) open
[root@originix nc]#

Использовав опцию -v, вы увидите, что несколько наиболее очевидных сервисов работают в заданном промежутке номеров TCP-портов. Как это будет выглядеть в системном журнале?

Feb 12 03:50:23 originix sshd[21690]: Did not receive 
   ident string from 192.168.0.105
Feb 12 03:50:23 originix telnetd[21689]: ttloop: read: Broken pipe
Feb 12 03:50:23 originix ftpd[21691]: FTP session closed

Обратите внимание, что все эти события произошли в одно время и с увеличивающимися идентификаторами процессов (от 21689 до 21691). Представьте, если бы вы сканировали больший интервал портов. Вы получили бы существенно больший объем вывода. К тому же некоторые службы, такие, как sshd, ведут себя весьма молчаливо по отношению к сканерам IP-адресов.

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

Netcat позволяет производить сканирование достаточно незаметно. Вы можете использовать опцию -i и задать интервал для попыток соединения. Использование опции -r для задания случайной последовательности сканирования портов из выбранного интервала также поможет замаскировать вашу деятельность по сканированию портов.

./nc -v -z -r -i 42 192.168.1.100 20-80

Эта командная строка определяет случайную последовательность выбора портов и задает интервал в 42 секунды между попытками соединения. Это введет в заблуждение любые автоматические средства защиты, но свидетельства попыток сканирования все равно останутся в системном журнале исследуемого хоста; правда в более разбросанном виде.

Совет. Сканирование UDP-портов проблематично. Netcat опирается на получение сообщений об ошибках от ICMP (Internet Control Message Protocol) для того чтобы определить - открыт или закрыт UDP-порт. Если ICMP блокирован брандмауэром или фильтром, то Netcat может выдать ложное сообщение о том, что закрытый UDP-порт якобы открыт.

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

Совет. Если вы, при попытке сканирования с помощью Netcat, получили сообщение об ошибке в отношении адреса, который уже используется, возможно, вам необходимо зафиксировать Netcat для использования с конкретным IP-адресом и конкретным портом (используя опции -p -s ). Выберите порт, о котором известно, что его можно использовать (только пользователь root может использовать порты с номерами меньше чем 1024) и это ничем не ограничено.
Идентифицируйте себя, и службы расскажут о себе все

Использовав Netcat или специально предназначенную для сканирования портов программу (вроде nmap, см. лекцию ""Сканеры портов"" ) для определения, какие порты в системе открыты, вы можете получить более подробную информацию об этих портах. Обычно это можно сделать, подключившись к порту; служба немедленно сообщит вам номер версии, экземпляр и, возможно, сведения об управляющей операционной системе. В результате вы получите возможность использовать Netcat для сканирования определенного интервала портов и получения сведений о работающих службах.

Имейте в виду, что, используя Netcat в автоматическом режиме, вы не сможете вводить команды в командной строке, поскольку программа не ожидает ввода информации от пользователя на стандартный ввод. Если вы просто запустите на выполнение команду nc 192.168.1.100 20-80, вы не сможете ничего узнать, поскольку программа остановится на первом же установленном соединении (возможно, это будет web-сервер, прослушивающий 80 порт) и затем будет ожидать, когда вы что-либо сделаете. Так что вам понадобится вычислить, что подавать на вход всем этим службам, чтобы вынудить их сообщить нам о себе нечто большее. Как только вы это сделаете, передав службе команду QUIT и внеся путаницу, информация посыплется на вас, как бобы из корзинки.

[root@originix nc]#echo QUIT | ./nc -v 192.168.1.100 21 22 80 
originix [192.168.1.100] 21 (ftp) open
220 originix FTP server (Version wu-2.5.0(1) 
  Tue Sep 21 16:48:12 EDT 1999) ready.
221 Goodbye
originix [192.168.1.100] 22 (ssh) open
SSH-2.0-OpenSSH_2.3.0p1
Protocol mismatch.
originix [192.168.1.100] 80 (www) open
<!Doctype HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>501 Method Not Implemented</TITLE>
</HEAD><BODY>
<H1>Method Not Implemented</H1>
QUIT to /index.html not supported.<P>
Invalid method in request QUIT<P>
<HR>
<ADDRESS>Apache/1.3.14 Server at 127.0.01 Port 80</ADDRESS>
</BODY></HTML>
[root@originix nc]#
Совет. Помните, что когда вы автоматически подключаетесь к нескольким портам, используйте опцию -v, чтобы можно было отделить вывод сообщений одной службы от другой. Также, если вы используете автоматическое соединение с несколькими портами, один из которых telnet-сервер, вам следует использовать опцию -t, чтобы пропустить передаваемую двоичную информацию (следствие взаимодействия telnet-сервера с клиентом). Обычно хорошим выходом является пропустить 23 порт и работать с ним отдельно.

Полученный результат не слишком красив, но мы узнали о версиях трех работающих служб. Взломщик может использовать информацию для поиска версий, имеющих слабые места (http://www.securityfocus.com/ - прекрасное место для поиска информации о слабых местах разных версий программ). Взломщик, который нашел привлекательный с его точки зрения порт, может попытаться получить больше информации о нем, сосредоточившись на исследовании этой службы и попытавшись говорить на ее языке.

Сосредоточимся на web-сервере Apache. QUIT - команда, которую протокол HTTP не понимает. Попытаемся сказать что-нибудь более подходящее.

[root@originix nc]#./nc -v 192.168.1.100 80 
originix [192.168.1.100] 80 (www) open
GET / HTTP
HTTP/1.1 200 OK
Date% Tue, 12 Feb 2002, 09:43:07 GMT
Server: Apache/1.3.14 (Unix) (Red-Hat/Linux)
Last Modified: Sat, 05 Aug 2000 04:39:51 GMT
Etag: "3a107-24-398b9a97"
Accept-Ranges: bytes
Content-Length: 36
Connection: Close
Contebt-Type: text/html
I don't think you mean to go here.
[root@originix nc]#

Какая прелесть! Мы сказали коротенькую HTTP-фразу (набрав команду GET/HTTP и затем дважды нажав клавишу Enter) и Apache ответил. Он показал нам корневой файл index.html и все HTTP заголовки в нетронутом виде без преобразований, которые обычно выполняют браузеры на прикладном уровне. Заголовки сервера сообщили нам не только то, что мы имеем дело с сервером Apache на Unix-машине, но и то, что это машина находится под управлением Red-Hat.

Совет. Чтобы ввести в заблуждение взломщика, системный администратор может изменить эту информацию. Это не так просто, но неизменно приводит взломщиков в изумление, если, конечно, они доверяют получаемой информации.
Сергей Хлюкин
Сергей Хлюкин
Россия, Москва, Московский Государственный Открытый Университет, 2007
Игорь Касаткин
Игорь Касаткин
Россия, Москва