среда, 15 февраля 2012 г.

Об nmap для начинающих

Когда-нибудь задавались вопросом, откуда взломщики узнают о том, какие порты открыты в системе и какие службы доступны на этих портах? Как они это делают, не задавая вопросов администратору сервера? Это и гораздо больше можно делать при помощи маленькой утилиты под названием nmap. nmap — это сокращение от «Network Mapper», по-русски можно назвать «построитель карты сети». Nmap — поистине огромный набор инструментов «в одном флаконе» для сканирования сетей. Он может использоваться для поиска и определения запущенных в сети сервисов, определения типа используемой операционной системы, типа файрвола или же просто для быстрого определения хостов, находящихся в сети. Короче говоря, уметь пользоваться этой штуковиной лишним не будет. Nmap очень известная утилита в буквальном смысле. Когда вы с ней познакомитесь, вы можете узнать её в некоторых эпизодах кинофильмов. В этой заметке я покажу вам базовые приёмы работы с Nmap и покажу несколько примеров, как его использовать.






В большинстве современных дистрибутивов Nmap присутствует в стандартных репозиториях. Если к используемой вами системе это не относится, вы можете получить исходные коды утилиты и некоторые бинарные сборки со страницы загрузок проекта.
Синтаксис вызова утилиты из командной строки следующий:
nmap <опции> цель
Допустим, вам необходимо попытаться определить тип и версию запущенной ОС на удалённой системе target.host.com. Запустите Nmap с опцией '-O' (использование этой опции требует администраторских привилегий):
# nmap -O target.host.com
Опрос удалённой системы займёт некоторое время и после того, как он завершится, вы получите вывод, подобный представленному ниже:
Starting Nmap 5.21 ( http://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
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.21 seconds
Как вы видите, Nmap предоставил достаточно много информации. В представленном примере Nmap выполнил ряд тестов, на основании которых попытался определить тип и версию ОС, используемую на хосте. Приведённый выше вывод Nmap — результат сканирования роутера Apple Airport Extreme. Помимо того, что Nmap сообщил нам тип предполагаемой ОС, он также вывел информацию о сетевой удалённости устройства, MAC-адрес и производителя сетевого интерфейса, перечень открытых портов и время, затраченное на сканирование.
Ниже представлен вывод другого сканирования, хоста под управлением Ubuntu 9.10:
Starting Nmap 5.21 ( http://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 http://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, только если вы не собираетесь тестировать на нём атаки типа DoS.
Некоторые администраторы без понимания относятся к неожиданным сканированиям их сетей, поэтому не вылезайте за рамки и сканируйте те хосты, которые вам разрешено сканировать. Помимо всего прочего, действие некоторых агрессивных методов сканирования Nmap могут выходить за рамки правил, установленных вашим провайдером, так что будьте внимательны.

Сканирование нескольких хостов

За один запуск Nmap вы можете сканировать более одного хоста. Если в качетсве целей сканирования вы используете IP-адреса, вы можете передавать их Nmap в виде диапазонов, например: 10.0.0.1-6 или 10.0.0.0/24. Первый способ определяет диапазон IP-адресов c 10.0.0.1 по 10.0.0.6, а вторая — с 10.0.0.1 по 10.0.0.254, т. е. всю подсеть 10.0.0.0 с маской 24 в CIDR-нотации. Например, если вы хотите выполнить сканирование хостов с IP-адресами 10.0.0.1-10.0.0.42, команда будет следующей:
# nmap -O 10.0.0.1-42
Если же вы используете имена хостов вместо адресов, то просто перечислите имена через пробел:
# nmap -O host1.target.com host2.target.com

Поиск открытых портов

Если вы запустите Nmap без опций, передав ему лишь имя целевого хоста, то 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
Здесь вы можете увидеть, что на целевом хосте открыты порты 22, 80 и 3306 с перечислением названий сервисов, сидящих на этих портах, соответственно ssh, http и mysql. Nmap распознаёт шесть состояний портов: open (открыт), closed (закрыт), filtered (порт недоступен, скорее всего фильтруется файрволом), unfiltered (порт доступен, но состояние определить не удалось), open|filtered (открыт или фильтруется файрволом), и closed|filtered (закрыт или фильтруется файрволом).
Если вам нужна более детальная информация, воспользуйтесь одинарной или двойной опцией '-v', например:
$ nmap -vv host.target.com

Initiating Ping Scan at 11:44
Scanning 10.0.0.28 [1 port]
Completed Ping Scan at 11:44, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 11:44
Completed Parallel DNS resolution of 1 host. at 11:44, 0.00s elapsed
Initiating Connect Scan at 11:44
Scanning host.target.com (10.0.0.28) [1714 ports]
Discovered open port 22/tcp on 10.0.0.28
Discovered open port 80/tcp on 10.0.0.28
Discovered open port 3306/tcp on 10.0.0.28
Completed Connect Scan at 11:44, 0.08s elapsed (1714 total ports)
Host host.target.com (10.0.0.28) appears to be up ... good.
Interesting ports on host.target.com (10.0.0.28):
Not shown: 1711 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
3306/tcp open  mysql
Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.104 seconds

Сканирование служб

Если вам необходимо выяснить как можно подробней, что за сервис болтается на том или ином порту, попробуйте воспользоваться опциями '-sV'. Эти опции заставляют Nmap вместо обычного сканирования портов, произвести более агрессивное сканирование, опрашивая сервисы, находящиеся на том или ином порту. Также этот метод иногда позволяет более точно определить тип и версию используемой на целевой системе ОС.
$ nmap -sV target.host.com

Starting Nmap 5.21 ( http://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 http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.43 seconds
Как видно из вывода выше, Nmap определил серверы SSH-4.7 и Apache-2.2.8, находящиеся на портах 22 и 80. Также из названий версий ПО удаётся определить, что сервер работает под Ubuntu Linux. Такой метод сканирования может оказаться весьма кстати, когда вам необходимо выявить устаревшие версии ПО, работающие на ваших хостах, которые могут быть подвержены известным угрозам.

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

Не уверены точно, что знаете обо всех обитателях своей сети? Попробуйте запустить Nmap с параметрами '-sP' и он выполнит обычное пинг-сканирование, определяя лишь отвечающие хосты, не прибегая к сканированию портов. Например, чтобы определить «живых» в подсети 10.0.0.0/24, достаточно простой команды:
$ nmap -sP 10.0.0.0/24
Или же, как было сказано выше, вы можете указать диапазон хостов, а не всю подсеть. Например:
$ nmap -sP 10.0.0.1-16

Zenmap

Если работа в режиме командной строки — не ваш конёк, вы можете воспользоваться Zenmap — GUI-утилитой, облегчающей построение командной строки Nmap, а также обладающую некоторыми бонусами вроде построения графической карты сети.
Zenmap обладает предустановленными профилями сканирования, которые вы можете просто выбрать из выпадающего списка и, возможно, не погружаться в тонкости работы опций Nmap. Zenmap — отличный инструмент для тех, кто ещё только собирается познакомиться с Nmap или просто желает с ним поиграть. Если же вам по долгу службы придётся использовать Nmap часто, то конечно же, обязательно изучите документацию к нему и потратьте время на эксперименты.

Итоги

В будущих статьях об Nmap мы более плотно прикоснёмся к этому невероятно мощному инструменту. А пока, я надеюсь, эта статья даст некоторый стимул к его изучению тем, кто ещё этого не сделал.

Комментариев нет:

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