Сканер портов 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 и другие параметры.
Синтаксис
1 |
nmap [<тип сканирования>] [<опции>] <хост или сеть #1 ... [#N]> |
Опции
В силу широких возможностей программы число опций командной строки, управляющих режимом и параметрами сканирования весьма велико. Программа nmap проверяет заданный в командной строке набор опций и при наличии в них ошибок или противоречий выдает пользователю предупреждение. Список опций с краткими комментариями можно получить по команде nmap -h, более подробное описание вы получите с помощью команды man nmap.
Ниже приводятся описания некоторых поддерживаемых программой опций, объединенных в группы по их назначению.
Тип сканирования
Ниже описаны опции выбора типа сканирования или дополнительных операций, выполняемых программой nmap. Опции активизации этих методов указаны в скобках после названия метода.
1 |
Сканирование TCP SYN (-sS) |
Этот метод часто называют сканированием с использованием полуоткрытых (half-open) соединений, поскольку при сканировании полные соединения TCP не организуются. Сканирующий хост передает пакет SYN как при обычной организации соединения и ожидает отклика. Полученный в ответ пакет SYN ACK говорит о том, что порт прослушивает входящие соединения, пакет RST показывает, что порт не прослушивается. При получении отклика SYN ACK незамедлительно передается пакет RST для сброса запрошенного соединения. Основным преимуществом данного метода сканирования является то, что большинство сайтов не сохраняют записей о нем в своих журнальных файлах. Однако для использования метода требуются привилегии пользователя root, чтобы создавать пакетыSYN с нужными параметрами. Этот метод сканирования применяется по умолчанию для привилегированного пользователя.
1 |
Сканирование TCP connect (-sT) |
Это один из основных методов сканирования TCP. Для организации соединения с каждым проверяемым портом служит системный вызов connect(). Если порт находится в состоянии listening, connect() возвращает позитивный результат, в противном случае функция сообщает о недоступности порта. Преимуществом этого метода является то, что он не требует каких-либо специальных привилегий для пользователя, поскольку вызов функции connect на большинстве систем UNIX доступен любому пользователю.
Данный метод применяется по умолчанию для пользователей, не имеющих привилегий.
Сканирование с использованием этого метода легко обнаружить, поскольку проверяемый хост будет фиксировать в журнальных файлах многочисленные вызовы и сообщения об ошибках при обращении к закрытым портам.
1 |
Скрытое сканирование Stealth FIN, Stealth Xmas Tree, Stealth Null (-sF -sX -sN) |
В ряде случаях сканирование TCP SYN не обеспечивает скрытности. Некоторые брандмауэры и системы фильтрации пакетов следят за пакетами SYN, направленными в закрытые порты, а программы типа PortSentry и Courtney способны детектировать сканирование TCP SYN. Эти методы сканирования достаточно эффективны и практически не оставляют следов.
Идея этих методов состоит в том, что при обращении к закрытым портам вы должны получить отклик RST, а открытые порты должны игнорировать такие пакеты в соответствии со стандартом (RFC 793, стр. 641). При сканировании Stealth FIN в качестве зондов передаются пакеты с флагом FIN, метод Stealth Xmas tree использует пакеты с флагами FIN, URG и PUSH, а сканирование Stealth Null основано на передаче пробных пакетов без флагов.
Эти методы не позволяют сканировать большинство систем Windows, поскольку компания Microsoft, по своему обыкновению, проигнорировала стандарт и реализовала протокол как получилось. Существуют и другие системы, в которых реакция на сканирование не соответствует стандарту. Системы Cisco, BSDI, HP/UX, MVS и IRIX передают пакет RST при сканировании открытых портов, хотя в соответствии со стандартом должны просто отбрасывать пакеты.
1 |
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 является стандартным способом проверки доступности хостов и обычно на такое сканирование никто не реагирует как на злой умысел.
1 |
Определение версии (-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 обеспечит вывод отладочной информации в процессе детектирования версии для удаленного хоста.
1 |
Сканирование UDP (-sU) |
Этот метод применяется для детектирования открытых портов UDP. Метод основан на передаче пустых пакетов UDP проверяемому хосту. Получение в ответ пакета ICMP port unreachable будет говорить о том, что порт закрыт, а отсутствие такого отклика позволяет предположить наличие открытого порта. Однако зачастую пакеты ICMP unreachable фильтруются межсетевыми экранами, поэтому достоверной при таком сканировании можно считать только информацию о закрытых портах. В некоторых случаях Internet-провайдеры блокируют некоторые “опасные” порты (например 31337 — back orifice и 139 — Windows NetBIOS), что может создать иллюзию открытости таких портов. Не впадайте в панику, если вы обнаружили нечто подобное при сканировании своей системы извне.
1 |
IP-сканирование (-sO) |
Этот метод используется для определения поддерживаемых хостом протоколов IP. Метод основан на передаче raw-пакетов IP без дополнительных протокольных заголовков, адресованных всем протоколам проверяемого хоста. Получение отклика ICMP-protocol unreachable говорит, что соответствующий протокол не поддерживается хостом, а отсутствие такого сообщения позволяет предположить наличие протокола. Используемый этим методом вариант передачи пакетов похож на сканирование UDP и ему присущи те же ограничения, связанные с ограничением темпа генерации сообщений ICMP. Однако поле номера протоколов IP имеет размер 8 битов, поэтому проверяется лишь 256 протоколов и это не должно занять много времени.
1 |
Метод скрытого сканирования Idlescan (-sI) |
1 |
-sI <хост[:порт]> |
Этот метод позволяет полностью замести следы сканирования портов TCP и проверяемый хост не будет даже получать пакетов с IP-адресом сканирующей машины. Вместо передачи пакетов со сканирующего хоста используется подставной хост, доступный через Internet. Системы IDS будут показывать сканирование с указанного параметром подставного хоста и не смогут получить адрес вашего компьютера.
1 |
ACK-сканирование (-sA) |
Этот метод обычно используется для получения данных о политике межсетевого экрана. В частности, с помощью этого метода можно определить, учитывает брандмауэр состояние соединений (stateful inspection) или является простым пакетным фильтром, который блокирует входящие пакеты SYN. В этом режиме программа передает пакеты ACK с кажущимися случайными номерами подтверждений и порядковыми номерами в сканируемые порты. При получении отклика RST порт считается нефильтруемым. Если же отклика просто не приходит или возвращается сообщение ICMP unreachable, порт считается фильтруемым. Программа nmap обычно не выводит сведений о нефильтруемых портах, поэтому отсутствие какого-либо списка портов в результате сканирования говорит о том, что ни один изпроверенных портов не фильтруется.
В этом режиме список открытых портов обычно не выводится программой
1 |
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).
1 |
Сканирование RPC (-sR) |
Этот метод используется в сочетании с другими методами сканирования, поддерживаемыми программой nmap и служит для проверки всех обнаруженных при сканировании открытых портов TCP/UDP на предмет поддержки функций RPC. Проверка осуществляется путем передачи в порт команды NULL с помощью SunRPC. Для поддерживающих RPC портов предпринимается попытка идентификации связанной с портом программы и номера ее версии. Таким образом можно определить порты и функции RPC даже в тех случаях когда порт sunrpc (111, portmapper) закрыт с помощью межсетевого экрана или иными средствами.
1 |
Сканирование по списку (-sL) |
В этом режиме просто выводится список адресов IP или имен хостов, заданных другими параметрами командной строки без реального сканирования этих хостов.
Опции общего назначения
Ни одна из перечисленных опций не является обязательной, но многие опции весьма полезны. Отметим, что опции –P можно объединять – это поможет преодолеть даже весьма изощренные брандмауэры за счет использования различных портов и флагов TCP и кодов ICMP.
Опции команды nmap
1 |
-P0 |
Эта опция отключает попытки использования команды ping перед сканированием хоста. С помощью этой опции вы сможете сканировать сети, блокирующие пакеты ICMP echo на межсетевом экране. Примером такой сети является microsoft.com и при сканировании хостов Microsoft всегда следует задавать опцию -P0 или -PT80. Отметим, что ping в контексте сканирования портов может означать не только традиционную передачу запросов ICMP echo. Nmap поддерживает множество типов проб, включая зонды TCP, UDP и ICMP. По умолчанию Nmap передает пакеты ICMP echo-request и пакеты TCP ACK, адресованные в порт 80.
1 |
-PT [<порты>] |
Эта опция задает использование “TCP ping” с указанными номерами портов для определения доступности хоста. Взамен передачи запросов ICMP echo генерируются пакеты TCP ACK и анализируются отклики на эти запросы. Активные хосты должны передавать в качестве отклика на такие запросы пакет RST. Эта опция может быть весьма полезна для проверки доступности хостов в сетях, где брандмауэры блокируют пакеты ICMP. Если эту опцию указал пользователь, не имеющий привилегий root для сканирования будет вызываться функция connect(). Используемые для сканирования порты задаются в виде списка номеров или имен, разделенных запятыми -PT<порт1>[,порт2][…]. По умолчанию используется порт 80, поскольку его фильтруют достаточно редко.
1 |
-PS [<порты>] |
Эта опция задает использование пакетов SYN вместо пакетов ACK, доступных только для пользователя root. Хосты должны отвечать на такие запросы пакетами RST или SYN ACK. Вы можете указать номера портов так же, как для опции -PT.
1 |
-PU [<порты>] |
Эта опция задает передачу пакетов UDP в заданные порты и ожидание откликов ICMP portunreachable (порт закрыт) или UDP (порт открыт), если хост активен. Поскольку многие службы UDP не отвечают на пустые пакеты, эта опция полезна скорее для поиска закрытых портов, нежели открытых.
1 |
-PE |
Задает использование стандартной операции ping (пакеты ICMP echo request) для определения доступности хостов.
1 |
-PP |
Задает использование запросов ICMP timestamp (тип 13) для поиска активных хостов.
1 |
-PM |
Подобна опциям -PE и -PP, но использует запросы ICMP netmask (тип 17).
1 |
-PB |
Эта опция задает использование стандартной операции ping (-PE) в параллель с пакетами ACK (-PT). Такой способ позволяет обойти брандмауэры, которые блокируют один из этих вариантов проб.
Для пакетов ACK можно задать номер порта, как было описано выше для опции -PT.
1 |
-O |
Эта опция задает определение операционной системы сканируемых хостов с помощью методов TCP/IP fingerprinting. Для детектирования ОС используется множество методов анализа стека протоколов сканируемого хоста. Полученная при сканировании информация сравнивается с “отпечатками” известных ОС для идентификации операционной системы данного хоста.
Эта опция также включает несколько дополнительных тестов, в частности – определение времени с момента загрузки хоста (Uptime) с помощью опции TCP timestamp (RFC 132313), если она поддерживается проверяемым хостом.
Кроме того, опция -O определяет уровень предсказуемости порядковых номеров TCP, определяющий сложность организации обманных соединений TCP с проверяемым хостом. Информация о предсказуемости порядковых номеров выводится только при наличии в командной строке опции -v.
При одновременной использовании опций -v и -O определяется также алгоритм генерации порядковых номеров IP ID. Большинство хостов относится к классу incremental, использующему увеличение значения поля ID в заголовках IP на 1 для каждого генерируемого пакета. Такой алгоритм генерации порядковых идентификаторов может оказать весьма большую услугу злоумышленникам при организации атаки на хост или использовании этого хоста для скрытого сканирования других сетей
1 |
-A |
Этот флаг позволяет использовать расширенные возможности программы по детектированию ОС(-O), определению версии (-sV) и др. Эта опция не влияет на опции синхронизации программы, описанные ниже.
1 |
-6 |
Эта опция включает поддержку протокола IPv6. Все цели сканирования должны задаваться адресами IPv6 (например, 3ffe:501:4819:2000:210:f3ff:fe03:4d0) или полными доменными именами (записи AAAA
1 |
-I |
Эта опция включает режим сканирования TCP reverse ident.
Опция-I может использоваться только в режиме TCP connect (-sT).
1 |
-f |
Эта опция задает использование мелких фрагментов IP при сканировании в режимах SYN ,FIN, XMAS или NULL. Смысл заключается в разбиении заголовка TCP на
множество компонент, передаваемых в разных фрагментах IP для затруднения работы пакетных фильтров, систем IDS и других способов обнаружения фактов сканирования. Эту опцию следует использовать с осторожностью, поскольку многие программы недостаточно корректно обрабатывают мелкие фрагменты.
1 |
-v |
Задает вывод дополнительной информации в процессе сканирования и по завершении. Для дополнительного увеличения объема выводимых данных можно указать опцию дважды. Вы можете также указать в командной строке одну или несколько опций -d для вывода отладочной информации.
1 |
-h |
Выводит на экран краткую справку о работе с программой.
1 |
-oN <файл> |
Задает запись результатов сканирования в указанный текстовый файл.
1 |
-oX <файл> |
Задает запись результатов сканирования в указанный файл XML. В качестве параметра опции можно указать символ — для вывода информации на stdout (например, в канал и т. п.); в этом случае программа отключает вывод информации на экран, а сообщения об ошибках будут передаваться на stderr.
1 |
-oG <файл> |
Задает запись результатов сканирования в указанный файл, пригодный для операций поиска с помощью команды grep. В этом случае все результаты выводятся в одну строку файла. Такой формат может быть удобен для передачи результатов сканирования в другие программы, но формат XML (опция -oX) обеспечивает более эффективное решение. При использовании вместо имени файла символа — весь вывод будет направлен на stdout (например, в канал), а сообщения об ошибках будут направляться на stderr.
1 |
-oA <имя> |
Говорит программе о необходимости записи результатов во всех поддерживаемых форматах (-oN,-oG, -oX). Параметр опции задает имя файла, к котором добавляется расширение .nmap, .gnmap и .xml, соответственно.
1 |
-oS <файл> |
Задает запись результатов сканирования в указанный файл с использованием формата ScriptKiddie.Вместо имени файла можно указать символ — для вывода результатов на stdout.
1 |
--resume <файл> |
С помощью этой опции может быть возобновлено сканирование, прерванное по тем или иным причинам, если его результаты были сохранены в указанном параметром опции текстовом файле (запись с опцией -oN или -oG). Nmap возобновит прерванное сканирование с использованием исходного набора опций.
1 |
--append_output |
Говорит программе nmap о необходимости добавления информации в конец файла вместо переписывания этого файла.
1 |
-iL <файл> |
Задает использование целей сканирования из указанного файла, который должен содержать список адресов и/или имен, разделенных пробелами, символами табуляции или новой строки.
Если вы укажете вместо имени файла символ -, программа будет ждать список целей от устройства stdin.
1 |
-iR <количество> |
Эта опция задает программе nmap сканирование указанного количества случайно выбранных адресов. Для бесконечного сканирования случайных адресов можно задать -iR 0. Такой способ может быть полезен для статистической оценки того или иного интересующего вас параметра (задаетсядругими опциями) в сети Internet. Например, команда nmap -sS -PS80 -iR 0 -p 80 поможет сделать случайную выборку web-серверов.
1 |
-p <порты> |
Эта опция задает порт для проверки. Например, -p 23 будет указывать программе, что на сканируемом хосте нужно проверить лишь порт 23, а -p 20-30,139,60000- будет проверять порты с 20 по 30 порт 139 и все порты с номерами выше 60000. По умолчанию программа сканирует порты с номерами от 1 до 1024 и все порты, указанные в файле services из пакета nmap.
В режиме сканирования IP (-sO) эта опция задает номера проверяемых протоколов (0-255).При одновременном сканировании портов TCP и UDP вы можете задать номера портов отдельно для каждого протокола с помощью префиксов T: и U:. Все номера портов после префикса относятся к указанному протоколу, пока в строке не будет найден префикс другого протокола.
1 |
-F |
Эта опция задает режим быстрого сканирования при котором проверяются только порты, указанные в файле services из пакета nmap (или в файле protocols при использовании режима -sO). Ограниченный набор проверяемых портов позволяет существенно ускорить процесс сканирования.
1 |
-D <decoy1[,decoy2] [,ME],...> |
Задает режим обмана сканируемого хоста, при котором последнему кажется, что сканирование осуществляется не только с вашего хоста, но и с хостов, указанных параметрами decoy. В результате системы IDS будут выдавать список из множества сканирующих хостов с уникальными адресами IP,среди которых ваш хост может просто затеряться. Для разделения подставных адресов используются запятые, а параметр ME указывает позицию списка адресов, в которую вы хотите поместить свой реальный адрес IP. Если вы укажете ME после пятого элемента списка или далее, некоторые детекторы сканирования просто никогда не покажут ваш адрес. Если параметр ME не указан, nmap будет помещать реальный адрес в случайную позицию.
Не используйте в качестве подставных адреса неактивных хостов, поскольку это может привести к возникновению SYN-атаки на сканируемый хост. Кроме того, если вы укажете бездействующие адреса, среди них будет гораздо проще идентифицировать ваш реальный адрес. Некоторые детекторы сканеров (например, portsentry) будут подавлять маршрут к сканирующему хосту. Учитывая, что адрес сканирующего хоста может быть подставным, не следует принимать таких мер.Подставные адреса используются как при начальном ping-сканировании (с использованием ICMP,SYN, ACK и т. д.), так и при последующем реальном сканировании портов исследуемого хоста.Можно использовать подставные адреса и при определении ОС (опция -O).Нет ничего плохого в использовании большого числа подставных адресов, но это будет замедлять сканирование, а в некоторых случаях – снижать достоверность результатов. Отметим также, что некоторые операторы не выпускают из сети пакеты с обманными адресами отправителя и эта опция в таком случае не будет работать.
1 |
-S <адрес> |
В некоторых случаях nmap не может определить адрес отправителя (вы получите сообщение об этом) и данная опция позволяет задать IP-адрес интерфейса, который будет использоваться для передачи пакетов в сеть.
1 |
-e <интерфейс> |
Указывает программе nmap интерфейс, который следует использовать для передачи пакетов. Обычно интерфейс определяется автоматически.
1 |
-g <порт> |
Задает номер порта отправителя для используемых при сканировании пакетов. Это может помочь в тех случаях, когда проверяемый хост защищен брандмауэром, но на последнем открыты некоторые порты. Отметим, что в иногда задание порта ведет к снижению производительности сканирования.
1 |
--data_length <number> |
Обычно nmap передает пакеты минимального размера, достаточного для включения заголовка транспортного уровня (для TCP 40 байтов, для ICMP – 28). Эта опция указывает программе на необходимость дополнения пакета случайными значениями до заданного размера. Опция не влияет на пакеты, используемые для определения ОС (режим -O), но влияет на большинство других пакетов.
Отметим, что использование пакетов заданного размера несколько снижает производительность, но более крупные пакеты обычно привлекают меньше внимания, поскольку напоминают обычный трафик.
1 |
-n |
Отключает преобразование адресов в символьные имена с помощью DNS. Эта опция может существенно ускорить процесс сканирования.
1 |
-R |
Задает обязательное преобразование адресов в доменные имена с помощью DNS. Обычно преобразование осуществляется только для активных адресов.
1 |
-r |
Отключает случайный выбор порядка сканируемых портов.
1 |
-ttl <value> |
Устанавливает значение TTL в заголовках передаваемых пакетов IPv4.
1 |
--randomize_hosts |
Говорит программе о необходимости перемешивания перед сканированием адресов каждой группы, содержащей до 2048 хостов. Такое перемешивание позволит избавиться от пристального внимания некоторых систем сетевого мониторинга, особенно если ее использовать совместно с опциями cинхронизации.
1 |
-M <max sockets> |
Задает максимальное число сокетов, которые будут использоваться при параллельном сканировании TCP connect(). Такое ограничение несколько замедляет сканирование, но снижает риск возникновения критических ошибок на сканируемых хостах.
1 |
--packet_trace |
Говорит программе о необходимости вывода информации о всех передаваемых пакетах. Эта опция может быть полезна при отладке и обучении.
1 |
--datadir [<каталог>] |
Задает имя каталога, в котором хранятся используемые программой файлы nmapservices, nmap-protocols, nmap-rpc и nmap-os-fingerprints. Nmap сначала ищет файлы в каталоге, заданном этой опцией, после чего просматривается каталог, указанный в переменной окружения NMAPDIR, далее – каталог ~/nmap, и после этого — /usr/share/nmap. В качестве последней попытки nmap просматривает текущий каталог.
Опции синхронизации
В большинстве случаев программа nmap способна подстроить параметры работы с учетом состояния сети. Однако существуют
ситуации, когда используемая программой по умолчанию политика синхронизации не будет соответствовать вашим задачам. В таких случаях вы можете самостоятельно выбрать политику синхронизации с помощью опции:
1 |
-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> |
Paranoid 0 Медленное сканирование с целью избежать внимания систем IDS. Все операции выполняютсяпоследовательно с паузами не менее 5 минут между передачей пакетов.
Sneaky 1 Аналогичен предыдущему режиму, но паузы уменьшены до 15 секунд.
Polite 2 Эта политика синхронизации обеспечивает невысокий уровень загрузки сети и малую вероятность возникновения критических ошибок. Пакеты передаются с паузами не менее 4 мсек. Сканирование в этом режиме по крайней мере на порядок медленней, нежели в используемом по умолчанию режиме Normal.
Normal 3 Используемый по умолчанию режим, при котором сканирование осуществляется быстро и без перегрузки сети или пропуска хостов/портов.
Aggressive 4 Режим параллельного сканирования для уменьшения времени работы и снижения шансов на принятие ответных мер.
Insane 5 Этот режим пригоден только для очень скоростных сетей в тех случаях, когда потеря части информации не имеет существенного значения. Время ожидания для каждой пробы снижено до 300 мсек, а по истечение 15 минут сканирование хоста прекращается (тайм-аут).
Опция -T0 будет задавать режим Paranoid, а -T5 – Insane.
Кроме выбора политики, вы можете явно указать временные параметры работы программы с помощью опций
1 |
--host_timeout <мсек> |
Задает максимальное время сканирования одного хоста до перехода к следующему адресу.По умолчанию в режиме Normal время сканирования не ограничивается.
1 |
--max_rtt_timeout <мсек> |
Задает максимальное время ожидания отклика хоста на пробный пакет nmap до передачи повторного пакета или констатации тайм-аута. В используемом по умолчанию режиме синхронизации это время составляет приблизительно 9 секунд (9000).
1 |
--min_rtt_timeout <мсек> |
Задает минимальную паузу между передачей последовательных пробных пакетов.
Обычно nmap сокращает интервал между передачей пакетов, если сканируемый хост отвечает достаточно быстро.
1 |
--initial_rtt_timeout <мсек> |
Задает тайм-аут для первого пробного пакета. Обычно такое ограничение полезно при сканировании хостов, закрытых межсетевым экраном, в режиме -P0. Обычно nmap оценивает RTT по результатам ping и откликам на несколько первых пакетов. По умолчанию используется время ожидания 6 сек. (6000).
1 |
--max_parallelism <number> |
Задает ограничение количества параллельных операций сканирования. При установке значения 1 nmap будет выполнять операции сканирования последовательно. Значение этого параметра влияет на все операции, которые могут выполняться в параллельном режиме (ping sweep, RPC scan и т. п.).
1 |
--min_parallelism <number> |
Задает минимальное число сканируемых одновременно портов. Параллельное сканирование ускоряет процесс, но может снижать достоверность результатов.
1 |
--scan_delay <мсек> |
Задает минимальную между передачей последовательных пакетов для снижения нагрузки на сеть и привлечения меньшего внимания со стороны IDS.
Выбор цели сканирования
Цель сканирования является единственным обязательным параметром команды nmap. В простейшем случае программа сканирует единственный хост, заданный именем или адресом IP в командной строке. Вы можете также задать сканирование подсети с указанной маской (IP-адрес/маска).
Nmap поддерживает широкие возможности задания цели сканирования. Например, для проверки сети класса B 192.168.*.* вы можете указать цель как 192.168.*.*, 192.168.0-255.0-255, 192.168.0.0/16 и даже 192.168.1-50,51-255.1,2,3,4,5-255. Не забывайте, что многие командные процессоры при наличии в параметре символов * или / требуют использования двойных кавычек (“”).
Программа поддерживает и совсем экзотические варианты задания целей. Например, параметр *.*.5.6-7 будет задавать сканирование хостов с номерами .5.6 и .5.7 во всех сетях класса B.
Примеры
Скрытное SYN -сканирование всех зарезервированных портов TCP(-sS) с подробным отчетом(-v), с определением операционной системы и ее версии (-O), с определением ПО, которое запущено на портах хоста 192.168.1.61
1 |
# nmap -sS -v -O -sV 192.168.1.61 |
Определение версии ПО запущенных служб для TCP- портов 21-25,80,110,143,10000-12000
И UDP-портов 53,161 на хосте 192.168.1.61
1 |
# nmap -sV -p U:53,161,T:21-25,80,110,143,10000-12000 192.168.1.61 |
Сканирование всех портов(1-65535) на хосте 192.168.1.61
1 |
# nmap -p "*" 192.168.1.61 |
Ping-сканирование указанной сети 192.168.1.0/24
1 |
# nmap -sP 192.168.1.0/24 |
Определение открытых протоколов (tcp,udp,icmp,gre,igmp etc)
1 |
# nmap -sO 192.168.1.61 |
Обычное сканировние(-sT) наиболее часто используемых стандартных портов(-F)(~ около 100 портов(по умолчанию Nmap сканирует 1-1024 порты)) с отменой ping-запросов(-P0)
с сохранением результатов сканирования в файл /var/log/nmap_microsoft.log хоста microsoft.com
1 |
# nmap -sT -F -P0 -oN /var/log/nmap_microsoft.log microsoft.com |
Сканирование UDP-порта 161 севрера server.domain.com c маскировкой нашего адреса (localhost) с помощью двух чужих IP-адресов.
1 |
# nmap -sU -p 161 -D 123.123.123.123 124.124.124.124 localhost server.domain.com |
Cканирование Xmas tree первой половины хостов (1 – 127) каждой сети класса C в сети класса B 198.116.0.0; проверяются порты
ssh, DNS, pop3, imap и 4564.
1 |
# nmap -sX -p 22,53,110,143,4564 198.116.*.1-127 |
Определяет хосты с открытым портом http (80), имеющие значения .2.3, .2.4 или .2.5 в двух последних байтах адреса IP; адреса хостов выбираются случайно среди всех сетей класса B.
1 |
# nmap -v --randomize_hosts -p 80 *.*.2.3-5 |
Копирует зону DNS для определения хостов домена company.com и выполняет сканирование хостов этого домена; в разныхвариантах ОС детали команды могут отличаться.
1 |
# host -l company.com | cut -d -f 4 | ./nmap -v -iL - |
Сокрытие версий ПО(на OS Centos)
Apache
1 |
# nano /etc/httpd/conf/httpd.conf |
1 2 |
ServerTokens Prod ServerSignature Off |
ProFTPD
1 |
# nano /etc/proftpd.conf |
1 |
ServerIdent Off |
PHP
1 |
# nano /etc/php.ini |
1 |
expose_php = Off |
(при использовании DirectAdmin nano /usr/local/lib/php.ini)
Nginx
1 2 3 4 |
http { …… server_tokens off; } |
Проверка
1 |
# curl -I https://kamaok.org.ua |
1 |
# wget -O /dev/null -S https://kamaok.org.ua |
Источник:
http://www.protocols.ru/files/Tools/nmap.pdf
Больше примеров использования nmap.
http://www.cyberciti.biz/networking/nmap-command-examples-tutorials/
http://linuxaria.com/article/understanding-nmap-commands-tutorial