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

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

WUPS

Поскольку FScan и nmap осуществляют TCP- и UDP-сканирование и работают на всех платформах, мы лишь упомянем еще о двух сканерах, которые могут работать с протоколом UDP. В начале мы рассмотрим Windows UDP-сканер WUPS. Этот сканер можно загрузить по адресу http://ntsecurity.nu/toolbox/wups/.

Реализация

Одно из замечательных свойств WUPS - удобный графический интерфейс, показанный на рис. 6.9. Как и с другими UDP-сканерами, фильтры пакетов, перехватывающие сообщения " port unreachable ", могут вернуть ложную положительную информацию для сканирования. Другой недостаток WUPS - возможность одновременно обрабатывать только один IP-адрес. На рис. 6.9 мы представляем процесс сканирования портов от 1 до 1024 по адресу 192.168.1.102 с задержкой по времени 100 миллисекунд. Видно, что по адресу 192.168.1.102 отзывается Windows-машина, поскольку на портах 137 и 138 выполняется NetBIOS, а на порту 445 SMB поверх IP-протокола, также являющийся службой Microsoft.

Примерный интерфейс WUPS

Рис. 6.9. Примерный интерфейс WUPS

UDP_SCAN

Udp_scan - часть старой программы SATAN. Это UDP-сканер для Unix, выполняющийся из командной строки. Он может быть загружен отдельно от SATAN вместе с таким же tcp-сканером tcp_scan по адресу ftp://ftp.porcupine.org/pub/security/port-scan.tar.gz. Udp_scan, как и другие TCP-сканеры для Unix, называемые индикаторами, имеет все требуемые функции, но был отодвинут на задний план более новыми программами.

Установка

Как и большинство Unix-программ, udp_scan поставляется в исходных кодах. После загрузки и распаковки архива port-scan.tar.gz вам потребуется войти в директорию с исходными текстами и выполнить команду make.

Примечание. Пользователям Linux потребуется выполнить команду make CFLAGS=-D_BSD_SOURCE для сборки программы.
Реализация

Использование Udp_scan очень просто; введите IP-адрес и интервал портов и запустите на выполнение.

# ./udp_scan 192.168.1.102 1-1024
37:netbios-ns:
138:netbios-dgm:
445:UNKNOWN:
500:UNKNOWN

Udp_scan использует изощренную технику оптимизации сканирования. Сначала (по умолчанию) он посылает UDP-пакет по адресу 1 порта UDP сканируемого хоста. Затем он ожидает получения сообщения " ICMP port unreachable error". Если оно не приходит, он делает вывод о том, что хост не работает (если только брандмауэр не блокировал передачу этого сообщения), и не продолжает сканирование этого хоста. Сканирование 1-го порта UDP можно изменить, воспользовавшись опцией -p port. Тестируемый порт всегда должен быть портом UDP, который не будет использоваться каким-либо сервисом на сканируемом хосте.

Совет. Иногда udp_scan не может должным образом обнаружить неработающий хост. Если IP-адреса исследуемых хостов расположены в вашей собственной сети, а MAC-адреса отсутствуют в вашем ARP-буфере, udp_scan может исчерпать время ожидания, отведенное для получения ответа в процессе широковещательного ARP-запроса. Udp_scan может зависнуть и ничего не сообщить о том, что данный хост выключен.

Udp_scan аккуратно отслеживает свою деятельность в сети при сканировании. По умолчанию он может открыть до 100 одновременных UDP-соединений (вы можете изменить эту верхнюю цифру, используя флаг -l <max_connections> в командной строке). Он использует анализ времени возврата своих пакетов, определенных в начальной фазе тестирования, чтобы вычислить максимальное количество одновременно выполняемых тестов, которое возможно в данной сети. Каждый UDP-пакет, посланный udp_scan, содержит только один байт данных (символ "0") с целью минимизации загрузки полосы пропускания и получения наиболее достоверного результата. Некоторые UDP-службы и фильтры портов по-разному реагируют на UDP-пакеты без данных, поэтому UDP-пакеты сопровождаются полезной нагрузкой.

Есть только несколько опций, которые вы можете использовать с udp_scan. Опция -a сообщает программе о необходимости выводить все сообщения об ошибках, так же как и о протестированных UDP-портах. Опция -u указывает, что в случае получения ICMP-сообщения " host unreachable " необходимо вывести номер UDP-порта, который вернул ошибку. С другой стороны, опция -U выдаст вам совершенно противоположное сообщение, выведя сообщения о портах, для которых не были получены ICMP-сообщения об ошибках " host unreachable ". Еще только с помощью одной опции для udp_scan можно определить, какой UDP-порт использовать на сканирующей машине, задав в командной строке параметр -s <source_port>.

У Udp_scan есть несколько ограничений в использовании. Поскольку он использует ICMP-сокеты, udp_scan может быть запущен только root-пользователем или с полномочиями суперпользователя ( uid 0 ). Как и WUPS, одновременно он может поддерживать соединение только с одним IP-адресом.

Пример из жизни. Порты пишут картину

Используя сканер портов, мы можем быстро получить карту различных служб, запускаемых на удаленном хосте. Если мы устанавливаем TCP-соединение по порту 80 и получаем ответ, есть шансы, что на хосте работает Web-сервер. Анализируя ответ, мы можем проверить это предположение. Сканер порта дает нам информацию, необходимую при идентификации целевых хостов. Идентификация служб, проводимая на хосте, говорит нам о цели хоста и подскажет несколько мест, которые мы можем проверить на слабость. При ожидании на каждом открытом порте можно сказать, что уязвимая служба просто ждет, чтобы ее использовали.

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

[bjohnson@originix nmap-2.54BETA30]$ ./nmap 192.168.1.100

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ )
Interesting ports on (192.168.1.100):
(The 1541 ports scanned but not shown below are in state: closed)
Port            State   Service
21/tcp          open    ftp
22/tcp          open    ssh
23/tcp          open    telnet
80/tcp          open    http
1024/tcp        open    kdm
1030/tcp        open    iad1
6000/tcp        open    X11
8888/tcp        open    sun-answerbook

Nmap run completed - 1 IP address (1 host up) scanned in 1 second
[bjohnson@originix nmap-2.54BETA30]$

Выглядит так, как будто на этой машине работает множество обычных подозрительных программ FTP, SSH, telnet и Web. В конечном счете, мы захотим увидеть, что произойдет, когда мы запустим FTP-, telnet- или Web-броузер на этом хосте. Но что это за последняя запись - sun-answerbook? После небольшого исследования мы находим, что эта служба обычно инсталлируется по умолчанию и запускается при запуске большинства систем Sun. Выглядит так, как будто мы нашли хост Sun Solaris.

Но не так быстро. Просто потому, что пришел ответ на порт 8888 (порт, используемый службой Answerbook ), не факт, что это действительно Answerbook! Это может быть что угодно: Web-сервер, FTP-сервер или черный ход, установленный хакером! Оказывается, системный администратор установил средство Netcat (см. лекцию "NETCAT и CRYPTCAT" ), чтобы прослушивать порт 8888, в качестве своеобразной ловушки. Системный администратор может обмануть неопытного хакера, и тот может подумать, что Linux-машина - это на самом деле хост Sun.

Сергей Хлюкин
Сергей Хлюкин
Россия, Москва, Московский Государственный Открытый Университет, 2007
Игорь Касаткин
Игорь Касаткин
Россия, Москва