NMap
36
12361
4 сентября 2020 12:29
4/09/2020
Visitors have accessed this post 12361 times.
Автор — Сергей Попов
Часть 1
Предистория
Наверняка, каждый смотрел фильмы про хакеров и задавался вопросом: откуда они знают, какие порты открыты в системе? Или как узнать, какие приложения запущены на сервере, не спрашивая об этом администратора? Вы можете сделать все это и даже больше вместе с небольшим инструментом под названием Nmap.
Погнали
Название Nmap — это сокращение от network mapper, сам nmap — это набор инструментов для сканирования сети. При этом возможности его огромны, начиная от обнаружения открытых портов и определения служб, вплоть до поиска файлов, баз данных, обнаружения уязвимостей, обхода средств защиты и много другого, но обо всем по порядку.
Где взять?
Скачать Nmap можно с официального сайта https://nmap.org/, там доступна самая последняя версия с подробнейшим описанием установки для самых распространенных систем. Либо можно установить из репозиториев (совсем не свежую версию):
sudo apt install nmap
Nmap запускается на всех популярных операционных системах, а официальные исполнимые пакеты доступны для Linux, Windows и Mac OS X. В дополнение к классической версии Nmap командной строки, набор Nmap включает продвинутый графический интерфейс и просмотрщик результатов (Zenmap), гибкий инструмент передачи, перенаправления и отладки данных (Ncat), утилиту для сравнения результатов сканирования (Ndiff) и инструмент генерации пакетов и анализа ответов (Nping).
Как работает?
Чтобы понять, как это работает, мы его разбираем.
В компьютерных сетях все подключенные устройства имеют свой IP-адрес. Каждый компьютер поддерживает протокол ICMP. Мы просто отправляем ping запрос компьютеру и, если он отзывается, считаем, что он подключен. Nmap использует немного иной подход. Компьютеры также определенным образом реагируют на те или иные сетевые пакеты, утилита просто отправляет нужные пакеты и смотрит, какие хосты прислали ответ.Более интересно то, как Nmap узнает, какие сервисы запущены на машине. Суть работы всех сетевых программ основана на портах. Чтобы получить сообщение из сети, программа должна открыть порт на вашем компьютере и ждать входящих соединений. А для отправки сообщения по сети нужно подключиться уже другой программой (адресатом) к порту. Затем программе необходимо будет открыть порт, на котором она будет ждать ответа.
Утилита nmap в процессе сканирования сети перебирает доступный диапазон портов и пытается подключиться к каждому из них. Если подключение удалось, в большинстве случаев, передав несколько пакетов, программа может даже узнать версию программного обеспечения, которая ожидает подключений к этому порту. Теперь, после того как мы рассмотрели основы, рассмотрим, как пользоваться nmap для сканирования портов, сети и не только.
Запускаем
nmap
И что же мы видим? А перед нами файл справки. Внимательно его читаем до достижения нужной степени просветления.
Легко видеть, что логика использования утилиты довольно проста.
nmap [Тип(ы) Сканирования] [Опции] {цель сканирования}
Основные моменты:
Целью сканирования могут быть: сетевые адреса, IP-адреса, диапазоны IP-адресов, сети, подсети и т.д.
Кстати, порты могут быть не только открытыми или закрытыми. Из-за особенностей передачи пакетов и ответов на них разными протоколами для более точного определения состояния исследуемой цели Nmap выделяет шесть состояний портов, их надо знать для понимания полученных результатов сканирования:
Статус |
Значение |
открыт
open |
Приложение принимает на порт пакет или запросы на соединение. |
закрыт
closed |
Порт отвечает на запросы, но не используется никаким приложением. |
фильтруется
filtered |
Запросы не доходят до этого порта, а значит, невозможно определить, открыт он или нет. |
не фильтруется
unfiltered |
Порт доступен, но Nmap не может определить, закрыт он или открыт. Как правило, помогает использование другого способа сканирования. |
открыт|фильтруется
open|filtered |
Не получается определить, открыт порт или фильтруется. Возникает, если открытый порт не отвечает. Как правило, помогает использование другого способа сканирования. |
закрыт|фильтруется
closed|filtered |
Не получается определить, закрыт порт или фильтруется. Как правило, помогает использование другого способа сканирования. |
Типы сканирования и опции легко видеть в файле справки.Первой целью (да и вообще для тестирования) возьмем специально для этого созданный scanme.nmap.org.
Для каждой конкретной задачи алгоритм действий может меняться и рецептов, гарантирующих успех, не существует, но есть базовый набор действий, которые стоит знать прямо хорошо.
Определение цели сканирования
— А мы пойдем на север, а мы пойдем на север…
В командной строке Nmap все, что не является опцией (или аргументом опции), рассматривается как цель сканирования. В простейшем случае для сканирования используется IP-адрес или сетевое имя целевой машины.Можно использовать маски, например, 192.168.10.0/24, или диапазоны. Например, 192.168.0-255.1-254 пропустит все адреса в диапазоне, оканчивающиеся на .0 и .255. (диапазоны работают в любом октете IP-адреса). Так, при записи 0-255.0-255.8.8 будет произведено сканирование всех адресов в интернете, оканчивающихся на 8.8. Такой тип сканирования может быть полезен для обозрения просторов интернета и различных исследований.
Различные типы целей сканирования можно комбинировать, например, команда nmap scanme.nmap.org 192.168.0.0/8 10.0.0,1,3-7.- сделает то, что вы ожидаете.
Цели сканирования обычно задаются в командной строке и существуют различные опции контроля выбора целей:
-iL file_name (Ввод из списка)
Считывает цели из file_name. Хотя передача большого списка хостов для сканирования является обычным явлением, это не удобно. Например, ваш DHCP сервер передает вам список из 10 000 используемых им на данный момент адресов, и вы хотите его просканировать. Или, возможно, вы хотите просканировать все IP-адреса, кроме переданных им, чтобы выявить несанкционированное использование статических IP-адресов. Просто сгенерируйте список хостов для сканирования и передайте имя файла в Nmap как аргумент для -iL опции. Записи в файле могут находиться в любой приемлемой для Nmap форме (IP-адреса, сетевые имена, CIDR, IPv6 или диапазоны в октетах). Каждая запись должна быть отделена пробелом или несколькими, символами табуляции или символами перехода на новую строку. Вы можете передать в качестве аргумента дефис (-) как имя файла, если хотите, чтобы Nmap считывал список хостов из стандартного ввода, а не из файла.
Ввод может содержать комментарии, которые начинаются с # и продолжаются до конца строки.
-iR value (Выбирает произвольные цели)
Для сканирования в пределах всего интернета или каких-либо исследований вам, возможно, понадобится выбрать цели произвольно. Аргумент value определяет, сколько необходимо сгенерировать IP-адресов. Неподходящие IP-адреса, такие как частные, широковещательные или нелокализованные диапазоны адресов автоматически пропускаются. Аргумент 0 может быть передан для бесконечного сканирования. Имейте в виду, что некоторым системным администраторам может не понравиться неразрешенное сканирование их сетей и они могут пожаловаться. Используйте эту опцию на свой страх и риск!
Если в дождливый денек вам будет скучно, попробуйте команду nmap -Pn -sS -p 80 -iR 0 ––open для сканирования произвольных веб-серверов.
––exclude host1[,host2[,…]] (Исключить хосты/сети)
Определяет разделенный запятыми список целей, которые необходимо исключить из сканирования, даже если они являются частью заданного вами диапазона. Передаваемый список использует стандартный синтаксис Nmap, поэтому может содержать сетевые имена, CIDR адресацию, диапазоны в октетах и т.д. Эта опция может быть полезна, если сеть, которую вы хотите просканировать, содержит сервера или системы, негативно реагирующие на сканирование портов, или подсети, администрируемые другими людьми.
––excludefile file_name (Исключить список из файла)
Эта опция делает то же самое, что и ––exclude, но цели для исключения находятся в разделенном пробелами, символами табуляции или символами перехода на новую строку файле, а не в командной строке.
Ввод может содержать комментарии, которые начинаются с # и продолжаются до конца строки.
Обнаружение активных хостов
Мой адрес не дом и не улица,
Мой адрес Советский Союз.
Одна из первейших задач при исследовании любой сети — это сократить (иногда довольно большой) набор IP-диапазонов до списка активных или интересных хостов. Сканирование каждого порта каждого IP-адреса медленно и необязательно. Конечно же, то, что делает хост интересным для исследования, во многом определяется целями сканирования. Сетевые администраторы, возможно, будут заинтересованы только в хостах, на которых запущена определенная служба, в то время как тем, кого интересует безопасность, будут интересны все устройства с IP-адресами. Задачи администраторов по обнаружению работающих хостов в сети могут быть удовлетворены обычным ICMP пингом. Людям же, которые тестируют способность сети противостоять атакам извне, необходимо использовать разнообразные наборы запросов с целью обхода брандмауэра. Поэтому Nmap предоставляет большое разнообразие опций для различных методов сканирования.
Если никакие параметры обнаружения хостов не даны, Nmap посылает эхо запрос ICMP, пакет TCP SYN на порт 443, пакет TCP ACK на порт 80 и ICMP запрос метки времени. (Для IPv6 ICMP запрос метки времени пропускается, поскольку это не часть ICMPv6.) Это поведение по умолчанию эквивалентно опциям -PE -PS443 -PA80 -PP.
Обнаружение хостов часто бывает достаточным при сканировании локальных сетей, для аудита безопасности рекомендуется более сложный набор.
-sL (Сканирование с целью составления списка)
Этот тип сканирования создает список хостов заданной сети без посылки каких-либо пакетов целевым машинам. По умолчанию Nmap все же будет осуществлять обратное разрешение DNS, чтобы узнать имена хостов. Часто бывает удивительно, как много полезной информации могут содержать обычные имена хостов.
В конце Nmap также сообщает общее количество IP-адресов.
-sn (Без сканирования портов)
Эта опция говорит Nmap не выполнять сканирование портов после обнаружения хоста, а только напечатать доступные хосты, которые ответили на запросы обнаружения. Это хорошо известно как «пинг-сканирование», но вы также можете запросить построение маршрута (traceroute) и натравить на цель NSE скрипт. В том виде, как оно есть по умолчанию, это на один шаг более навязчиво, чем построение списка хостов и часто может быть использовано для тех же целей. Это позволяет провести легкую разведку целевой сети без привлечения слишком большого внимания. Знание, сколько хостов работает, более ценно для атакующих, чем поставляемый сканированием список каждого отдельного IP и имени хоста.
Часто системные администраторы также находят эту опцию полезной. Она с легкостью может использоваться для подсчета доступных машин в сети или контроля доступности сервера. Этот процесс часто называют ping sweep и считают более надежным, чем широковещательный адрес, поскольку многие хосты не отвечают на широковещательные запросы.
По умолчанию обнаружение хостов, проводимое с -sn, состоит из эхо запроса ICMP, TCP SYN на порт 443, TCP ACK на порт 80 и запроса временной метки ICMP. При выполнении от непривилегированного пользователя отправляются только SYN пакеты (при использовании вызова connect) на порт 80 и 443 цели. Когда привилегированный пользователь пробует сканировать цели в локальной ethernet сети, если не указана опция ––send-ip, используются ARP запросы. Опция -sn может быть объединена с любым типом обнаруживающих зондов (-P* опции, за исключением -Pn) для большей гибкости. Если используются какие-либо из этих типов зондирования и опций номеров портов, зонды по умолчанию переписываются. Когда имеется строгий фаервол между хостом источником с запущенным Nmap и целевой сетью, рекомендуется использовать продвинутые техники. Иначе хосты могут быть пропущены, когда фаервол отбрасывает зондирующие запросы или их ответы.
-Pn (Не использовать пинг-сканирование)
Указывает Nmap полностью пропустить этап обнаружения хостов. Обычно Nmap использует этот этап для обнаружения активных машин, к которым можно применить более углубленное сканирование. По умолчанию Nmap производит углубленное сканирование, такое как сканирование портов, определение версии или определение ОС только обнаруженных работающих хостов. После отключения этапа обнаружения хостов опцией -Pn Nmap будет производить сканирование каждого заданного целевого IP-адреса. Так что, если для сканирования будет определена сеть с адресным пространством класса B (/16), то будет произведено сканирование всех 65,536 IP-адресов. Так как этап обнаружения хостов и составления списка целей сканирования пропущен, то Nmap будет исполнять запрошенные функции, как если бы каждый IP-адрес был активен.
Для пропуска пинг-сканирования и сканирования портов с разрешением на запуск NSE используйте две опции вместе -Pn -sn. Для машин локальной сети будет произведено ARP сканирование (пока не зададите ––disable-arp-ping или ––send-ip), т.к. Nmap необходимы MAC адреса для дальнейшего сканирования целевых хостов.
-PS список_портов (TCP SYN пингование)
Эта опция посылает пустой TCP пакет с установленным SYN флагом. Порт по умолчанию — 80 (можно задать во время компилирования, изменяя DEFAULT_TCP_PROBE_PORT_SPEC в nmap.h). Альтернативные порты задаются в качестве параметров. Синтаксис такой же, как и для опции -p, за исключением того, что спецификаторы типа T: недопустимы. Примеры: -PS22 и -PS22-25,80,113,1050,35000. Имейте в виду, что между списком портов и -PS не должно быть пробела. Если заданы несколько запросов, то они будут посланы параллельно.
Установленный флаг SYN указывает удаленной системе, что вы пытаетесь установить соединение. Если порт назначения закрыт, то в ответ посылается RST (сброс) пакет. Если порт открыт, то удаленная система предпримет второй шаг в трехэтапной последовательности установки TCP соединения путем ответа SYN/ACK TCP пакетом. Система, на которой работает Nmap, сбрасывает почти установленное соединение, отвечая RST пакетом вместо ACK, что привело бы к установке полного соединения. RST пакет посылается ядром системы, на которой работает Nmap, в ответ на непредвиденный SYN/ACK пакет, а не самой Nmap.
Nmap не важно, открыт порт или закрыт. Ответы пакетами RST или SYN/ACK, описанными выше, указывают Nmap на то, что хост доступен и может отвечать на запросы.
На Unix-машинах обычно только пользователь с правами root может отправлять и получать «сырые» TCP пакеты. Для непривилегированного пользователя автоматически применяется обходной путь, при котором для каждого целевого порта инициируется системный вызов connect. Поэтому при попытке установить соединение на целевой хост отправляется SYN пакет. Если на вызов connect приходит быстрый ответ или отказ типа ECONNREFUSED, значит, TCP стек получил SYN/ACK или RST пакет, и хост помечается как доступный. Если соединение не устанавливается по причине истечения времени (timeout), то хост помечается как неработающий.
-PA список_портов (TCP ACK пингование)
Этот тип пингования очень похож на описанное выше SYN пингование. Разница состоит в том, что вместо установки SYN флага устанавливается TCP ACK флаг. Такой ACK пакет имеет своей целью распознавание данных во время установленного TCP соединения, но такого соединения не существует, поэтому удаленные хосты всегда будут отвечать на такой запрос RST пакетом, тем самым выдавая свое существование.
Опция -PA использует по умолчанию тот же порт, что и SYN запросы (80), и также может принимать в качестве параметра список портов в том же формате. Если эту опцию пытается использовать непривилегированный пользователь или задана цель в формате IPv6, то используется механизм с использованием вызова connect, описанный выше. Этот механизм несовершенен,так как при его использовании вместо ACK пакета посылается SYN.
Причина, по которой Nmap предоставляет оба типа пингования (SYN и ACK), состоит в том, что повышаются шансы обхода брандмауэров. Многие администраторы конфигурируют роутеры или другие простые брандмауэры на блокировку входящих SYN пакетов, за исключением тех, что предназначены для публичных служб, таких как веб-сайт или почтовый сервер. Тем самым предотвращаются все остальные соединения, и в то же время пользователи могут беспрепятственно выходить в интернет. Такой подход не требует много ресурсов от брандмауэров/роутеров и широко поддерживается различными аппаратными и программными фильтрами. Фаерволы под Linux Netfilter/iptables для реализации такого подхода имеют опцию ––syn. Когда брандмауэр использует такие правила, то запросы с установленным флагом SYN (-PS), посланные на закрытые порты, с большой вероятностью будут заблокированы. В таких случаях более выгодно использовать запросы с флагом ACK, так как они не попадают под эти правила.
Другим популярным типом сетевого экрана является брандмауэр, блокирующий все непредвиденные пакеты. Изначально эта функция поддерживалась только в наиболее продвинутых брандмауэрах, хотя с годами она становится все популярнее. Использующийся в Linux сетевой экран Netfilter/iptables реализует этот механизм с помощью опции ––state, которая категоризирует пакеты в зависимости от состояния соединения. Против таких систем лучше использовать пакеты SYN, т.к. непредвиденные пакеты ACK с большой вероятностью будут распознаны как фиктивные и заблокированы. Решение такого затруднительного положение состоит в том, чтобы посылать и SYN, и ACK запросы путем задания опций -PS и -PA.
-PU список_портов (UDP пингование)
Еще одной функцией, используемой для обнаружения хостов, является UDP пингование, она посылает UDP пакет на данные порты. Для большинства портов пакеты будут пустыми, хотя некоторые используют специфичные для протокола запросы, которые с большей вероятностью вызовут ответ. База данных запросов описана в https://nmap.org/book/nmap-payloads.html и в опциях ––data, ––data-string и ––data-length.
Список портов задается в том же формате, что и для описанных выше опций -PS и -PA. Если порты не заданы, то по умолчанию используется 40125. Порт по умолчанию может быть задан во время компиляции путем изменения DEFAULT_UDP_PROBE_PORT_SPEC в nmap.h. По умолчанию выбран не распространенный порт, так как отправка запросов на открытые порты нежелательна для этого типа сканирования.
При простукивании закрытого порта на целевой машине целью запроса UDP является получение в ответ ICMP пакета с ошибкой «порт недостижим». Это указывает Nmap на то, что машина работает и доступна. Другие типы ICMP ошибок, такие как «хост/сеть недоступна» или «превышение TTL» указывают на то, что машина выключена или недоступна. Отсутствие ответа интерпретируется этим же путем. Если такой запрос посылается на открытый порт, то большинство служб просто игнорируют пустой пакет и не посылают никакого ответа. Поэтому портом по умолчанию является 40125, так как он вряд ли будет использоваться какой-либо службой. Лишь некоторые службы, такие как Character Generator (chargen) protocol, ответят на пустой UDP пакет, и это также укажет Nmap на то, что машина доступна.
Основным преимуществом такого типа сканирования является то, что он позволяет обходить брандмауэры, фильтрующие только TCP запросы.
-PY список_портов (SCTP INIT пингование)
Эта опция отсылает SCTP пакеты, содержащие минимальный кусок INIT. Портом назначения по умолчанию является 80 (можно настроить во время компиляции, изменив DEFAULT_SCTP_PROBE_PORT_SPEC в nmap.h). Альтернативные порты можно передать в качестве параметров. Синтаксис такой же, как и для -p, за исключением того, что тип портов, заданных как S, не разрешен. Примеры: -PY22 и -PY22,80,179,5060. Помните, что не должно быть пробела между -PY и списком портов. Если задано несколько зондов, то они будут отправлены параллельно.
Кусок INIT предлагает удаленной системе установить с вами связь. Обычно порт назначения закрыт и обратно будет выслан кусок ABORT. Если случится так, что порт открыт, то цель предпримет второй шаг из четырехстороннего рукопожатия SCTP, который будет заключаться в ответе INIT-ACK. Если машина, на которой работает Nmap, имеет функциональный стек SCTP, то он срывает зарождающуюся ассоциацию, отвечая куском ABORT, а не отправкой куска COOKIE-ECHO, который был бы следующим шагом в четырехстороннем рукопожатии. Пакет ABORT отправляется не программой Nmap, а ядром машины, на которой работает Nmap в ответ на неожиданный INIT-ACK.
Nmap не заботит, открыт порт или закрыт. Что ответ ABORT, что INIT-ACK говорят Nmap, что хосты доступны и отвечают.
На Unix только привилегированный пользователь root обычно способен отправлять и получать SCTP пакеты. В настоящее время SCTP INIT пингование не доступно для непривилегированных пользователей.
-PE; -PP; -PM (Типы пинг-пакетов ICMP)
В дополнение к нестандартным методам обнаружения хостов с помощью TCP, UDP и SCTP запросов, Nmap может посылать и стандартные пакеты, используемые вездесущей программой ping. Nmap посылает ICMP пакет типа 8 (эхо запрос) на целевой IP-адрес, ожидая в ответ от доступного хоста пакет типа 0 (эхо ответ). К сожалению для сетевых исследователей, многие хосты и брандмауэры теперь блокируют такие пакеты вместо того, чтобы ответить на них, как это требуется в RFC 1122. По этой причине сканеры, использующие только ICMP запросы, редко бывают полезны при сканировании неизвестных целей в интернете. Но они могут быть полезны системным администраторам, занимающимся мониторингом внутренней сети. Используйте опцию -PE, чтобы активировать такой тип сканирования.
Но Nmap использует не только стандартный эхо запрос. В стандартах ICMP (RFC 792 и RFC 950) также определены запросы временной метки, информационные запросы и запросы адресной маски с кодами 13, 15 и 17, соответственно. Хотя они служат для того, чтобы узнать какую-либо информацию, такую как адресная маска или текущее время, они могут быть легко применены для обнаружения целей. Система, которая отвечает на них, работает и доступна.
В настоящее время Nmap не использует информационные запросы, так как они не получили широкого распространения. Стандарт RFC 1122 настаивает на том, что «хост НЕ ДОЛЖЕН посылать такие сообщения». Запросы временной метки или адресной маски могут быть посланы путем задания опций -PP и -PM, соответственно. Ответ на запрос временной метки (ICMP код 14) или адресной маски (код 18) указывает на то, что хост доступен. Эти запросы могут быть полезны, когда администраторы блокируют пакеты эхо запросов, но забывают о том, что другие типы ICMP запросов могут быть использованы в тех же целях.
-PO список_протоколов (пингование с использованием IP-протокола)
Одной из новейших опций для обнаружения хостов является пингование с использованием IP-протокола, которое посылает IP-пакеты с номером протокола, указанным в заголовке пакета. Список протоколов задается в том же формате, что и список портов в описанных выше опциях обнаружения хостов с помощью протоколов TCP, UDP и SCTP. Если не указан ни один протокол, то по умолчанию будут использованы IP-пакеты ICMP (протокол 1), IGMP (протокол 2) и IP-in-IP (протокол 4). Протоколы по умолчанию могут быть заданы во время компиляции путем изменения DEFAULT_PROTO_PROBE_PORT_SPEC в nmap.h.
Имейте в виду, что для ICMP, IGMP, TCP (протокол 6), UDP (протокол 17) и SCTP (протокол 132) пакеты посылаются с «правильными» заголовками протокола, в то время как для остальных протоколов пакеты посылаются без дополнительной информации после IP заголовка (пока не задана опция ––data, ––data-string или ––data-length).
При использовании этого метода ожидаются ответы по протоколу исходного запроса либо ICMP сообщение о недостижимости, что свидетельствует о том, что данный протокол не поддерживается удаленным хостом. Оба варианта ответа означают, что целевой хост доступен.
-PR (ARP пингование)
Одной из наиболее популярных сфер применения Nmap является сканирование локальных сетей (LAN). В большинстве локальных сетей, особенно тех, которые используют диапазоны частных адресов, определенные в RFC 1918, большое количество IP-адресов не используется в любой момент времени. Когда Nmap пытается послать сырой IP-пакет, такой как ICMP эхо запрос, операционная система должна определить MAC-адрес (ARP), соответствующий целевому IP, чтобы правильно адресовать фрейм. Это часто бывает медленно и проблематично, так как операционные системы не были написаны с учетом того, что им придется посылать миллионы ARP запросов недоступным хостам в короткий промежуток времени.
ARP сканирование позволяет Nmap вместо ARP запросов использовать свои собственные оптимизированные алгоритмы. И если Nmap получает ответ, то ей даже нет необходимости беспокоиться о других типах обнаружения хостов, основанных на IP-пакетах. Это делает ARP сканирование более быстрым и надежным, чем методы, основанные на IP сканирования. Поэтому оно применяется по умолчанию для сканирования локальных сетей. Даже если указаны другие типы сканирования (как -PE или -PS), Nmap все равно использует ARP сканирование для машин локальной сети. Если вы абсолютно не хотите использовать такой тип сканирования, то задайте опцию ––disable-arp-ping.
Для IPv6 (опция -6), -PR использует ICMPv6 Neighbor Discovery (обнаружение соседей) вместо ARP. Neighbor Discovery, как определено в RFC 4861, можно рассматривать как IPv6 эквивалент ARP.
––disable-arp-ping (Без пинга ARP или ND)
Обычно Nmap выполняет обнаружение ARP или IPv6 Neighbor Discovery (ND) подключенных локально ethernet хостов, даже если используются другие опции обнаружения, такие как -Pn или -PE. Для отключения этого неявного поведения используйте опцию ––disable-arp-ping.
Поведение по умолчанию обычно быстрее, но эта опция полезна в сетях, использующих прокси ARP, в которых роутер предположительно отвечает на все ARP запросы, создавая видимость, что любая цель доступна в соответствии с ARP сканированием.
––traceroute (Отслеживать путь к хосту)
Отслеживание осуществляется после сканирования и использует его результаты для определения порта и протокола, с помощью которых можно будет достичь цели. Процедура работает со всеми типами сканирования, кроме сканирования с использованием системного вызова connect (-sT) и «ленивого» (idle) сканирования (-sI). Все отслеживания используют динамическую модель таймингов Nmap и осуществляются параллельно.
Процедура отслеживания маршрута работает путем отправки пакетов с низким TTL (time-to-live — временем жизни) в попытке получить в ответ ICMP сообщение Time Exceeded (Превышение Времени Жизни) от промежуточных узлов между сканером и целевым хостом. Стандартные реализации отслеживания маршрута начинают с TTL, равным 1, а затем увеличивают его до тех пор, пока не будет достигнут целевой хост. В реализации же этой процедуры в Nmap сначала устанавливается высокий TTL, а затем TTL уменьшается, пока не станет равным 0. Это позволяет Nmap использовать «умные» алгоритмы кэширования для увеличения скорости отслеживания маршрута. В среднем Nmap посылает 5-10 пакетов на хост, в зависимости от условий в сети. При сканировании единственной подсети (например, 192.168.0.0/24), возможно, будет необходимо послать только один пакет на каждый хост.
-n (Без преобразования DNS)
Указывает Nmap никогда не производить обратное разрешение DNS имен каждого обнаруженного активного IP-адреса. Преобразование DNS может быть медленным даже со встроенным в Nmap параллельным преобразователем IP-адресов, поэтому эта опция может сократить время сканирования.
-R (Производить разрешение DNS имен для всех целей)
Указывает Nmap всегда производить обратное разрешение DNS имен для каждого целевого IP-адреса. Обычно DNS преобразование применяется только к доступным хостам.
––resolve-all (Сканировать каждый адрес хоста, полученный в результате распознавания имени хоста)
Указывает Nmap, что если целевое имя хоста распознано в более чем один адрес, следует просканировать их все. Поведением по умолчанию является сканирование первого полученного адреса. Несмотря на опцию, будут просканированы только адреса из соответствующего семейства адресов: IPv4 по умолчанию, IPv6 с -6.
––system-dns (Использовать системный DNS)
По умолчанию Nmap преобразует IP-адреса путем отправки запросов непосредственно серверам имен, указанным в вашей системе, и последующим анализом ответов. Многие запросы (часто десятки) исполняются параллельно для увеличения производительности. Задайте эту опцию, чтобы использовать ваш системный преобразователь IP-адресов (один IP адрес за один системный вызов getnameinfo). Системный преобразователь всегда используется для сканирования с протоколом IPv6.
––dns-servers server1[,server2[,…]] (Сервера для обратного разрешения DNS)
По умолчанию Nmap определяет DNS сервера (для разрешения DNS) из вашего resolv.conf файла (Unix) или из реестра (Win32). Вы можете использовать эту опцию для задания альтернативных серверов. Эта опция игнорируется, если вы используете ––system-dns или сканирование по протоколу IPv6. Использование нескольких DNS серверов частно увеличивает скорость сканирования, особенно если вы выбираете официальные сервера для IP пространства вашей цели. Эта опция также может увеличить незаметность, так как ваши запросы могут быть перенаправлены любым рекурсивным DNS сервером в интернете.
Эта опция также бывает полезна при сканировании частных сетей. Иногда лишь некоторые сервера имен предоставляют правильную rDNS информацию, и вы можете даже не знать, где они. Вы можете просканировать сеть на наличие открытого порта 53 (возможно с помощью функции определения версии), затем попробовать составить список (-sL), указывая по очереди все сервера имен в опции —dns-servers до тех пор, пока не найдете тот, который работает.
Эта опция может не учитываться, если ответ DNS превышает размер UDP-пакета. В такой ситуации наш DNS-распознаватель приложит все усилия, чтобы извлечь ответ из усеченного пакета, и в случае неудачи он обратится к использованию системного распознавателя. Кроме того, ответы, содержащие псевдонимы CNAME, будут возвращаться к системному распознавателю.
Продолжение следует…
От редакции
Материал получился настолько объемный, что мы решили разделить его на несколько частей. Следующая часть выйдет через неделю.
Если вам интересно посещать бесплатные онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN.
*Анонсы мероприятий каждую неделю
Практикумы для специалистов по инфраструктуре и разработчиков — https://rebrainme.com.
Наш Youtube-канал — https://www.youtube.com/channel/UC6uIx64IFKMVmj12gKtSgBQ.
Агентство Fevlake, проектируем и поддерживаем IT-инфраструктуры с 2012 года — https://fevlake.com.