Определение служб, их версий и операционной системы
Как видно из скриншотов показанных выше Nmap определяет не только номер и состояние порта, но и службу которая на этом порту запущенна. Конечно, в большинстве случаев это достоверная информация, но есть хитрые системные администраторы, запускающие службы на нестандартных портах. К счастью Nmap даёт возможность определить действительно ли именно такая служба работает на найденном порту, а также получить дополнительную информацию, такую как имя хоста, имя приложения, номер версии, тип устройства и семейство ОС.
-sV Определение версий. Обнаружив порт Nmap начинает посылать на него соответствующие запросы, что бы определить какая именно служба этот порт использует. Для этого используется информация из базы данных nmap-service-probes (лежит в папке nmap), где содержаться запросы и и перечислены виды ответов на них, для распознавания соответствующих служб.
—version-intensityОпция устанавливающая интенсивность, определяет какие запросы будут использоваться при сканировании. Можно установить значение от 1 до 9. Чем ниже значение, тем быстрее пройдет сканирование. Чем выше — тем медленнее, но больше вероятность правильного определения службы. Если опция не указанна используется значение по умолчанию — 7, которого достаточно в большинстве случаев. Если есть желание использовать максимальную интенсивность, используй параметр —version-all, это гарантирует, что каждый единичный запрос будет направлен на каждый порт (и запасись терпением, это может занять какое-то время)
-OВключить режим определения ОС. При включении этой опции Nmap посылает несколько TCP и UDP пакетов на хост, а полученные результаты сравниваются с данными из файла nmap-os-db (лежит в папке nmap) и если обнаруживает совпадения, показывает ответ для какой ОС и какой её версии типично такое поведение. По этим же совпадениям Nmap попытается определить тип устройства и его производителя
Примечание:Я рассказал про параметры определения версий и ОС потому, что про них нужно знать и для полноты обзора, при этом на практике, в большинстве случаев, в место них лучше использовать опцию -А, которая сразу включает определение ОС, версий, трассировку и сканирование с использованием скриптов.
Быстрое сканирование огромных сетей в nmap
lijiejie, в предложил вариант быстрого сканирования огромных подсетей.
Сканирование больших подсетей в nmap, например 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16,100.64.0.0/10 — это нетривиальная задача. На таких сетях nmap очень медленный и можно никогда не дождаться результатов сканирования. В результате многие просто используют другие инструменты, такие как и .
Сканируя огромное сетевое пространство, нас больше всего беспокоит эффективность, то есть затраты времени. Ради быстроты иногда можно пожертвовать точностью.
Основная идея быстрого сканирования — пинговать с высоким уровнем параллелизма:
sudo nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 -oX nmap_output.xml 100.64.0.0/10
Значение опций:
- -sn: не сканировать порты, только пинговать хост
- -PE: определяет, жив ли хост через эхо ICMP
- -n: не преобразует IP-адреса в доменные имена.
- —min-hostgroup 1024: Регулирует размер групп для параллельного сканирования. Минимальная группировка установлена на 1024 IP-адреса. В Nmap есть возможность осуществлять сканирование портов или сканирование с целью определения версии нескольких хостов параллельно. Это происходит путём разделения целевого IP пространства на группы, а затем сканирования одной группы за раз. В общем случае целесообразно использовать большие группы. Недостатком является то, что вы не можете узанть информацию о каком-либо хосте, пока не закончится сканирование всей группы. Таким образом, если Nmap начнет сканирование группы из 50-ти хостов, то пользователь не будет получать никакой информации (кроме обновлений информации предлагаемых в вербальном режиме), пока не будет завершено сканирование всех 50-ти хостов. о умолчанию Nmap использует компромиссный подход к решению этой проблемы. Сначала производится сканирование небольших групп из 5-ти хостов, поэтому первые результаты приходят быстро, затем размер группы постепенно увеличивается до максимального — 1024. Точные значения по умолчанию зависят от заданных опций. Для большей эффективности Nmap использует группы больших размеров для UDP сканирования и для некоторых типов TCP сканирования портов.
- —min-parallelism 1024: Регулирует распараллеливание запросов. Этот параметр очень важен. Чтобы в полной мере использовать системные и сетевые ресурсы, мы устанавливаем количество проверок на не менее чем 1024. Эти опции регулируют общее количество запросов для группы хостов. Опции используются при сканировании портов и при обнаружении хостов. По умолчанию Nmap высчитывает степень параллельности основываясь на производительности сети. Если пакеты отбрасываются, то Nmap использует меньшее количество запросов. Количество запросов медленно увеличивается по мере того, как сеть продолжает нормально работать. Эти опции устанавливают минимальную и максимальную границы для этой переменной. По умолчанию параллелизм устанавливается в 1, если сеть работает плохо, и может достигать нескольких сотен при идеальных условиях.
- -oX nmap_output.xml: Вывести результат в формате XML, имя файла — nmap_output.xml
По окончании сканирования вы можете проанализировать XML-документ, чтобы узнать, какие IP-адреса активны.
Совет: количество одновременных зондов можно настроить в соответствии с условиями вашей сети.
Посмотрите на следующие данные результатов сканирования:
Read data files from: /usr/bin/../share/nmap Nmap done: 4012855 IP addresses (140507 hosts up) scanned in 2590.61 seconds Raw packets sent: 7897197 (221.122MB) | Rcvd: 160371 (6.456MB)
Просканировано 4012855 адресов за 2590 секунд — это 43 минуты. Найдено 140507 хостов онлайн. С настройками по умолчанию сканирование сети /10 заняло бы намного больше времени.
Запускать Nmap с правами root или от обычного пользователя?
Программу Nmap можно запускать с привилегиями суперпользователя:
sudo nmap 91.235.129.250
Или с привилегиями обычного пользователя:
nmap 91.235.129.250
На первый взгляд может показаться, что разницы нет, поскольку программа в любом случае возвращает результат. Но на самом деле при запуске от root программа Nmap может отправлять сырые пакеты с помощью которых сканирование является менее заметным: используются полуоткрытые соединения, которые приложения, прослушивающие порт, обычно вообще не замечают (но могут заметить файерволы и другое специальное сетевое оборудование).
При запуске от обычного пользователя, Nmap использует системный вызов и открывает полноценное соединение, что является более заметным и более медленным.
Некоторые виды сканирования невозможно запустить от пользователя с обычными правами! В этом случае программа выведет:
Где взять?
Скачать Nmap можно с официального сайта https://nmap.org/, там доступна самая последняя версия с подробнейшим описанием установки для самых распространенных систем. Либо можно установить из репозиториев (совсем не свежую версию):
Nmap запускается на всех популярных операционных системах, а официальные исполнимые пакеты доступны для Linux, Windows и Mac OS X. В дополнение к классической версии Nmap командной строки, набор Nmap включает продвинутый графический интерфейс и просмотрщик результатов (Zenmap), гибкий инструмент передачи, перенаправления и отладки данных (Ncat), утилиту для сравнения результатов сканирования (Ndiff) и инструмент генерации пакетов и анализа ответов (Nping).
Типы сканирования в Nmap
Nmap поддерживает разные типы сканирования. Самые популярные из них:
1: TCP (-sT)
В этом типе сканирования Nmap отправляет TCP-пакет на порт с установленным флагом SYN. В этом случае может произойти следующее:
- Цель отвечает пакетом RST – значит, порт закрыт.
- Цель вообще не отвечает. Возможно, из-за того, что брандмауэр отбрасывает все входящие пакеты и в этом случае порт будет считаться отфильтрованным.
- Цель отвечает TCP-пакетом с установленными флагами SYN/ACK, значит, порт открыт. А затем Nmap ответит TCP-пакетом с установленным флагом ACK, что завершает трехстороннее рукопожатие TCP.
Это не очень надежный метод сканирования, так как брандмауэр можно легко настроить на ответные пакеты RST или сбрасывание всех входящих пакетов. Кроме того, этот метод очень медленный, поскольку он ожидает всего трехэтапного рукопожатия TCP.
2: Сканирование SYN “Half-open” (-sS)
Сканирование SYN, или так называемое “полуоткрытое”, или “скрытое сканирование” — улучшение по сравнению с предыдущим методом. В предыдущем методе после получения пакета SYN/ACK мы отправляли обратно TCP-пакет с установленным флагом ACK, теперь мы отправляем RST-пакет. Это предотвращает повторные попытки сервера выполнить запросы и значительно сокращает время сканирования.
Этот метод является усовершенствованием предыдущего, потому что:
- Он быстрее
- Может обойти примитивные брандмауэры
- Часто SYN-сканирование не регистрируется приложениями на портах, поскольку большинство приложений начинают регистрировать соединение только после того, как оно полностью установлено, чего нельзя сказать о SYN-сканировании
Однако в производственных средах запускать SYN-сканирование не рекомендуется, так как это может привести к выходу из строя некоторых нестабильных приложений. Также следует отметить, что для сканирования SYN требуются привилегии sudo, поскольку оно требует обработки неформатированных пакетов.
Фактически при запуске с привилегиями sudo nmap по умолчанию использует SYN-сканирование. А в противном случае по умолчанию используется сканирование TCP.
3: Сканирование UDP (-sU)
Сканирование UDP менее надежно, чем два предыдущих, поскольку UDP-соединения не имеют статических данных. Это означает, что нет “фидбек механизма”, такого, как TCP. UDP работает по принципу “сделал и забыл” — он отправляет пакеты, направленные на определенные порты, и надеется, что они дойдут. При этом больше внимания уделяется скорости, а не качеству. Однако отсутствие механизма обратной связи затрудняет идентификацию открытых портов.
При отправке UDP-пакета на целевой порт возможны три сценария:
- Ответ не получен, тогда nmap помечает порт как open|filtered. В таком случае он отправляет еще один UDP-пакет для повторной проверки и если ответа снова нет, он помечает порт как open|filtered и идет дальше.
- Он может получить ответ UDP, но это бывает очень редко. В таком случае порт помечается как open.
- Если порт closed и он получает обратный echo-запрос ICMP, это означает, что порт недоступен.
Nmap Scan Tuning & Optimisation
NMAP Parallelism
The maximum or minimum amount of parallel tasks scanned at the same time (in parallel).
TIP: If you have an basic IDS / portscan detection blocking your scans you could lower the –min-parallelism in an attempt to reduce the number of concurrent connections
NMAP Host Group Sizes
The number of hosts scanned at the same time, Note: if you are writing output to a file e.g., -oA you will need to wait for the host group to complete scanning before the nmap output will be written to the file. Therefore if you get a lagging host you will may end up waiting a while for the output file, which brings us on to… host timeout.
NMAP Host Timeout
Nmap allows you to specify the timeout, which is the length of time it waits before giving up on the target. Be careful setting this super low, as you may end up with inaccurate results.
The following example would giveup after 50 seconds.
NMAP Scan Delay
An extremely useful option to defeat basic port scan detection (SOHO devices and some IDS) that essentially monitor and block X amount of connects per second (syn flood etc).
For example if you know you can get away with 2 req/sec without getting blacklisted then you could use:
added 200ms for a buffer
NMAP Disable DNS Lookups
Assuming you do not want domain names being looked up, use the flag to dissable resolution and speed up the scan.
NMAP Black List Detection?
- It ussally takes and extemely long time to complete
- Droppped probes nmap will increase the timeout, but it’s likely you are already black listed
- To confirm, recheck a port that you know was open before
As far as I know there is no way of detecting for black listing within nmap natively.
NMAP Optimising Portscans for Targets
Once you have identified a target firewall / IDS you can look up the default settings for the portscan black list by reading the manual and use the nmap command switches above to obtain the best performance without getting black listed.
If you found this Nmap cheat sheet useful, please share it below.
How To Use Nmap Effectively
Nmap uses diverse techniques to scan, such as TCP connect scan, TCP SYN scan, TCP reverse ident scan, FTP bounce scan, and so on. Each of these methods has its own benefits and drawbacks, and whether you should opt for simple scanning or advanced scanning depends on the target machine.
Before you get started with Nmap, the software needs to be installed.
The installation process is easy, but it may vary based on your operating system. Below, we’ve covered how to install an app for Windows, MacBook, and Linux versions.
- For Windows OS: Download and run the custom installer you get with Nmap (namp<version>setup.exe). This will automatically configure Nmap on your Microsoft system.
- For Mac OS: Run the Nmap-<version>mpkg file to start the dedicated installer (you get this with Nmap).
- For Linux OS: Run the following commands after opening the terminal to install Nmap
- CentOS/Fedora: sudo dnf install nmap
- Ubuntu/Debian: sudo apt-get install nmap
Increasing Verbosity
When running any scan through Nmap, you might require more information. Entering the verbose command -v will provide you with additional details on what Nmap is doing. Nine levels of verbosity are available on Nmap, from -4 to 4:
- Level -4 – Provides no output (e.g. you won’t see response packets)
- Level -3 – Similar to -4 but also provides you with error messages to show you if an Nmap command has failed
- Level -2 – Does the above but also has warnings and additional error messages
- Level -1 – Shows run-time information like version, start time, and statistics
- Level 0 – The default verbosity level that displays sent and received packets as well as other information
- Level 1 – Same as level 0 but also provides detail on protocol details, flags and timing.
- Level 2 – Shows more extensive information on sent and received packets
- Level 3 – Show the complete raw transfer of sent and received packet
- Level 4 – Same as level 3 with more information
Increasing the verbosity is great for finding ways to optimize your scans. You increase the amount of information that you have access to and provide yourself with more information to make targeted improvements to your network infrastructure.
Тайминг Nmap: как это выглядит?
Тайминг Nmap задаётся T-опцией:
-T<0 | 1 | 2 | 3 | 4 | 5 |>
где громкость сканирования идёт по нарастающей с . Переходим к подробностям.
Аргументы тайминга – ПКО (они же RTT) – используются сканером для того, чтобы вовремя прекратить и повторно отослать сигналы проб. Сами разработчики предпочитают эмоциональную окраску описанным таймингам. Так, сканирование на таймингах в отношениях хакер-жертва делится на:
- Т0 – параноидальный тип
- Т1 – крадущийся
- Т2 – вежливый
- Т3 – нормальный
- Т4 – агрессивный
- Т5 – сумасбродный
Вы видите, что, начиная с категории параноидального самосохранения, хакер выставит минимальную задержку сканирования по портам аж в 5 минут до сумасбродного в четверть секунды (разведка на манер”подсмотреть в окно и убежать”)
Это лирика, но вы понимаете, что работе с удалённой системой тайминг сканирования Nmap приобретает важное значение для результата: в сетях с ограниченной пропускной способностью желательно быть немного потише
В шапке вышеприведённой таблицы мною указаны параметры задержек в описываемых -T флагах по умолчанию. А имена типов задержек на русском. Применимость в командах описываю ниже.
Далее. Скрипты сканера настроены таким образом, что они позволяют использовать в команде сразу две конфликтующие опции. Однако полевые испытания в этом режиме говорят о том, что Nmap выберет приоритетным последний из конфликтных флагов (соответственно, и реакция будет адекватной) , так что смешивать тайминги бездумно не вижу особого смысла – иногда это заметно задерживает процесс взятия проб. Однако осмысленное включение в команду сканирования флага -TХ и с последующим же указанием опции:
--scan-delay ХХХ m|s
может дать неожиданно эффективные результаты по сканированию удалённого хоста. Эта опция также имеет ряд под-опций, которые проистекают из, собственно, названий или типов (как в шапке таблицы) -T опции. Конечно, всё на английском. Смотрим. Вот как в итоге может выглядеть “навороченная” команда:
nmap -T4 --scan-delay 1s --initial-rtt-timeout 170ms --host-timeout 10m -d сайт.com
здесь:
- scan-delay – опция установки времени задержки сканирования (в команде – 1 сек, а в таблице – до 10 мс максимум) – снятие проб будет не таким агрессивным, что, поверьте, часто спасает от раннего обнаружения механизмами безопасности “проверяемых” ресурсов.
- initial-rtt-timeout – заданная задержка ПКО относительно дефолтной ТХ (по умолчанию 500 мс для Т4, в нашей команде – 170 мс)
- host-timeout – этот аргумент появляется, если мы захотим прекратить сканирование указанной цели по истечение установленного вами времени (10 мин.)
OS Detection
nmap.org
Firewall/IDS Evasion and Spoofing
nmap.org
Use specified interface | |
fragment packets using the specified MTU | |
Cloak a scan with decoys. Makes it appear to the remote host that the decoys are scanning the target too. |
|
Spoof source address | |
Spoof source port number A common misconception is to trust traffic based only on the source port number. |
|
Append random data to sent packets Normally minimalist packets containing only a header are sent. |
|
Send packets with specified IP options IP protocol options are rarely seen and can be useful in some cases. Use record route () to determine a path to a target when traceroute-style approaches fail. Record-timestamp () or both ()if packets are being dropped by a certain firewall. Loose or strict source routing specified with an or followed by a space and then a space-separated list of IP addresses, specify a different route.
use hexadecimal format to specify option bits explicitly. |
|
May make the scans less obvious to network monitoring systems. |
|
Address of 0 uses random MAC. See nmap.org |
|
Send packets with invalid checksums Responses come from a firewall or IDS that didn’t validate the checksum. See nmap.org/p60-12 |
Как сканировать IPv6 адреса в nmap
Чтобы сканировать открытые порты на IPv6 адресах необходимо соблюдение ряда условий:
- удалённых хост должен иметь IPv6 адрес
- ваш провайдер Интернет-услуг также должен иметь поддержку IPv6 и вашему устройству должен быть присвоен IPv6 адрес
- если устройство, с которого выполняется сканирование, не напрямую подключено к роутеру, то эта сеть также должна поддерживать IPv6. Например, Интернет-провайдер, ваш роутер и ваш компьютер поддерживают IPv6 — следовательно, вы можете сканировать эту версию адресов. Но если вы с этого же компьютера попытаетесь выполнить сканирование, например, из виртуальной машины за NAT, которая подключена к сети 10.*.*.*, то сканирование завершиться неудачей из-за ошибки вида:
Если все условия соблюдены, то к команде сканирования nmap нужно добавить опцию -6 и в качестве цели указать:
- полный IPv6 адрес
- имя хоста (если к нему привязан IPv6)
- для подсетей можно использовать нотацию CIDR
В настоящее время диапазоны октетов для IPv6 ещё не поддерживаются.
Даже если в качестве цели явно указан IPv6 адрес, опцию -6 нужно обязательно указывать, иначе возникнет ошибка вида:
Все опции и возможности nmap поддерживаются также и для IPv6 адресов.
Если вам нужно просканировать порты на IPv6 адресе, но отсутствует такая техническая возможность, то вы можете воспользоваться онлайн сервисом «» (бесплатный, не требует регистрации).
Пример сканирования IPv6 адреса в Nmap:
Port Scanning Techniques
When it comes to port scanning, you can use a variety of different techniques on Nmap. These are the main ones:
Newer users will attempt to solve most problems with SYN scans, but as your knowledge develops you’ll be able to incorporate some of these other techniques as well. It is important to note that you can only use one port scanning method at a time (although you can combine an SCTP and TCP scan together).
TCP SYN Scan
The TCP SYN Scan is one of the quickest port scanning techniques at your disposal on Nmap. You can scan thousands of ports per second on any network that isn’t protected by a firewall.
It is also a good network scanning technique in terms of privacy because it doesn’t complete TCP connections that draw attention to your activity. It works by sending a SYN packet and then waiting for a response. An acknowledgment indicates an open port whereas no response denotes a filtered port. An RST or reset identifies non-listening ports.
TCP Connect Scan
A TCP Connect Scan is the main alternative TCP scan when the user cannot run a SYN scan. Under TCP connect scan, the user issues a connect system call to establish a connection with the network. Instead of reading through packet responses, Nmap uses this call to pull information about each connection attempt. One of the biggest disadvantages of a TCP connect scan is that it takes longer to target open ports than a SYN scan.
UDP Scan
If you want to run port scanning on a UDP service, then UDP scans are your best course of action. UDP can be used to scan ports such as DNS, SNMP and DHCP on your network. These are particularly important because they are an area that attackers commonly exploit. When running a UDP scan, you can also run a SYN scan simultaneously. When you run a UDP scan, you’re sending a UDP packet to each targeted port. In most cases, you’re sending an empty packet (besides ports like 53 and 161). If you don’t receive a response after the packets are transmitted, then the port is classified as open.
SCTP INIT port scan
The SCTP INIT port scan covers SS7 and SIGTRAN services and offers a combination of both TCP and UDP protocols. Like the Syn scan, the SCTP INIT Scan is incredibly fast, able to scan thousands of ports every second. It is also a good choice if you’re looking to maintain privacy because it doesn’t complete the SCTP process. This scan works by sending an INIT chunk and waiting for a response from the target. A response with another INIT-ACK chunk identifies an open port, whereas an ABORT chunk indicates a non-listening port. The port will be marked as filter if no response is received after multiple retransmissions.
TCP NULL Scan
A TCP NULL scan is one of the more crafty scanning techniques at your disposal. This works by exploiting a loophole in the TCP RFC that denotes open and closed ports. Essentially any packet that doesn’t contain SYN, RST or ACK bits will prompt a response with a returned RST if the port is closed and no response if the port is open. The biggest advantage of a TCP NULL scan is that you can navigate your way around router filters and firewalls. Even though these are a good choice for stealth, however, they can still be detected by intrusion detection systems (IDS).