Сканер портов nmap
Программа nmap относится к числу сканеров портов и сканеров безопасности систем.
Программа позволяет администраторам сканировать отдельные хосты и целые сети, определяя поддерживаемые типы сервиса и другие параметры. Nmap поддерживает множество методов сканирования — UDP, TCP connect(), TCP SYN (half open), ftp proxy (bounce attack), Reverse-ident, ICMP (ping sweep), FIN, ACK sweep, Xmas Tree, SYN sweep, IP Protocol, Null scan. Более подробное описание этих методов приводится ниже. Кроме обычного сканирования программа nmap может определять тип операционной системы удаленного хоста, выполнять скрытое сканирование, параллельное сканирование, детектирование фильтров, прямое сканирование RPC (без portmapper), сканирование с использованием фрагментов и др.
Для выполнения большинства операций nmap требуются полномочия пользователя root, поскольку многие интерфейсы ядра (в частности, сокеты raw) требуют привилегий root. При запуске nmap от имени обычного пользователя значительная часть функций программы теряется.
По результатам работы программа nmap генерирует отчет, содержащий сведения об интересных портах просканированных хостов, если таковые были обнаружены. Для “хорошо известных” портов nmap всегда указывает имя сервиса, номер порта, его состояние и протокол. Состояние порта может быть open (открыт), filtered (фильтруется) или unfiltered (не фильтруется). Порт считается открытым если хост принимает адресованные в этот порт соединения. К фильтруемым относятся порты, которые активны, но доступ к ним заблокирован межсетевым экраном, пакетным фильтром или иными системами контроля трафика, которые не позволили программе nmap организовать соединение с портом. К нефильтруемым портам относятся те, которые программа nmap определила как закрытые, не встретив при этом брандмауэра или иного средства предотвращения доступа к портам. Это состояние является обычным для большинства портов, поэтому они указываются в отчете лишь в тех случаях, когда большинство просканированных портов оказались фильтруемыми.
В зависимости от заданных опций nmap может также определять ряд характеристик удаленного хоста – операционную систему, порядковые номера TCP, имена пользователей, которые работают с программами, привязанными к портам, доменное имя DNS и другие параметры.
Синтаксис
nmap [<тип сканирования>] [<опции>] <хост или сеть #1 … [#N]>
Опции
В силу широких возможностей программы число опций командной строки, управляющих режимом и параметрами сканирования весьма велико. Программа nmap проверяет заданный в командной строке набор опций и при наличии в них ошибок или противоречий выдает пользователю предупреждение. Список опций с краткими комментариями можно получить по команде nmap -h, более подробное описание вы получите с помощью команды man nmap.
Ниже приводятся описания поддерживаемых программой опций, объединенных в группы по их назначению.
). При сканировании Stealth FIN в качестве зондов передаются пакеты с флагом FIN, метод Stealth Xmas tree использует пакеты с флагами FIN, URG и PUSH, а сканирование Stealth Null основано на передаче пробных пакетов без флагов.
Эти методы не позволяют сканировать большинство систем Windows, поскольку компания Microsoft, по своему обыкновению, проигнорировала стандарт и реализовала протокол как получилось. Существуют и другие системы, в которых реакция на сканирование не соответствует стандарту. Системы Cisco, BSDI, HP/UX, MVS и IRIX передают пакет RST при сканировании открытых портов, хотя в соответствии со стандартом должны просто отбрасывать пакеты.
Вы можете видеть сравнить результаты сканирования одного хоста с использованием методов TCP SYN (рисунок 1) и Stealth FIN (рисунок 2).

Рисунок 1 Результат сканирования TCP SYN

Рисунок 2 Результат сканирования Stealth FIN
Ping-сканирование (-sP)
Иногда бывает достаточно информации о наличии в сети активных хостов. Nmap может выполнять такую проверку путем передачи пакетов ICMP echo request по всем IP-адресам указанной сети. Получение отклика от хоста будет говорить о его активности. Однако, некоторые сайты блокируют пакеты ICMP echo request. В таких случаях nmap может передавать пакеты TCP ACK в указанный порт (по умолчанию 80). Получение в ответ пакета RST будет говорить об активности хоста. Третий вариант состоит в передаче пакетов SYN и ожидании отклика RST или SYN/ACK. Для пользователей, не имеющих привилегий root, применяется метод connect().
По умолчанию для пользователя root программа nmap будет сканировать с помощью методов ICMP и ACK (параллельно). С помощью опции -P вы можете выбрать метод проверки.
Отметим, что ping является стандартным способом проверки доступности хостов и обычно на такое сканирование никто не реагирует как на злой умысел.
Определение версии (-sV)
После определения портов TCP и UDP с помощью одного из методов сканирования система детектирования версий взаимодействует с открытыми портами, пытаясь определить реально работающие порты. Для выбора подходящего метода проверки используется информация из файла nmap-service-probes. Nmap пытается определить связанный с портом протокол (FTP, SSH, telnet, HTTP и т. п.), имя приложения (ISC Bind, Apache httpd, Solaris telnetd и т. п.), номер версии и другие доступные сведения. При компиляции Nmap с поддержкой OpenSSL программа будет пытаться организовать соединение с серверами SSL для определения возможности использования шифрованных соединений. При обнаружении служб RPC используется модуль Nmap RPC grinder для детектирования программы RPC и номера версии этой программы. Добавочная опция —version_trace обеспечит вывод отладочной информации в процессе детектирования версии для удаленного хоста.
Дополнительные сведения о системе детектирования версий вы найдете на сайте http://www.insecure.org/nmap/versionscan.html
Сканирование UDP (-sU)
Этот метод применяется для детектирования открытых портов UDP. Метод основан на передаче пустых пакетов UDP проверяемому хосту. Получение в ответ пакета ICMP port unreachable будет говорить о том, что порт закрыт, а отсутствие такого отклика позволяет предположить наличие открытого порта. Однако зачастую пакеты ICMP unreachable фильтруются межсетевыми экранами, поэтому достоверной при таком сканировании можно считать только информацию о закрытых портах. В некоторых случаях Internet-провайдеры блокируют некоторые “опасные” порты (например 31337 — back orifice и 139 — Windows NetBIOS), что может создать иллюзию открытости таких портов. Не впадайте в панику, если вы обнаружили нечто подобное при сканировании своей системы извне.
Иногда приходится слышать, что сканирование портов UDP не имеет никакого смысла. Автор nmap в качестве контраргумента приводит ситуацию с уязвимостью Solaris rpcbind. Этот сервис можно связать с недокументированным портом UDP, имеющим номер более 32770. Найти такой порт без сканирования UDP достаточно сложно.
Сканирование портов UDP может занять продолжительное время, поскольку на большинстве хостов реализованы рекомендации RFC 1812 (параграф 4.3.2.8) по ограничению скорости передачи откликов ICMP. Например, ядро Linux ограничивает скорость генерации откликов ICMP destination unreachable 80 пакетами в течение 4 секунд с использованием паузы в 250 мсек после превышения заданного порога. В Solaris ограничение еще жестче (около 2 откликов в секунду). Такое ограничение скорости откликов существенно замедляет сканирования. Nmap старается определить скорость откликов и в соответствии с ней задать темп передачи запросов, поскольку в противном случае часть запросов пропадет втуне.
IP-сканирование (-sO)
Этот метод используется для определения поддерживаемых хостом протоколов IP. Метод основан на передаче raw-пакетов IP без дополнительных протокольных заголовков, адресованных всем протоколам проверяемого хоста. Получение отклика ICMP protocol unreachable говорит, что соответствующий протокол не поддерживается хостом, а отсутствие такого сообщения позволяет предположить наличие протокола.
Используемый этим методом вариант передачи пакетов похож на сканирование UDP и ему присущи те же ограничения, связанные с ограничением темпа генерации сообщений ICMP. Однако поле номера протоколов IP имеет размер 8 битов, поэтому проверяется лишь 256 протоколов и это не должно занять много времени.
Метод скрытого сканирования Idlescan (-sI)
-sI <хост[:порт]>
Этот метод позволяет полностью замести следы сканирования портов TCP и проверяемый хост не будет даже получать пакетов с IP-адресом сканирующей машины. Вместо передачи пакетов со сканирующего хоста используется подставной хост, доступный через Internet. Системы IDS будут показывать сканирование с указанного параметром подставного хоста и не смогут получить адрес вашего компьютера.
Предложенная в конце 1998 года технология сканирования dumb host scan основана на предсказуемости значений поля IP ID в пакетах IP. Для реализации этого метода требуется промежуточный хост, имеющий по крайней мере один открытый порт TCP. Для успешного сканирования требуется, чтобы во время такой операции этот хост не проявлял собственной сетевой активности, но таких хостов в сети достаточно много. Для описания сути метода обозначим используемый для сканирования хост буквой A, промежуточный хост буквой Z, а проверяемый – T.
Хост A может осуществлять мониторинг хоста Z по значениям поля ID в заголовке передаваемых этим хостом пакетов IP. Дело в том, что большинство реализаций протокола IP просто увеличивают значение поля ID в заголовке пакетов IP на 1 для каждого следующего пакета. В этом легко убедиться с помощью описанной в Приложении программы hping2. Таким образом по значению поля ID в заголовке IP полученных от хоста откликов можно определить количество пакетов, переданных этим хостом в интервале между генерацией откликов.
Вспомним, что при получении пакета SYN для открытого порта хост передает в ответ пакет SYN ACK. Если же порт закрыт, в ответ на SYN передается пакет RST ACK. При получении неожиданного пакета SYN ACK хост передает в ответ пакет RST, а при получении неожиданного пакета RST просто отбрасывает такой пакет.
На основании сказанного легко построить модель скрытого сканирования.
-
Хост A генерирует серию запросов ICMP, позволяющую контролировать рост значений поля ID в заголовке IP полученных от Z откликов.
-
Хост A генерирует пакет SYN, адресованный в интересующий порт хоста T, используя в качестве адреса отправителя IP-адрес хоста Z.
-
Хост T при получении пакета SYN шлет хосту Z пакет SYN ACK, если проверяемый порт открыт и RST ACK, если этот порт закрыт.
-
Хост Z получает от хоста T неожиданный пакет SYN ACK или RST ASK.
-
при получении SYN ACK хост Z передает отклик RST, вследствие чего увеличивается значение поля ID;
-
при получении пакета RST ASK хост Z просто отбрасывает такой пакет и увеличения ID не происходит.
-
Хост A, анализируя значения поля ID в заголовках откликов ICMP от хоста Z, может фиксировать передачу хостом Z пакета в интервале между откликами. Исходя из предположения об отсутствии собственной активности хоста Z, это позволяет говорить о передаче отклика на пакет SYN ACK от хоста T и наличии у последнего открытого порта
Как видите, метод очень прост и при грамотной реализации метода позволяет с высокой степенью достоверности скрытно определять состояние портов проверяемого хоста без риска быть замеченным.
Необязательный параметр <порт>, передаваемый программе с этой опцией, позволяет указать порт подставного хоста, который будет использоваться при сканировании. По умолчанию nmap будет использовать tcp ping.
Поскольку состояние хоста Z во время сканирования играет достаточно важную роль, разумно будет сначала убедиться в том, что этот хост действительно подходит для наших целей. Сделать это можно, например, с помощью команды hping -r . Если вывод этой команды будет подобен приведенному на рисунке (содержит id=+1 в течение достаточно продолжительного времени), этот хост вполне подходит для использования в качестве подставного.
bash-2.05b# hping -r
HPING (eth0 ): NO FLAGS are set, 40 headers + 0 data bytes
len=46 ip= ttl=64 DF id=3064 sport=0 flags=RA seq=0 win=0 rtt=0.6 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=1 win=0 rtt=0.3 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=2 win=0 rtt=0.4 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=3 win=0 rtt=0.3 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=4 win=0 rtt=0.3 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=5 win=0 rtt=0.3 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=6 win=0 rtt=0.3 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=7 win=0 rtt=0.3 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=8 win=0 rtt=0.3 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=9 win=0 rtt=0.3 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=10 win=0 rtt=0.3 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=11 win=0 rtt=0.4 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=12 win=0 rtt=0.3 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=13 win=0 rtt=0.3 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=14 win=0 rtt=0.3 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=15 win=0 rtt=0.3 ms
len=46 ip= ttl=64 DF id=+1 sport=0 flags=RA seq=16 win=0 rtt=0.3 ms
Рисунок 3 Проверка подставного хоста
Программа nmap может корректно работать только с хостами, увеличивающими значение ID в каждом пакете на 1. Проверка показывает, что даже при стабильном значении id=+1 программа просто не работает.
Если в процессе сканирования подставной хост будет генерировать пакеты по каким-либо иным причинам, кроме реакции на отклики от проверяемого хоста, это приведет к появлении в результатах ложной информации об открытых портах. Никто не мешает вам повторить сканирование, используя этот же хост или указав в качестве подставного другой хост.
ACK-сканирование (-sA)
Этот метод обычно используется для получения данных о политике межсетевого экрана. В частности, с помощью этого метода можно определить, учитывает брандмауэр состояние соединений (stateful inspection) или является простым пакетным фильтром, который блокирует входящие пакеты SYN.
В этом режиме программа передает пакеты ACK с кажущимися случайными номерами подтверждений и порядковыми номерами в сканируемые порты. При получении отклика RST порт считается нефильтруемым. Если же отклика просто не приходит или возвращается сообщение ICMP unreachable, порт считается фильтруемым. Программа nmap обычно не выводит сведений о нефильтруемых портах, поэтому отсутствие какого-либо списка портов в результате сканирования говорит о том, что ни один из проверенных портов не фильтруется.
В этом режиме список открытых портов обычно не выводится программой.
Window-сканирование (-sW)
Этот метод основан на определении размера окна TCP и похож на ACK-сканирование, но отличается от него тем, что наряду с детектированием состояния портов filtered/unfiltered он иногда может детектировать порты в состоянии open (вследствие получения аномальных размеров окна TCP, возвращаемых некоторыми ОС, включая AIX, Amiga, BeOS, BSDI, Cray, Tru64 UNIX, DG/UX, OpenVMS, Digital UNIX, FreeBSD, HP-UX, OS/2, IRIX, MacOS, NetBSD, OpenBSD, OpenStep, QNX, Rhapsody, SunOS 4.X, Ultrix, VAX, VxWorks).
Сканирование RPC (-sR)
Этот метод используется в сочетании с другими методами сканирования, поддерживаемыми программой nmap и служит для проверки всех обнаруженных при сканировании открытых портов TCP/UDP на предмет поддержки функций RPC. Проверка осуществляется путем передачи в порт команды NULL с помощью SunRPC. Для поддерживающих RPC портов предпринимается попытка идентификации связанной с портом программы и номера ее версии. Таким образом можно определить порты и функции RPC даже в тех случаях когда порт sunrpc (111, portmapper) закрыт с помощью межсетевого экрана или иными средствами. В режиме сканирования RPC не работают приманки (decoy), описанные на стр. 7.
Сканирование по списку (-sL)
В этом режиме просто выводится список адресов IP или имен хостов, заданных другими параметрами командной строки без реального сканирования этих хостов.
Сканирование FTP bounce attack (-b)
-b <промежуточный сервер FTP>
Этот метод основан на возможности опосредованной передачи файлов по протоколу FTP (RFC 959). Этот протокол имеет странную по сегодняшним меркам особенность, позволяющую пользователю хоста A подключиться к серверу FTP на другом хосте и запросить у этого сервера передачу файла любому хосту Internet. Как было отмечено еще в 1995 году, протокол FTP можно использовать для неконтролируемой рассылки электронной почты и новостных сообщений, заполнения чужих дисков ненужными файлами, попыток обхода межсетевых экранов и иных анонимных пакостей.
Программа nmap использует эту особенность протокола для сканирования портов TCP с использованием промежуточных серверов FTP. Сканер соединяется с сервером FTP, находящимся за брандмауэром, который закрывает сканируемый хост, и сканирует с его помощью закрытые межсетевым экраном порты (например, порт 139). Если сервер FTP имеет открытый для записи каталог, можно организовать передачу в порты сканируемого хоста любых данных, позволяющих найти в системе открытые порты.
Опция используется с параметром, указывающим параметры подключения к промежуточному серверу FTP в стандартной нотации URL (username:password@server:port). Все компоненты этого параметра, за исключением адреса или имени сервера, являются необязательными.
Следует отметить, что далеко не все современные серверы FTP пригодны для этого типа сканирования.
Опции общего назначения
Ни одна из перечисленных в таблице 1 опций не является обязательной, но многие опции весьма полезны. Отметим, что опции -P можно объединять – это поможет преодолеть даже весьма изощренные брандмауэры за счет использования различных портов и флагов TCP и кодов ICMP.
Таблица 1 Опции команды nmap
Опции синхронизации
В большинстве случаев программа nmap способна подстроить параметры работы с учетом состояния сети. Однако существуют ситуации, когда используемая программой по умолчанию политика синхронизации не будет соответствовать вашим задачам. В таких случаях вы можете самостоятельно выбрать политику синхронизации с помощью опции:
-T
Таблица 2 Варианты политики синхронизации nmap
|
Политика |
Описание |
|
|---|---|---|
|
Paranoid |
0 |
Медленное сканирование с целью избежать внимания систем IDS. Все операции выполняются последовательно с паузами не менее 5 минут между передачей пакетов. |
|
Sneaky |
1 |
Аналогичен предыдущему режиму, но паузы уменьшены до 15 секунд. |
|
Polite |
2 |
Эта политика синхронизации обеспечивает невысокий уровень загрузки сети и малую вероятность возникновения критических ошибок. Пакеты передаются с паузами не менее 4 мсек. Сканирование в этом режиме по крайней мере на порядок медленней, нежели в используемом по умолчанию режиме Normal. |
|
Normal |
3 |
Используемый по умолчанию режим, при котором сканирование осуществляется быстро и без перегрузки сети или пропуска хостов/портов. |
|
Aggressive |
4 |
Режим параллельного сканирования для уменьшения времени работы и снижения шансов на принятие ответных мер. |
|
Insane |
5 |
Этот режим пригоден только для очень скоростных сетей в тех случаях, когда потеря части информации не имеет существенного значения. Время ожидания для каждой пробы снижено до 300 мсек, а по истечение 15 минут сканирование хоста прекращается (тайм-аут). |
Опция -T0 будет задавать режим Paranoid, а -T5 – Insane.
Кроме выбора политики, вы можете явно указать временные параметры работы программы с помощью опций, перечисленных в таблице 3.
Таблица 3 Опции синхронизации
|
Опция |
Описание |
|---|---|
|
—host_timeout <мсек> |
Задает максимальное время сканирования одного хоста до перехода к следующему адресу. По умолчанию в режиме Normal время сканирования не ограничивается. |
|
—max_rtt_timeout <мсек> |
Задает максимальное время ожидания отклика хоста на пробный пакет nmap до передачи повторного пакета или констатации тайм-аута. В используемом по умолчанию режиме синхронизации это время составляет приблизительно 9 секунд (9000). |
|
—min_rtt_timeout <мсек> |
Задает минимальную паузу между передачей последовательных пробных пакетов. Обычно nmap сокращает интервал между передачей пакетов, если сканируемый хост отвечает достаточно быстро. |
|
—initial_rtt_timeout <мсек> |
Задает тайм-аут для первого пробного пакета. Обычно такое ограничение полезно при сканировании хостов, закрытых межсетевым экраном, в режиме -P0. Обычно nmap оценивает RTT по результатам ping и откликам на несколько первых пакетов. По умолчанию используется время ожидания 6 сек. (6000). |
|
—max_parallelism |
Задает ограничение количества параллельных операций сканирования. При установке значения 1 nmap будет выполнять операции сканирования последовательно. Значение этого параметра влияет на все операции, которые могут выполняться в параллельном режиме (ping sweep, RPC scan и т. п.). |
|
—min_parallelism |
Задает минимальное число сканируемых одновременно портов. Параллельное сканирование ускоряет процесс, но может снижать достоверность результатов. |
|
—scan_delay <мсек> |
Задает минимальную между передачей последовательных пакетов для снижения нагрузки на сеть и привлечения меньшего внимания со стороны IDS. |
Продолжение: http://compiling.ru/tag/nmap
Взято с http://www.protocols.ru/modules.php?name=News&file=article&sid=43
И вообще, очень рекомендую: http://www.protocols.ru
Popularity: 100%
Этот материал находится на сайте http://compiling.ru
Оставьте свой отзыв