Cканер портов Nmap


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

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

Сканер портов nmap kali linux

Какую информацию может предоставить проверка открытых портов на сервере?

Открытый порт — это сервис (демон) установленный на сервере, к которому можно подключиться и выполнить определенные команды.

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

Банальный пример эксплуатации сервиса, который работает с правами системы, описан в этой статье.

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

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

Сканер портов может показать администратору нахождение вредоносного ПО в системе. Для этого нужно сканировать весь диапазон от 0 до  65535.

Далее в статье я покажу, как это можно реализовать с помощью сканера портов nmap.

Web технологии и скрытое сканирование

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

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

Например веб сервер Apache в лог пишет переменную $_SERVER[‘REMOTE_ADDR’], которую получает только после установки TCP соединения, а оно подразумевает (three way handshake) трехэтапный обмен данными, который подделать достаточно проблематично. 😀

Для вызова ПО может использоваться цепочка анонимных прокси серверов, или зараженные компьютеры простых пользователей.

Если говорить о уровне приложений, то для сканирования портов удаленного хоста с помощью JavaScript, может использоваться кросс доменный объект XMLHttpRequest, который в настоящее время поддерживается всеми последними версиями браузеров.

Использование PHP в данном случае не самая удачная идея, но для информативности приведу простой пример работы с сокетами.

<?php
$connect = @fsockopen ($host, $port, $errno, $errstr, $timeout);
if ($connect)
{
echo "$port открыт";
}
else
{
echo "$port балалайка";
}
?>

Данный скрипт успешно покажет открытые парты на удаленном хосте, а  в переменной $REMOTE_ADDR будет ip адрес того хоста на котором он выполнялся. Для быстродействия его работы, таймаут нужно делать минимальным.

Но бывают сценарии, которые для аутентификации пользователей проверяют ip в переменных $HTTP_X_FORWARDED_FOR и $HTTP_CLIENT_IP, а их очень легко подделать, но это тема отдельной статьи.

 Утилита nmap

Одной из самых популярных утилит для сканирования портов является nmap. Nmap для Windows скачать можно здесь: nmap.org/download.html

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

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

Дело в том, что более агрессивные методы сканирования могут расцениваться вашим провайдером, как осуществление сетевых атак (например DoS) а это, как минимум нарушение договора.

На Linux nmap можно установить из репозиториев:

Ubuntu@$ sudo apt-get install nmap
CentOS@# yum -y install nmap

А можно использовать уже готовый дистрибутив Kali Linux, который поддерживает загрузку с LiveCD, что для внутреннего тестирования очень удобно.

root@kali:~#man nmap

Подробный мануал о nmap доступен в консоли. Очень рекомендую. 😉

Полезные команды nmap

root@kali:~#nmap 127.0.0.1

По умолчания nmap запущенный без параметров будет сканирует все порты до 1024, а также порты указанные в файле nmap-services.

Для того, чтобы задать диапазон сканируемых портов, необходимо использовать параметр -p

root@kali:~#nmap -p 0-65535 192.168.1.1

Покажет все открытые порты на сервере в указанном диапазоне.

Nmap может определить примерную версию ОС и ее производителя, а также тип оборудования, в случае если вы сканируете роутер. Вся полученная информация сравнивается с описанием в файле Nmap-os-fingerprints и выводится на экран.

root@kali:~#nmap -O 192.168.1.2

Покажет информацию о сканируемом устройстве (роутер, маршрутизатор и т. д.)

root@kali:~#nmap -A 192.168.1.3

Позволяет определить версии ОС и запущенных служб на сервере.

root@kali:~#nmap -v 192.168.1.4

Опция -v отобразит работу сканера в режиме онлайн.

root@kali:~#nmap -P0 192.168.1.5

Данный ключ (Ping 0) запрещает отправку ICMP (эхо-запросов) удаленному компьютеру.

root@kali:~#nmap -v -P0 -b <name:passwd@server:port> 10.20.30.40

Параметр -b позволяет сканировать удаленную систему от имени Ftp-сервера.

Наиболее интересной является опция -D, которая создает целый список сканирующих хостов.

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

root@kali:~#nmap -P0 192.168.1.6 -D vk.com,odnoklassniki.ru,instagram.com

А в чем прикол?

Существуют такие файерволы, например Agnitum Outpost которые по умолчанию блокируют атакующие хосты на определенное время. В данном случае, неопытному юзеру, брандмауер может заблокировать доступ в социальные сети… и не только. :)

Ну и в завершении темы не менее интересный параметр -sS, который делает источник скрытым. Данная опция посылает SYN пакет, и если удаленный сервер ответит, то соединение тут же обрывается.

root@kali:~#nmap -sS 192.168.1.7

В зависимости от конфигурации сервера, в логах /var/log/secure может быть только запись вида:

Warning: can’t get client address: Connection reset.

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

Также не стоит забывать про регулярное обновление ПО, и самостоятельное тестирование сервера на проникновение различными утилитами, как с внешней, так и с внутренней стороны.

P.S. В одной из следующих статей вы узнаете, как изменить/подделать ip адрес, а вебмастерам будет полезно узнать насколько реален обход ограничения доступа по ip адресу в .htaccess 😉