Сканер сети определение операционных систем. Определение ос


Nmap - это очень популярный сканер сети с открытым исходным кодом, который может использоваться как в Windows, так и в Linux. Программа Nmap или Network Mapper была разработана Гордоном Луоном и на данный момент используется специалистами по безопасности и системными администраторами по всему миру.

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

Например, с помощью скриптов можно автоматически обнаруживать новые уязвимости безопасности в вашей сети. Namp может использоваться с хорошими и плохими намерениями, будьте аккуратны, чтобы не использовать nmap против закона. В этой инструкции мы рассмотрим как пользоваться namp для сканирования портов в операционной системе Linux. Но сначала нужно попытаться понять как работает эта утилита.

В компьютерных сетях все подключенные устройства имеют свой ip адрес. Каждый компьютер поддерживает протокол ping, с помощью которого можно определить подключен ли он к сети. Мы просто отправляем ping запрос компьютеру, и если он отзывается, то считаем, что он подключен. Nmap использует немного иной подход. Компьютеры также определенным образом реагируют на те или иные сетевые пакеты, утилита просто отправляет нужные пакеты и смотрит какие хосты прислали ответ.

Но об этом вы, наверное, уже знаете. Более интересно то как Nmap узнает какие сервисы запущены на машине. Суть работы всех сетевых программ основана на портах. Чтобы получить сообщение из сети, программа должна открыть порт на вашем компьютере и ждать входящих соединений. А для отправки сообщения по сети нужно подключиться к уже другой программой (адресатом) порту. Затем программе необходимо будет открыть порт, на котором она будет ждать ответа.

Утилита nmap в процессе сканирования сети перебирает доступный диапазон портов и пытается подключиться к каждому из них. Если подключение удалось, в большинстве случаев, передав несколько пакетов программа может даже узнать версию программного обеспечения, которые ожидает подключений к этому порту. Теперь, после того, как мы рассмотрели основы, рассмотрим как пользоваться nmap для сканирования портов и сети.

Синтаксис Nmap

Команда запуска Nmap очень проста для этого достаточно передать ей в параметрах целевой IP адрес или сеть, а также указать опции при необходимости:

$ nmap опции адрес

Теперь давайте рассмотрим основные опции, которые понадобятся нам в этой статье.

  • -sL - просто создать список работающих хостов, но не сканировать порты nmap;
  • -sP - только проверять доступен ли хост с помощью ping;
  • -PN - считать все хосты доступными, даже если они не отвечают на ping;
  • -sS/sT/sA/sW/sM - TCP сканирование;
  • -sU - UDP сканирование nmap;
  • -sN/sF/sX - TCP NULL и FIN сканирование;
  • -sC - запускать скрипт по умолчанию;
  • -sI - ленивое Indle сканирование;
  • -p - указать диапазон портов для проверки;
  • -sV - детальное исследование портов для определения версий служб;
  • -O - определять операционную систему;
  • -T - скорость сканирования, чем больше, тем быстрее;
  • -D - маскировать сканирование с помощью фиктивных IP;
  • -S - изменить свой IP адрес на указанный;
  • -e - использовать определенный интерфейс;
  • --spoof-mac - установить свой MAC адрес;
  • -A - определение операционной системы с помощью скриптов.

Теперь, когда мы рассмотрели все основные опции, давайте поговорим о том, как выполняется сканирование портов nmap.

Как пользоваться Nmap для сканирования портов в Linux

Дальше рассмотрим примеры nmap. Сначала давайте рассмотрим как найти все подключенные к сети устройства, для этого достаточно использовать опцию -sL и указать маску нашей сети. в моем случае это 192.168.1.1/24. Маску вашей локальной сети вы можете найти, выполнив команду:

Из вывода для используемого интерфейса возьмите число после слеша, а до слэша укажите ip вашего роутера. Команда на сканирование сети nmap будет выглядеть вот так:

nmap -sL 192.168.1.1/24

Иногда это сканирование может не дать никаких результатов, потому что некоторые операционные системы имеют защиту от сканирования портов. Но это можно обойти, просто использовав для сканирования ping всех ip адресов сети, для этого есть опция -sn:

nmap -sn 192.168.1.1/24

Как видите, теперь программа обнаружила активные устройства в сети. Дальше мы можем сканировать порты nmap для нужного узла запустив утилиту без опций:

sudo nmap 192.168.1.1

Теперь мы можем видеть, что у нас открыто несколько портов, все они используются каким-либо сервисом на целевой машине. Каждый из них может быть потенциально уязвимым, поэтому иметь много открытых портов на машине небезопасно. Но это еще далеко не все, что вы можете сделать, дальше вы узнаете как пользоваться nmap.

Чтобы узнать более подробную информацию о машине и запущенных на ней сервисах вы можете использовать опцию -sV. Утилита подключится к каждому порту и определит всю доступную информацию:

sudo nmap -sV 192.168.1.1

На нашей машине запущен ftp, а поэтому мы можем попытаться рассмотреть эту службу подробнее с помощью стандартных скриптов nmap. Скрипты позволяют проверить порт более детально, найти возможные уязвимости. Для этого используйте опцию -sC и -p чтобы задать порт:

sudo nmap -sC 192.168.56.102 -p 21

Мы выполняли скрипт по умолчанию, но есть еще и другие скрипты, например, найти все скрипты для ftp вы можете командой:

sudo find /usr/share/nmap/scripts/ -name "*.nse" | grep ftp

Затем попытаемся использовать один из них, для этого достаточно указать его с помощью опции --script. Но сначала вы можете посмотреть информацию о скрипте:

sudo nmap --script-help ftp-brute.nse

Этот скрипт будет пытаться определить логин и пароль от FTP на удаленном узле. Затем выполните скрипт:

sudo nmap --script ftp-brute.nse 192.168.1.1 -p 21

В результате скрипт подобрал логин и пароль, admin/admin. Вот поэтому не нужно использовать параметры входа по умолчанию.

Также можно запустить утилиту с опцией -A, она активирует более агрессивный режим работы утилиты, с помощью которого вы получите большую часть информации одной командой:

sudo nmap -A 192.168.1.1

Обратите внимание, что здесь есть почти вся информация, которую мы уже видели раньше. Ее можно использовать чтобы увеличить защиту этой машины.

Одна из первейших задач при исследовании любой сети это сократить (иногда довольно большой) набор IP диапазонов до списка активных или интересных хостов. Сканирование каждого порта каждого IP адреса медленно и необязательно. Конечно же то, что делает хост интересным для исселедования во многом определяется целями сканирования. Сетевые администраторы возможно будут заинтересованы только в хостах, на которых запущена определенная служба, в то время как тем, кого интересует безопасность, будут интересны все устройства с IP адресами. Задачи администраторов по обнаружению работающих хостов в сети могут быть удовлетворены обычным ICMP пингом, людям же, которые тестируют способность сети противостоять атакам из вне, необходимо использовать разнообразные наборы запросов с целью обхода брандмауэра.

Посколько задачи, требующие обнаружения хостов столь различны, Nmap предоставляет большое разнообразие опций для различных методов. Задачу обнаружения хостов иногда называют пинг сканированием (ping scan), однако она намного превосходит использование обычных ICMP запросов ассоциирующихся с вездесущими ping утилитами. Пользователи могут полностью пропустить шаг пинг сканирования с помощью опции сканирования с целью составления списка (-sL) или просто отключив его (-PN), или сканировать сеть с помощью произвольных комбинаций мультипортовых TCP SYN/ACK, UDP и ICMP запросов. Целью всех этих запросов является получение ответов, указывающих, что IP адрес в настоящее время активен (используется хостом или сетевым устройством). В большинстве сетей лишь небольшой процент IP адресов активен постоянно. Это особенно характерно для адресных пространств вида 10.0.0.0/8. Такие сети имеют 16 млн. IP адресов, но я видел, как они используются компаниями, в которых не более тысячи машин. Функция обнаружения хостов может найти эти машины в этом необъятном море IP адресов.

Если не задано никаких опций обнаружения хостов, то Nmap посылает TCP ACK пакет на порт 80 и запрос на ICMP эхо ответ кажодй целевой машине. Исключение составляет ARP сканировании всех целей в сети. Для непривилегированных пользователей Unix оболочки, вместо ACK пакета посылается SYN используя системный вызов connect Эти умолчания равнозначны опциям -PA -PE . Такое сканирование достаточно для локальных сетей, но для исследования безопасности необходимо использовать более сложные наборы запросов.

Опции -P* (определяющие тип пинг сканирования) могут комбинироваться. Вы можете увеличить шансы обхода строго брандмауэра посылая множество запросов различных типов, используя различные TCP порты/флаги и ICMP коды. Также имейте в виду, что даже если вы определите различные -P* опции, по умолчанию применительно к целям локальной сети будет производиться и ARP сканирование (-PR) , т.к. оно почти всегда быстрее и более эффективно.

По умолчанию после обнаружения хостов Nmap начинает сканирование портов каждой активной машины. Так будет, даже если вы укажите на использование нестандартных методов обнаружения хостов, например, с использованием UDP запросов (-PU). Прочтите об опции -sP , чтобы узнать, как выполнить только обнаружение хостов, или используйте опцию -PN , чтобы пропустить обнаружение хостов и осуществить сканирование портов всех целевых машин. С помощью следующих опций можно настраивать функцию обнаружения хостов:

SL (Сканирование с целью составления списка)

Это тип сканирования является "упрощенной" версией функции обнаружения хостов, при помощи которого просто будет создан список хостов заданной сети без посылки каких-либо пакетов целевым машинам. По умолчанию Nmap все же будет осуществлять обратное разрешение DNS с целью узнавания имен хостов. Часто бывает удивительно, как много полезной информации могут содержать обычные имена хостов. Например, fw.chi это имя брандмауэра одной Чикагской компании. В конце Nmap также сообщает общее количество IP адресов. Этот тип сканирования также является хорошим способом проверить, что вы действительно знаете IP адреса необходимых вам целей. Если имена хостов содержат неизвестные вам доменные имена, то стоит провести дальнейшее исследование, чтобы избежать сканирования сети не той компании, которая вам нужна.

Т.к. целью является просто составление списка целевых хостов, то опции с большим уровнем функциональности, такие как сканирование портов, определение ОС или пинг сканирование не могут сочетаться с рассматриваемой опцией. Если вы хотите отключить пинг сканирование, но хотите использовать опции с таким высоким уровнем функциональности, то почитайте об опции -PN .

-sP (Пинг сканирование)

Эта опция указывает Nmap произвести пинг сканирование (определение хостов), а затем вывести список доступных хостов, т.е. тех, которые ответили на запросы. Определение маршрутов и NSE скрипты также используются, если необходимо, однако дальнейшее тестирование (как сканирование портов или определение ОС) не производится. По умолчанию эта опция считается как бы на один шаг более тщательной, чем сканирование с целью составления простого списка хостов, и может быть использована в этих же целях. Она позволяет произвести исследование целевой сети без привлечения внимания. Знание, какие хосты в сети в данный момент работают, для атакующих ценне, чем просто список IP адресов и сетевых имен, предоставляемых опцией -sL.

Эта опция также полезна системным администраторам. Она может быть использована для подсчета количества работающих в сети машин или мониторинга доступности сервера. Это часто называют "пинг чисткой" (ping sweep) и результаты, предоставляемые этой опцией, заслуживают больше доверия, чем обычное пингование широковещательных адресов, т.к. большинство хостов не отвечают на подобные запросы.

По умолчанию опцией -sP посылаются запрос на ICMP это ответ и TCP ACK пакет на порт 80. Когда используется непривилегированным пользователем, посылается только SYN пакет (используя системные вызов connect) на порт 80 целевой машины. Когда привилегированный пользователь производит сканирование целей локальной сети, то используются ARP запросы до тех пор, пока не будет задано --send-ip . Для большей гибкости опция -sP может быть скомбинирована с любой из опций -P* (за исключением -PN). Если используется какой-либо из этих типов запросов и опции для задания номеров портов, то запросы по умолчанию (ACK и это ответы) опускаются. Когда между машиной с Nmap и целевой сетью расположен строгий брандмауэр, то рекомедуется использование таких расширенных методов сканирования. Иначе некоторые из хостов могут быть не определены, т.к. брандмауэр заблокировал запрос или ответ.

-PN (Не использовать пинг сканирование)

Указывает Nmap полностью пропустить этап обнаружения хостов. Обычно, Nmap использует этот этап для обнаружения активных машин, к которым можно применить более углубленное сканирование. По умолчанию Nmap производит углубленное сканирование, такое как сканирование портов, определение версии или определение ОС только обнаруженных работающих хостов. После отключения этапа обнаружения хостов опцией -PN , Nmap будет производить сканирование каждого заданого целевого IP адреса. Так что, если для сканирования будет определена сеть с адресным пространством класса B (/16), то будет произведено сканирование всех 65,536 IP адресов. Т.к. этап обнаружения хостов и составления списка целей сканирования пропущен, то Nmap будет исполнять запрошенные функции, как если бы каждый IP адрес был активен. Для машин локальной сети будет произведено ARP сканирование (пока не зададите --send-ip), т.к. Nmap необходимы MAC адреса для дальнейшего сканирования целевых хостов. Раньше эта опция задавалась флагом P0 (используется нуль), но была переименова, чтобы избежать путаницы с пингованием с использованием IP протокола PO (используется буква O).

-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 (сброс) пакет. Если порт открыт, то удаленная система предпримет второй шаг в 3-ех этапной последовательности установки 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), то хост помечается как не работающий. Этот механизм также используется для соединений с использованием протокола IPv6, т.к. построение сырых пакетов IPv6 еще не реализовано в Nmap.

-PA <список_портов> (TCP ACK пингование)

Этот тип пингования очень похож на описанный выше. Разница состоит в том, как вы могли догадаться, что вместо установки SYN флага устанавливается TCP ACK флаг. Такой ACK пакет имеет своей целью распознавание данных во время установленного TCP соединения, но такого соединения не существует, поэтому удаленные хосты всегда будут отвечат на такой запрос RST пакетом, тем самым выдавая свое существование.

Опция -PA использует тот же порт по умолчанию, что и SYN запросы (80), и так же может принимать в качестве параметра список портов в том же формате. Если эту опцию пытается использовать непривилегированный пользователь или задана цель в формате IPv6, то используется механизм с использованием вызова connect описанный выше. Этот механизм несовершенен, т.к. при использовании вызова connect вместо ACK пакета посылается SYN.

Причина, по которой Nmap предоставляет оба типа пингования (SYN и ACK), состоит в повышении шансов обхода брандмауэров. Многие администраторы конфигурируют роутеры или другие простые брандмауэры на блокировку входящих SYN пакетов за исключением тех, что предназначены для публичных служб, таких как веб сайт или почтовый сервер. Тем самым предотвращаются все остальные соединения, и в то же время пользователи могут беспрепятственно выходить в Интернет. Такой подход не требует много ресурсов от брандмауэров/роутеров и широко поддерживается различными аппаратными и программными фильтрами. для реализации такого подхода имеет опцию --syn . Когда брандмауэр использует такие правила, то запросы с установленным флагом SYN (-PS), посланные на закрытые порты, с большой вероятностью будут заблокированы. В таких случаях более выгодно использовать запросы с флагом ACK, т.к. они не попадают под эти правила.

Другим популярным типом сетевого экрана является брандмауэр блокирующий все непредвиденные пакеты. Изначально эта функция поддерживалась только в наиболее продвинутых брандмауэрах, хотя с годами она становится все популярнее. Использующийся в Linux сетевой экран Netfilter/iptables реализует этот механизм с помощью опции --state , которая категоризирует пакеты в зависимости от состояния соединения. Против таких систем лучше использовать пакеты SYN, т.к. непредвиденные пакеты ACK с большой вероятностью будут распознаны как фиктивные и заблокированы. Решение такого затруднительного положение состоит в том, чтобы посылать и SYN и ACK запросы путем задания опций -PS и -PA .

-PU <список_портов> (UDP пингование)

Еще одной функцией используемой для обнаружения хостов является UDP пингование, которая посылает пустой (пока не задана опция --data-length) UDP пакет на данные порты. Список портов задается в том же формает, что и для описанных выше опций -PS и -PA . Если порты не заданы, то по умолчанию используется 31338. Порт по умолчанию может быть задан во время компиляции путем изменения DEFAULT_UDP_PROBE_PORT_SPEC в nmap.h . По умолчанию выбран не распростаненный порт, т.к. отправка запросов на открытые порты нежелательна для этого типа сканирования.

Целью запроса UDP является получение в ответ ICMP пакета с ошибкой "порт недостижим". Это указывает Nmap на то, что машина работает и доступна. Другие типы ICMP ошибок, такие как хост/сеть недоступна или превышение TTL указывают на то, что машина выключена или недоступна. Отсутствие ответа интерпретируется этим же путем. Если такой запрос посылается на открытый порт, то большинство служб просто игнорируют пустой пакет и не посылают никакого ответа. Поэтому портом по умолчанию является 31338, т.к. он вряд ли будет использоваться какой-либо службой. Лишь некоторые службы, такие как Character Generator (chargen) protocol, ответят на пустой UDP пакет, и это также укажет Nmap на то, что машина доступна.

Основным преимуществом такого типа сканирования является то, что он позволяет обходить брандмауэры, фильтрующие только TCP запросы. Например, однажды у меня был беспроводной широкополосный роутер Linksys BEFW11S4. Внутренний интерфейс этого устройства фильтровал по умолчанию все TCP порты, в то время как в ответ на UDP запросы посылалось сообщение об ошибке "порт недостижим", что делало его работу бесполезной.

-PE ; -PP ; -PM (Типы пинг пакетов ICMP)

В дополнении к нестандратным методам обнаружения хостов с помощью TCP и UDP запросов, Nmap может посылать и стандартные пакеты, используемые вездесущей программой ping . Nmap посылает ICMP пакет типа 8 (эхо запрос) на целевой IP адрес, ожидая в ответ от доступного хоста пакет типа 0 (эхо ответ). К сожалению для сетевых исследователей, многие хосты и брандмауэры теперь блокируют такие пакеты вместо того, чтобы ответить на них, как это требуется в RFC 1122 . По этой причине сканеры использующе только ICMP запросы редко бывают полезны при сканировании неизвестных целей в Интернете. Но они могут быть полезны системным администраторам, занимающимся мониторингом внутренней сети. Используйте опцию -PE , чтобы активировать такой тип сканирования.

Но Nmap использует не только стандратный эхо запрос. В стандарте ICMP (RFC 792) также определены запросы временной метки, информационные запросы и запросы адресной маски с кодами 13, 15 и 17 соответственно. Хотя они служат для того, чтобы узнать какую-либо информацию, такую как адресную маску или текущее время, они могут быть легко применены для обнаружения целей. Система, которая отвечает на них, работает и доступна. В настоящее время Nmap не использует информационные запросы, т.к. они не получиил широкого распространения. Стандарт RFC 1122 наставивает на том, что «хост НЕ ДОЛЖЕН посылать такие сообщения » . Запросы временной метки или адресной маски могут быть посланы путем задания опций -PP и -PM соответственно. Ответ на запрос временной метки (ICMP код 14) или на запрос адресной маски (код 18) указывают на то, что хост доступен. Эти запросы могут быть полезны, когда администраторы блокируют пакеты эхо запросов, но забывают о том, что другие типы ICMP запросов могут быть использованы в тех же целях.

-PO <список_протоколов> (пингование с использованием IP протокола)

Новейшей опцией для обнаружения хостов является пингование с использованием IP протокола, которая посылает IP пакеты с номером протокола, указанным в заголовке пакета. Список протоколов задается в том же формате, что и список портов в описанных выше опциях обнаружения хостов с помощью протоколов TCP и UDP. Если не указан ни один протокол, то по умолчанию будут использованы IP пакеты ICMP (протокол 1), IGMP (протокол 2) и IP-in-IP (протокол 4). Протоколы по умолчанию могут быть заданы во время компиляции путем изменения DEFAULT_PROTO_PROBE_PORT_SPEC в nmap.h . Имейте в виду, что для ICMP, IGMP, TCP (протокол 6) и UDP (протокол 17), пакеты посылаются с "правильными" заголовками протокола, в то время как для остальных протоколов пакеты посылаются без дополнительной информации после IP заголовка (пока не задана опция --data-length).

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

-PR (ARP пингование)

Одной из наиболее популярных сфер применения Nmap является сканирование локальных сетей (LAN). В большинстве локальных сетей, особенно тех, которые используют диапазоны частных адресов определенные в RFC 1918 , большое количество IP адересов не используется в любой момент времени. Когда Nmap пытается послать сырой IP пакет, такой как ICMP эхо запрос, операционная система должна определить MAC-адрес (ARP) соответствующий целевому IP, чтобы правильно адресовать фрейм. Это часто бывает медленно и проблематично, т.к. операционные системы не были написаны с учетом того, что им придется посылать миллионы ARP запросов недоступным хостам в короткий промежуток времени.

ARP сканирование позволяет Nmap вместо ARP запросов использовать свои собственные оптимизированные алгоритмы. И если Nmap получает ответ, то ей даже нет необходимости беспокоиться о других типах обнаружения хостов, основанных на IP пакетах. Этот делает ARP сканирование более быстрым и надежным. Поэтому оно применяется по умолчанию для сканирования локальных сетей. Даже если указаны другие типы сканирования (как -PE или -PS), Nmap все равно использует ARP сканирование для машин локальной сети. Если вы абсолютно не хотите использовать такой тип сканирования, то задайте опцию --send-ip .

--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), возможно будет необходимо послать только один пакет на каждый хост.

--reason (Показать причины состояний портов и хостов)

Показывает информацию о причинах, по которым каждый порт установлен в какое-либо состояние, и по которым каждый хост работает или нет. Эта опция выводит тип пакета, по которому было определено состояние порта или хоста. Например, RST пакет от закрытого порта или эхо ответ от работающего хоста. Информация, которую может предоставить Nmap, определяется типом сканирования или пингования. SYN сканирование и SYN пингование (-sS и -PS) описываются очень детально, а информация о сканировании с использованием TCP соединений (-sT) ограничена реализацией системного вызова connect . Эта функция автоматически активируется при использовании опции отладки (-d) , и результаты ее работы хранятся в XML файлах, даже если эта опция не была задана.

-n (Не производить разрешение DNS имен)

Указывает Nmap никогда не производить обратное разрешение DNS имен каждого обнаруженного активного IP адереса. Преобразование DNS может быть медленным даже со встроенным в Nmap параллельным преобразователем IP адресов, поэтому данная опция может сократить время сканирования.

-R (Производить разрешение DNS имен для всех целей)

Указыват Nmap всегда производить обратное разрешение DNS имен для каждого целевого IP адреса. Обычно DNS преобразование применяется только к доступным хостам.

--system-dns (Использовать системный DNS преобразователь)

По умолчанию Nmap преобразует IP адреса путем посылки запросов непосредственно серверам имен, указанным в вашей системе, и последующим анализом ответов. Многие запросы (часто десятки) исполняются параллельно для увеличения производительности. Задайте эту опцию, чтобы использовать ваш системный преобразователь IP адресов (один IP адрес за один системный вызов getnameinfo). Это медленно и редко бывает полезно, до тех пор, пока вы не найдете ошибку в параллельном преобразователе Nmap (если найдете, известите нас, пожалуйста). Системный преобразователь всегда используется для сканирования с использованием протокола IPv6.

--dns-servers [, [,... ] ] (Сервера для обратного разрешения DNS)

По умолчанию Nmap определяет DNS сервера (для разрашения rDNS) из вашего resolv.conf файла (Unix) или из реестра (Win32). Вы можете использовать эту опцию для задания альтернативных серверов. Эта опция игнорируется, если вы используете --system-dns или сканирование по протоколу IPv6. Использование нескольких DNS серверов частно увеличивает скорость сканирования, особенно если вы выбираете официальные сервера для IP пространства вашей цели. Эта опция также может увеличить незаметность, т.к. ваши запросы могут быть перенаправлены любым рекурсивным DNS сервером в Интернете.

Эта опция также бывает полезна при сканировании частных сетей. Иногда лишь некоторые сервера имен предоставляют правильную rDNS информацию, и вы можете даже не знать, где они. Вы можете просканировать сеть на наличие открытого порта 53 (возможно с помощью фукнкции определения версии), затем попробовать составить список (-sL) указывая по очереди все сервера имен в опции --dns-servers до тех пор, пока не найдете тот, который работает.

Несколько примеров работы с замечательным сканером сети - NMAP

Сканировать сеть в поиске Активных Хостов:

$ nmap -sn 192.168.1.0/ 24

Сканирование списка хостов/сетей из Файла:

$ nmap -iL input.txt

Формат файла:

Записи могут быть представлены в любом из форматов, с которыми работает Nmap из командной строки (IP адреса, имена хостов, CIDR, IPv6, или октетные диапазоны). Записи должны разделятся одним или более пробелами, табуляциями или переходами на новую строку.

$ cat input.txt server.test.com 192.168.1.0/ 24 192.168.2.1,2 ,3 192.168.3.0-200

Сканировать Множество IP Адресов:

$ nmap 192.168.1.1 192.168.1.2 192.168.1.3 $ nmap 192.168.1.1,2 ,3


5. Исключение IP/Хостов/Сетей из Сканирования

Исключить Цели из сканирования Nmap-ом:

$ nmap 192.168.1.0/ 24 --exclude 192.168.1.1 $ nmap 192.168.1.0/ 24 --exclude 192.168.1.1 192.168.1.5 $ nmap 192.168.1.0/ 24 --exclude 192.168.1.1,2 ,3

Исключить Список хостов, взятых из файла:

$ nmap 192.168.1.0/ 24 --excludefile exclude.txt

6. Сканирование Определенных Портов

Сканировать Один Порт:

$ nmap -p 80 192.168.1.1

Сканировать Несколько Портов:

$ nmap -p 80 ,443 192.168.1.1

Сканировать Диапазон Портов:

$ nmap -p 80 -1000 192.168.1.1

Сканировать Все Порты:

$ nmap -p "*" 192.168.1.1

Сканировать открытые порты

$ nmap -Pn 192.168.1.1

7. Определение Поддерживаемых IP Протоколов

Определить какие IP Протоколы (TCP, UDP, ICMP, и т.д.) поддерживает сканируемый хост:

$ nmap -sO 192.168.1.1

8. Сканирование TCP/UDP Портов

Сканировать все TCP Порты:

$ nmap -sT 192.168.1.1

Сканировать определенные TCP Порты:

$ nmap -p T:80 192.168.1.1

Сканировать все UDP Порты:

$ nmap -sU 192.168.1.1

Сканировать определенные UDP Порты:

$ nmap -p U:53 192.168.1.1

Объединение сканирования разных портов:

$ nmap -p U:53 ,79 ,113 ,T:21 -25 ,80 ,443 ,8080 192.168.1.1

9. Быстрое Сканирование

Активировать Быстрый Режим сканирования:

$ nmap -F 192.168.1.1

Показывать Причину Состояния Порта

Показать Причину, по которой Nmap считает что порт находится в определенном состоянии:

$ nmap --reason 192.168.1.1

11. Показывать Только Открытые Порты

Показать Только Открытые Порты (либо возможно открытые) :

$ nmap --open 192.168.1.1

Показать только открытые 22-е порты:

Nmap -p22 --open 192.168.1.1

12. Определение ОС

Включить Определение ОС:

$ nmap -O 192.168.1.1

* Определяет удаленную операционную систему с помощью отпечатка стека TCP/IP.
13. Определение Версии Сервисов

Включить Определение Версии Сервисов:

$ nmap -sV 192.168.1.1

* Определяет версии программ, запущенных на удаленном сервере.
14. Обнаружение Фаервола

Узнать, защищен ли компьютер какими-либо Пакетными Фильтрами или Фаерволом:

nmap -oX output.xml 192.168.1.1

Nmap -A 192.168.1.2

Эта команда позволит запускать все скрипты и много других вариантов, вот описание из меню справки: Enable OS detection, version detection, script scanning, and traceroute.
К примеру, по сервису Samba (445 порт), он покажет следующее:

Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)

19 марта 2010 в 10:48

Nmap. Начало использования

  • Информационная безопасность

Вы когда-нибудь интересовались откуда атакующий знает какие порты открыты в системе? Или как узнать, какие приложения запущены на сервере, не спрашивая об этом администратора? Вы можете сделать все это и даже больше вместе с небольшим инструментом под названием Nmap.


Что такое Nmap? Название Nmap это сокращение от “network mapper”, сам nmap это набор инструментов для сканирования сети. Он может быть использован для проверки безопасности, просто для определения сервисов запущенных на узле, для идентификации ОС и приложений, определения типа фаерволла используемого на сканируемом узле.
Nmap это знаменитый инструмент. Как только вы узнаете больше о Nmap, вы поймете, что он делает в эпизодах таких фильмов как Матрица Перезагрузка, Ультиматум Борна, Хоттабыч, и других .
В этом руководстве будут описаны основы использования Nmap и приведены некоторые примеры, которые вы сможете использовать.

Где взять Nmap?
Если Вы используете Linux, то можете найти пакеты Nmap в репозиториях для большинства дистрибутивов. Последний релиз Nmap вышел в начале 2010, поэтому самой свежей версии может не быть в текущих стабильных ветках. Найти исходники и некоторые бинарные сборки можно на странице загрузки .Там есть и windows версия.
Основы использования Nmap.
Синтаксис Nmap следующий:

Nmap Опции_сканирования Цель_сканирования.

Допустим Вы хотите сканировать узел и узнать какая операционная система на нем работает. Чтобы сделать это выполните следующее:

Nmap -O target.host.com

Заметим что Nmap требует привилегий суперпользователя для запуска подобного типа сканирования. Процесс сканирования может занять около минуты, так что будьте терпеливы. Когда процесс закончится вы увидите что то похожее на это:

Starting Nmap 5.21 (nmap.org) at 2010-02-27 23:52 EST
Nmap scan report for 10.0.0.1
Host is up (0.0015s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
53/tcp open domain
5009/tcp open airport-admin
10000/tcp open snet-sensor-mgmt
MAC Address: 00:11:24:6B:43:E2 (Apple Computer)
Device type: WAP|printer
Running: Apple embedded, Canon embedded, Kyocera embedded, Xerox embedded
OS details: VxWorks: Apple AirPort Extreme v5.7 or AirPort Express v6.3; Canon imageRUNNER printer (5055, C3045, C3380, or C5185); Kyocera FS-4020DN printer; or Xerox Phaser 8860MFP printer
Network Distance: 1 hop

Как вы видите Nmap предоставляет множество информации. Здесь он отображает предположение об операционной системе, которая была запущена на узле. В данном случае выполнялось сканирование маршрутизатора Apple Airport Extrime. В качестве дополнительного бонуса Nmap сообщил, что устройство на расстоянии одного прыжка, а также MAC адрес устройства и производителя сетевой карты, открытые порты и сколько времени выполнялось сканирование.
Ниже приведены результаты другого сканирования, домашнего компьютера с запущенной Ubuntu 9.10:

Starting Nmap 5.21 (nmap.org) at 2010-02-28 00:00 EST
Nmap scan report for 10.0.0.6
Host is up (0.0039s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
22/tcp open ssh
MAC Address: 00:17:08:2A:D6:F0 (Hewlett Packard)
Device type: general purpose
Running: Linux 2.6.X
OS details: Linux 2.6.19 - 2.6.31
Network Distance: 1 hop

OS detection performed. Please report any incorrect results at nmap.org/submit .
Nmap done: 1 IP address (1 host up) scanned in 3.40 seconds

Здесь мы видим, что система имеет сетевую карту HP, запущено Linux между версиями 2.6.19 и 2.6.31. Кстати, Вы не сможете явно идентифицировать дистрибутив, только версию Linux ядра.

Сканирование чужих узлов.

В примерах выше для сканирования были выбраны локальный маршрутизатор и одна из рабочих станций, потому что мы имели право на их сканирование. Однако, будет плохой идеей запуск множественного сканирования чужого узла, если вы их не контролируете или не имеете прав для сканирования. Для экспериментов Nmap имеет общедоступный тестовый сервер scanme.nmap.org который Вы можете использовать.
Многие администраторы не любят несанкционированного сканирования их серверов, так что лучшим вариантом будет ограничение сканирования узлов своей локальной сети или тех для которых у вас есть права на сканирование. Также в некоторых случаях вы можете нарушить договор с вашим провайдером, при использовании некоторых особо агрессивных методов сканирования Nmap, поэтому будьте осторожны.

Сканирование нескольких узлов.

Вы можете сканировать больше чем один узел за раз, используя nmap. Если вы производите сканирование по IP-адресу вы можете определить диапазон 10.0.0.1-6 или 10.0.0.0/24.Используя диапазон 10.0.0.1-6 будут сканироваться узлы от 10.0.0.1 до 10.0.0.6. Используя определение /24 будет сканироваться весь диапазон узлов от 10.0.0.0 до 10.0.0.255. Для примера, если нужно просканировать узлы от 10.0.0.1 до 10.0.0.42 и узнать какая ОС вероятно запущена используйте:

Nmap –O 10.0.0.1-42

Если у вас есть некоторый список доменных имен вместо IP адресов, вы можете разделить их в командной строке, вот так:

Nmap -O host1.target.com host2.target.com

Проверка открытых портов

Если вы запустите nmap вообще без опций и укажите какой то узел, то он будет сканировать порты и покажет все найденные открытые порты и сервисы запущенные на них. Например запустите:
nmap target.hostname.com
после чего он должен выдать что то похожее на это:

Interesting ports on target.hostname.com (10.0.0.88):
Not shown: 1711 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3306/tcp open mysql

Nmap done: 1 IP address (1 host up) scanned in 0.228 seconds

Nmap выдаст больше информации если использовать опцию -v (verbose).

Сканирование запущенных сервисов

Если вы хотите узнать какой сервис возможно запущен попробуйте опцию –sV. Эта опция произведет более агрессивное сканирование и попытается выяснить какая версия сервисов запущена на данном узле, а также может помочь более точно определить какая ОС запущена. Для пример запустим nmap –sV на тестовый сервер и получим следующий ответ:

Starting Nmap 5.21 (nmap.org) at 2010-02-28 00:15 EST
Nmap scan report for test.host.net (XX.XXX.XXX.XX)
Host is up (0.090s latency).
Not shown: 965 closed ports, 33 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1.2 (protocol 2.0)
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.10 with Suhosin-Patch)
Service Info: OS: Linux

Service detection performed. Please report any incorrect results at nmap.org/submit .
Nmap done: 1 IP address (1 host up) scanned in 11.43 seconds

Как вы видите, Nmap может проанализировать пакеты и определить версию запущенного приложений на SSH и HTTP портах. Здесь вы можете увидеть что опрашиваемая система это Ubuntu с Apache 2.2.8 и OpenSSH 4.7p1. Эта информация может быть полезна по ряду причин. Nmap сканирование может идентифицировать систему под управлением устаревших сервисов которые могут быть уязвимы для известных эксплойтов.

Кто в моей сети?

Не знаете сколько онлайн узлов находятся в вашей сети? Попробуйте использовать nmap –sP который запустит ping сканирование указанной сети. Для примера, nmap –sP 10.0.0.0/24 сканирует 256 узлов от 10.0.0.0 до 10.0.0.255 проверит доступны ли они и доложит об этом. Так же вы можете использовать диапазон, например:

Nmap –sP 10.0.0.1-15

Zenmap

Наконец, если все эти радости командной строки не для вас, nmap имеет GUI который вы можете использовать для построения и выполнения команд. Называется Zenmap. Он позволит выбрать цель, запустить сканирование, отобразить результаты, а также сохранить их и сравнить с другими.
GUI Zenmap это хороший способ познакомиться с Nmap, но лучше знать как использовать Nmap в командной строке, если вы собираетесь работать с ним часто.
В будущем руководстве мы более глубоко познакомимся с Nmap и конкретными задачами которые вы сможете решить.

Данный пост это вольный перевод статьи

Ниже вы найдете 20 базовых примеров использования команды Nmap .

Вы узнаете, как использовать Nmap из командной строки в Linux для поиска активных хостов в сети и сканирования открытых портов.

Вы увидите, как удаленно определить операционную систему с помощью отпечатков стека TCP/IP и как узнать версию программного обеспечения запущенного на удаленном сервере.

Я так-же покажу как с помощью Nmap осуществить скрытое сканирование , как определить фаервол и как подменить MAC адрес .

1. Сканирование Одного Хоста или IP Адреса

Сканировать Отдельный IP Адрес :

$ nmap 192.168.1.1

Сканировать сервер по Имени Хоста :

$ nmap server.сайт

Увеличить Уровень Детализации результатов сканирования:

$ nmap -v server..сайт

2. Сканирование Множества IP Адресов

Сканировать Множество IP Адресов :

$ nmap 192.168.1.1 192.168.1.2 192.168.1.3 $ namp 192.168.1.1,2,3

Сканировать Подсеть :

$ nmap 192.168.1.0/24 $ nmap 192.168.1.*

Сканировать Диапазон IP Адресов (192.168.1.0 — 192.168.1.200):

$ nmap 192.168.1.0-200

3. Поиск Активных Компьютеров в Сети

Дельный Совет: Сканируйте сеть с помощью одной лишь команды ping ! Вычислите все активные компьютеры!

Сканировать сеть в поиске Активных Хостов :

$ nmap -sn 192.168.1.0/24

4. Сканирование Списка Хостов из Файла

Сканирование списка хостов/сетей из Файла :

$ nmap -iL input.txt

Формат файла:

# Записи могут быть представлены в любом из форматов, с которыми работает # Nmap из командной строки (IP адреса, имена хостов, CIDR, IPv6, или октетные # диапазоны). Записи должны разделятся одним или более пробелами, табуляциями # или переходами на новую строку. $ cat input.txt server.сайт 192.168.1.0/24 192.168.2.1,2,3 192.168.3.0-200

5. Исключение IP/Хостов/Сетей из Сканирования

Исключить Цели из сканирования Nmap-ом:

$ nmap 192.168.1.0/24 --exclude 192.168.1.1 $ nmap 192.168.1.0/24 --exclude 192.168.1.1 192.168.1.5 $ nmap 192.168.1.0/24 --exclude 192.168.1.1,2,3

Исключить Список хостов, взятых из файла:

$ nmap 192.168.1.0/24 --excludefile exclude.txt

Формат файла с исключенными хостами аналогичен приведенному выше.

6. Сканирование Определенных Портов

Сканировать Один Порт :

$ nmap -p 80 192.168.1.1

Сканировать Несколько Портов :

$ nmap -p 80,443 192.168.1.1

Сканировать Диапазон Портов :

$ nmap -p 80-1000 192.168.1.1

Сканировать Все Порты :

$ nmap -p "*" 192.168.1.1

Сканировать несколько самых Распространенных Портов :

$ nmap --top-ports 5 192.168.1.1 $ nmap --top-ports 10 192.168.1.1

7. Определение Поддерживаемых IP Протоколов

Определить какие IP Протоколы (TCP, UDP, ICMP, и т.д.) поддерживает сканируемый хост:

$ nmap -sO 192.168.1.1

8. Сканирование TCP/UDP Портов

Сканировать все TCP Порты :

$ nmap -sT 192.168.1.1

Сканировать определенные TCP Порты :

$ nmap -p T:80 192.168.1.1

Сканировать все UDP Порты :

$ nmap -sU 192.168.1.1

Сканировать определенные UDP Порты :

$ nmap -p U:53 192.168.1.1

Объединение сканирования разных портов:

$ nmap -p U:53,79,113,T:21-25,80,443,8080 192.168.1.1

9. Быстрое Сканирование

Активировать Быстрый Режим сканирования:

$ nmap -F 192.168.1.1

* Сканирует меньшее кол-во портов, чем при обыкновенном сканировании.

10. Показывать Причину Состояния Порта

Показать Причину , по которой Nmap считает что порт находится в определенном состоянии:

$ nmap --reason 192.168.1.1

11. Показывать Только Открытые Порты

Показать Только Открытые Порты (либо возможно открытые):

$ nmap --open 192.168.1.1

12. Определение ОС

Одна из наиболее известных функциональных возможностей Nmap — это удаленное определение ОС на основе анализа работы стека TCP/IP.

Nmap посылает серию TCP и UDP пакетов на удаленный хост и изучает ответы.

После проведения множества тестов, Nmap сравнивает результаты со своей базой данных и, при нахождении соответствий, выводит информацию об ОС.

Включить Определение ОС :

$ nmap -O 192.168.1.1

13. Определение Версии Сервисов

Включить Определение Версии Сервисов :

$ nmap -sV 192.168.1.1

* Определяет версии программ, запущенных на удаленном сервере.

14. Обнаружение Фаервола

Узнать, защищен ли компьютер какими-либо Пакетными Фильтрами или Фаерволом :

$ nmap -sA 192.168.1.1

15. Подмена MAC Адреса

Подменить MAC Адреса :

$ nmap --spoof-mac 00:11:22:33:44:55 192.168.1.1

Подменить MAC Адрес Случайным MAC-ом :

$ nmap --spoof-mac 0 192.168.1.1

16. Сканирование Фаервола на Уязвимости

Эти три типа сканирования используют незаметную лазейку в TCP RFC , чтобы разделять порты на открытые и закрытые.

Когда сканируется система отвечающая требованиям RFC, любой пакет, не содержащий установленного бита SYN, RST или ACK, повлечет за собой отправку RST в ответ в случае, если порт закрыт, или не повлечет никакого ответа, если порт открыт.

Т.к. ни один из этих битов не установлен, то любая комбинация трех оставшихся (FIN, PSH и URG) будет являться правильной.

TCP Null сканирование:

$ nmap -sN 192.168.1.1

* Не устанавливаются никакие биты (Флагов в TCP заголовоке 0).

TCP Fin сканирование:

$ nmap -sF 192.168.1.1

* Устанавливается только TCP FIN бит.

TCP Xmas сканирование:

$ nmap -sX 192.168.1.1

* Устанавливаются FIN, PSH и URG флаги (пакет светится как новогодняя елка).

17. Скрытое Сканирование

Дельный Совет: Сохраняйте анонимность во время сканирования портов! Используйте Nmap + Tor + ProxyChains ! Безопасное и простое тестирование на проникновение!

TCP SYN сканирование:

$ nmap -sS 192.168.0.1

* Известное как сканированием с использованием полуоткрытых соединений, так как не отрывает полных TCP соединений.

18. Отключение Обнаружения Хостов (No Ping)

Не пинговать хосты перед сканированием:

$ nmap -Pn 192.168.1.1

19. Отключение Использования DNS

Дельный Совет: Необходимо усилить безопасность в Linux? Шифруйте DNS трафик для защиты от спуфинга!

Никогда не производить обратное преобразование DNS имен для каждого обнаруженного активного IP адреса.