Использование Nmap для сканирования открытых портов на VPS

Вступление

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

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

Что такое порт?

В сетевой модели OSI существует множество уровней. Транспортный уровень отвечает, прежде всего, за передачу информации между различными сервисами и приложениями.

Этот уровень напрямую связан с портами.

Терминология

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

  • Порт: адресуемое расположение в сети внутри операционной системы, что помогает отличать трафик, предназначенный для различных приложений и сервисов;
  • Интернет-сокет (Internet Sockets): дескриптор файла, который определяет IP-адрес и сопутствующий номер порта, а также протокол передачи, который будет использоваться для обработки данных;
  • Связывание (Binding): процесс использования приложением или сервисом интернет-сокета для обработки данных для ввода и вывода.
  • Прослушивание (Listening): сервис «прослушивает» порт, если он связан с комбинацией порта/протокола/IP-адреса для того, чтобы ждать запросов от клиентов сервиса. После получения запроса он устанавливает соединение с клиентом, при необходимости используя прослушиваемый порт. Поскольку используемые интернет-сокеты связаны с конкретным IP-адресом клиента, сервер может  прослушивать и обслуживать запросы других клиентов одновременно.
  • Сканирование порта: это попытка подключиться к последовательности портов с целью узнать, какие порты открыты, и получить информацию о том, какие сервисы и операционные системы находятся за ними.

Общие порты

Портам задается число в диапазоне от 1 до 65535.

  • Многие порты ниже 1024 связаны с сервисами, которые Linux и Unix-подобные операционные системы считают критическими для основных функций сети, поэтому необходимо иметь привилегии root-пользователя, чтобы назначить им сервисы.
  • Порты от 1024 до 49151 считаются «зарегистрированными». Это значит, что их можно «забронировать» (в очень широком смысле этого слова) за определенными сервисами, направив запрос в IANA (Internet Assigned Numbers Authority). Они не обязательно приведены в исполнение, но могут дать подсказку относительно того, какие сервисы могут работать на определенном порте.
  • Порты от 49152 до 65535 не могут быть зарегистрированы и предназначены для частного использования.

Благодаря огромному количеству доступных портов нет необходимости иметь дело с большинством сервисов, которые, как правило, связываются с определенными портами.

Тем не менее, некоторые порты стоит знать из-за их повсеместности. Ниже приведен краткий список таких портов:

  • 20: FTP data;
  • 21: FTP control port;
  • 22: SSH;
  • 23: Telnet (небезопасный, в большинстве случаев использовать не рекомендуется);
  • 25: SMTP;
  • 43: протокол WHOIS;
  • 53: сервисы DNS;
  • 67: порт DHCP-сервера;
  • 68: порт DHCP-клиента;
  • 80: HTTP-трафик (обычный);
  • 110: порт POP3-почты;
  • 143: порт IMAP-почты;
  • 161: SNMP;
  • 194: IRC;
  • 389: порт LDAP;
  • 443: HTTPS (шифрованный трафик);
  • 587: SMPT;
  • 631: CUPS;
  • 666: DOOM (эта игра на самом деле имеет свой собственный порт).

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

Кроме портов по умолчанию большинство сервисов может использовать и другие порты, но прежде нужно убедиться, что и сервер, и клиент настроены на использование нестандартного порта.

Получить краткий список некоторых общих портов можно, набрав:

less /etc/services

Это действие предоставит список наиболее распространенных портов и связанных с ними сервисов.

. . .
tcpmux          1/tcp                           # TCP port service multiplexer
echo            7/tcp
echo            7/udp
discard         9/tcp           sink null
discard         9/udp           sink null
systat          11/tcp          users
daytime         13/tcp
daytime         13/udp
netstat         15/tcp
qotd            17/tcp          quote
msp             18/tcp                          # message send protocol
. . .

В главе о работе с nmap рассказывается, как получить более сложный список.

Как проверить свои открытые порты

Для сканирования открытых портов существует целый ряд инструментов.

По умолчанию на большинстве дистрибутивов Linux установлена утилита netstat.

Чтобы быстро узнать, какие сервисы запущены, используйте команду со следующими параметрами:

sudo netstat -plunt
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      785/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      785/sshd

Это действие показывает порт и прослушивающий сокет, связанные с сервисом, и выводит протоколы UDP и TCP.

Установка Nmap

Чтобы повысить уровень безопасности сети, нужно провести тестирование уязвимости. Это значит, что нужно попробовать проникнуть в сеть и обнаружить все уязвимости так же, как это сделал бы злоумышленник.

Из всех доступных для этого инструментов Nmap, пожалуй, самый распространенный и мощный.

Чтобы установить Nmap на Ubuntu или Debian, введите:

sudo apt-get update
sudo apt-get install nmap

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

less /usr/share/nmap/nmap-services
. . .
tcpmux  1/tcp   0.001995        # TCP Port Service Multiplexer [rfc-1078] tcpmux  1/udp   0.001236        # TCP Port Service Multiplexer
compressnet     2/tcp   0.000013        # Management Utility
compressnet     2/udp   0.001845        # Management Utility
compressnet     3/tcp   0.001242        # Compression Process
compressnet     3/udp   0.001532        # Compression Process
unknown 4/tcp   0.000477
rje     5/udp   0.000593        # Remote Job Entry
unknown 6/tcp   0.000502
echo    7/tcp   0.004855
echo    7/udp   0.024679
echo    7/sctp  0.000000
. . .

Помимо того, что данный файл содержит почти 20 тысяч строк, он также имеет дополнительные поля, такие как третья колонка, в которой выведена частота открытия этого порта, выявленная во время пробного сканирования в Интернете.

Сканирование портов с помощью Nmap

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

Кроме того, создатели nmap предоставляют тестовый сервер, расположенный на:

scanme.nmap.org

Этот или ваш собственный VPS станет отличной целью для тестирования nmap.

Есть несколько распространенных операций, которые можно выполнить с Nmap. Во избежание возвращения частичных результатов для некоторых запросов, запускайте данные операции с привилегиями sudo. Завершение некоторых команд может занять много времени.

Просканируйте главную операционную систему:

sudo nmap -O remote_host

Часть сетевого обнаружения можно пропустить и предположить, что хост подключен к сети. Это полезно в случае если во время других проверок было получено сообщение «Note: Host seems down». Внесите в опции следующую строку:

sudo nmap -PN remote_host

Чтобы просканировать несколько хостов сразу, укажите диапазон с помощью символов «-» или «/24», :

sudo nmap -PN xxx.xxx.xxx.xxx-yyy

Чтобы отсканировать диапазон доступных сервисов сети:

sudo nmap -sP network_address_range

Чтобы провести сканирование без выполнения обратного поиска DNS IP-адреса (в большинстве случаев это должно ускорить вывод результатов):

sudo nmap -n remote_host

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

sudo nmap -p port_number remote_host

Для сканирования TCP-соединений Nmap может выполнить 3-этапное «рукопожатие» (см. ниже) с целевым портом. Выполнить это можно следующим образом:

sudo nmap -sT remote_host

Для сканирования UDP соединения введите:

sudo nmap -sU remote_host

Чтобы отсканировать каждый открытый порт TCP и UDP:

sudo nmap -n -PN -sT -sU -p- remote_host

Сканирование TCP “SYN” использует тот же способ соединения, что и TCP.

Чтобы установить соединение ТСР, запрашивающая сторона посылает на сервер пакет с «запросом на синхронизацию». Сервер, в свою очередь, отвечает пакетом «подтверждения синхронизации». Чтобы установить соединение, запрашивающая сторона отправляет назад пакет «подтверждения».

Сканирование «SYN», тем не менее, сбрасывает соединение, когда возвращается первый пакет с сервера. Это называется «полуоткрытым» сканированием и считается способом скрытого сканирования портов, так как связанное с этим портом приложение не будет принимать трафик, поскольку соединение остается незавершенным.

С появлением более продвинутых фаерволов и маркировки неполного запроса SYN во многих конфигурациях это сканирование перестало считаться незаметным.

Чтобы запустить SYN-сканирование, выполните:

sudo nmap -sS remote_host

Более незаметным способом является отправка неверных TCP-заголовков, что в случае соответствия хоста характеристикам TCP отправит пакет назад, если данный порт закрыт. Это сработает на серверах, основанных не на Windows.

Можно использовать флаги «-sF», «-sX» или «-sN». Все они выведут искомый результат:

sudo nmap -PN -p port_number -sN remote_host

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

sudo nmap -PN -p port_number -sV remote_host

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

Вывод

Понимание конфигураций порта и умение обнаруживать векторы атаки на сервер – важнейший навык, первый шаг к безопасности информации и VPS.

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

Tags: , , , , ,

1 комментарий

Добавить комментарий