Как пользоваться сканером nmap в Linux

как пользоваться nmap

Утилита nmap — сокращение от Network Mapper – это просто классный консольный инструмент для мониторинга сетевого окружения  для компьютеров и прочих устройств под управлением операционной системы семейства Linux. Хотя сейчас есть версии и под Linux. Любому специалисту-сетевику или системному администратору периодически возникает необходимость сканировать свою сеть и хосты в ней для обнаружения уязвимостей. Программа nmap в этом смысле считается лучшей. Она имеет классный функционал, очень удобна в работе и совсем несложная в использовании. Именно поэтому её и применяют пользователи «от мала и до велика».

Установка nmap на OC Linux

По умолчанию nmap не установлен в операционною систему Линукс, поэтому его нужно установить.

Ubuntu/ Debian:

# apt update
# apt install nmap

Centos 8 и выше:

dnf install nmap

Centos 7 / Redhat /Fedora

yum install nmap

Как пользоваться nmap

Синтаксис команды nmap выглядит следующим образом:

nmap <опции> [адрес]

Опций, которыми можно пользоваться не просто много, а очень много. Это настоящий клондайк для сетевого инженера или ИБ-специалиста по оценке уровня безопасности сетевого хоста. Подробный список доступных опций смотрите ниже.

Примеры использования утилиты nmap

Приведу несколько простых примеров как пользоваться сетевым сканером nmap. Для поиска устройств, подключенных к сети, пользователю необходимо узнать маску локальной сети. К примеру, давайте просканируем свой домашний маршрутизатор. Смотрим свой IP-адрес, маску и шлюз с помощью команды:

$ ip addr show

Пусть в нашем примере IP компьютера в локальной сети будет 192.168.1.100, а адрес маршрутизатора — 192.168.1.1. Запустим команду для сканирования сети с указанием IP маршрутизатора:

# nmap 192.168.1.1

Команда выполняется без каких либо опций и вывод информации будет минимальным. Тем не менее, будут показаны открытые порты на устройстве.

Теперь давайте запустим всей подсети. Вот так:

$ nmap -sL 192.168.1.1/24

Если у сканируемого сетевого устройства используется защита от сканирования портов, то процесс не даст результата. Тогда применим небольшую хитрость – использовать специальную опцию для обхода такой защиты. Вот так это будет выглядеть на практике:

$ nmap -sn 192.168.1.1/24

Смотрим результаты выполнения сканирования. Там будут отображены все порты, используемые различными сервисами на ПК. Не забывайте о том, что каждый из этих портов может стать уязвимым местом в системе.

Чтобы получить более развернутые данные воспользуемся вот таким способом:

$ nmap -sV 192.168.1.1

Чтобы собрать подробную информацию о конкретном порте и сервисе за ним — используем команду нмап вот так:

$ nmap -sC 192.168.56.102 -p 21

Чтобы утилита функционировала в агрессивном режиме, когда в окне будет указана развернутая информация о портах, вызванная всего
лишь одной командой, надо добавить специальную опцию в стандартную команду. А  именно:

$ nmap -A 192.168.1.1

Для ознакомления с полным списком доступных скриптов необходимо выполнить команду:
$ find /usr/share/nmap/scripts/ -name ‘*.nse’ | grep ftp

Список опций сетевого сканера

-sT (scan TCP) — использовать метод TCP connect(). Наиболее общий метод сканирования TCP-портов. Функция connect(), присутствующая в любой ОС, позволяет создать соединение с любым портом удаленной машины. Если указанный в качестве аргумента порт открыт и прослушивается сканируемой машиной, то результат выполнения connect() будет успешным (т.е. соединение будет установлено), в противном случае указанный порт является закрытым, либо доступ к нему заблокирован средствами защиты.
Для того, чтобы использовать данный метод, пользователь может не иметь никаких привилегий на сканирующем хосте. Этот метод сканирования легко обнаруживается целевым (т.е. сканируемым) хостом, поскольку его log-файл будет содержать запротоколированные многочисленные попытки соединения и ошибки выполнения данной операции. Службы, обрабатывающие подключения, немедленно заблокируют доступ адресу, вызвавшему эти ошибки.

-sS (scan SYN) — использовать метод TCP SYN. Этот метод часто называют «полуоткрытым» сканированием, поскольку при этом полное TCP-соединение с портом сканируемой машины не устанавливается. Nmap посылает SYN-пакет, как бы намереваясь открыть настоящее соединение, и ожидает ответ. Наличие флагов SYN|ACK в ответе указывает на то, что порт удаленной машины открыт и прослушивается. Флаг RST в ответе означает обратное. Если Nmap принял пакет SYN|ACK, то в ответ немедленно отправляет RST-пакет для сброса еще не установленного соединения (реально эту операцию выполняет сама ОС). Очень немного сайтов способны обнаружить такое сканирование. Пользователь должен иметь статус root для формирования поддельного SYN-пакета.

-sF,-sX,-sN (scan FIN, scan Xmas, scan NULL) — «невидимое» FIN, Xmas Tree и NULL-сканирование. Эти методы используются в случае, если SYN-сканирование по каким-либо причинам оказалось неработоспособным. Так, некоторые файрволлы и пакетные фильтры «ожидают» поддельные SYN-пакеты на защищенные ими порты, и программы типа Synlogger или Courtney способны отследить SYN-сканирование.

-sP (scan Ping) — ping-«сканирование». Иногда вам необходимо лишь узнать адреса активных хостов в сканируемой сети. Nmap может сделать это, послав ICMP-сообщение «запрос эха» на каждый IP-адрес, указанный вами. Хост, отправивший ответ на эхо, является активным.

-sV (scan Version) — включение режима определения версий служб, за которыми закреплены сканируемые порты. После окончания сканирования будет получен список открытых TCP и/или UDP-портов. Без этой опции в списке напротив каждого порта будет указана служба, которая обычно использует данный порт (эта информация берется из базы данных «общеизвестных» портов, файл nmap-services). При включенной опции будет запущена подсистема определения версий служб, которая проведет последовательное тестирование этих портов с целью определения типов и версий служб, за которыми закреплены обнаруженные порты.

-sU (scan UDP) — сканировать UDP-порты. Этот метод используется для определения, какие UDP-порты (RFC 768) на сканируемом хосте являются открытыми. На каждый порт сканируемой машины отправляется UDP-пакет без данных. Если в ответ было получено ICMP-сообщение «порт недоступен», это означает, что порт закрыт. В противном случае предполагается, что сканируемый порт открыт.

-sO (scan Open protocol) — сканирование протоколов IP. Данный метод используется для определения IP-протоколов, поддерживаемых сканируемым хостом. Метод заключается в передаче хосту IP-пакетов без какого-либо заголовка для каждого протокола сканируемого хоста. Если получено сообщение «Протокол недоступен», то данный протокол хостом не используется. В противном случае Nmap предполагает, что протокол поддерживается хостом.

-sI <zombie_хост[:порт]> (scan Idle) — позволяет произвести абсолютно невидимое сканирование портов. Атакующий может просканировать цель, не посылая при этом пакетов от своего IP-адреса. Вместо этого используется метод IdleScan, позволяющий просканировать жертву через так называемый хост-«зомби». Кроме абсолютной невидимости, этот тип сканирования позволяет определить политику доверия между машинами на уровне протокола IP. Листинг результатов показывает открытые порты со стороны хоста-«зомби». Таким образом, можно просканировать цель с использованием нескольких «зомби», которым цель может «доверять», в обход файрволлов и пакетных фильтров. Такого рода информация может быть самой важной при выборе целей «первого удара». Мы подготовили статью с описанием этого метода, Вы можете ознакимиться с ней здесь. Вы можете указать конкретный порт для проверки изменения IPID на хосте-«зомби». В противном случае Nmap будет использовать номер порта по умолчанию для «tcp ping».

-sA (scan ACK) — использовать ACK-сканирование. Этот дополнительный метод используется для определения набора правил (ruleset) файрволла. В частности, он помогает определит, защищен ли сканируемый хост файрволлом или просто пакетным фильтром, блокирующим входящие SYN-пакеты.

-sW (scan Window) — использовать метод TCP Window. Этот метод похож на ACK-сканирование, за исключением того, что иногда с его помощью можно определять открытые порты точно так же, как и фильтруемые/нефильтруемые. Это можно сделать, проверив значение поля Initial Window TCP-пакета, возвращаемого хостом в ответ на посланный ему запрос, ввиду наличия определенных особенностей обработки данного поля у некоторых ОС.

-sR (scan RPC) — использовать RPC-сканирование. Этот метод используется совместно с другими методами сканирования и позволяет определить программу, которая обслуживает RPC-порт, и номер ее версии. Для этого все открытые TCP/UDP-порты хоста затопляются NULL-командами оболочки SunRPC, после чего определяются RPC-порты и закрепленные за ними программы. Таким образом, вы легко получаете информацию, которую могли бы получить с помощью команды ‘rpcinfo -p’, даже если portmapper сканируемого хоста закрыт файрволлом или TCP-wrapper’ом.

-sL (scan List) — получить список сканируемых адресов. Эта опция позволяет вам получить список адресов хостов, которые БУДУТ просканированы Nmap, до начала процесса сканирования. По умолчанию определяются имена хостов, однако это можно запретить, используя опцию -n. Опция может использоваться в случае, когда вам необходимо определить имена большого количества хостов по их адресам и т.д.

-b <ftp_relay хост> (bounche scan) — использовать атаку «Прорыв через FTP». Интересной «возможностью» протокола FTP (RFC 959) является поддержка «доверенных» (proxy) ftp-соединений. Другими словами, с доверенного хоста source.com можно соединиться с ftp-сервером target.com и отправить файл, находящийся на нем, на любой адрес Internet! Заметим, что данная возможность известна с 1985 года (когда был написан этот RFC). Nmap использует эту «дыру» для сканирования портов с «доверенного» ftp-сервера.

-P0 (Ping 0) — не производить ping-опрос хостов перед их непосредственным сканированием. Эта опция позволяет просканировать сети, блокирующие обработку ICMP-эха с помощью файрволлов. Примером такой сети является microsoft.com, и вы всегда должны использовать опцию ‘-P0’или’-PT80′(см. ниже), когда сканируете такую сеть.

-PT (Ping TCP) — использовать TCP «ping». Вместо посылки запроса ICMP-эха, Nmap отправляет TCP ACK-пакет на сканируемый хост и ожидаем ответ. Если хост активен, то в ответ должен придти RST-пакет. Для не-root пользователей используется функция connect(). Эта опция позволяет вам определить состояние сканируемого хоста, даже если обработка ICMP-эха запрещена файрволлом. Для указания номера порта сканируемого сервера, на который будет отправляться ACK-пакет, используется опция ‘-PT <номер_порта>’. По умолчанию используется 80-й порт, поскольку он практически никогда не фильтруется.

-PS (Ping SYN) — опция, также используемая для ping-опроса. При этом вместо ACK-пакета TCP «ping» используется SYN-пакет. Активные хосты посылают в ответ RST-пакеты (реже — SYN|ACK).


-PU [portlist] (Ping UDP) — использовать UDP Ping. Nmap отправляет UDP-пакеты на указанный хост и ожидает в ответ ICMP «port unreachable» (или ответы от открытых портов UDP) если хост активет. Поскольку большинство служб, использующих UDP, не отвечают на запросы, Вам лучше использовать порты, которые заведомо закрыты.

-PE (Ping ICMP) — эта опция использует в качестве ping-запроса нормальный ping-пакет (запрос ICMP-эха). Опция применяется для поиска активных хостов а также адресов сетей с возможностью широковещания. Такие сети пересылают прибывший ICMP-пакет всем своим объектам. Как правило, такие сети представляют собой «живую мишень» для хакера.

-PP — использует пакет ICMP «timestamp request (code 13)» для определения активных хостов.

-PM — схожа с опциями-PE и-PP за исключением того, что используется пакет «netmask request» (ICMP code 17).

-PB (Ping Both) — режим ping-опроса по умолчанию. Использует одновременно запросы типа ACK и ICMP.

-O (Operating system detection) — эта опция позволяет определить операционную систему сканируемого хоста с помощью метода отпечатков стека TCP/IP. Другими словами, Nmap активизирует мощный алгоритм, функционирующий на основе анализа свойств сетевого программного обеспечения установленной на нем ОС. В результате сканирования получается формализованный «отпечаток», состоящий из стандартных тестовых запросов и «ответов» хоста на них. Затем полученный отпечаток сравнивается с имеющейся базой стандартных ответов известных ОС, хранящейся в файле nmap-os-fingerprinting, и на основании этого принимается решение о типе и версии ОС сканируемого хоста.

-A — Эта опция включает режим additional advanced aggressive, и разрешает опции -O, -sV, -T4 и -v.

-6 — опция разрешает поддержку протокола IPv6. Все хосты должны поддерживать IPv6 при использовании этой опции, и могут быть указаны путем нормального имени DNS (запись AAAA) или литеральным IP-адресом, например 3ffe:501:4819:2000:210:f3ff:fe03:4d0. На данный момент, поддерживаются только методы TCP connect()-сканирование и TCP connect() Ping-сканирование. Если Вам необходимо UDP или другой тип сканирования, рекомендуем ссылку http://nmap6.sourceforge.net/.

-I (Ident scan) — использовать reverse-ident сканирование. Протокол Ident (RFC 1413) позволяет вскрыть имя пользователя (username) процесса, использующего TCP, даже если этот процесс не инициализировал соединение. Так, например, вы можете подключиться к порту http и затем использовать identd для поиска на сервере пользователя root. Это может быть сделано только при установлении «полного» TCP-соединения с портом сканируемой машины (т.е. необходимо использовать опцию ‘-sT’). Nmap опрашивает identd сканируемого хоста параллельно с каждым открытым портом. Естественно, этот метод не будет работать, если на целевом хосте не запущен identd.

-f (use fragmentation) — эта опция используется совместно с SYN, FIN, Xmas или NULL-сканировании и указывает на необходимость использования IP-фрагментации с малым размером фрагментов. Идея заключается в том, чтобы разбить TCP-заголовок пакета на несколько фрагментов (обычно два) на стороне источника. Сканируемый хост «собирает» эти IP-фрагменты в один TCP-пакет.

-v (verbose output) — использовать режим «подробного отчета». Эту опцию рекомендуется использовать в любых случаях, поскольку при этом Nmap подробно сообщает о ходе выполнения текущей операции. Для получения лучшего эффекта можно указать ее дважды. Ну а если вы укажете еще опцию ‘-d’, то от скроллинга экрана у вас может закружиться голова.

-h (show help) — печатает справку по использованию Nmap с указанием опций и краткого их описания, не запуская саму программу.

-oN <имя_файла> (output Normal) — записывает результаты сканирования в указанный файл в удобной для пользователя форме.

-oX <имя_файла> (output XML) — записывает результаты сканирования в файл, указанный в качестве аргумента, в формате XML.Это позволяет программам легче интерпретировать вывод Nmap’а. Вы можете использовать аргумент ‘-‘ (без кавычек) для вывода на stdout. Нормальный вывод в этом случае будет подавлен. Document Type Definition (DTD) расшифровывающий структуру результатов Nmap в формате XML доступен здесь: http://www.insecure.org/nmap/nmap.dtd.

-oG <имя_файла> (output Grepable) — записывает результаты сканирования в файл, указанный в качестве аргумента, в формате, удобном для команд типа grep. Это простой формат, при котором все данные записываются в одну строку. Формат пришел на смену опции -oM (см. ранние версии) и использовался для взаимодействия с другими программами. Сейчас мы рекомендуем использовать XML. Также возможно использование аргумента ‘-‘.

-oA <базовое_имя_файла> (output All) — записывает результаты во всех основных форматах (нормальном, grep и XML). Вам необходимо указать базу имени, и выходные файлы будут называться base.nmap, base.gnmap и base.xml.

-iL <имя_файла> (input List) — считывает описание целевых хостов из текстового файла. Файл должен содержать список имен хостов или IP-адресов, разделенных пробелами, знаками табуляции или комбинацией <CR><LF> (каждый хост — с новой строки). Если вы хотите использовать StdIn в качестве источника информации о хостах, укажите вместо имени файла символ ‘-‘. Более подробная информация о форматах выражений приведены в разделе «Способы задания целевого хоста».

-iR (input Random) — если вы укажете эту опцию, Nmap будет сканировать случайно выбранные им хосты, адреса которых получены с помощью генератора случайных величин. Этот процесс будет длиться, пока вы его не остановите. Функция может пригодиться для статистического исследования Internet.

-p <диапазон(ы)_портов> (ports) — эта опция указывает Nmap, какие порты необходимо просканировать. Например, ‘-p23’ означает сканирование 23 порта на целевой машины. Если указано выражение типа ‘-p 20-30,139,60000-‘, Nmap будет сканировать порты с номерами с 20 по 30 включительно, 139 и от 60000 и выше (до 65535). По умолчанию Nmap сканирует все порты в диапазоне 1-1024, поскольку все они перечислены в файле services.

-F (Fast scan) — быстрое сканирование. Указывает Nmap на необходимость сканирования портов только тех служб, которые перечислены в файле services. Сканирование проходит гораздо быстрее, чем если бы Nmap сканировал все 65535 портов.

-D <ложный_хост1,[ложный_хост2],[,ME],…> (use Decoy hosts). — В этом режиме Nmap «создает» ложные хосты, адреса которых задаются произвольно и указываются в качестве аргументов. При этом на стороне сканируемого хоста создается видимость, что производится одновременное сканирование с различных хостов (обладающих разными IP-адресами), что очень затрудняет обнаружение вашего реального IP-адреса.

-S <IP-адрес> (set Source) — Если Nmap не смог автоматически определить IP-адрес вашего хоста (о чем вы получили соответствующее сообщение), вам необходимо самостоятельно указать IP-адрес, используя его в качестве аргумента данной опции (т.е. адрес интерфейса, который вы хотите использовать). Другое применение данной опции — для создания видимости сканирования целевого хоста кем-то другим. В этом случае вы не сможете получить результат, однако на стороне сканируемого хоста создается видимость сканирования с указанного вами адреса. Для этого совместно с ‘-S’необходимо использовать опцию ‘-e’.

-e <интерфейс> (interface) — указывает Nmap, какой интерфейс будет использоваться для приема/передачи пакетов. Имя интерфейса указывается в качестве аргумента опции. Nmap обычно сам определяет интерфейс, однако выдаст вам соответствующее сообщение, если по каким-либо причинам он не смог этого сделать.

-g <номер_порта> — указывает номер порта на вашем компьютере, который будет использоваться Nmap для осуществления сканирования. Многие файрволлы и пакетные фильтры позволяют проходить пакетам DNS (порт 53) и FTP-DATA (порт 20) к защищаемому ими хосту и установить соединение. Этот момент является большой «дырой» в безопасности файрволлов, поэтому атакующему ничего не стоит отправлять нужные ему пакеты через 53-й или 20-й порт.

Для сканирования UDP-портов Nmap пробует сначала 53-й порт, а затем 20-й. Для TCP-портов — наоборот. Заметим, что это влияет на поле «порт источника» в запросе и поэтому не всегда работает. Например, вы не сможете определить характер изменения ISN, всвязи с чем Nmap самостоятельно сменит номер порта для этой цели, даже если вы используете опцию ‘-g’.

—data_length <число> — Обычно Nmap посылает пакет, содержащий только загловок. Таким образом, TCP-пакет имеет длину 40 байт, а ICMP «echo requests» — 28. Эта опция добавляет к большинству пакетов (кроме пакетов для определения ОС) указанное число нулевых байт. Добавляет конспирации.

-n — Никогда не преобразовывать адреса обнаруженных хостов в DNS-адрес. Увеличивает скорость сканирования.

-R — Всегда преобразовывать адреса обнаруженных хостов в DNS-адрес.

-r — Не переставлять номера сканируемых портов случайным образом.

-ttl <значение> — Записывает в поле TTL отправляемых пакетов IPv4 заданное значение.

—randomize_hosts — указывает Nmap на необходимость случайной перестановки каждой группы из 2048 хостов перед непосредственным их сканированием. Эта опция делает сканирование менее заметным для различных систем сетевого мониторинга, особенно если вы используете ее совместно с опцией настройки времени, устанавливающей более медленное сканирование.

-M <максимум_сокетов> (Max sockets) — устанавливает максимальное количество сокетов, используемых параллельно в методе TCP connect() сканирования. Установка меньшего значения немного замедляет процесс сканирования, но предотвращает «завал» сканируемого хоста. Для последней цели лучше всего использовать опцию ‘-sS’, так как SYN-сканирование гораздо легче «переносится» операционными системами.

—packet_trace — Показывать все принимаемые и передаваемые пакеты в формате TCPDump.

—datadir [каталог] — При запуске Nmap считывает данные из файлов nmap-services, nmap-protocols, nmap-rpc, и nmap-os-fingerprints. Их местоположение Nmap берет из переменной —nmapdir. Затем проверяется переменная окружения NMAPDIR, после чего ~/nmap, а затем путь наподобие /usr/share/nmap . А потом Nmap ищет их в текущем каталоге. Этой опцией можно явно задать положение этих файлов.

-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> (Timing options) — эта опция устанавливает временной режим сканирования. Требуемый режим указывается в качестве аргумента. Режим Paranoid используется в случае, когда очень велика вероятность использования скан-детекторов. В этом режиме сканирование проходит очень медленно. Параллельне сканирование не используется. Вместо этого Nmap проводит сканирование последовательно, с интервалом по меньшей мере 5 минут между посылкой пакетов.
Режим Sneaky похож на режим Paranoid. Разница заключается в том, что интервал между посылкой двух пакетов составляет 15 секунд.
Режим Polite используется в случае, когда необходимо минимизировать нагрузку на сеть и уменьшить вероятность «завала» сканируемого хоста. В этом режиме тесты проходят последовательно с интервалом минимум 0,4 секунды.
Режим Normal используется Nmap по умолчанию. В этом режиме сканирование производится с максимально возможной скоростью, и по возможности без перегрузки сети и возникновения ошибок.
Режим Aggressive устанавливает ограничение на сканирование одного хоста, равное 5 минутам, и, кроме того, время ожидания ответа на запрос не превышает 1,25 секунды.
Режим Insane применяется только при сканировании очень быстрых сетей. Время сканирования одного хоста составляет 75 секунд, а ожидание ответа на запрос — 0,3 секунды.

Каждому режиму присвоен соответствующий номер, и вы можете указать его вместо полного названия режима. Так, опция ‘-T0’ означает режим Paranoid, а ‘-T5’ — Insane. Нумерация соответствует порядку, в котором они были перечислены выше. Заметим, что опция ‘-T’ осуществляет настройку Nmap на высоком уровне, и не должна использоваться с опциями, приведенными ниже (они обеспечивают низкоуровневую настройку).

—host_timeout <миллисекунд> — устанавливает время, отводимое Nmap на полное сканирование одного хоста, прежде чем он перейдет к очередному IP-адресу. По умолчанию этот параметр отсутствует, т.е. Nmap не переходит к очередному адресу до окончания сканирования текущего.

—max_rtt_timeout <миллисекунд> (maximal round-trip time timeout) — устанавливает верхнюю границу временного интервала, в течение которого Nmap ожидает ответ на посланный запрос, прежде чем повторить запрос либо послать новый. По умолчанию это значение установлено равным 5000 миллисекунд.

—min_rtt_timeout <миллисекунд> — Если сканируемый хост немедленно отвечает на посланный запрос, Nmap сразу же передает следующий, сэкономив тем самым очень много времени. Это ускоряет сканирование, но может привести к потере пакетов с ответами, пришедшими несколько позже, чем обычно. Эта опция устанавливает нижнюю границу времени ожидания ответа, т.е. Nmap в любом случае будет ждать в течении указанного вами времени не зависимо от того, пришел ответ или нет.

—initial_rtt_timeout <миллисекунд> — устанавливает время, отводимое на начальный тест. Эта опция используется в основном для сканирования хостов, защищенных файрволлом, совместно с опцией ‘-P0’. Обычно Nmap автоматически выбирает оптимальное значение этого параметра. Значение по умолчанию составляет 6000 миллисекунд.

—max_parallelism <количество> — устанавливает максимальное количество параллельных процессов сканирования, используемых Nmap. Установка этого параметра равным 1 означает, что Nmap никогда не будет сканировать более одного порта в один момент времени.

—min_parallelism <количество> — устанавливает минимальное количество параллельных процессов сканирования, используемых Nmap. Увеличивает скорость прохождения пакетов через файрволлы.

—scan_delay <миллисекунд> — устанавливает минимальное время задержки между тестами. Эта опция может использоваться для снижения нагрузки на сеть и уменьшения вероятности обнаружения сканирования.

Оставьте комментарий