Опубликован: 20.02.2007 | Доступ: свободный | Студентов: 3482 / 786 | Оценка: 4.42 / 4.03 | Длительность: 40:03:00
Лекция 6:

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

OS Fingerprinting

Одной из наиболее часто употребляемых возможностей, которые предоставляет nmap, является удаленная идентификация хоста. Nmap, просто осуществляя сканирование по сети, зачастую может сообщить вам, какая операционная система выполняется на хосте, а также дать некоторую информацию о номере версии и релиза. Как это делается? Если задан флаг -O, nmap использует несколько различных приемов для поиска некоторых характерных признаков в TCP/IP-пакетах, возвращаемых хостом. Посылая специально созданные TCP- и UDP-заголовки, nmap может получить некоторые сведения о том, как удаленный хост осуществляет взаимодействие по протоколу TCP/IP. Если затем проанализировать информацию, то ее можно сравнить с известными признаками, которые хранятся в файле nmap-os-fingerprints. Этот файл поддерживается разработчиками nmap. Если вы сканируете хост с известной операционной системой, используя флаг -O, и nmap не может ее распознать, то он выводит зашифрованный результат тестирования и сетевой адрес, чтобы можно было послать информацию разработчикам. Просто сбросьте информацию о тестировании и название операционной системы, и она будет включена в следующую версию Nmap.

Флаг определения ОС также может обеспечить анализ TCP-пакетов с целью определения информации типа общей продолжительности работы системы с момента последней перезагрузки (используя отметку времени в TCP/IP ) и предсказуемость последовательного номера. Предсказуемая последовательность номеров упрощает возможность имитации TCP-соединения посредством перехвата пакетов и угадывания последовательности номеров.

Дополнительную информацию об определении ОС при помощи nmap вы получите из примеров в конце этого раздела.

Сводная информация о параметрах командной строки

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

  • -P0 -PT -PS -PI -PB. Перед тем как сканировать другие порты, протоколы nmap всегда пытаются осуществить проверку хоста с помощью команды Ping. Такое тестирование не занимает много времени для неработающих хостов. Но многие хосты и брандмауэры блокируют ICMP Ping-трафик, поэтому необходимо иметь возможность управления тем, какую политику тестирования использовать, чтобы определить статус хоста.
    • -P0 указывает на необходимость отменить использование Ping - использовать только слепое сканирование.
    • -PT указывает на необходимость использования протокола TCP (с использованием telnet по 80 порту, если у вас нет полномочий суперпользователя или ACK -сканирования по 80 порту, если такие полномочия имеются). Задав число после параметра -PT, можно задать для сканирования номер порта, отличный от 80.
    • -PS посылает SYN -пакеты (также в случае наличия полномочий суперпользователя).
    • -PI определяет немедленное проведение тестирования ICMP Ping.
    • -PB по умолчанию осуществляет попытку тестирования с использованием и ICMP и TCP Ping.
  • -v -d. Параметр -v задает расширенный вывод, параметр -d добавляет отладочную информацию. Вы можете использовать оба параметра для получения расширенной и отладочной информации одновременно.
  • -oN -oM -oS <logfile>. Для большинства программ при просмотре информации на экране и пересылке в файл вы можете использовать Unix-команду tee. Nmap предоставляет возможность ведения журнала сканирования:
    • -oN осуществляет запись в журнал всякий раз после появления ее на экране в удобном для чтения формате. Обычно используется при сканировании нескольких машин;
    • -oM осуществляет вывод в файл в машинно-читаемом формате (который может быть вновь интерпретирован с использованием Nmap );
    • -oS выводит информацию в " script kiddie" виде - может быть неудобочитаем.
  • -resume logfile. Если вы прервали сканирование, но при этом осуществляли запись в машинно-читаемый или удобный для чтения человеком формат, то можете продолжить сканирование, задав в качестве входного параметра журнал сканирования.
  • -iR -iL inputfile. Используя параметр -iR, вы можете генерировать номера хостов для сканирования случайным образом (если это вам удобно), или считывать номера хостов из файла, содержащего имена хостов или IP-адреса, разделенные пробелом, табуляцией или идущие с новой строки.
  • -F. Указывает nmap на необходимость сканирования только "известных" (описанных в файле nmap-services ) портов. Без этого параметра nmap сканирует порты с номерами от 1 до 1024 и любые другие порты, которые включены в файл nmap-services (или в файле / etc/services ). Если для сканирования протоколов используется параметр -sO, nmap вместо последовательного сканирования всех 256 протоколов использует встроенный файл протоколов ( Nmap -protocols).
  • -p ports. Разумеется, если вы хотите указать конкретные порты для сканирования, то с помощью значения <ports> можно определить единственный порт, список портов, заданный через запятую, или интервал портов, заданный через тире, или использовать любую из возможных комбинаций. Если этот параметр не определен, то осуществляется быстрое сканирование первых 1024 портов (см. описание параметра -F).
  • -e interface. Для хоста с несколькими сетевыми адресами вы можете определить, какой из сетевых интерфейсов используется для связи. Обычно nmap самостоятельно обрабатывает такую ситуацию.
  • -g port. Позволяет выбрать порт - источник, с которого будет осуществляться сканирование. Обычно эта возможность используется для скрытия сканирования от брандмауэров, которые разрешают входящий трафик от портов TCP/20 (предназначенного для данных ftp ), TCP/80 (предназначенного для Web-трафика) или UDP/53 (предназначенного для работы DNS).
Nmapfe

Nmap поставляется с собственным графическим интерфейсом, который вы можете использовать под управлением X Window. Эта программа называется nmapfe. Ее внешний вид изображен на рис. 6.1. Программа имеет много таких же как и nmap параметров, но использует экранные формы и меню для ввода информации от пользователя и сканирования конфигурации. Программа выглядит куда приятней и проще в использовании, но у нее по-прежнему остается много настроечных параметров, вводимых из командной строки.

Nmap front end (Nmapfe)

Рис. 6.1. Nmap front end (Nmapfe)

Пример из жизни. Разметка сетей и возможных целей

Давайте посмотрим на некоторые примеры использования nmap и увидим, какие следы остаются в журналах одного из хостов (старая система Linux с IP-адресом 192.168.1.100). Мы начнем со сканирования Ping (опция -sP ) всей сети 192.168.1.0. Мы можем обозначить эту цель несколькими способами в командной строке:

nmap -sP "192.168.1.*"
nmap -sP 192.168.1.0/24
nmap -sP 192.168.1.1-254

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

bash-2.04$ nmap -sP 192.168.1.1-254

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ )
Host    (192.168.1.1) appears to be up.
Host    (192.168.1.100) appears to be up.
Host    (192.168.1.101) appears to be up.
Host    (192.168.1.102) appears to be up.

Nmap run completed - 254 IP addresses (4 hosts up) scanned 
  in 2 seconds

Сейчас мы знаем, какие хосты ответили на Ping запрос. Но что, если некоторые хосты блокируют ICMP Pings? Если вы повторите запрос, по умолчанию nmap использует ICMP Ping и TCP Ping (ссылка на опцию -P ). Итак, видимо, это полный список. Сейчас мы должны сфокусироваться на нашем реальном сканировании портов на этих четырех системах. Давайте попробуем запустить nmap безо всяких опций на этих четырех системах и посмотрим, что получится.

bash-2.04$ nmap 192.168.1.1,100-102

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ )
Interesting ports on (192.168.1.1):
(The 1548 ports scanned but not shown below are in state: closed)
Port            State       Service
80/tcp          open        http

Interesting ports on (192.168.1.100):
(The 1539 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
512/tcp     open        exec
513/tcp     open        login
514/tcp     open        shell
1024/tcp        open        kdm
1032/tcp        open        iad3
6000/tcp        open        X11

Interesting ports on (192.168.1.101):
(The 1547 ports scanned but not shown below are in state: closed)
Port            State       Service
139/tcp     open        netbios-ssn
641/tcp     open        unknown

Interesting ports on (192.168.1.102):
(The 1545 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

Nmap run completed - 4 IP addresses (4 hosts up) scanned in 17 seconds
6.1.

Обратите внимание на синтаксис при спецификации цели. В отношении портов мы можем специфицировать IP-адреса с помощью комбинации разделенных запятой списков и диапазонов. Сейчас мы только что провели сканирование по умолчанию. Это значит, что сканировались только порты, которые указаны в служебном файле nmap, а также порты 1 -1024. Использовались: обобщенный метод TCP connect() (возможно, самый громкий из возможных) и опция нормальной синхронизации ( Normal timing ). Давайте посмотрим, как теперь выглядит журнал Unix на 192.168.1.100.

Mar 15 20:25:33 originix in.telnetd[1653]   :   warning: can't get client
address: Connection reset by peer
Mar 15 20:25:33 originix in.telnetd[1653]   :   refused connect from unknown
Mar 15 20:25:34 originix in.rlogind[1655]   :   warning: can't get client
address: Connection reset by peer
Mar 15 20:25:34 originix in.rlogind[1655]   :   refused connect from unknown
Mar 15 20:25:34 originix in.ftpd[1656] : warning: can't get client address:
Connection reset by peer
Mar 15 20:25:34 originix in.ftpd[1656] : refused connect from unknown
Mar 15 20:25:34 originix in.rshd[1658] : warning: can't get client address:
Connection reset by peer
Mar 15 20:25:34 originix in.rshd[1658] : refused connect from unknown
Mar 15 20:25:34 originix in.rexecd[1657] : warning: can't get client address:
Connection reset by peer
Mar 15 20:25:34 originix in.rexecd[1657] : refused connect from unknown
6.2.

Совершенно очевидно, что порты были просканированы, но эти службы не смогли определить IP-адрес клиента. Это потому, что nmap послал пакет сброса ( RST ) после завершения TCP вместо FIN. Некоторые службы в этом случае не смогут захватить IP-адрес сканера. Однако независимо от этого, у нас осталось множество свидетельств в журнале. Давайте прикинемся пользователем root и попробуем провести сканирование SYN с подлой политикой синхронизации. Это сканирование займет несколько больше времени, но не будет таким громким. Мы сделаем это только на 192.168.1.100, поэтому сможем просмотреть журналы. При проведении сканирования с тайными опциями синхронизации, хорошей идеей будет использовать признак -v или -d, чтобы можно было следить за тем, что происходит. Выходная информация будет слишком длинной, чтобы помещать ее здесь, но мы покажем командную строку.

# nmap -d -v -v -sS -T Sneaky -p 20-80 192.168.1.100

Проблема с тайным сканированием заключается в том, что оно занимает много времени. Поэтому мы хотим сократить диапазон портов. Даже 20 -80 займет, по крайней мере, 15 секунд, умноженные на 61 порт. А это больше 15 минут! И это без учета 15-ти секундного времени ожидания ответов зондирования. Очевидно, тайное сканирование подойдет вам больше, если вы ищете конкретный порт среди целого ряда машин (вероятно, в надежде, что уязвимая служба работает за ней).

Хорошо то, что наши журналы на 192.168.1.100 не хранят никаких сведений. А 15-ти секундное время ожидания может быть достаточно длинным, чтобы предотвратить разоблачение нас через IDS.

Давайте посмотрим, как работает распознавание OS у nmap.

# nmap -O 192.168.1.1,100,101

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ )
Interesting ports on (192.168.1.1):
(The 1548 ports scanned but not shown below are in state: closed)
Port            State       Service
80/tcp          open        http

No exact OS matches for host (If you know what OS is running on it, see
http://www.insecure.org/cgi-bin/nmap-submit.cgi).
TCP/IP fingerprint:
SInfo(V=2.54BETA30%P=i386-unknown-freebsd4.3%D=3/16%Time=3C9346F5%O=80%C=1)
TSeq(Class=TD%gcd=1A4%SI=0%IPID=Z%TS=U)
T1(Resp=Y%DF=N%W=400%ACK=S++%Flags=AR%Ops=)
T2(Resp=Y%DF=N%W=400%ACK=S%Flags=AR%Ops=)
T3(Resp=Y%DF=N%W=400%ACK=S++%Flags=AR%Ops=)
T4(Resp=Y%DF=N%W=400%ACK=S%Flags=AR%Ops=)
T5(Resp=Y%DF=N%W=400%ACK=S++%Flags=AR%Ops=)
T6(Resp=Y%DF=N%W=400%ACK=S%Flags=AR%Ops=)
T7(Resp=Y%DF=N%W=400%ACK=S++%Flags=AR%Ops=)
PU(Resp=N)

Interesting ports on (192.168.1.100):
(The 1540 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
512/tcp     open        exec
513/tcp     open        login
514/tcp     open        shell
1024/tcp        open        kdm
6000/tcp        open        X11

Remote operating system guess: Linux 2.1.19 - 2.2.17
Uptime 2.597 days (since Wed Mar 13 23:00:28 2002)
Interesting ports on (192.168.1.101):
(The 1547 ports scanned but not shown below are in state: closed)
Port            State       Service
139/tcp     open        netbios-ssn
641/tcp     open        unknown

Remote operating system guess: Windows 98 w/ Service Pack 1
Nmap run completed - 2 IP addresses (2 hosts up) scanned in 12 seconds
6.3.

Nmap верно определил наши машины Linux и Windows. Он даже определил время безостановочной работы Linux. Тем не менее, у nmap были проблемы с нашим маршрутизатором Linksys. Мы сейчас можем послать этот отпечаток пальца разработчикам nmap, и этот Linksys будет узнаваемым в следующей версии nmap.