В лекции "NETCAT и CRYPTCAT" вы узнали, что Netcat можно разнообразно использовать в качестве сканера TCP (Transmission Control Protocol) и UDP (User Datagram Protocol) портов. Однако возможности Netcat по сканированию портов достаточно ограничены, поскольку он разработан для работы с использованием TCP-соединения (без использования специальных скрытых методов). Он может поддерживать соединение только с одним хостом одновременно, и форма вывода выходной информации выглядит весьма убого. Если вы захотите заняться сканированием портов, вам потребуются инструментальные средства, специально предназначенные для сканирования портов и передачи большого объема информации о группе хостов. В настоящей лекции описывается несколько таких инструментальных средств. Каждая из программ может нумеровать TCP- или UDP-порты из заданного промежутка и позволяет посылать на каждый порт специально созданные пакеты для сбора информации. Однако методы, используемые каждым из
программных средств, и их возможности могут несколько отличаться.
Сканирование портов - первый шаг в процессе взлома или предупреждения взлома, поскольку он помогает определить потенциальные цели. Вокруг каждого хоста - независимо от аппаратного и программного обеспечения или выполняемых функций - имеется некоторое количество идентифицируемых особенностей. Внимательный наблюдатель, вооруженный соответствующим инструментарием, может исследовать работающие на машине службы (Web-сервер, FTP-сервер, mail-сервер, и т.д.), номера версий и даже операционную систему, посылая им пакеты данных и анализируя то, как они отвечают.
В современном мире, несмотря на ежедневные инциденты со взломом систем, многие люди размещают свои компьютеры в интернете совершенно без подготовки. Даже в сфере индустрии информационных технологий ленивые системные администраторы могут установить самую последнюю версию Linux на новейший сервер, дополнительное программное обеспечение и позволить ему что-то выполнять. Как только такая система будет подвергнута исследованию, некто получит возможность определить не только то, что система работает под управлением Linux, но и то, какая версия Linux работает, а также номер версии системы.
В первом учебном примере этой лекции вы сможете узнать, как знания о номерах и типах портов на хосте могут помочь определить операционную систему и версию программного обеспечения работающего на этом хосте.
Во втором примере вы сможете узнать, как техника захвата баннеров может быть использована для определения операционной системы, ее версии и географической информации о размещении хоста.
В третьем примере вы узнаете, как можно определить тип операционной системы, просто наблюдая за ее взаимодействием с сетью.
и с легкостью установить его на большинстве Unix-систем (используя последовательность . Для нашего обсуждения мы будем использовать версию nmap для Unix номер 2.54 beta 30.
Одна из причин, по которой nmap так широко используется, состоит в том, что он предоставляет много приемов для сканирования. Вы можете сканировать работающие хосты на предмет наличия TCP-портов, UDP-портов и любых других IP-протоколов. Поскольку мы подробно говорим о том, как nmap обеспечивает сканирование по протоколу TCP, вам понадобятся некоторые знания о том, как осуществляется TCP-соединение. В таблице 6.1 представлены описания наиболее общих флагов, которые могут быть использованы в процессе TCP-соединения.
Когда для определенного порта создано TCP-соединение, клиент посылает TCP-пакет с установленным флагом SYN для инициализации соединения. Если сервер прослушивает этот порт, он посылает пакет с установленными флагами SYN и ACK, подтверждая клиентский запрос на соединение, одновременно запрашивая установление обратного соединения. Затем клиент может послать пакет с установленным флагом ACK, подтверждая запрос SYN от сервера. Такой способ известен как трехходовое установление связи TCP. Когда одна из сторон выполнит передачу другой, она может послать пакет FIN. Другая сторона должна подтвердить этот пакет FIN и послать свое собственное сообщение FIN, ожидая от другой стороны подтверждения того, что соединение действительно закрыто. Для экстренного прерывания соединения любая из сторон может передать пакет с флагом . Простое TCP-взаимодействие между клиентом и сервером представлено ниже.
SYN: "Я запрашиваю соединения".SYN/ACK -клиенту: "Okay; мне необходимо соединение с тобой".ACK -серверу: "Okay".ACK. Если одна из сторон посылает сообщение RST , соединение прерывается немедленно.FIN: "Goodbye".ACK -клиенту (подтверждая получение сообщения FIN ). Затем сервер посылает собственное сообщение FIN: "Okay. Goodbye".ACK -серверу (подтверждая получение его сообщения FIN ): "Okay".Помните об этом, читая следующие разделы. Это поможет вам лучше понять, как nmap и другие сканеры портов получают свою информацию.
| Признак | Описание |
|---|---|
SYN |
Используется для обозначения начала соединения TCP. |
ACK |
Используется для уведомления о получении предыдущего пакета или цикла передачи. |
FIN |
Используется для закрытия соединения TCP. |
|
Используется для внезапного прекращения соединения TCP. |
Если вы интересуетесь только определением, какие хосты в сети работают, то можете использовать метод сканирования с использованием Ping (-sP). Этот метод работает также как fping, когда он посылает ICMP эхо-запросы по заданному промежутку IP-адресов и ожидает ответа. Однако многие хосты на сегодняшний день блокируют ICMP-запросы. В этом случае nmap дает возможность установить с хостом TCP-соединение по 80 порту (по умолчанию). Если он получает что-либо ( SYN/ACK или ), значит хост работает. Если он ничего не получает, хост маркируется как не работающий или отключенный от сети. Если вы хотите всего лишь получить список имен хостов для заданного IP-интервала, попытайтесь использовать опцию -sL.
SYN пакет), сервис может послать в ответ пакет SYN/ACK. Это наглядно показывает, что по этому IP-адресу есть машина. Однако если отсутствует сервис, который прослушивал бы указанный порт, а машина находится в сети, в ответ будет послан пакет RST . Независимо от того, отвечает машина на запрос, или по заданному порту нет работающего сервиса, сам факт такого ответа подтверждает, что по заданному IP-адресу есть машина. Если в ответ на посланный SYN -пакет ничего не получено, это может означать, что по заданному IP-адресу нет никакой машины, или что такой трафик блокируется брандмауэром. 80 порт задан по умолчанию, поскольку большинство брандмауэров и фильтров пропускают Web-трафик. Если никакого ответа не получено, nmap с достаточной степенью уверенности может предположить, что хост не работает. Вы можете изменить номер порта, используемого nmap для TCP Ping, задав в командной строке -PT <port_number>.Основной метод сканирования TCP-портов - это установление TCP-соединения connect() (-sT) с портом, чтобы посмотреть, будет ли получен ответ. То же самое делает TCP-клиент, желая установить соединение (законченное трехходовое соединение), за исключением того, что nmap может разорвать соединение, послав пакет , как только соединение будет установлено. Можно использовать сканирование RPC (-sR) для сканирования любого открытого для RPC-сервиса порта (такого, как portmapper ). Ниже приведены несколько примеров этих способов сканирования.
[bjohnson@originix ~]$ nmap -sT 192.168.1.109 Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ ) Interesting ports on cauliflower (192.168.1.109): (The 1518 ports scanned but not shown below are in state: closed) Port State Service 22/tcp open ssh 111/tcp open sunrpc 884/tcp open unknown 889/tcp open unknown 6000/tcp open X11 Nmap run completed - 1 IP address (1 host up) scanned in 0 seconds [bjohnson@originix ~]$ nmap -sR 192.168.1.109 Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ ) Interesting ports on cauliflower (192.168.1.109): (The 1518 ports scanned but not shown below are in state: closed) Port State Service (RPC) 22/tcp open ssh 111/tcp open sunrpc (rpcbind V2) 884/tcp open (mountd V1-2) 889/tcp open (mountd V1-2) 6000/tcp open X11 Nmap run completed - 1 IP address (1 host up) scanned in 3 seconds
Обратите внимание, как при сканировании -sR используются RPC -команды для определения, есть ли в наличии работающий RPC-сервис. Nmap исследует тип и версию работающих сервисов rpcbind и mountd. Следующая таблица показывает, как выполняется сканирование -sT, -sR и -sP типов.
Nmap посылает на порт хоста |
Nmap получает от порта хоста |
Nmap отвечает |
Nmap принимает решение |
|---|---|---|---|
SYN |
SYN/ACK |
ACK следом за |
Порт открыт; хост работает. |
SYN |
|
- | Порт закрыт; хост работает. |
SYN |
Nothing |
- | Порт блокирован брандмауэром или хост не работает. |
Это великолепно, но поскольку вы всего лишь создали TCP-соединение, оно, скорее всего, будет зарегистрировано службой, предоставившей его.
Nmap позволяет сделать много интересного с TCP-пакетами, которые вы используете для сканирования портов. Во-первых, есть SYN -сканирование ( -sS ), которое создает первую половину TCP-соединения (посылая TCP-пакет с установленным флагом SYN ) но затем ведет себя несколько иначе. Если приходит TCP-пакет с установленным флагом , nmap решает, что порт закрыт и ничего больше не предпринимает. Однако если приходит ответ (о чем свидетельствует пакет с установленным флагом SYN/ACK ), вместо того чтобы подтвердить получение этого пакета, как это было бы при установлении нормального соединения, посылается -пакет, как это показано в следующей таблице. Поскольку трехходовое TCP-соединение не завершено, многие сервисы не регистрируют соединение. Поскольку вы осуществляете манипуляции с некоторыми из этих TCP-флагов на низком уровне, вы не можете реализовать эти типы сканирования, не имея полномочий пользователя root в системе.
Nmap посылает на порт хоста |
Nmap получает от порта хоста |
Nmap отвечает |
Nmap принимает решение |
|---|---|---|---|
SYN |
SYN/ACK |
|
Порт открыт; хост работает. |
SYN |
|
- | Порт закрыт; хост работает. |
SYN |
Nothing | - | Порт блокирован брандмауэром или хост не работает. |
Так же как сервисы могут не регистрировать "незавершенное" соединение, некоторые брандмауэры или системы определения вторжений (IDSs) могут быть настроены на поиск таких типов сканирования. У Nmap есть несколько способов сканирования, но и хорошие IDSs-системы могут поймать вас. Вдобавок, брандмауэр может фильтровать подозрительные пакеты и искажать результаты сканирования.
Вы должны были уже понять, что в любой момент, как только вы посылаете TCP-пакет на закрытый порт, стек TCP/IP на другой стороне готов послать в ответ -пакет. Что же в этом случае происходит с разрешенными TCP пакетами? Если закрытый порт всегда отвечает пакетами , почему бы просто не посылать не имеющие смысла пакеты и не смотреть, что придет в ответ?
FIN -сканирование ( -sF ) посылает пакеты FIN, которые обычно используются для закрытия соединения. Однако, поскольку мы посылаем его прежде, чем соединение было установлено, открытый порт должен игнорировать такой мусор. Закрытый порт по-прежнему будет отвечать пакетом , как это показано в следующей таблице. Nmap предлагает два способа мусорного сканирования: Xmas tree (-sX) (рождественское) сканирование (которое устанавливает FIN, URG, и PUSH флаги TCP-пакета, расцвечивая его подобно новогодней елке) и null -сканирование ( -sN ) (которое выключает все флаги, подобно тому, как это делает hping по умолчанию). Поскольку мы совершаем некоторые манипуляции с пакетами на низком уровне, то такое сканирование также требует полномочий пользователя root. Имейте в виду, что не все стеки TCP/IP реализованы корректно. Даже притом, что открытые порты не посылают -пакеты в ответ на такие виды проверок, некоторые стеки TCP/IP не следуют этим правилам и посылают ответ в любом случае. Это означает, что вы можете ошибочно сделать положительное предположение при использовании такого сканирования для некоторых типов хостов. Также любой хост, защищенный брандмауэром, может вернуть ложный ответ. Nmap предполагает, что порт открыт, если не получает ничего в ответ. Что если брандмауэр блокирует этот ответ? Такое сканирование более скрытое, но оно и менее аккуратное.
Nmap посылает на порт хоста |
Nmap получает от порта хоста |
Nmap принимает решение |
|---|---|---|
FIN |
Nothing | Порт открыт, если хост работает и не защищен брандмауэром. |
FIN |
|
Порт закрыт; хост работает. |
Иногда nmap может сообщить вам, что порт подвергается фильтрации. Это означает, что влияние брандмауэра или фильтра накладывается на возможность nmap точно определить, открыт или закрыт порт. Некоторые брандмауэры, тем не менее, могут только фильтровать входящие соединения (это означает, что они просматривают только входящие SYN -пакеты на конкретном порту). Если вы хотите проверить правила брандмауэра, запустите ACK -сканирование для хоста, находящегося за брандмауэром. Всякий раз, как ACK -пакет (подтверждение) посылается не как часть существующего соединения, принимающая сторона предположительно посылает пакет . Сканирование ACK (-sA) может использовать этот факт для определения, осуществляется ли блокирование или фильтрация порта. Если получен пакет , порт не фильтруется; в противном случае, осуществляется фильтрация, как это показано в следующей таблице. Именно сканирование ACK может показать вам, что конкретный хост защищен брандмауэром.
Nmap посылает на порт хоста |
Nmap получает от порта хоста |
Nmap принимает решение |
|---|---|---|
ACK |
|
Порт не защищен брандмауэром; порт может быть открыт или закрыт; хост работает. |
ACK |
Nothing or ICMP unreachable | Порт блокирован брандмауэром и хост работает. |
Поскольку такое сканирование не может сказать, закрыт ли на самом деле порт или открыт, возможно, вы захотите использовать другие виды сканирования в комбинации с ACK -сканированием. Например, вы можете использовать ACK -сканирование в комбинации с SYN -сканированием ( -sS ), чтобы определить, что хост защищен брандмауэром, который использует полную проверку пакетов или только проверку входящих соединений ( SYN -флаг). В следующем примере используется SYN сканирование только 80 порта, открытого на машине 192.168.1.40. Там также сообщается, что порты 21 и 22 фильтруются и nmap не может определить их статус. ACK -сканирование сообщает нам, что все порты на машине открыты, в то время как SYN -сканирование говорит о том, что производится фильтрация! Это означает, что SSH и FTP на машине 192.168.1.40 подвергаются фильтрации с использованием неполной схемы; поскольку SYN -пакеты блокируются, а ACK - пропускаются.
# nmap -sS 192.168.1.40 Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Interesting ports on (192.168.1.40): (The 1546 ports scanned but not shown below are in state: closed) Port State Service 21/tcp filtered ftp 22/tcp filtered ssh 80/tcp open http Nmap run completed - 1 IP address (1 host up) scanned in 8 seconds # nmap -sA 192.168.1.40 Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) All 1549 scanned ports on (192.168.1.40) are: Unfiltered Nmap run completed - 1 IP address (1 host up) scanned in 7 seconds
Помните, как мы использовали hping в лекции "Системные средства с открытым программным кодом: основы" для подмены исходящего IP-адреса, сканирующего порты и, тем не менее, получали результат? Nmap позволяет вам сделать нечто подобное, применяя Idle-сканирование ( -sI ). Для этого необходимо найти хост, который не пропускает никакого трафика и имеет TCP/IP-стек с известным IP ID-инкрементом (например, Windows всегда использует 256). За подробной информацией о таком сканировании обращайтесь к примеру использования hping в лекции "Системные средства с открытым программным кодом: основы".
Естественно, nmap это тоже делает. Используя флаг -sU, можно посылать пустые UDP-пакеты и ожидать в ответ ICMP-сообщения "port unreachable". Если не получено никаких сообщений в ответ, порт считается открытым, как это показано в следующей таблице. Здесь вы можете видеть несколько возможных ошибок. Если возвращаемые ICMP-сообщения блокируются брандмауэром, это может означать, что все UDP-порты хоста открыты. Также, если UDP-трафик непосредственно блокируется брандмауэром, это по-прежнему означает, что все UDP-порты открыты. Эта та же ловушка, в которую мы попадали, используя Netcat в процессе сканирования UDP-портов. Вдобавок, многие хосты могут посылать наружу только ограниченное число ICMP-сообщений об ошибках в секунду для предотвращения перегрузки сети. Nmap может автоматически корректировать эту ситуацию, если она определяется, но это может очень сильно замедлить сканирование. Поскольку UDP-протокол работает без установления соединения и не ограничен необходимостью
подтверждения получения входящих пакетов, нет полного решения этой проблемы.
Nmap посылает на порт хоста |
Nmap получает от порта хоста |
Nmap принимает решение |
|---|---|---|
| Пустой UDP пакет | Nothing | Возможно, порт открыт, если хост отвечает на Ping (хост работает); возможно, порт закрыт, если брандмауэр блокирует ICMP. |
| Пустой UDP пакет | ICMP порт недоступен | Порт закрыт. |
Nmap по умолчанию пытается послать Ping хосту перед тем, как начать его сканировать. Это особенно важно для правильной интерпретации результатов UDP-сканирования. Если nmap не может послать Ping хосту (или потому, что хост блокирован брандмауэром, или вы отключили такую возможность, вручную используя флаг -P0 ), он не сможет получить правильные результаты.Если вы предприняли неудачную попытку соединения с UDP-портом, хост вернет ICMP-сообщение "port unreachable". То же самое можно сказать и про IP-протоколы. Каждый IP-протокол транспортного уровня имеет соответствующий номер. Наиболее распространены ICMP (1), TCP (6) и UDP (17). У всех IP-пакетов есть поле "protocol", которое показывает тип заголовков пакетов и номер протокола транспортного уровня. Если мы посылаем серию пакетов без заголовка протокола транспортного уровня и с номером протокола 130, который означает протокол семейства IPSEC, называемый , мы можем определить, какой из протоколов реализован на данном хосте. Если мы получаем ICMP-сообщение "protocol unreachable", то этот протокол недоступен. В противном случае - доступен. Этот метод сканирования, называемый сканированием протоколов ( -sO ), страдает теми же самыми проблемами, что и UDP-сканирование в том случае, если брандмауэр блокирует ICMP-сообщения или
непосредственно сам протокол дает ложные ответы.
У nmap есть несколько опций сканирования. Некоторые из них могут помочь скрыть сканирование портов от определения по системным журналам с помощью брандмауэров и IDSs-систем. Вдобавок, nmap предоставляет вам некоторые возможности рандомизации и маскировки, которые предоставляются такими программами, как Netcat и hping.
FTP Bounce. У FTP есть ошибка, которая может дать преимущество при использовании nmap. Когда вы соединяетесь с FTP-сервером при помощи FTP-клиента, ваш клиент взаимодействует с FTP-сервером по 21 порту. Это TCP-соединение называется контрольным соединением ( control ). FTP-сервер требует установления отдельного соединения с клиентом, называемого соединением по данным ( data ), через которое будут передаваться данные. Клиент ожидает от сервера установления соединения по данным на отдельном TCP-порте. Он передает серверу команду PORT, чтобы сообщить ему о необходимости инициировать соединение с клиентским IP-адресом и вновь открытым портом. Этот метод взаимодействия называется активной передачей. Поскольку многие клиентские машины используют трансляцию адресов (NAT) или находятся за брандмауэром во внутренней сети, активное FTP-соединение обычно не работает, поскольку инициированное сервером соединение с клиентом не может
проникнуть внутрь защищенной зоны.
Сосредоточимся на команде PORT. Ее законное использование сообщает FTP-серверу о необходимости установить обратное соединение по данным с только что открытым портом. Но поскольку мы определили для использования не только порт, но и IP-адрес, наш клиент, передавший команду PORT на сервер, может попытаться установить соединение с кем-то, находящимся где-либо. Nmap может использовать такое поведение для сканирования порта с целью определения уязвимого FTP-сервера и интерпретации полученных результатов. Такой прием называется FTP-сканированием. nmap создает активное FTP-соединение с сервером и передает команды PORT, содержащие IP-адрес и порт сканируемого хоста. Затем Nmap может интерпретировать полученные результаты и выводить их в том же самом формате, что и нормальные результаты сканирования порта.
Как найти FTP-сервер, который можно так использовать? Это самая интересная часть. Это ошибка проектирования, а не только недостатки реализации. FTP-серверы, разработанные в соответствии с документом RFC 959 для протокола FTP, должны реализовывать эту возможность. Многие пакеты FTP-серверов, такие как wu-, модифицированы для передачи команды PORT только оригинальному хосту, и многие поставщики операционных систем со встроенными FTP-серверами скорректированы в соответствии с этим. Но некоторые по-прежнему запускают устаревшие или не скорректированные FTP-серверы. Не следует запускать анонимный FTP-сервер, если в этом нет очень серьезной необходимости.
Пойдем дальше. Выберем анонимный FTP-сервер и попытаемся выполнить:
nmap -b anonymous@ftp.lame_host.com -p 6000 192.168.1.200
Предыдущая команда пытается использовать ftp.lame_host.com для сканирования порта с номером 6000 на машине 192.168.1.200, чтобы сообщить, используется ли там X Window-сервер. А вот пример взаимодействия nmap с этим сервером.
Server: 220 LAME_HOST FTP server version 4 ready Client: USER anonymous Server: 331 Guest login OK, send e-mail as password Client: PASS -wwwuser@ Server: 230 Login successful Client: PORT 192,168,1,200,23,112 Server: 200 PORT command successful Client: LIST Server: 150 Opening ASCII connection for "/bin/ls" Server: 226 Transfer complete
Nmap сообщает о необходимости открыть соединение по порту 6000 на машине 192.168.1.200, используя команду PORT. Последние две цифры в конце команды PORT, 23 и 112, представляют собой порт с номером 6000. ( FTP определяет это, умножая первое число на 256 и складывая со вторым числом 23*256+112=6000). Если команда успешно выполнена, появляется возможность выполнить команду LIST. Поскольку это позволяет открыть соединение, порт 6000 открыт на машине 192.168.1.200. Если сервер вместо этого сообщает "425 Can't build data connection", мы можем определить, что порт 6000 закрыт.
Если команда PORT работает, вы можете не только сканировать кого-либо еще, но и порты любой машины, к которой имеет доступ FTP-сервер. Это великолепный способ обойти фильтры портов и брандмауэры, которые обычно не пропускают ваши попытки сканирования. Однако всегда будьте осмотрительны, используя маскировку, подобную этой. Помните, что FTP-серверы могут зафиксировать ваши соединения в журнале. Если кто-либо заподозрит LameHost в сканировании его сети в 13:45 6 января, и у него есть анонимное FTP-соединение с вашей домашней машиной в это же самое время, вы попались.
Даже если вы нашли сервер, уязвимый с точки зрения FTP, это не дает вам возможности сканировать привилегированные порты (с номером ниже 1024), поскольку FTP-клиент обычно не должен прослушивать привилегированные порты в ожидании соединения по данным.
Фрагментация. Опция -f nmap, указывает на необходимость выполнения скрытого сканирования ( -sS, -sF, -sX или -sN ) с использованием фрагментированных IP-пакетов, у которых разорваны TCP-заголовки. Идея состоит в предохранении таких "искаженных" TCP-пакетов с необычными флагами от блокировки брандмауэрами. Эта опция может привести к нарушению в работе некоторых систем и не может корректно работать на всех разновидностях Unix, поэтому применяйте ее осторожно.
Заманивание. Мы беседовали о том, как можно замаскировать сканирование портов, сохранив при этом возможность получения результатов сканирования (вместо того чтобы передавать их на наш неизвестный адрес). Мы также обсуждали, как это сложно сделать (в лекциях "NETCAT и CRYPTCAT" и "Системные средства" и на протяжении всей этой лекции). Nmap дает возможность определить хост "ловушку", используя опцию -D. Идея состоит в определении нескольких "мистических жертв" - хостов в интернете - и задания их в разделенном запятыми списке после флага -D. Nmap будет, как обычно, выполнять роль сканера порта, но при этом определяться среди замаскированных сканеров портов с IP-адресами - ловушками. Системный администратор увидит несколько различных сканеров портов, но только один из них будет настоящим.
-S nmap позволяет вам задать исходящий IP-адрес для ваших пакетов. Вы можете использовать это для создания впечатления, что сканирование производится с заданного вами адреса. Эта функция имеет смысл для хоста с несколькими адресами, но может быть использована для маскировки и создания общего беспорядка. Вы не сможете получить обратно результаты сканирования, но вы можете выставить кого-то, как вредителя. Но будьте осторожны, маскируясь под других людей. В случае если системы обнаружения вторжений или брандмауэры оснащены функциями против приманки, вы можете объявить о себе во всеуслышанье, вместо того чтобы остаться незамеченным.Рандомизация портов и хостов. Nmap по умолчанию перебирает заданные вами порты случайным образом. Вы можете выключить эту возможность, воспользовавшись флагом -r. Если вы задали список хостов для сканирования, то можете задать случайный порядок сканирования, используя флаг -randomize_hosts.
Nmap использует опции планирования по времени, чтобы попытаться скрыть сканирование портов от брандмауэров и систем IDSs, которые используют основанные на временных параметрах алгоритмы обнаружения сканирования. Вдобавок, вы можете определить свою собственную -T. Команда nmap -T Sneaky -sS 192.168.1.100 -p 1-100 позволяет сделать попытку избежать определения сканирования с использованием именованной политики Sneaky и метода сканирования SYN при сканировании первых ста портов на компьютере 192.168.1.100.
Для полной ясности, флаг -scan_delay определяет минимальный временной промежуток в миллисекундах, который следует выдерживать между попытками сканирования. Параметр -host_timeout определяет максимальную задержку по времени в миллисекундах при сканировании одного хоста таким образом, что вы можете прерваться через 5 минут, если сканирование порта занимает слишком много времени. Параметр rtt_timeout определяет, время ожидания ответа в миллисекундах.
| Наименование | Время между зондированиями | Время, потраченное на один хост | Тайм-аут на ответ о зондировании | Использование параллельных зондирований |
|---|---|---|---|---|
Paranoid |
5 минут | Без ограничений | 5 минут | нет |
Sneaky |
15 секунд | Без ограничений | 15 секунд | нет |
Polite |
0.4 секунд | Без ограничений | 6 секунд (10 макс) | нет |
Normal |
нет | Без ограничений | 6 секунд (10 макс) | нет |
Aggressive |
нет | 5 минут | 1 секунда (1.5 макс) | да |
Insane |
нет | 75 секунд | 0.3 секунд макс | да |
| scan_delay | host_timeout | initial_rtt_timeout min_rtt_timeout max_rtt_timeout | max_parallelism |
Nmap по умолчанию всегда ожидает ответа около 0.3 секунды (300 миллисекунд). Он запускается с начальным значением rtt_timeout (по умолчанию 6 секунд) и затем последовательно уменьшает или увеличивает значение в зависимости от предыдущих значений. Это позволяет оптимизировать производительность сканирования. Если хост отзывается быстро, то параметр rtt_timeout уменьшается. Если задержка слишком велика, nmap увеличивает параметр rtt_timeout. Но величина задержки по времени всегда остается в пределах между максимальным и минимальным значением. Малое значение параметра rtt_timeout увеличивает шансы ошибочного диагноза о состоянии порта для системы, которая реагирует не слишком быстро.
Параметр -max_parallelism определяет количество одновременно производимых попыток сканирования. Задание в качестве значения параметра 1 отключает параллельное выполнение сканирования. По умолчанию, nmap параллельно выполняет 36 попыток сканирования, если не задано иное значение. Вы можете задать для nmap существенно большее количество соединений для сканирования, используя параметр -M. В исходных кодах программы nmap задано предельное значение числа соединений 1025.
Если на удаленном хосте, который вы сканируете, выполняется программа identd, которая по умолчанию прослушивает 113 порт, nmap попытается найти информацию о пользователях, выполняющих определенные процессы. Identd может сообщить вам такую информацию, позволив тем самым найти серверы, запущенные с полномочиями пользователя root. Переполнение буфера на уязвимой службе - достойная плата за запуск программы с такими полномочиями. Воспользуйтесь флагом -I, чтобы задействовать такой тип сканирования.
bash-2.04$ nmap -I 192.168.1.210 Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Interesting ports on (192.168.1.210): (The 1535 ports scanned but not shown below are in state: closed) Port State Service Owner 21/tcp open ftp root 22/tcp open ssh root 23/tcp open telnet root 80/tcp open http nobody 111/tcp open sunrpc bin 113/tcp open auth nobody 512/tcp open exec root 513/tcp open login root 514/tcp open shell root 884/tcp open unknown root 889/tcp open unknown root 1024/tcp open kdm bjohnson 1032/tcp open iad3 bjohnson 6000/tcp open X11 root Nmap run completed - 1 IP address (1 host up) scanned in 3 seconds
Мы обнаружили несколько сервисов, выполняющихся с полномочиями пользователя root, включая ftp и telnet. Далее мы можем соединиться напрямую с этими портами, чтобы определить версии соответствующего программного обеспечения и вновь проверить их с точки зрения известных прорех в безопасности. Уязвимые службы FTP и Telnet на этой машине дают взломщику возможность получить доступ к системе с полномочиями суперпользователя.
Nmap должен установить соединение со службой identd, чтобы получить эту информацию, флаг -I невозможно использовать в режиме скрытого сканирования.Одной из наиболее часто употребляемых возможностей, которые предоставляет nmap, является удаленная идентификация хоста. Nmap, просто осуществляя сканирование по сети, зачастую может сообщить вам, какая операционная система выполняется на хосте, а также дать некоторую информацию о номере версии и релиза. Как это делается? Если задан флаг -O, nmap использует несколько различных приемов для поиска некоторых характерных признаков в TCP/IP-пакетах, возвращаемых хостом. Посылая специально созданные TCP- и UDP-заголовки, nmap может получить некоторые сведения о том, как удаленный хост осуществляет взаимодействие по протоколу TCP/IP. Если затем проанализировать информацию, то ее можно сравнить с известными признаками, которые хранятся в файле nmap-os-fingerprints. Этот файл поддерживается разработчиками nmap. Если вы сканируете хост с известной операционной системой, используя флаг -O, и nmap не может ее распознать, то он выводит зашифрованный результат тестирования и сетевой
адрес, чтобы можно было послать информацию разработчикам. Просто сбросьте информацию о тестировании и название операционной системы, и она будет включена в следующую версию Nmap.
Флаг определения ОС также может обеспечить анализ TCP-пакетов с целью определения информации типа общей продолжительности работы системы с момента последней перезагрузки (используя отметку времени в TCP/IP ) и предсказуемость последовательного номера. Предсказуемая последовательность номеров упрощает возможность имитации TCP-соединения посредством перехвата пакетов и угадывания последовательности номеров.
Дополнительную информацию об определении ОС при помощи nmap вы получите из примеров в конце этого раздела.
В нашей дискуссии об использовании nmap мы уже рассмотрели большое количество параметров командной строки. Коротко рассмотрим еще несколько параметров, о которых мы еще не упоминали. В списке ниже приводится информация об этих параметрах.
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 добавляет отладочную информацию. Вы можете использовать оба параметра для получения расширенной и отладочной информации одновременно.tee. Nmap предоставляет возможность ведения журнала сканирования:-oN осуществляет запись в журнал всякий раз после появления ее на экране в удобном для чтения формате. Обычно используется при сканировании нескольких машин;-oM осуществляет вывод в файл в машинно-читаемом формате (который может быть вновь интерпретирован с использованием Nmap );-oS выводит информацию в " script kiddie" виде - может быть неудобочитаем.-iR, вы можете генерировать номера хостов для сканирования случайным образом (если это вам удобно), или считывать номера хостов из файла, содержащего имена хостов или IP-адреса, разделенные пробелом, табуляцией или идущие с новой строки.nmap на необходимость сканирования только "известных" (описанных в файле nmap-services ) портов. Без этого параметра nmap сканирует порты с номерами от 1 до 1024 и любые другие порты, которые включены в файл nmap-services (или в файле / etc/services ). Если для сканирования протоколов используется параметр -sO, nmap вместо последовательного сканирования всех 256 протоколов использует встроенный файл протоколов ( Nmap -protocols).nmap самостоятельно обрабатывает такую ситуацию.TCP/20 (предназначенного для данных ftp ), TCP/80 (предназначенного для Web-трафика) или UDP/53 (предназначенного для работы DNS).. Программа имеет много таких же как и nmap параметров, но использует экранные формы и меню для ввода информации от пользователя и сканирования конфигурации. Программа выглядит куда приятней и проще в использовании, но у нее по-прежнему остается много настроечных параметров, вводимых из командной строки.
(рис 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
Обратите внимание на синтаксис при спецификации цели. В отношении портов мы можем специфицировать 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
Совершенно очевидно, что порты были просканированы, но эти службы не смогли определить IP-адрес клиента. Это потому, что nmap послал пакет сброса ( ) после завершения 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
Nmap верно определил наши машины Linux и Windows. Он даже определил время безостановочной работы Linux. Тем не менее, у nmap были проблемы с нашим маршрутизатором Linksys. Мы сейчас можем послать этот отпечаток пальца разработчикам nmap, и этот Linksys будет узнаваемым в следующей версии nmap.
). Представляет собой коммерческий продукт, но вы можете загрузить 30-дневную пробную версию по адресу http://www.netscantools.com/. Загружаемый файл для версии 4.22 составляет 1.5Мб. Профессиональную версию программы надо покупать.
(рис 6.2) Окно NetScanToolsNetScanTools представляет собой приятный графический интерфейс к большому количеству свободно-доступных утилит командной строки, которые были описаны в лекции "Системные средства с открытым программным кодом: основы": Ping, , , и другие им подобные. Он также взаимодействует с несколькими вышедшими из употребления службами типа echo, daytime, quote и , которые не слишком широко распространены в сети Internet. Многие из экранных закладок интерфейса NetScanTools, такие как TimeSync, Database Tests, WinSock Info, NetBios Info и IDENT Server, используются для просмотра информации или управления сервисами на хосте, где выполняется программа. Вдобавок, программа может запускать telnet-, FTP- и HTTP -приложения. Программа представляет собой централизованное средство для получения информации о сети и управления сканированием.
Три наиболее используемые возможности сосредоточены на закладках ) может использоваться для сканирования интервала IP-адресов работающих хостов, аналогично запуску nmap -sP. Введите начальное и конечное значения IP-адресов и нажмите кнопку Start. NetScan проведет тестирование заданных вами хостов с использованием Ping, DNS-запросов и некоторых дополнительных NetScan дает возможность сохранить полученную информацию в текстовый файл или обновить HOSTS-файл на вашей машине с использованием полученной информации.
(рис 6.3) Закладка NetScanЗакладка ) представляет собой раздел NetScan для сканирования портов. Вы можете определить один хост или интервал хостов для сканирования, а также интервал портов и время сканирования. Результаты сканирования отображаются в виде дерева. Реагирующие порты помечены зеленым цветом, а зеленый символ "d" обозначает, что в процессе сканирования от порта удалось получить некоторые данные. Дважды щелкнув мышью на помеченном зеленым символом "d" порте, вы можете увидеть полученные данные. Эта информация получена с использованием перехвата заголовков и может быть использована для определения типа и версии сервисов, прослушивающих данный порт.
У NetScanTools нет широких возможностей сокрытия сканирования, но он позволяет сканировать интервалы IP-адресов и портов и управлять временными параметрами сканирования. Тем не менее, если мы посмотрим в nmap. Поскольку NetScan закрывает свои соединения с использованием запроса FIN вместо , в системном журнале можно зафиксировать IP-адрес сканера.
(рис 6.4) Закладка Port ProbeMar 15 21:31:18 originix in.ftpd[1794]: connect from 192.168.1.101 Mar 15 21:31:19 originix in.telnetd[1796]: connect from 192.168.1.101 Mar 15 21:31:23 originix sshd[1795]: Did not receive ident string from 192.168.1.101 Mar 15 21:31:24 originix telnetd[1796]: ttloop: peer died: Invalid or incomplete multibyte or wide character Mar 15 21:31:24 originix ftpd[1794]: FTP session closed Mar 15 21:32:27 originix in.rexecd[1797]: connect from 192.168.1.101 Mar 15 21:32:27 originix in.rexecd[1797]: connect from badman Mar 15 21:32:27 originix in.rlogind[1798]: connect from 192.168.1.101 Mar 15 21:32:27 originix in.rshd[1799]: connect from 192.168.1.101 Mar 15 21:32:27 originix rshd[1799]: Connection from 192.168.1.101 on illegal port Mar 15 21:32:34 originix rlogind[1798]: Connection from 192.168.1.101 on illegal port Mar 15 21:32:34 originix rlogind[1798]: PAM pam_end: NULL pam handle passed
Закладка ) позволяет осуществить прямое соединение с заданным портом на заданном хосте и взаимодействовать с программой, прослушивающей этот порт. В предыдущих попытках сканирования от многих портов удалось получить данные (зеленый символ "d"), которые представляют нам информацию о сервисах, работающих на этих портах. Некоторые сервисы, такие как httpd (Web-сервер), могут вернуть данные только в ответ на посланный запрос. Функции, сосредоточенные на закладке, позволяют это сделать. Здесь мы посылаем Web-серверу, расположенному по адресу 192.168.1.100, команду GET / HTTP, сопровождаемую двумя последовательными нажатиями клавиши ENTER, для получения от него некоторой информации. Мы можем определить тип Web-сервера ( Apache ), его версию (1.3.14 для Unix ) и операционную систему, под управлением которой он работает ( RedHat Linux ).
(рис 6.5) Закладка TCP Term
.
Внешний вид пользовательского интерфейса ) похож на интерфейс закладки NetScanTools. У программы нет таких дополнительных возможностей, как у NetScanTools, и они ограничены установкой TCP-сеанса, но имеются основные средства, требующиеся для сканирования.
Поиск имен хостов. В этом сеансе вы можете осуществлять поиск имен хостов и IP-адресов. Также вы можете получить информацию о своей системе и имеющихся сетевых интерфейсах.
(рис 6.6) Заставка SuperScanКонфигурация. Этот раздел дает возможность настроить список портов для SuperScan. По умолчанию SuperScan может сканировать все порты, отмеченные в этом списке. Список портов сохраняется в файле с названием lst, но вы можете задать несколько списков для сканирования с различными целями. Например, программа поставляется с файлом lst, с помощью которого вы можете сканировать порты, чтобы определить, есть ли где-то в вашей сети машины, у которых порты прослушиваются каким-либо из известных "троянских коней".
Вы можете добавить порты в список, изменить порт и имя службы, выбрать порты для сканирования и изменить вспомогательные приложения, которые будут использоваться для получения дополнительной информации от .
Добавить порт в список просто. Чтобы добавить порт для службы FTP, которую мы обнаружили на порту 2121, вводим число 2121 в поле ввода Port. Если мы хотим, чтобы порт стал частью программы сканирования в текущем листе сканирования, мы должны поставить отметку в поле Selected и ввести описание протокола в поле Description - что-то вроде "возможно, кривой FTP-сервер". Определяя программу и параметры для этого порта, мы можем установить для него "вспомогательное приложение". Как только этот порт появится в результатах сканирования, мы можем запустить это вспомогательное приложение для соединения с ним, щелкнув правой кнопкой мыши и выбрав параметр Custom. Для FTP-сервера такой программой может быть системный ftp-клиент (такой как C:\Windows\FTP.exe ), и параметры могут включать любые аргументы командной строки вспомогательного приложения. Если нужно, чтобы SuperScan автоматически запрашивал данные от этого порта в случае, если он обнаружит его открытым в системе,
необходимо определить пробный текст в поле \r\n ), которые позволят получить от сервера номер его версии. Закончив, достаточно просто щелкнуть на кнопке Add. Теперь мы можем включить выбранный порт в любой список портов для сканирования.
(рис 6.7) Добавление портов в списокОпределяя вспомогательные приложения для каждого порта, вы можете использовать это окно для определения основного приложения для служб FTP, Telnet и Web. Эти три параметра могут быть доступны всегда для любого порта в момент, когда вы щелкните правой кнопкой мыши на результатах сканирования.
IP. В этом разделе вы можете задать интервал IP-адресов для сканирования. Использование кнопок поможет вам задать значения для сетей класса C. Отметьте необходимые вам значения сканируемых сетей и SuperScan разберет любой текст в поиске IP-адресов. Это особенно удобно для сканирования подозрительных адресов, которые отображаются в ваших системных журналах.

Scan Type и Scan. В разделе Scan Type, вы можете задать параметры сканирования. Вы можете определить сканирование только с использованием Ping, интервал портов или порты из заданного списка портов. Выбрав параметр " Only Scan Responsive Pings", вы избавите программу от необходимости сканирования неработающих хостов. Выбор параметра " Show Host Responses" заставляет SuperScan протестировать и отобразить любые данные, которые вернет конкретный порт. Раздел Scan дает возможность запустить и остановить сканирование в процессе работы.
SuperScan не может обеспечить скрытого сканирования. Даже если вы снимите пометку "Show Host Responses", SuperScan по-прежнему будет осуществлять процедуру полного соединения и закрывать соединение с использованием запроса FIN, давая, таким образом, возможность сканируемому хосту зафиксировать соединение в системном журнале. Только использование опции connect() scan (-sT) программы nmap, опции маскировки сканирования предлагаемой этой программой, позволяет немедленно прервать соединение после его установки с использованием команды RST . Этот режим сканирования nmap все равно фиксируется большинством служб в своих журналах, но команда RST не дает возможности некоторым службам зафиксировать IP-адрес сканера. SuperScan же дает возможность, при желании, покрасоваться в лучах прожекторов.Timeout и Speed. Эти разделы управляют тем, как долго (в миллисекундах) можно ожидать ответа, и какой перерыв делать между последовательными запросами к хосту. В процессе работы скорость сканирования может контролироваться с помощью индикатора (слайдера), расположенного в самом левом нижнем углу окна.
Рассмотрим все вместе. Мы хотим произвести сканирование Linux-машины (192.168.1.100) и Windows-машины (192.168.1.101) по всем портам в нашем списке между 20 и 80 портами и посмотреть, что сможет определить .
(рис 6.8) Сканирование) для получения любой информации, которую можно получить от этих портов. Обратите внимание на тарабарщину, полученную от 23 порта telnet. Это те самые параметры telnet, о которых упоминалось в лекции "NETCAT и CRYPTCAT". Нет простого пробного текста, который можно было бы использовать для захвата информации, поступающей от telnet-порта в заголовке. В этой ситуации мы можем щелкнуть на информации о 23 порте правой кнопкой мыши и выбрать параметры telnet для соединения с этим портом напрямую, чтобы увидеть заголовок приглашения.
Как уже упоминалось в предыдущей подсказке, эта программа оставляет следы в системном журнале, поскольку требует полного соединения для получения информации. Это плата за то, что вы хотите узнать, что за служба работает на сканируемом порте.
inetd или xinetd ), управляющими Вам уже знакомы два сканера портов, работающих под управлением /. К сожалению, ipEye работает только под управлением Windows 2000 и XP.
Параметры IpEye похожи на аналогичные параметры сканеров портов, которые мы уже рассматривали. Вы можете увеличить промежуток времени между последовательными запросами и изменить исходящий IP-адрес и порт (также поддерживается не слишком удачная функция маскировки).

Чтобы сравнить программу с другими сканерами портов, можно запустить сканирование по сценарию, который уже выполнялся в этой лекции: SYN -сканирование IP-адреса 192.168.1.100 по интервалу портов от 20 до 80. Работа программы и вывод информации представлены ниже.

IpEye дает сводную информацию о своей деятельности. Программа обнаружила открытые FTP-, SSH-, Telnet- и Web-порты и выводит эту информацию в таблице на консоль. У программы нет параметров, обеспечивающих удобный вывод информации, но есть возможность работать скрытно. В системном журнале машины 192.168.1.100 нет никаких следов. У IpEye также есть возможность задать исходящие IP-адреса и порты с использованием параметров - и -sp. Для лучшей маскировки от деятельности IDS имеется параметр -d, позволяющий пользователю осуществлять задержку между последовательными сканированиями портов. По умолчанию значение задержки равно 750 миллисекундам.
Все сканеры портов для .
FScan - наиболее предпочтительный из всех бесплатных сканеров, работающих под управлением Windows, поскольку он обеспечивает возможность UDP-сканирования. Как и для любого UDP-сканера, port unreachable", которые большинство UDP-сканеров используют для определения, открыт UDP-порт или нет.
На следующей иллюстрации представлены результаты UDP-сканирования портов от 130 до 140 для поиска NetBios-служб машины, на которой не установлены фильтры. Вы можете видеть, что по адресу 192.168.1.102 работает служба NetBIOS (UDP-порты 137 и 138).

В остальном FScan похож на nmap и другие сканеры, которые уже упоминались. Вы можете использовать параметр -b для запроса заголовков или получения ответа от портов, с которыми вы соединились, как это показано на следующей иллюстрации.

Это сканирование не так успешно, как проведенное с использованием SuperScan, поскольку невозможно запросить заголовок HTTPD. Это происходит потому, что у нас нет способа задать пробный текст для FScan. Он может послать только возврат каретки и перевод строки и отобразить ответ сервера.
HTTP GET для передачи информации. Web-сервер, работающий на маршрутизаторе Linksys EtherFast Вы можете использовать флаги -c, -d и -t для управления временными параметрами. Можете задать IP-адреса в виде интервала или разделенного запятыми списка (например, 192.168.1.1,192.168.1.100-192.168.1.102), а также значения портов ( -p 21-23,80 или -u 137-138,514). Ниже приведен список аргументов командной строки FScan, взятый непосредственно из файла README.
FScan [-abefhqnv?] [-cditz <n>] [-flo <file>] [-pu <n>[,<n>-<n>]] IP[,IP-IP] -?/-h - shows this help text -a - append to output file (used in conjunction with -o option) -b - get port banners -c - timeout for connection attempts (ms) -d - delay between scans (ms) -e - resolve IP addresses to hostnames -f - read IPs from file (compatible with output from -o) -i - bind to given local port -l - port list file - enclose name in quotes if it contains spaces -n - no port scanning - only pinging (unless you use -q) -o - output file - enclose name in quotes if it contains spaces -p - TCP port(s) to scan (a comma separated list of ports/ranges) -q - quiet mode, do not ping host before scan -r - randomize port order -t - timeout for pings (ms) -u - UDP port(s) to scan (a comma separated list of ports/ranges) -v - verbose mode -z - maximum simultaneous threads to use for scanning
Поскольку /.
Одно из замечательных свойств . Как и с другими UDP-сканерами, фильтры пакетов, перехватывающие сообщения " мы представляем процесс сканирования портов от 1 до 1024 по адресу 192.168.1.102 с задержкой по времени 100 миллисекунд. Видно, что по адресу 192.168.1.102 отзывается Windows-машина, поскольку на портах 137 и 138 выполняется NetBIOS, а на порту 445 SMB поверх IP-протокола, также являющийся службой Microsoft.
(рис 6.9) Примерный интерфейс WUPS
. Udp_scan, как и другие TCP-сканеры для Unix, называемые индикаторами, имеет все требуемые функции, но был отодвинут на задний план более новыми программами.
Как и большинство Unix-программ, udp_scan поставляется в исходных кодах. После загрузки и распаковки архива port-scan.tar.gz вам потребуется войти в директорию с исходными текстами и выполнить команду make.
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_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.
Пример из жизни. Распознавание заголовков
Сбор информации об операционных системах не был таким сложным, каким он может оказаться сейчас. Несколько лет назад пользователи, программисты и системные администраторы не были такими параноиками, озабоченными безопасностью. Когда пользователь обращался с помощью telnet к удаленному хосту, то одновременно с логином хост сообщал пользователю свое имя, тип и версию операционной системы, и даже, вероятно, свое географическое положение - все, не спрашивая сначала у пользователя его действительного имени и пароля.
Операционные системы Unix увлекались разглашением своих биографий при простом TCP-соединении с сервером telnet. Люди могли собирать информацию о хостах в сети, получая список IP-адресов, живущих в сети (вероятно, с помощью fping ) и устанавливая TCP-соединение на порте 23 с каждым хостом, чтобы собирать ответы. Сейчас многие системные администраторы не позволяют приложениям своей сети сообщать так много информации об операционной системе без предшествующей идентификации или авторизации. Однако информация о версии специфических приложений по-прежнему доступна.
Telnet был заменен на Secure Shell ( SSH ). Когда SSH-соединение установлено, сервер выдаст свою версию протокола SSH без запрашивания какой-либо информации от клиента. Сервер обычно ожидает, что клиент идентифицирует себя своей версией SSH-протокола. Этот обмен версиями часто необходим в общении клиент/сервер, чтобы убедиться, что обе стороны говорят на одном языке. Следовательно, Telnet или Netcat, чтобы установить TCP-соединение непосредственно с почтовым или Web-сервером, обычно позволяет получить информацию, которой вы, как правило, не увидите при использовании клиентов, взаимодействующих с этим сервером.
Давайте попробуем кое-что. Во-первых, посмотрим, достаточно ли добра моя Linux-машина, чтобы сообщить нам, с какой версией FTP-сервера она работает (если вообще работает с какой-либо).
[bjohnson@originix ~]$ telnet 192.168.1.100 21 Trying 192.168.1.100... Connected to 192.168.1.100. Escape character is '^]'. 220 originix FTP server (Version wu-2.5.0(1) Tue Sep 21 16:48:12 EDT 1999) ready
Originix сообщил нам не только свою версию FTP. Он был настолько добр, чтобы сообщить нам дату своего создания. Неважно, что она достаточно стара, есть шансы, что у этой версии есть несколько уязвимых моментов, которыми может воспользоваться взломщик. Обратите внимание на эту возможную слабость. Эта техника называется захватом заголовков, и она может сегодня применяться многими сканерами портов (включая SuperScan и FScan ) как часть процесса. Давайте посмотрим, что скажет Web-сервер.
[bjohnson@originix ~]$ telnet 192.168.1.100 80 Trying 192.168.1.100... Connected to 192.168.1.100. Escape character is '^]'. GET / HTTP HTTP/1.1 200 OK Date: Tue, 29 Jan 2002 07:18: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 Content-Type: text/html I don't think you meant to go here. Connection closed by foreign host.
Это было немного сложнее. Когда мы впервые установили соединение, Web-сервер ответил (указывая, что что-то действительно работало на Web-порте), но затем он просто остановился, как будто ждал чего-то от нас. Обычно Web-клиенты запрашивают страницы HTML с Web-сервера. Проведя небольшое исследование на HTTP, я обнаружил, что мне нужно было послать запрос GET на сервер (завершаемый двумя нажатиями клавиши enter ), чтобы получить значимую информацию. Сделав это, я мог увидеть детали заголовка HTTP, которые обычно скрыты Web-клиентом. Этот сервер появляется при запуске версии Apache 1.3.14. Ох! Посмотрите на это! Он также сказал нам, что он работает под RedHat Linux!
Черт возьми, давайте посмотрим, какой заголовок мы получим, когда применим telnet к telnet-серверу хоста.
[bjohnson@originix ~]$ telnet 192.168.1.100 23 Trying 192.168.1.100... Connected to 192.168.1.100. Escape character is '^]'. Dobbylan Linux release 8.1 (Cauliflower) Kernel 2.5.38-02 on an i986 login: telnet close Connection closed. [bjohnson@originix ~]$
Dobbylan Linux? Kernel 2.5? i986? Это не имеет смысла. Последний сеанс с telnet дал нам важный урок: не всегда доверяйте информации, которую дают эти заголовки. Например, редактируя файл /etc/issue.nete на RedHat Linux 6.1, я смог изменить мой заголовок telnet в неидентифицируемую тарабарщину. Однако Web-сервер по-прежнему выдавал секрет о том, что у меня RedHat. Некоторые заголовки сетевых приложений могут быть модифицированы только при изменении действительного исходного кода, но обычно это не сложно сделать.
Хитрость - это важное средство в арсенале каждого, кто занимается защитой. Каждый взломщик должен думать о том, насколько верна информация, которую он собирает. С соответствующим набором средств и навыков сетевой пакет операционной системы может быть модифицирован особым образом, чтобы она выглядела, как другая операционная система! Это довольно сложно, поэтому не ожидайте, что это будет часто случаться. Но это возможно, и вероятность достаточно велика, чтобы заставить взломщика подумать о достоверности имеющейся информации.
Пример из жизни. ОС вручную
За исключением тех нескольких мудреных систем, чьи администраторы потратили время на создание ловушек, большинство систем продаются, как системы "под ключ", и их просто достают из упаковки, включают в электросеть и включают в работу без особой модификации и без отключения служб по умолчанию. Сканер порта системы в этом состоянии выдаст схему порта, что можно, скорее всего, соотнести с конкретной операционной системой. Если вы сканируете порт известной не модифицированной системы, а затем используете это для сравнения с результатами сканирования неизвестных главных машин, то вы зачастую можете обнаружить близкие или почти точные совпадения, что говорит о тождестве удаленной операционной системы.
Большинство систем нельзя определить по схемам портов. Однако, как и по акценту человека можно определить географический регион, из которого он происходит, так и способ, на котором система говорит на TCP/IP, может быть идентифицирующим признаком. Действительные спецификации протокола TCP/IP находятся в комплекте документов, называемом RFCs ( Request For Comments ). Эти документы описывают структуру фактических пакетов данных и то, как реализация стека сети должна упаковывать, передавать, получать и распаковывать пакеты данных.
Спецификации и стандарты, обозначенные в этих документах, считаются директивами для людей, которые пишут и занимаются дизайном программного обеспечения сетевых протоколов на уровне операционной системы. Следуя этим спецификациям, дизайнеры и авторы могут гарантировать, что их сетевые интерфейсы смогут общаться с любым другим.
Однако, как и любые другие хорошо написанные протоколы, и TCP и IP оставляют место для будущего расширения и специального управления пакетами. И TCP и IP имеют место в конце заголовков для того, что называется опциями. Поля опций позволяют реализации TCP/IP хранить необязательную информацию в пакетных заголовках, которые могут быть полезны для других реализаций TCP/IP при получении этих пакетов. Эта область пакетной структуры настолько свободно обозначена, что она оставляет каждому разработчику пакетов TCP/IP немного места для творчества. Один продавец может использовать и выбрать определенные опции, тогда как другие могут выбрать абсолютно другой набор опций. Поскольку каждый продавец выходит со своей собственной реализацией этих заголовков полей, то каждый пакет начинается с указания его собственной цифровой подписи или описательной информации.
Конкретный пакет TCP/IP может быть связан с конкретным поставщиком еще многими способами. IP-пакеты могут содержать 16-ти разрядное идентификационное поле. За исключением того, что эти номера должны быть уникальными, в RFC нет ничего о том, как эти номера должны выбираться (за исключением ограничения размеров поля в байтах). Также пакеты TCP должны содержать сходную информацию в своих заголовках (относящуюся к порядковым номерам). Порядок номеров помогает TCP отслеживать соединение. Каждая сторона соединения TCP выбирает свой исходный порядок номеров в начале соединения. Методы выбора этого начального порядкового номера предложены в спецификации, однако он также может быть выбран разработчиком, поскольку номера не часто повторяются (в противном случае соединения легко путаются). Есть еще две области для настройки и достижения гибкости в реализации пакета TCP/IP. Реализация каждого продавца может быть проанализирована на конфигурацию, обеспечивая больше способов, чтобы снимать отпечатки
пальцев конкретной операционной системы по ее сетевому трафику. Nmap применяет эту технику, чтобы сделать обоснованные предположения об операционной системе каждого сканируемого хоста.
Другие протоколы в TCP/IP могут быть использованы для идентификации операционной системы. Большинство пакетов TCP/IP поставляются со своими собственными утилитами Ping. Эхо-сообщения Internet Control Message Protocol ( ICMP ) имеют поля для необязательных данных, что позволяет использовать эхо-сообщения разного размера, чтобы увидеть, как управляются большие по размеру пакеты данных. Когда пользователь указывает размер данных для эхо-сообщения, утилита Ping затем должна заполнить это сообщение соответствующим количеством данных. Она может заполнить поле данных одними нулями, может использовать повторяющуюся последовательность алфавитно-цифровых символов, или случайные цифры. Смысл в том, что каждая реализация Ping имеет опцию заполнения поля данных чем угодно. Если вы знаете, какой метод использует конкретный Ping операционной системы, то можете идентифицировать это, просто посмотрев, как взаимодействует Ping с хостом.
В лекции "NETCAT и CRYPTCAT" вы узнали, что Netcat можно разнообразно использовать в качестве сканера TCP (Transmission Control Protocol) и UDP (User Datagram Protocol) портов. Однако возможности Netcat по сканированию портов достаточно ограничены, поскольку он разработан для работы с использованием TCP-соединения (без использования специальных скрытых методов). Он может поддерживать соединение только с одним хостом одновременно, и форма вывода выходной информации выглядит весьма убого. Если вы захотите заняться сканированием портов, вам потребуются инструментальные средства, специально предназначенные для сканирования портов и передачи большого объема информации о группе хостов. В настоящей лекции описывается несколько таких инструментальных средств. Каждая из программ может нумеровать TCP- или UDP-порты из заданного промежутка и позволяет посылать на каждый порт специально созданные пакеты для сбора информации. Однако методы, используемые каждым из
программных средств, и их возможности могут несколько отличаться.
Сканирование портов - первый шаг в процессе взлома или предупреждения взлома, поскольку он помогает определить потенциальные цели. Вокруг каждого хоста - независимо от аппаратного и программного обеспечения или выполняемых функций - имеется некоторое количество идентифицируемых особенностей. Внимательный наблюдатель, вооруженный соответствующим инструментарием, может исследовать работающие на машине службы (Web-сервер, FTP-сервер, mail-сервер, и т.д.), номера версий и даже операционную систему, посылая им пакеты данных и анализируя то, как они отвечают.
В современном мире, несмотря на ежедневные инциденты со взломом систем, многие люди размещают свои компьютеры в интернете совершенно без подготовки. Даже в сфере индустрии информационных технологий ленивые системные администраторы могут установить самую последнюю версию Linux на новейший сервер, дополнительное программное обеспечение и позволить ему что-то выполнять. Как только такая система будет подвергнута исследованию, некто получит возможность определить не только то, что система работает под управлением Linux, но и то, какая версия Linux работает, а также номер версии системы.
В первом учебном примере этой лекции вы сможете узнать, как знания о номерах и типах портов на хосте могут помочь определить операционную систему и версию программного обеспечения работающего на этом хосте.
Во втором примере вы сможете узнать, как техника захвата баннеров может быть использована для определения операционной системы, ее версии и географической информации о размещении хоста.
В третьем примере вы узнаете, как можно определить тип операционной системы, просто наблюдая за ее взаимодействием с сетью.
и с легкостью установить его на большинстве Unix-систем (используя последовательность . Для нашего обсуждения мы будем использовать версию nmap для Unix номер 2.54 beta 30.
Одна из причин, по которой nmap так широко используется, состоит в том, что он предоставляет много приемов для сканирования. Вы можете сканировать работающие хосты на предмет наличия TCP-портов, UDP-портов и любых других IP-протоколов. Поскольку мы подробно говорим о том, как nmap обеспечивает сканирование по протоколу TCP, вам понадобятся некоторые знания о том, как осуществляется TCP-соединение. В таблице 6.1 представлены описания наиболее общих флагов, которые могут быть использованы в процессе TCP-соединения.
Когда для определенного порта создано TCP-соединение, клиент посылает TCP-пакет с установленным флагом SYN для инициализации соединения. Если сервер прослушивает этот порт, он посылает пакет с установленными флагами SYN и ACK, подтверждая клиентский запрос на соединение, одновременно запрашивая установление обратного соединения. Затем клиент может послать пакет с установленным флагом ACK, подтверждая запрос SYN от сервера. Такой способ известен как трехходовое установление связи TCP. Когда одна из сторон выполнит передачу другой, она может послать пакет FIN. Другая сторона должна подтвердить этот пакет FIN и послать свое собственное сообщение FIN, ожидая от другой стороны подтверждения того, что соединение действительно закрыто. Для экстренного прерывания соединения любая из сторон может передать пакет с флагом . Простое TCP-взаимодействие между клиентом и сервером представлено ниже.
SYN: "Я запрашиваю соединения".SYN/ACK -клиенту: "Okay; мне необходимо соединение с тобой".ACK -серверу: "Okay".ACK. Если одна из сторон посылает сообщение RST , соединение прерывается немедленно.FIN: "Goodbye".ACK -клиенту (подтверждая получение сообщения FIN ). Затем сервер посылает собственное сообщение FIN: "Okay. Goodbye".ACK -серверу (подтверждая получение его сообщения FIN ): "Okay".Помните об этом, читая следующие разделы. Это поможет вам лучше понять, как nmap и другие сканеры портов получают свою информацию.
| Признак | Описание |
|---|---|
SYN |
Используется для обозначения начала соединения TCP. |
ACK |
Используется для уведомления о получении предыдущего пакета или цикла передачи. |
FIN |
Используется для закрытия соединения TCP. |
|
Используется для внезапного прекращения соединения TCP. |
Если вы интересуетесь только определением, какие хосты в сети работают, то можете использовать метод сканирования с использованием Ping (-sP). Этот метод работает также как fping, когда он посылает ICMP эхо-запросы по заданному промежутку IP-адресов и ожидает ответа. Однако многие хосты на сегодняшний день блокируют ICMP-запросы. В этом случае nmap дает возможность установить с хостом TCP-соединение по 80 порту (по умолчанию). Если он получает что-либо ( SYN/ACK или ), значит хост работает. Если он ничего не получает, хост маркируется как не работающий или отключенный от сети. Если вы хотите всего лишь получить список имен хостов для заданного IP-интервала, попытайтесь использовать опцию -sL.
SYN пакет), сервис может послать в ответ пакет SYN/ACK. Это наглядно показывает, что по этому IP-адресу есть машина. Однако если отсутствует сервис, который прослушивал бы указанный порт, а машина находится в сети, в ответ будет послан пакет RST . Независимо от того, отвечает машина на запрос, или по заданному порту нет работающего сервиса, сам факт такого ответа подтверждает, что по заданному IP-адресу есть машина. Если в ответ на посланный SYN -пакет ничего не получено, это может означать, что по заданному IP-адресу нет никакой машины, или что такой трафик блокируется брандмауэром. 80 порт задан по умолчанию, поскольку большинство брандмауэров и фильтров пропускают Web-трафик. Если никакого ответа не получено, nmap с достаточной степенью уверенности может предположить, что хост не работает. Вы можете изменить номер порта, используемого nmap для TCP Ping, задав в командной строке -PT <port_number>.Основной метод сканирования TCP-портов - это установление TCP-соединения connect() (-sT) с портом, чтобы посмотреть, будет ли получен ответ. То же самое делает TCP-клиент, желая установить соединение (законченное трехходовое соединение), за исключением того, что nmap может разорвать соединение, послав пакет , как только соединение будет установлено. Можно использовать сканирование RPC (-sR) для сканирования любого открытого для RPC-сервиса порта (такого, как portmapper ). Ниже приведены несколько примеров этих способов сканирования.
[bjohnson@originix ~]$ nmap -sT 192.168.1.109 Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ ) Interesting ports on cauliflower (192.168.1.109): (The 1518 ports scanned but not shown below are in state: closed) Port State Service 22/tcp open ssh 111/tcp open sunrpc 884/tcp open unknown 889/tcp open unknown 6000/tcp open X11 Nmap run completed - 1 IP address (1 host up) scanned in 0 seconds [bjohnson@originix ~]$ nmap -sR 192.168.1.109 Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ ) Interesting ports on cauliflower (192.168.1.109): (The 1518 ports scanned but not shown below are in state: closed) Port State Service (RPC) 22/tcp open ssh 111/tcp open sunrpc (rpcbind V2) 884/tcp open (mountd V1-2) 889/tcp open (mountd V1-2) 6000/tcp open X11 Nmap run completed - 1 IP address (1 host up) scanned in 3 seconds
Обратите внимание, как при сканировании -sR используются RPC -команды для определения, есть ли в наличии работающий RPC-сервис. Nmap исследует тип и версию работающих сервисов rpcbind и mountd. Следующая таблица показывает, как выполняется сканирование -sT, -sR и -sP типов.
Nmap посылает на порт хоста |
Nmap получает от порта хоста |
Nmap отвечает |
Nmap принимает решение |
|---|---|---|---|
SYN |
SYN/ACK |
ACK следом за |
Порт открыт; хост работает. |
SYN |
|
- | Порт закрыт; хост работает. |
SYN |
Nothing |
- | Порт блокирован брандмауэром или хост не работает. |
Это великолепно, но поскольку вы всего лишь создали TCP-соединение, оно, скорее всего, будет зарегистрировано службой, предоставившей его.
Nmap позволяет сделать много интересного с TCP-пакетами, которые вы используете для сканирования портов. Во-первых, есть SYN -сканирование ( -sS ), которое создает первую половину TCP-соединения (посылая TCP-пакет с установленным флагом SYN ) но затем ведет себя несколько иначе. Если приходит TCP-пакет с установленным флагом , nmap решает, что порт закрыт и ничего больше не предпринимает. Однако если приходит ответ (о чем свидетельствует пакет с установленным флагом SYN/ACK ), вместо того чтобы подтвердить получение этого пакета, как это было бы при установлении нормального соединения, посылается -пакет, как это показано в следующей таблице. Поскольку трехходовое TCP-соединение не завершено, многие сервисы не регистрируют соединение. Поскольку вы осуществляете манипуляции с некоторыми из этих TCP-флагов на низком уровне, вы не можете реализовать эти типы сканирования, не имея полномочий пользователя root в системе.
Nmap посылает на порт хоста |
Nmap получает от порта хоста |
Nmap отвечает |
Nmap принимает решение |
|---|---|---|---|
SYN |
SYN/ACK |
|
Порт открыт; хост работает. |
SYN |
|
- | Порт закрыт; хост работает. |
SYN |
Nothing | - | Порт блокирован брандмауэром или хост не работает. |
Так же как сервисы могут не регистрировать "незавершенное" соединение, некоторые брандмауэры или системы определения вторжений (IDSs) могут быть настроены на поиск таких типов сканирования. У Nmap есть несколько способов сканирования, но и хорошие IDSs-системы могут поймать вас. Вдобавок, брандмауэр может фильтровать подозрительные пакеты и искажать результаты сканирования.
Вы должны были уже понять, что в любой момент, как только вы посылаете TCP-пакет на закрытый порт, стек TCP/IP на другой стороне готов послать в ответ -пакет. Что же в этом случае происходит с разрешенными TCP пакетами? Если закрытый порт всегда отвечает пакетами , почему бы просто не посылать не имеющие смысла пакеты и не смотреть, что придет в ответ?
FIN -сканирование ( -sF ) посылает пакеты FIN, которые обычно используются для закрытия соединения. Однако, поскольку мы посылаем его прежде, чем соединение было установлено, открытый порт должен игнорировать такой мусор. Закрытый порт по-прежнему будет отвечать пакетом , как это показано в следующей таблице. Nmap предлагает два способа мусорного сканирования: Xmas tree (-sX) (рождественское) сканирование (которое устанавливает FIN, URG, и PUSH флаги TCP-пакета, расцвечивая его подобно новогодней елке) и null -сканирование ( -sN ) (которое выключает все флаги, подобно тому, как это делает hping по умолчанию). Поскольку мы совершаем некоторые манипуляции с пакетами на низком уровне, то такое сканирование также требует полномочий пользователя root. Имейте в виду, что не все стеки TCP/IP реализованы корректно. Даже притом, что открытые порты не посылают -пакеты в ответ на такие виды проверок, некоторые стеки TCP/IP не следуют этим правилам и посылают ответ в любом случае. Это означает, что вы можете ошибочно сделать положительное предположение при использовании такого сканирования для некоторых типов хостов. Также любой хост, защищенный брандмауэром, может вернуть ложный ответ. Nmap предполагает, что порт открыт, если не получает ничего в ответ. Что если брандмауэр блокирует этот ответ? Такое сканирование более скрытое, но оно и менее аккуратное.
Nmap посылает на порт хоста |
Nmap получает от порта хоста |
Nmap принимает решение |
|---|---|---|
FIN |
Nothing | Порт открыт, если хост работает и не защищен брандмауэром. |
FIN |
|
Порт закрыт; хост работает. |
Иногда nmap может сообщить вам, что порт подвергается фильтрации. Это означает, что влияние брандмауэра или фильтра накладывается на возможность nmap точно определить, открыт или закрыт порт. Некоторые брандмауэры, тем не менее, могут только фильтровать входящие соединения (это означает, что они просматривают только входящие SYN -пакеты на конкретном порту). Если вы хотите проверить правила брандмауэра, запустите ACK -сканирование для хоста, находящегося за брандмауэром. Всякий раз, как ACK -пакет (подтверждение) посылается не как часть существующего соединения, принимающая сторона предположительно посылает пакет . Сканирование ACK (-sA) может использовать этот факт для определения, осуществляется ли блокирование или фильтрация порта. Если получен пакет , порт не фильтруется; в противном случае, осуществляется фильтрация, как это показано в следующей таблице. Именно сканирование ACK может показать вам, что конкретный хост защищен брандмауэром.
Nmap посылает на порт хоста |
Nmap получает от порта хоста |
Nmap принимает решение |
|---|---|---|
ACK |
|
Порт не защищен брандмауэром; порт может быть открыт или закрыт; хост работает. |
ACK |
Nothing or ICMP unreachable | Порт блокирован брандмауэром и хост работает. |
Поскольку такое сканирование не может сказать, закрыт ли на самом деле порт или открыт, возможно, вы захотите использовать другие виды сканирования в комбинации с ACK -сканированием. Например, вы можете использовать ACK -сканирование в комбинации с SYN -сканированием ( -sS ), чтобы определить, что хост защищен брандмауэром, который использует полную проверку пакетов или только проверку входящих соединений ( SYN -флаг). В следующем примере используется SYN сканирование только 80 порта, открытого на машине 192.168.1.40. Там также сообщается, что порты 21 и 22 фильтруются и nmap не может определить их статус. ACK -сканирование сообщает нам, что все порты на машине открыты, в то время как SYN -сканирование говорит о том, что производится фильтрация! Это означает, что SSH и FTP на машине 192.168.1.40 подвергаются фильтрации с использованием неполной схемы; поскольку SYN -пакеты блокируются, а ACK - пропускаются.
# nmap -sS 192.168.1.40 Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Interesting ports on (192.168.1.40): (The 1546 ports scanned but not shown below are in state: closed) Port State Service 21/tcp filtered ftp 22/tcp filtered ssh 80/tcp open http Nmap run completed - 1 IP address (1 host up) scanned in 8 seconds # nmap -sA 192.168.1.40 Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) All 1549 scanned ports on (192.168.1.40) are: Unfiltered Nmap run completed - 1 IP address (1 host up) scanned in 7 seconds
Помните, как мы использовали hping в лекции "Системные средства с открытым программным кодом: основы" для подмены исходящего IP-адреса, сканирующего порты и, тем не менее, получали результат? Nmap позволяет вам сделать нечто подобное, применяя Idle-сканирование ( -sI ). Для этого необходимо найти хост, который не пропускает никакого трафика и имеет TCP/IP-стек с известным IP ID-инкрементом (например, Windows всегда использует 256). За подробной информацией о таком сканировании обращайтесь к примеру использования hping в лекции "Системные средства с открытым программным кодом: основы".
Естественно, nmap это тоже делает. Используя флаг -sU, можно посылать пустые UDP-пакеты и ожидать в ответ ICMP-сообщения "port unreachable". Если не получено никаких сообщений в ответ, порт считается открытым, как это показано в следующей таблице. Здесь вы можете видеть несколько возможных ошибок. Если возвращаемые ICMP-сообщения блокируются брандмауэром, это может означать, что все UDP-порты хоста открыты. Также, если UDP-трафик непосредственно блокируется брандмауэром, это по-прежнему означает, что все UDP-порты открыты. Эта та же ловушка, в которую мы попадали, используя Netcat в процессе сканирования UDP-портов. Вдобавок, многие хосты могут посылать наружу только ограниченное число ICMP-сообщений об ошибках в секунду для предотвращения перегрузки сети. Nmap может автоматически корректировать эту ситуацию, если она определяется, но это может очень сильно замедлить сканирование. Поскольку UDP-протокол работает без установления соединения и не ограничен необходимостью
подтверждения получения входящих пакетов, нет полного решения этой проблемы.
Nmap посылает на порт хоста |
Nmap получает от порта хоста |
Nmap принимает решение |
|---|---|---|
| Пустой UDP пакет | Nothing | Возможно, порт открыт, если хост отвечает на Ping (хост работает); возможно, порт закрыт, если брандмауэр блокирует ICMP. |
| Пустой UDP пакет | ICMP порт недоступен | Порт закрыт. |
Nmap по умолчанию пытается послать Ping хосту перед тем, как начать его сканировать. Это особенно важно для правильной интерпретации результатов UDP-сканирования. Если nmap не может послать Ping хосту (или потому, что хост блокирован брандмауэром, или вы отключили такую возможность, вручную используя флаг -P0 ), он не сможет получить правильные результаты.Если вы предприняли неудачную попытку соединения с UDP-портом, хост вернет ICMP-сообщение "port unreachable". То же самое можно сказать и про IP-протоколы. Каждый IP-протокол транспортного уровня имеет соответствующий номер. Наиболее распространены ICMP (1), TCP (6) и UDP (17). У всех IP-пакетов есть поле "protocol", которое показывает тип заголовков пакетов и номер протокола транспортного уровня. Если мы посылаем серию пакетов без заголовка протокола транспортного уровня и с номером протокола 130, который означает протокол семейства IPSEC, называемый , мы можем определить, какой из протоколов реализован на данном хосте. Если мы получаем ICMP-сообщение "protocol unreachable", то этот протокол недоступен. В противном случае - доступен. Этот метод сканирования, называемый сканированием протоколов ( -sO ), страдает теми же самыми проблемами, что и UDP-сканирование в том случае, если брандмауэр блокирует ICMP-сообщения или
непосредственно сам протокол дает ложные ответы.
У nmap есть несколько опций сканирования. Некоторые из них могут помочь скрыть сканирование портов от определения по системным журналам с помощью брандмауэров и IDSs-систем. Вдобавок, nmap предоставляет вам некоторые возможности рандомизации и маскировки, которые предоставляются такими программами, как Netcat и hping.
FTP Bounce. У FTP есть ошибка, которая может дать преимущество при использовании nmap. Когда вы соединяетесь с FTP-сервером при помощи FTP-клиента, ваш клиент взаимодействует с FTP-сервером по 21 порту. Это TCP-соединение называется контрольным соединением ( control ). FTP-сервер требует установления отдельного соединения с клиентом, называемого соединением по данным ( data ), через которое будут передаваться данные. Клиент ожидает от сервера установления соединения по данным на отдельном TCP-порте. Он передает серверу команду PORT, чтобы сообщить ему о необходимости инициировать соединение с клиентским IP-адресом и вновь открытым портом. Этот метод взаимодействия называется активной передачей. Поскольку многие клиентские машины используют трансляцию адресов (NAT) или находятся за брандмауэром во внутренней сети, активное FTP-соединение обычно не работает, поскольку инициированное сервером соединение с клиентом не может
проникнуть внутрь защищенной зоны.
Сосредоточимся на команде PORT. Ее законное использование сообщает FTP-серверу о необходимости установить обратное соединение по данным с только что открытым портом. Но поскольку мы определили для использования не только порт, но и IP-адрес, наш клиент, передавший команду PORT на сервер, может попытаться установить соединение с кем-то, находящимся где-либо. Nmap может использовать такое поведение для сканирования порта с целью определения уязвимого FTP-сервера и интерпретации полученных результатов. Такой прием называется FTP-сканированием. nmap создает активное FTP-соединение с сервером и передает команды PORT, содержащие IP-адрес и порт сканируемого хоста. Затем Nmap может интерпретировать полученные результаты и выводить их в том же самом формате, что и нормальные результаты сканирования порта.
Как найти FTP-сервер, который можно так использовать? Это самая интересная часть. Это ошибка проектирования, а не только недостатки реализации. FTP-серверы, разработанные в соответствии с документом RFC 959 для протокола FTP, должны реализовывать эту возможность. Многие пакеты FTP-серверов, такие как wu-, модифицированы для передачи команды PORT только оригинальному хосту, и многие поставщики операционных систем со встроенными FTP-серверами скорректированы в соответствии с этим. Но некоторые по-прежнему запускают устаревшие или не скорректированные FTP-серверы. Не следует запускать анонимный FTP-сервер, если в этом нет очень серьезной необходимости.
Пойдем дальше. Выберем анонимный FTP-сервер и попытаемся выполнить:
nmap -b anonymous@ftp.lame_host.com -p 6000 192.168.1.200
Предыдущая команда пытается использовать ftp.lame_host.com для сканирования порта с номером 6000 на машине 192.168.1.200, чтобы сообщить, используется ли там X Window-сервер. А вот пример взаимодействия nmap с этим сервером.
Server: 220 LAME_HOST FTP server version 4 ready Client: USER anonymous Server: 331 Guest login OK, send e-mail as password Client: PASS -wwwuser@ Server: 230 Login successful Client: PORT 192,168,1,200,23,112 Server: 200 PORT command successful Client: LIST Server: 150 Opening ASCII connection for "/bin/ls" Server: 226 Transfer complete
Nmap сообщает о необходимости открыть соединение по порту 6000 на машине 192.168.1.200, используя команду PORT. Последние две цифры в конце команды PORT, 23 и 112, представляют собой порт с номером 6000. ( FTP определяет это, умножая первое число на 256 и складывая со вторым числом 23*256+112=6000). Если команда успешно выполнена, появляется возможность выполнить команду LIST. Поскольку это позволяет открыть соединение, порт 6000 открыт на машине 192.168.1.200. Если сервер вместо этого сообщает "425 Can't build data connection", мы можем определить, что порт 6000 закрыт.
Если команда PORT работает, вы можете не только сканировать кого-либо еще, но и порты любой машины, к которой имеет доступ FTP-сервер. Это великолепный способ обойти фильтры портов и брандмауэры, которые обычно не пропускают ваши попытки сканирования. Однако всегда будьте осмотрительны, используя маскировку, подобную этой. Помните, что FTP-серверы могут зафиксировать ваши соединения в журнале. Если кто-либо заподозрит LameHost в сканировании его сети в 13:45 6 января, и у него есть анонимное FTP-соединение с вашей домашней машиной в это же самое время, вы попались.
Даже если вы нашли сервер, уязвимый с точки зрения FTP, это не дает вам возможности сканировать привилегированные порты (с номером ниже 1024), поскольку FTP-клиент обычно не должен прослушивать привилегированные порты в ожидании соединения по данным.
Фрагментация. Опция -f nmap, указывает на необходимость выполнения скрытого сканирования ( -sS, -sF, -sX или -sN ) с использованием фрагментированных IP-пакетов, у которых разорваны TCP-заголовки. Идея состоит в предохранении таких "искаженных" TCP-пакетов с необычными флагами от блокировки брандмауэрами. Эта опция может привести к нарушению в работе некоторых систем и не может корректно работать на всех разновидностях Unix, поэтому применяйте ее осторожно.
Заманивание. Мы беседовали о том, как можно замаскировать сканирование портов, сохранив при этом возможность получения результатов сканирования (вместо того чтобы передавать их на наш неизвестный адрес). Мы также обсуждали, как это сложно сделать (в лекциях "NETCAT и CRYPTCAT" и "Системные средства" и на протяжении всей этой лекции). Nmap дает возможность определить хост "ловушку", используя опцию -D. Идея состоит в определении нескольких "мистических жертв" - хостов в интернете - и задания их в разделенном запятыми списке после флага -D. Nmap будет, как обычно, выполнять роль сканера порта, но при этом определяться среди замаскированных сканеров портов с IP-адресами - ловушками. Системный администратор увидит несколько различных сканеров портов, но только один из них будет настоящим.
-S nmap позволяет вам задать исходящий IP-адрес для ваших пакетов. Вы можете использовать это для создания впечатления, что сканирование производится с заданного вами адреса. Эта функция имеет смысл для хоста с несколькими адресами, но может быть использована для маскировки и создания общего беспорядка. Вы не сможете получить обратно результаты сканирования, но вы можете выставить кого-то, как вредителя. Но будьте осторожны, маскируясь под других людей. В случае если системы обнаружения вторжений или брандмауэры оснащены функциями против приманки, вы можете объявить о себе во всеуслышанье, вместо того чтобы остаться незамеченным.Рандомизация портов и хостов. Nmap по умолчанию перебирает заданные вами порты случайным образом. Вы можете выключить эту возможность, воспользовавшись флагом -r. Если вы задали список хостов для сканирования, то можете задать случайный порядок сканирования, используя флаг -randomize_hosts.
Nmap использует опции планирования по времени, чтобы попытаться скрыть сканирование портов от брандмауэров и систем IDSs, которые используют основанные на временных параметрах алгоритмы обнаружения сканирования. Вдобавок, вы можете определить свою собственную -T. Команда nmap -T Sneaky -sS 192.168.1.100 -p 1-100 позволяет сделать попытку избежать определения сканирования с использованием именованной политики Sneaky и метода сканирования SYN при сканировании первых ста портов на компьютере 192.168.1.100.
Для полной ясности, флаг -scan_delay определяет минимальный временной промежуток в миллисекундах, который следует выдерживать между попытками сканирования. Параметр -host_timeout определяет максимальную задержку по времени в миллисекундах при сканировании одного хоста таким образом, что вы можете прерваться через 5 минут, если сканирование порта занимает слишком много времени. Параметр rtt_timeout определяет, время ожидания ответа в миллисекундах.
| Наименование | Время между зондированиями | Время, потраченное на один хост | Тайм-аут на ответ о зондировании | Использование параллельных зондирований |
|---|---|---|---|---|
Paranoid |
5 минут | Без ограничений | 5 минут | нет |
Sneaky |
15 секунд | Без ограничений | 15 секунд | нет |
Polite |
0.4 секунд | Без ограничений | 6 секунд (10 макс) | нет |
Normal |
нет | Без ограничений | 6 секунд (10 макс) | нет |
Aggressive |
нет | 5 минут | 1 секунда (1.5 макс) | да |
Insane |
нет | 75 секунд | 0.3 секунд макс | да |
| scan_delay | host_timeout | initial_rtt_timeout min_rtt_timeout max_rtt_timeout | max_parallelism |
Nmap по умолчанию всегда ожидает ответа около 0.3 секунды (300 миллисекунд). Он запускается с начальным значением rtt_timeout (по умолчанию 6 секунд) и затем последовательно уменьшает или увеличивает значение в зависимости от предыдущих значений. Это позволяет оптимизировать производительность сканирования. Если хост отзывается быстро, то параметр rtt_timeout уменьшается. Если задержка слишком велика, nmap увеличивает параметр rtt_timeout. Но величина задержки по времени всегда остается в пределах между максимальным и минимальным значением. Малое значение параметра rtt_timeout увеличивает шансы ошибочного диагноза о состоянии порта для системы, которая реагирует не слишком быстро.
Параметр -max_parallelism определяет количество одновременно производимых попыток сканирования. Задание в качестве значения параметра 1 отключает параллельное выполнение сканирования. По умолчанию, nmap параллельно выполняет 36 попыток сканирования, если не задано иное значение. Вы можете задать для nmap существенно большее количество соединений для сканирования, используя параметр -M. В исходных кодах программы nmap задано предельное значение числа соединений 1025.
Если на удаленном хосте, который вы сканируете, выполняется программа identd, которая по умолчанию прослушивает 113 порт, nmap попытается найти информацию о пользователях, выполняющих определенные процессы. Identd может сообщить вам такую информацию, позволив тем самым найти серверы, запущенные с полномочиями пользователя root. Переполнение буфера на уязвимой службе - достойная плата за запуск программы с такими полномочиями. Воспользуйтесь флагом -I, чтобы задействовать такой тип сканирования.
bash-2.04$ nmap -I 192.168.1.210 Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ ) Interesting ports on (192.168.1.210): (The 1535 ports scanned but not shown below are in state: closed) Port State Service Owner 21/tcp open ftp root 22/tcp open ssh root 23/tcp open telnet root 80/tcp open http nobody 111/tcp open sunrpc bin 113/tcp open auth nobody 512/tcp open exec root 513/tcp open login root 514/tcp open shell root 884/tcp open unknown root 889/tcp open unknown root 1024/tcp open kdm bjohnson 1032/tcp open iad3 bjohnson 6000/tcp open X11 root Nmap run completed - 1 IP address (1 host up) scanned in 3 seconds
Мы обнаружили несколько сервисов, выполняющихся с полномочиями пользователя root, включая ftp и telnet. Далее мы можем соединиться напрямую с этими портами, чтобы определить версии соответствующего программного обеспечения и вновь проверить их с точки зрения известных прорех в безопасности. Уязвимые службы FTP и Telnet на этой машине дают взломщику возможность получить доступ к системе с полномочиями суперпользователя.
Nmap должен установить соединение со службой identd, чтобы получить эту информацию, флаг -I невозможно использовать в режиме скрытого сканирования.Одной из наиболее часто употребляемых возможностей, которые предоставляет nmap, является удаленная идентификация хоста. Nmap, просто осуществляя сканирование по сети, зачастую может сообщить вам, какая операционная система выполняется на хосте, а также дать некоторую информацию о номере версии и релиза. Как это делается? Если задан флаг -O, nmap использует несколько различных приемов для поиска некоторых характерных признаков в TCP/IP-пакетах, возвращаемых хостом. Посылая специально созданные TCP- и UDP-заголовки, nmap может получить некоторые сведения о том, как удаленный хост осуществляет взаимодействие по протоколу TCP/IP. Если затем проанализировать информацию, то ее можно сравнить с известными признаками, которые хранятся в файле nmap-os-fingerprints. Этот файл поддерживается разработчиками nmap. Если вы сканируете хост с известной операционной системой, используя флаг -O, и nmap не может ее распознать, то он выводит зашифрованный результат тестирования и сетевой
адрес, чтобы можно было послать информацию разработчикам. Просто сбросьте информацию о тестировании и название операционной системы, и она будет включена в следующую версию Nmap.
Флаг определения ОС также может обеспечить анализ TCP-пакетов с целью определения информации типа общей продолжительности работы системы с момента последней перезагрузки (используя отметку времени в TCP/IP ) и предсказуемость последовательного номера. Предсказуемая последовательность номеров упрощает возможность имитации TCP-соединения посредством перехвата пакетов и угадывания последовательности номеров.
Дополнительную информацию об определении ОС при помощи nmap вы получите из примеров в конце этого раздела.
В нашей дискуссии об использовании nmap мы уже рассмотрели большое количество параметров командной строки. Коротко рассмотрим еще несколько параметров, о которых мы еще не упоминали. В списке ниже приводится информация об этих параметрах.
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 добавляет отладочную информацию. Вы можете использовать оба параметра для получения расширенной и отладочной информации одновременно.tee. Nmap предоставляет возможность ведения журнала сканирования:-oN осуществляет запись в журнал всякий раз после появления ее на экране в удобном для чтения формате. Обычно используется при сканировании нескольких машин;-oM осуществляет вывод в файл в машинно-читаемом формате (который может быть вновь интерпретирован с использованием Nmap );-oS выводит информацию в " script kiddie" виде - может быть неудобочитаем.-iR, вы можете генерировать номера хостов для сканирования случайным образом (если это вам удобно), или считывать номера хостов из файла, содержащего имена хостов или IP-адреса, разделенные пробелом, табуляцией или идущие с новой строки.nmap на необходимость сканирования только "известных" (описанных в файле nmap-services ) портов. Без этого параметра nmap сканирует порты с номерами от 1 до 1024 и любые другие порты, которые включены в файл nmap-services (или в файле / etc/services ). Если для сканирования протоколов используется параметр -sO, nmap вместо последовательного сканирования всех 256 протоколов использует встроенный файл протоколов ( Nmap -protocols).nmap самостоятельно обрабатывает такую ситуацию.TCP/20 (предназначенного для данных ftp ), TCP/80 (предназначенного для Web-трафика) или UDP/53 (предназначенного для работы DNS).. Программа имеет много таких же как и nmap параметров, но использует экранные формы и меню для ввода информации от пользователя и сканирования конфигурации. Программа выглядит куда приятней и проще в использовании, но у нее по-прежнему остается много настроечных параметров, вводимых из командной строки.
(рис 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
Обратите внимание на синтаксис при спецификации цели. В отношении портов мы можем специфицировать 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
Совершенно очевидно, что порты были просканированы, но эти службы не смогли определить IP-адрес клиента. Это потому, что nmap послал пакет сброса ( ) после завершения 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
Nmap верно определил наши машины Linux и Windows. Он даже определил время безостановочной работы Linux. Тем не менее, у nmap были проблемы с нашим маршрутизатором Linksys. Мы сейчас можем послать этот отпечаток пальца разработчикам nmap, и этот Linksys будет узнаваемым в следующей версии nmap.
). Представляет собой коммерческий продукт, но вы можете загрузить 30-дневную пробную версию по адресу http://www.netscantools.com/. Загружаемый файл для версии 4.22 составляет 1.5Мб. Профессиональную версию программы надо покупать.
(рис 6.2) Окно NetScanToolsNetScanTools представляет собой приятный графический интерфейс к большому количеству свободно-доступных утилит командной строки, которые были описаны в лекции "Системные средства с открытым программным кодом: основы": Ping, , , и другие им подобные. Он также взаимодействует с несколькими вышедшими из употребления службами типа echo, daytime, quote и , которые не слишком широко распространены в сети Internet. Многие из экранных закладок интерфейса NetScanTools, такие как TimeSync, Database Tests, WinSock Info, NetBios Info и IDENT Server, используются для просмотра информации или управления сервисами на хосте, где выполняется программа. Вдобавок, программа может запускать telnet-, FTP- и HTTP -приложения. Программа представляет собой централизованное средство для получения информации о сети и управления сканированием.
Три наиболее используемые возможности сосредоточены на закладках ) может использоваться для сканирования интервала IP-адресов работающих хостов, аналогично запуску nmap -sP. Введите начальное и конечное значения IP-адресов и нажмите кнопку Start. NetScan проведет тестирование заданных вами хостов с использованием Ping, DNS-запросов и некоторых дополнительных NetScan дает возможность сохранить полученную информацию в текстовый файл или обновить HOSTS-файл на вашей машине с использованием полученной информации.
(рис 6.3) Закладка NetScanЗакладка ) представляет собой раздел NetScan для сканирования портов. Вы можете определить один хост или интервал хостов для сканирования, а также интервал портов и время сканирования. Результаты сканирования отображаются в виде дерева. Реагирующие порты помечены зеленым цветом, а зеленый символ "d" обозначает, что в процессе сканирования от порта удалось получить некоторые данные. Дважды щелкнув мышью на помеченном зеленым символом "d" порте, вы можете увидеть полученные данные. Эта информация получена с использованием перехвата заголовков и может быть использована для определения типа и версии сервисов, прослушивающих данный порт.
У NetScanTools нет широких возможностей сокрытия сканирования, но он позволяет сканировать интервалы IP-адресов и портов и управлять временными параметрами сканирования. Тем не менее, если мы посмотрим в nmap. Поскольку NetScan закрывает свои соединения с использованием запроса FIN вместо , в системном журнале можно зафиксировать IP-адрес сканера.
(рис 6.4) Закладка Port ProbeMar 15 21:31:18 originix in.ftpd[1794]: connect from 192.168.1.101 Mar 15 21:31:19 originix in.telnetd[1796]: connect from 192.168.1.101 Mar 15 21:31:23 originix sshd[1795]: Did not receive ident string from 192.168.1.101 Mar 15 21:31:24 originix telnetd[1796]: ttloop: peer died: Invalid or incomplete multibyte or wide character Mar 15 21:31:24 originix ftpd[1794]: FTP session closed Mar 15 21:32:27 originix in.rexecd[1797]: connect from 192.168.1.101 Mar 15 21:32:27 originix in.rexecd[1797]: connect from badman Mar 15 21:32:27 originix in.rlogind[1798]: connect from 192.168.1.101 Mar 15 21:32:27 originix in.rshd[1799]: connect from 192.168.1.101 Mar 15 21:32:27 originix rshd[1799]: Connection from 192.168.1.101 on illegal port Mar 15 21:32:34 originix rlogind[1798]: Connection from 192.168.1.101 on illegal port Mar 15 21:32:34 originix rlogind[1798]: PAM pam_end: NULL pam handle passed
Закладка ) позволяет осуществить прямое соединение с заданным портом на заданном хосте и взаимодействовать с программой, прослушивающей этот порт. В предыдущих попытках сканирования от многих портов удалось получить данные (зеленый символ "d"), которые представляют нам информацию о сервисах, работающих на этих портах. Некоторые сервисы, такие как httpd (Web-сервер), могут вернуть данные только в ответ на посланный запрос. Функции, сосредоточенные на закладке, позволяют это сделать. Здесь мы посылаем Web-серверу, расположенному по адресу 192.168.1.100, команду GET / HTTP, сопровождаемую двумя последовательными нажатиями клавиши ENTER, для получения от него некоторой информации. Мы можем определить тип Web-сервера ( Apache ), его версию (1.3.14 для Unix ) и операционную систему, под управлением которой он работает ( RedHat Linux ).
(рис 6.5) Закладка TCP Term
.
Внешний вид пользовательского интерфейса ) похож на интерфейс закладки NetScanTools. У программы нет таких дополнительных возможностей, как у NetScanTools, и они ограничены установкой TCP-сеанса, но имеются основные средства, требующиеся для сканирования.
Поиск имен хостов. В этом сеансе вы можете осуществлять поиск имен хостов и IP-адресов. Также вы можете получить информацию о своей системе и имеющихся сетевых интерфейсах.
(рис 6.6) Заставка SuperScanКонфигурация. Этот раздел дает возможность настроить список портов для SuperScan. По умолчанию SuperScan может сканировать все порты, отмеченные в этом списке. Список портов сохраняется в файле с названием lst, но вы можете задать несколько списков для сканирования с различными целями. Например, программа поставляется с файлом lst, с помощью которого вы можете сканировать порты, чтобы определить, есть ли где-то в вашей сети машины, у которых порты прослушиваются каким-либо из известных "троянских коней".
Вы можете добавить порты в список, изменить порт и имя службы, выбрать порты для сканирования и изменить вспомогательные приложения, которые будут использоваться для получения дополнительной информации от .
Добавить порт в список просто. Чтобы добавить порт для службы FTP, которую мы обнаружили на порту 2121, вводим число 2121 в поле ввода Port. Если мы хотим, чтобы порт стал частью программы сканирования в текущем листе сканирования, мы должны поставить отметку в поле Selected и ввести описание протокола в поле Description - что-то вроде "возможно, кривой FTP-сервер". Определяя программу и параметры для этого порта, мы можем установить для него "вспомогательное приложение". Как только этот порт появится в результатах сканирования, мы можем запустить это вспомогательное приложение для соединения с ним, щелкнув правой кнопкой мыши и выбрав параметр Custom. Для FTP-сервера такой программой может быть системный ftp-клиент (такой как C:\Windows\FTP.exe ), и параметры могут включать любые аргументы командной строки вспомогательного приложения. Если нужно, чтобы SuperScan автоматически запрашивал данные от этого порта в случае, если он обнаружит его открытым в системе,
необходимо определить пробный текст в поле \r\n ), которые позволят получить от сервера номер его версии. Закончив, достаточно просто щелкнуть на кнопке Add. Теперь мы можем включить выбранный порт в любой список портов для сканирования.
(рис 6.7) Добавление портов в списокОпределяя вспомогательные приложения для каждого порта, вы можете использовать это окно для определения основного приложения для служб FTP, Telnet и Web. Эти три параметра могут быть доступны всегда для любого порта в момент, когда вы щелкните правой кнопкой мыши на результатах сканирования.
IP. В этом разделе вы можете задать интервал IP-адресов для сканирования. Использование кнопок поможет вам задать значения для сетей класса C. Отметьте необходимые вам значения сканируемых сетей и SuperScan разберет любой текст в поиске IP-адресов. Это особенно удобно для сканирования подозрительных адресов, которые отображаются в ваших системных журналах.

Scan Type и Scan. В разделе Scan Type, вы можете задать параметры сканирования. Вы можете определить сканирование только с использованием Ping, интервал портов или порты из заданного списка портов. Выбрав параметр " Only Scan Responsive Pings", вы избавите программу от необходимости сканирования неработающих хостов. Выбор параметра " Show Host Responses" заставляет SuperScan протестировать и отобразить любые данные, которые вернет конкретный порт. Раздел Scan дает возможность запустить и остановить сканирование в процессе работы.
SuperScan не может обеспечить скрытого сканирования. Даже если вы снимите пометку "Show Host Responses", SuperScan по-прежнему будет осуществлять процедуру полного соединения и закрывать соединение с использованием запроса FIN, давая, таким образом, возможность сканируемому хосту зафиксировать соединение в системном журнале. Только использование опции connect() scan (-sT) программы nmap, опции маскировки сканирования предлагаемой этой программой, позволяет немедленно прервать соединение после его установки с использованием команды RST . Этот режим сканирования nmap все равно фиксируется большинством служб в своих журналах, но команда RST не дает возможности некоторым службам зафиксировать IP-адрес сканера. SuperScan же дает возможность, при желании, покрасоваться в лучах прожекторов.Timeout и Speed. Эти разделы управляют тем, как долго (в миллисекундах) можно ожидать ответа, и какой перерыв делать между последовательными запросами к хосту. В процессе работы скорость сканирования может контролироваться с помощью индикатора (слайдера), расположенного в самом левом нижнем углу окна.
Рассмотрим все вместе. Мы хотим произвести сканирование Linux-машины (192.168.1.100) и Windows-машины (192.168.1.101) по всем портам в нашем списке между 20 и 80 портами и посмотреть, что сможет определить .
(рис 6.8) Сканирование) для получения любой информации, которую можно получить от этих портов. Обратите внимание на тарабарщину, полученную от 23 порта telnet. Это те самые параметры telnet, о которых упоминалось в лекции "NETCAT и CRYPTCAT". Нет простого пробного текста, который можно было бы использовать для захвата информации, поступающей от telnet-порта в заголовке. В этой ситуации мы можем щелкнуть на информации о 23 порте правой кнопкой мыши и выбрать параметры telnet для соединения с этим портом напрямую, чтобы увидеть заголовок приглашения.
Как уже упоминалось в предыдущей подсказке, эта программа оставляет следы в системном журнале, поскольку требует полного соединения для получения информации. Это плата за то, что вы хотите узнать, что за служба работает на сканируемом порте.
inetd или xinetd ), управляющими Вам уже знакомы два сканера портов, работающих под управлением /. К сожалению, ipEye работает только под управлением Windows 2000 и XP.
Параметры IpEye похожи на аналогичные параметры сканеров портов, которые мы уже рассматривали. Вы можете увеличить промежуток времени между последовательными запросами и изменить исходящий IP-адрес и порт (также поддерживается не слишком удачная функция маскировки).

Чтобы сравнить программу с другими сканерами портов, можно запустить сканирование по сценарию, который уже выполнялся в этой лекции: SYN -сканирование IP-адреса 192.168.1.100 по интервалу портов от 20 до 80. Работа программы и вывод информации представлены ниже.

IpEye дает сводную информацию о своей деятельности. Программа обнаружила открытые FTP-, SSH-, Telnet- и Web-порты и выводит эту информацию в таблице на консоль. У программы нет параметров, обеспечивающих удобный вывод информации, но есть возможность работать скрытно. В системном журнале машины 192.168.1.100 нет никаких следов. У IpEye также есть возможность задать исходящие IP-адреса и порты с использованием параметров - и -sp. Для лучшей маскировки от деятельности IDS имеется параметр -d, позволяющий пользователю осуществлять задержку между последовательными сканированиями портов. По умолчанию значение задержки равно 750 миллисекундам.
Все сканеры портов для .
FScan - наиболее предпочтительный из всех бесплатных сканеров, работающих под управлением Windows, поскольку он обеспечивает возможность UDP-сканирования. Как и для любого UDP-сканера, port unreachable", которые большинство UDP-сканеров используют для определения, открыт UDP-порт или нет.
На следующей иллюстрации представлены результаты UDP-сканирования портов от 130 до 140 для поиска NetBios-служб машины, на которой не установлены фильтры. Вы можете видеть, что по адресу 192.168.1.102 работает служба NetBIOS (UDP-порты 137 и 138).

В остальном FScan похож на nmap и другие сканеры, которые уже упоминались. Вы можете использовать параметр -b для запроса заголовков или получения ответа от портов, с которыми вы соединились, как это показано на следующей иллюстрации.

Это сканирование не так успешно, как проведенное с использованием SuperScan, поскольку невозможно запросить заголовок HTTPD. Это происходит потому, что у нас нет способа задать пробный текст для FScan. Он может послать только возврат каретки и перевод строки и отобразить ответ сервера.
HTTP GET для передачи информации. Web-сервер, работающий на маршрутизаторе Linksys EtherFast Вы можете использовать флаги -c, -d и -t для управления временными параметрами. Можете задать IP-адреса в виде интервала или разделенного запятыми списка (например, 192.168.1.1,192.168.1.100-192.168.1.102), а также значения портов ( -p 21-23,80 или -u 137-138,514). Ниже приведен список аргументов командной строки FScan, взятый непосредственно из файла README.
FScan [-abefhqnv?] [-cditz <n>] [-flo <file>] [-pu <n>[,<n>-<n>]] IP[,IP-IP] -?/-h - shows this help text -a - append to output file (used in conjunction with -o option) -b - get port banners -c - timeout for connection attempts (ms) -d - delay between scans (ms) -e - resolve IP addresses to hostnames -f - read IPs from file (compatible with output from -o) -i - bind to given local port -l - port list file - enclose name in quotes if it contains spaces -n - no port scanning - only pinging (unless you use -q) -o - output file - enclose name in quotes if it contains spaces -p - TCP port(s) to scan (a comma separated list of ports/ranges) -q - quiet mode, do not ping host before scan -r - randomize port order -t - timeout for pings (ms) -u - UDP port(s) to scan (a comma separated list of ports/ranges) -v - verbose mode -z - maximum simultaneous threads to use for scanning
Поскольку /.
Одно из замечательных свойств . Как и с другими UDP-сканерами, фильтры пакетов, перехватывающие сообщения " мы представляем процесс сканирования портов от 1 до 1024 по адресу 192.168.1.102 с задержкой по времени 100 миллисекунд. Видно, что по адресу 192.168.1.102 отзывается Windows-машина, поскольку на портах 137 и 138 выполняется NetBIOS, а на порту 445 SMB поверх IP-протокола, также являющийся службой Microsoft.
(рис 6.9) Примерный интерфейс WUPS
. Udp_scan, как и другие TCP-сканеры для Unix, называемые индикаторами, имеет все требуемые функции, но был отодвинут на задний план более новыми программами.
Как и большинство Unix-программ, udp_scan поставляется в исходных кодах. После загрузки и распаковки архива port-scan.tar.gz вам потребуется войти в директорию с исходными текстами и выполнить команду make.
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_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.
Пример из жизни. Распознавание заголовков
Сбор информации об операционных системах не был таким сложным, каким он может оказаться сейчас. Несколько лет назад пользователи, программисты и системные администраторы не были такими параноиками, озабоченными безопасностью. Когда пользователь обращался с помощью telnet к удаленному хосту, то одновременно с логином хост сообщал пользователю свое имя, тип и версию операционной системы, и даже, вероятно, свое географическое положение - все, не спрашивая сначала у пользователя его действительного имени и пароля.
Операционные системы Unix увлекались разглашением своих биографий при простом TCP-соединении с сервером telnet. Люди могли собирать информацию о хостах в сети, получая список IP-адресов, живущих в сети (вероятно, с помощью fping ) и устанавливая TCP-соединение на порте 23 с каждым хостом, чтобы собирать ответы. Сейчас многие системные администраторы не позволяют приложениям своей сети сообщать так много информации об операционной системе без предшествующей идентификации или авторизации. Однако информация о версии специфических приложений по-прежнему доступна.
Telnet был заменен на Secure Shell ( SSH ). Когда SSH-соединение установлено, сервер выдаст свою версию протокола SSH без запрашивания какой-либо информации от клиента. Сервер обычно ожидает, что клиент идентифицирует себя своей версией SSH-протокола. Этот обмен версиями часто необходим в общении клиент/сервер, чтобы убедиться, что обе стороны говорят на одном языке. Следовательно, Telnet или Netcat, чтобы установить TCP-соединение непосредственно с почтовым или Web-сервером, обычно позволяет получить информацию, которой вы, как правило, не увидите при использовании клиентов, взаимодействующих с этим сервером.
Давайте попробуем кое-что. Во-первых, посмотрим, достаточно ли добра моя Linux-машина, чтобы сообщить нам, с какой версией FTP-сервера она работает (если вообще работает с какой-либо).
[bjohnson@originix ~]$ telnet 192.168.1.100 21 Trying 192.168.1.100... Connected to 192.168.1.100. Escape character is '^]'. 220 originix FTP server (Version wu-2.5.0(1) Tue Sep 21 16:48:12 EDT 1999) ready
Originix сообщил нам не только свою версию FTP. Он был настолько добр, чтобы сообщить нам дату своего создания. Неважно, что она достаточно стара, есть шансы, что у этой версии есть несколько уязвимых моментов, которыми может воспользоваться взломщик. Обратите внимание на эту возможную слабость. Эта техника называется захватом заголовков, и она может сегодня применяться многими сканерами портов (включая SuperScan и FScan ) как часть процесса. Давайте посмотрим, что скажет Web-сервер.
[bjohnson@originix ~]$ telnet 192.168.1.100 80 Trying 192.168.1.100... Connected to 192.168.1.100. Escape character is '^]'. GET / HTTP HTTP/1.1 200 OK Date: Tue, 29 Jan 2002 07:18: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 Content-Type: text/html I don't think you meant to go here. Connection closed by foreign host.
Это было немного сложнее. Когда мы впервые установили соединение, Web-сервер ответил (указывая, что что-то действительно работало на Web-порте), но затем он просто остановился, как будто ждал чего-то от нас. Обычно Web-клиенты запрашивают страницы HTML с Web-сервера. Проведя небольшое исследование на HTTP, я обнаружил, что мне нужно было послать запрос GET на сервер (завершаемый двумя нажатиями клавиши enter ), чтобы получить значимую информацию. Сделав это, я мог увидеть детали заголовка HTTP, которые обычно скрыты Web-клиентом. Этот сервер появляется при запуске версии Apache 1.3.14. Ох! Посмотрите на это! Он также сказал нам, что он работает под RedHat Linux!
Черт возьми, давайте посмотрим, какой заголовок мы получим, когда применим telnet к telnet-серверу хоста.
[bjohnson@originix ~]$ telnet 192.168.1.100 23 Trying 192.168.1.100... Connected to 192.168.1.100. Escape character is '^]'. Dobbylan Linux release 8.1 (Cauliflower) Kernel 2.5.38-02 on an i986 login: telnet close Connection closed. [bjohnson@originix ~]$
Dobbylan Linux? Kernel 2.5? i986? Это не имеет смысла. Последний сеанс с telnet дал нам важный урок: не всегда доверяйте информации, которую дают эти заголовки. Например, редактируя файл /etc/issue.nete на RedHat Linux 6.1, я смог изменить мой заголовок telnet в неидентифицируемую тарабарщину. Однако Web-сервер по-прежнему выдавал секрет о том, что у меня RedHat. Некоторые заголовки сетевых приложений могут быть модифицированы только при изменении действительного исходного кода, но обычно это не сложно сделать.
Хитрость - это важное средство в арсенале каждого, кто занимается защитой. Каждый взломщик должен думать о том, насколько верна информация, которую он собирает. С соответствующим набором средств и навыков сетевой пакет операционной системы может быть модифицирован особым образом, чтобы она выглядела, как другая операционная система! Это довольно сложно, поэтому не ожидайте, что это будет часто случаться. Но это возможно, и вероятность достаточно велика, чтобы заставить взломщика подумать о достоверности имеющейся информации.
Пример из жизни. ОС вручную
За исключением тех нескольких мудреных систем, чьи администраторы потратили время на создание ловушек, большинство систем продаются, как системы "под ключ", и их просто достают из упаковки, включают в электросеть и включают в работу без особой модификации и без отключения служб по умолчанию. Сканер порта системы в этом состоянии выдаст схему порта, что можно, скорее всего, соотнести с конкретной операционной системой. Если вы сканируете порт известной не модифицированной системы, а затем используете это для сравнения с результатами сканирования неизвестных главных машин, то вы зачастую можете обнаружить близкие или почти точные совпадения, что говорит о тождестве удаленной операционной системы.
Большинство систем нельзя определить по схемам портов. Однако, как и по акценту человека можно определить географический регион, из которого он происходит, так и способ, на котором система говорит на TCP/IP, может быть идентифицирующим признаком. Действительные спецификации протокола TCP/IP находятся в комплекте документов, называемом RFCs ( Request For Comments ). Эти документы описывают структуру фактических пакетов данных и то, как реализация стека сети должна упаковывать, передавать, получать и распаковывать пакеты данных.
Спецификации и стандарты, обозначенные в этих документах, считаются директивами для людей, которые пишут и занимаются дизайном программного обеспечения сетевых протоколов на уровне операционной системы. Следуя этим спецификациям, дизайнеры и авторы могут гарантировать, что их сетевые интерфейсы смогут общаться с любым другим.
Однако, как и любые другие хорошо написанные протоколы, и TCP и IP оставляют место для будущего расширения и специального управления пакетами. И TCP и IP имеют место в конце заголовков для того, что называется опциями. Поля опций позволяют реализации TCP/IP хранить необязательную информацию в пакетных заголовках, которые могут быть полезны для других реализаций TCP/IP при получении этих пакетов. Эта область пакетной структуры настолько свободно обозначена, что она оставляет каждому разработчику пакетов TCP/IP немного места для творчества. Один продавец может использовать и выбрать определенные опции, тогда как другие могут выбрать абсолютно другой набор опций. Поскольку каждый продавец выходит со своей собственной реализацией этих заголовков полей, то каждый пакет начинается с указания его собственной цифровой подписи или описательной информации.
Конкретный пакет TCP/IP может быть связан с конкретным поставщиком еще многими способами. IP-пакеты могут содержать 16-ти разрядное идентификационное поле. За исключением того, что эти номера должны быть уникальными, в RFC нет ничего о том, как эти номера должны выбираться (за исключением ограничения размеров поля в байтах). Также пакеты TCP должны содержать сходную информацию в своих заголовках (относящуюся к порядковым номерам). Порядок номеров помогает TCP отслеживать соединение. Каждая сторона соединения TCP выбирает свой исходный порядок номеров в начале соединения. Методы выбора этого начального порядкового номера предложены в спецификации, однако он также может быть выбран разработчиком, поскольку номера не часто повторяются (в противном случае соединения легко путаются). Есть еще две области для настройки и достижения гибкости в реализации пакета TCP/IP. Реализация каждого продавца может быть проанализирована на конфигурацию, обеспечивая больше способов, чтобы снимать отпечатки
пальцев конкретной операционной системы по ее сетевому трафику. Nmap применяет эту технику, чтобы сделать обоснованные предположения об операционной системе каждого сканируемого хоста.
Другие протоколы в TCP/IP могут быть использованы для идентификации операционной системы. Большинство пакетов TCP/IP поставляются со своими собственными утилитами Ping. Эхо-сообщения Internet Control Message Protocol ( ICMP ) имеют поля для необязательных данных, что позволяет использовать эхо-сообщения разного размера, чтобы увидеть, как управляются большие по размеру пакеты данных. Когда пользователь указывает размер данных для эхо-сообщения, утилита Ping затем должна заполнить это сообщение соответствующим количеством данных. Она может заполнить поле данных одними нулями, может использовать повторяющуюся последовательность алфавитно-цифровых символов, или случайные цифры. Смысл в том, что каждая реализация Ping имеет опцию заполнения поля данных чем угодно. Если вы знаете, какой метод использует конкретный Ping операционной системы, то можете идентифицировать это, просто посмотрев, как взаимодействует Ping с хостом.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.