Nmap. Тестируем безопасность сервера.

Nmap — свободная утилита, предназначенная для разнообразного настраиваемого сканирования IP-сетей с любым количеством объектов, определения состояния объектов сканируемой сети (портов и соответствующих им служб). Можно сказать просто культовая утилита которая развивается уже на протяжение 20 лет. Ну что ж , начнем разбираться и пробовать .

root@debian:~# apt-get install nmap

Магия начинается с простой команды:

root@debian:~# nmap 192.168.0.1

Выполненным под root он полностью берет на себя формирование пакетов и управление соединение. Nmap посылает SYN, машина отвечает SYN/ACK, Nmap посылает FIN закрывая полуоткрытое соединение. Это называется TCP SYN сканирование. Отбрасывание пакеты SYN  без  SYN/ACK или FIN помогает  сканеру определитель брандмауэр(Not shown: 998 filtered ports).

Starting Nmap 6.47 ( http://nmap.org ) at 2017-06-20 21:56 MSK
 Host is up (0.20s latency).
 Not shown: 998 filtered ports
 PORT STATE SERVICE
 21/tcp open ftp
 80/tcp open http

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

Nmap по умолчанию сканируете только системные порты с 0 по 1000. Конечно мы не увидим здесь нестандартные порты выходящие за 1000. Давайте расширим диапазон  префиксом -p:

root@debian:~# nmap -p 1-3000 192.168.0.1

Starting Nmap 6.47 ( http://nmap.org ) at 2017-06-20 21:56 MSK
 Host is up (0.44s latency).
 Not shown: 2997 filtered ports
 PORT STATE SERVICE
 21/tcp open ftp
 80/tcp open http
 2223/tcp open unknown

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

Как мы видим появился порт 2223 правда unknown и время выросло до 107 секунд. Правда мы можем ускориться. Nmap умеет сканировать с разной скоростью, опция T0-T5.

  • T0 отключает многопоточное сканирование и ставит интервал между сканированием порта 5 минут. Возможно это вас спасет от обнаружения сканирования, тем более что порты сканируются в случайном порядке.
  • T1 задержка 15 секунд.
  • T2 задержка 0.4 секунды.
  • T3 задержка 10 миллисекунд, дефолтное значение.
  • T4  задержка 5 миллисекунд.
  • T5 самый агрессивный режим.

root@debian:~# nmap -p 1-3000 -T4 192.168.0.1

Nmap scan report for semen1.trololo.fvds.ru (82.146.61.182)
 Host is up (0.48s latency).
 Not shown: 2997 filtered ports
 PORT STATE SERVICE
 21/tcp open ftp
 80/tcp open http
 2223/tcp open unknown

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

Так же мы можем попытаться определить название и версию сервиса на порту опцией -sV. Все правила индификаций служб и их версии определены в  файле /usr/share/nmap/nmap-service-probe.

root@debian:~# nmap -p 1-3000 -T4 -sV 192.168.0.1

Not shown: 2997 filtered ports
 PORT STATE SERVICE VERSION
 21/tcp open ftp ProFTPD 1.3.5
 80/tcp open http Apache httpd 2.4.10
 2223/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u3 (protocol 2.0)
 Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

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

Вот мы и узнали что за сервис на порту 2223 ))) И опять же это не все, давайте попробуем точнее определить версию и название ОС флагом -O. Файл где лежат образы /usr/share/nmap/nmap‐os‐db.

root@debian:~# nmap -p 1-3000 -T4 -O 192.168.0.1

Host is up (0.017s latency).
 Not shown: 2997 filtered ports
 PORT STATE SERVICE
 21/tcp open ftp
 80/tcp open http
 2223/tcp open unknown
 Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
 Device type: general purpose
 Running: Linux 3.X
 OS CPE: cpe:/o:linux:linux_kernel:3
 OS details: Linux 3.11 - 3.14

Повторим натиск  с более детальным исследованием опцией -A.

root@debian:~# nmap -p 1-3000 -T4 -A 192.168.0.1

Host is up (0.015s latency).
 Not shown: 2997 filtered ports
 PORT STATE SERVICE VERSION
 21/tcp open ftp ProFTPD 1.3.5
 | ssl-cert: Subject: organizationName=linuxblog/stateOrProvinceName=ru/countryName=ru
 | Not valid before: 2017-06-16T20:14:40+00:00
 |_Not valid after: 2018-06-16T20:14:40+00:00
 |_ssl-date: 2011-09-22T21:18:41+00:00; -5y270d22h51m27s from local time.
 80/tcp open http Apache httpd 2.4.10
 |_http-title: Apache2 Debian Default Page: It works
 2223/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u3 (protocol 2.0)
 |_ssh-hostkey: ERROR: Script execution failed (use -d to debug)
 Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
 Device type: general purpose
 Running: Linux 3.X
 OS CPE: cpe:/o:linux:linux_kernel:3
 OS details: Linux 3.11 - 3.14
 Network Distance: 9 hops
 Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Немного запутаем следа как зайцы!  Флаг -D позволяет нам запустить несколько потоков с разными ip адресами, среди которых будет только один настоящий:

root@debian:~# nmap -p 1-3000 -T4 -D адрес1,адрес2,адрес3  192.168.0.1

Или заполнить этот параметр рендомно,в данном случае 10 IP:

root@debian:~# nmap -p 1-3000 -T4 -D RND:10  192.168.0.1

Вам совершенно не кто не мешает использовать не стандартные пакеты для сканирования, что может помочь определить брандмауер. Пакеты без единого флага( -sN ), FIN пакеты ( -sF ), Xmas пакеты содержащие флаг FIN, PSH и URG( -sX ). Или использовать ACK-сканирование -sA:

root@debian:~# nmap -p 1-3000 -T4 -sA 192.168.0.1

Host is up (0.012s latency).
 Not shown: 2997 filtered ports
 PORT STATE SERVICE
 21/tcp unfiltered ftp
 80/tcp unfiltered http
 2223/tcp unfiltered unknown

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

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

  • ICMP Echo request — аналог того, как работает ping;
  • SYN‐пакет на порт 443;
  • ACK‐пакет на порт 80;
  • ICMP timestamp request.

Но фишка не в этом ,а в  возможности отключить сканирование портов опцией -sn:

root@debian:~# nmap -sn 192.168.0.1-255

root@debian:~# nmap -sn 192.168.0.1.*

Или целую подсеть:

root@debian:~# nmap -sn 192.168.0.0/24

Или записать необходимые адреса в файл и указать к нему путь:

root@debian:~# nmap -sn -iL /путь/до файла

Самих техник пингования Nmap поддерживает много, например можно указать порт и пакет для определения хоста:

  • SYN пакет на порт 80 > -PS80;
  • ACK пакет на порт 80 > -PA80;
  • UDP пакет на порт 53 > -PU53;
  • ICMP Echo request  >-PE;
  • ICMP timestamp request > -PP;

Так же можно их комбинировать:

root@debian:~# nmap -sn -PE -PS443 -PA80 -PP 192.168.0.0/24

Относительно новая фишка Nmap это поддержка скриптов расшивающую функциональность сканера. В базовом комплекте их очень много на все случаи жизни , даже для брутфорса. Сами скрипты , вместе с описанием расположены /usr/share/nmap/scripts. Для примера попробуем http‐enum  выполняющий  дирбастинг HTTP‐сервера:

root@debian:~# nmap ‐p80 ‐‐script «http‐enum» 192.168.0.1

Host is up (0.012s latency).
 PORT STATE SERVICE
 80/tcp open http
 | http-enum:
 |_ /phpmyadmin/: phpMyAdmin

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

Мы с вами рассмотрели только чать самых полезных функций. Например можно запустить сразу целую группу скриптов раздела html:

root@debian:~# nmap ‐p80 ‐‐script «http‐*» 192.168.0.1

Так же можно выводить все результаты в файл:

root@debian:~# nmap ‐p80 ‐‐script «http‐*» -oN <file> 192.168.0.1

  • -oN обычный формат,
  • -oX  XML формат,
  • -oG Grepable форма.

Если вы хотите рассказать о каких то полезных хитростях для более опытных пользователей, мы с удовольствием опубликуем вашу статью ))) Удачи….