Изучение сканирования сетевых портов с помощью Nmap

NmapNmapBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы узнаете основы сканирования сетевых портов с использованием Nmap, мощного открытого программного обеспечения (open - source), которое пользуется популярностью среди профессионалов в области кибербезопасности. Сканирование портов является важной техникой для сетевых администраторов и аналитиков безопасности, позволяющей выявить открытые порты и сервисы на целевой системе.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/basic_syntax("Basic Command Syntax") nmap/NmapGroup -.-> nmap/tcp_connect_scan("Basic TCP Connect Scan") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") subgraph Lab Skills nmap/installation -.-> lab-415936{{"Изучение сканирования сетевых портов с помощью Nmap"}} nmap/basic_syntax -.-> lab-415936{{"Изучение сканирования сетевых портов с помощью Nmap"}} nmap/tcp_connect_scan -.-> lab-415936{{"Изучение сканирования сетевых портов с помощью Nmap"}} nmap/save_output -.-> lab-415936{{"Изучение сканирования сетевых портов с помощью Nmap"}} nmap/target_specification -.-> lab-415936{{"Изучение сканирования сетевых портов с помощью Nmap"}} end

Понимание сетевых портов и сервисов

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

Что такое сетевые порты?

Сетевые порты - это виртуальные конечные точки для обмена данными в компьютерной сети. Представьте их как конкретные адреса внутри компьютера, где разные сервисы могут получать и отправлять данные. Каждый порт идентифицируется номером от 0 до 65535. Разные сервисы обычно используют определенные порты. Например, веб - серверы часто используют порт 80 для HTTP (Hypertext Transfer Protocol - протокол передачи гипертекста) и порт 443 для HTTPS (HTTP Secure - более безопасная версия HTTP). SSH (Secure Shell - безопасный оболочечный доступ), который используется для безопасного удаленного доступа к компьютеру, использует порт 22.

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

Настройка сервиса для сканирования

Теперь давайте настроим простой сервис на вашем локальном компьютере, который мы сможем сканировать. Мы будем использовать встроенный в Python HTTP - сервер, который является удобным способом создания простого веб - сервера. Этот сервер будет слушать порт 8080.

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

cd /home/labex/project

Теперь давайте создадим простой HTML - файл, который наш сервер будет обслуживать. HTML (Hypertext Markup Language - язык гипертекстовой разметки) - это стандартный язык для создания веб - страниц. Следующая команда создаст файл index.html с простым приветственным сообщением:

echo "<html><body><h1>Welcome to Port Scanning Lab</h1></body></html>" > index.html

Далее мы запустим Python HTTP - сервер на порту 8080. Мы запустим его в фоновом режиме, чтобы вы могли продолжать работу в лабораторной работе, пока сервер работает. Символ & в конце команды сообщает системе запустить команду в фоновом режиме.

python3 -m http.server 8080 &

Вы должны увидеть вывод, похожий на следующий:

Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...

Это означает, что веб - сервер теперь работает на вашем компьютере и слушает порт 8080. Чтобы убедиться, что сервер работает корректно, вы можете открыть новый терминал и использовать команду curl. curl - это инструмент для передачи данных от сервера или к серверу. Следующая команда отправит запрос на сервер, работающий на вашем локальном компьютере на порту 8080:

curl http://localhost:8080

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

Введение в Nmap и сканирование с использованием TCP Connect

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

Что такое Nmap?

Nmap (сокращение от Network Mapper - карта сети) является одним из самых известных и мощных инструментов в области сетевого обнаружения и аудита безопасности. Он обладает широким спектром возможностей, которые чрезвычайно полезны для сетевых администраторов и профессионалов в области безопасности.

  • Обнаружение хостов и сервисов в сети: Nmap может помочь вам узнать, какие устройства подключены к сети и какие сервисы они предоставляют. Например, он может определить, есть ли в локальной сети веб - серверы, файловые серверы или почтовые серверы.
  • Определение открытых портов на целевых системах: Отправляя пакеты на разные порты целевой системы, Nmap может определить, какие порты открыты и готовы принимать соединения.
  • Определение сервисов, работающих на этих портах: После определения открытого порта Nmap может попытаться понять, какой сервис на этом порте работает. Например, если порт 80 открыт, скорее всего, работает веб - сервер.
  • Обнаружение операционных систем и версий сервисов: Nmap может проанализировать ответы от целевой системы, чтобы угадать, какая операционная система на ней запущена и какие версии сервисов используются. Эта информация может быть использована для выявления потенциальных уязвимостей.
  • Выполнение различных типов сканирования для разных сценариев: В зависимости от ваших потребностей Nmap может выполнять различные типы сканирования, такие как сканирование TCP Connect, SYN - сканирование, UDP - сканирование и т.д.

Понимание сканирования TCP Connect

Сканирование TCP Connect является наиболее основным типом TCP - сканирования. Чтобы понять, как оно работает, сначала нужно знать о трехэтапном рукопожатии TCP. Трехэтапное рукопожатие TCP - это процесс, с помощью которого два устройства устанавливают надежный соединение. Он состоит из трех шагов: клиент отправляет пакет SYN (синхронизация) на сервер, сервер отвечает пакетом SYN - ACK (синхронизация - подтверждение), а затем клиент отправляет пакет ACK (подтверждение) для завершения соединения.

Вот как работает сканирование TCP Connect:

  1. Nmap пытается установить полное трехэтапное TCP - рукопожатие с целевым портом. Он действует как обычный клиент, пытающийся подключиться к сервису на целевой системе.
  2. Если соединение установлено успешно, то есть все три шага рукопожатия завершены, порт помечается как "открытый". Это означает, что на этом порте работает сервис, готовый принимать соединения.
  3. Если соединение отклонено, например, если целевая система отправляет пакет RST (сброс), порт помечается как "закрытый". Это означает, что на этом порте нет работающего сервиса.
  4. Если от целевой системы нет ответа, порт помечается как "фильтрованный". Обычно это означает, что порт может быть заблокирован брандмауэром или какой - то другой механизмом безопасности.

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

Выполнение первого сканирования TCP Connect с использованием Nmap

Давайте выполним сканирование сервиса, который мы настроили на предыдущем шаге. Для этого откроем новый терминал. Терминал - это командная строка, где мы можем вводить команды для взаимодействия с операционной системой.

После открытия терминала выполните следующую команду:

nmap -sT localhost -p 8080

Разберем эту команду, чтобы понять, что делает каждая часть:

  • nmap: Это название инструмента, который мы используем. Он сообщает системе, что мы хотим запустить программу Nmap.
  • -sT: Это флаг, который указывает на сканирование TCP Connect. Когда Nmap видит этот флаг, он выполнит сканирование TCP Connect на цели.
  • localhost: Это цель, которую мы сканируем. В данном случае localhost относится к нашему собственному компьютеру. Это способ протестировать процесс сканирования на локальной системе.
  • -p 8080: Этот параметр указывает порт, который мы хотим сканировать. Здесь мы сканируем порт 8080.

После выполнения команды вы должны увидеть вывод, похожий на следующий:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-20 12:34 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy

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

Вывод показывает детали сканирования. Он сообщает нам, что Nmap запустился, цель, которую он сканировал, состояние хоста и состояние порта, который мы сканировали. В данном случае порт 8080 помечен как "открытый", и сервис, работающий на нем, определен как "http - proxy".

Теперь давайте сохраним этот вывод в файл для дальнейшего использования. Сохранение вывода полезно, так как мы можем просмотреть его позже или поделиться с другими. Для этого выполните следующую команду:

nmap -sT localhost -p 8080 > /home/labex/project/nmap_scan_output.txt

Эта команда выполняет то же самое сканирование TCP Connect, что и раньше. Символ > используется для перенаправления вывода команды. Вместо отображения вывода на экране терминала он будет записан в файл с именем nmap_scan_output.txt, расположенный в директории /home/labex/project.

Давайте посмотрим на содержимое файла, чтобы убедиться, что вывод был сохранен правильно. Выполните следующую команду:

cat /home/labex/project/nmap_scan_output.txt

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

Анализ результатов сканирования и понимание состояний портов

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

Понимание состояний портов в Nmap

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

  1. open (открытый) - Когда порт отображается как "open", это означает, что приложение активно ожидает входящих соединений на этом порту. Это указывает на то, что на порту работает сервис и он готов принимать запросы.
  2. closed (закрытый) - "Closed" порт означает, что в данный момент на нем не работает ни одно приложение. Однако порт все еще доступен, что означает, что в будущем на нем может работать сервис.
  3. filtered (фильтрованный) - Если Nmap сообщает, что порт "filtered", это означает, что он не может определить, открыт ли порт или нет. Обычно это происходит из-за того, что брандмауэр или другая мера безопасности блокирует доступ к порту.
  4. unfiltered (нефильтрованный) - "Unfiltered" порт означает, что Nmap может получить доступ к порту, но не может определить, открыт он или закрыт. Это может быть связано с различными факторами, такими как конфигурация целевой системы или условия сети.
  5. open|filtered (открытый или фильтрованный) - Когда Nmap сообщает, что порт "open|filtered", это означает, что он не может определить, открыт порт или фильтрованный. Это распространенный результат при сканировании через брандмауэр или другое устройство безопасности.
  6. closed|filtered (закрытый или фильтрованный) - "Closed|filtered" порт означает, что Nmap не может определить, закрыт порт или фильтрованный. Как и в состоянии "open|filtered", это часто связано с мерами безопасности, блокирующими доступ к порту.

В наших результатах сканирования порт 8080 был отображен как "open". Это говорит нам, что наш Python HTTP - сервер успешно ожидает входящих соединений на этом порту.

Понимание обнаружения сервисов

Вы, возможно, заметили, что Nmap определил сервис на порту 8080 как "http - proxy". Nmap использует базу данных общих назначений портов, чтобы сделать обоснованное предположение о том, какой сервис может работать на порту. Порт 8080 обычно используется для HTTP - прокси - сервисов, поэтому Nmap сделал такое предположение на основе своей базы данных.

Однако это предположение не всегда может быть точным. Чтобы получить более точную информацию о сервисе, работающем на порту, вы можете использовать флаг обнаружения сервиса (-sV). Этот флаг сообщает Nmap выполнить дополнительные проверки, чтобы определить точный сервис и его версию.

Давайте попробуем использовать флаг обнаружения сервиса:

nmap -sT -sV localhost -p 8080 > /home/labex/project/nmap_service_output.txt

В этой команде -sT указывает на сканирование TCP connect, -sV включает обнаружение сервисов, localhost - это цель, которую мы сканируем, -p 8080 указывает, что мы сканируем только порт 8080, а > /home/labex/project/nmap_service_output.txt перенаправляет вывод в файл.

Теперь давайте посмотрим на вывод:

cat /home/labex/project/nmap_service_output.txt

После выполнения этой команды вы должны увидеть дополнительную информацию о сервисе, работающем на порту 8080. Он может определить сервис как "Python http.server" или что - то подобное, давая вам более точное представление о том, что работает на этом порту.

Исследование дополнительной информации с помощью подробного режима

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

Давайте попробуем использовать подробный режим:

nmap -sT -v localhost -p 8080 > /home/labex/project/nmap_verbose_output.txt

В этой команде -sT предназначен для сканирования TCP connect, -v включает подробный режим, localhost - это цель, -p 8080 указывает порт для сканирования, а > /home/labex/project/nmap_verbose_output.txt перенаправляет вывод в файл.

Давайте проверим вывод:

cat /home/labex/project/nmap_verbose_output.txt

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

Расширение знаний о сканировании

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

Сканирование популярных портов

Начнем с того, что сканируем самые популярные порты на вашем локальном компьютере, также известном как localhost. Эти популярные порты часто используются хорошо известными сетевыми сервисами.

nmap -sT localhost --top-ports 10 > /home/labex/project/common_ports_scan.txt

В этой команде опция -sT сообщает Nmap выполнить сканирование с использованием TCP Connect. localhost указывает на цель, которая представляет собой ваш собственный компьютер. Опция --top-ports 10 информирует Nmap сканировать 10 наиболее часто используемых портов. Символ > перенаправляет вывод сканирования в файл с именем common_ports_scan.txt в директории /home/labex/project.

Теперь давайте посмотрим на результаты этого сканирования:

cat /home/labex/project/common_ports_scan.txt

Команда cat используется для отображения содержимого файла. Когда вы выполните эту команду, вы увидите список портов. Например, порт 21 используется для FTP (File Transfer Protocol - Протокол передачи файлов), порт 22 для SSH (Secure Shell - Защищенный оболочка), порт 23 для Telnet, порт 25 для SMTP (Simple Mail Transfer Protocol - Простой протокол передачи почты) и порт 80 для HTTP (Hypertext Transfer Protocol - Протокол передачи гипертекста). На вашей системе большинство из этих портов, вероятно, будут закрыты, если вы не запустили конкретные сервисы. Например, если наш HTTP - сервер на порту 8080 входит в топ - 10 портов, он будет отображаться как открытый.

Сканирование диапазона портов

В дополнение к сканированию популярных портов, вы также можете сканировать определенный диапазон портов. Давайте сканируем порты от 8000 до 8100 на вашем localhost.

nmap -sT localhost -p 8000-8100 > /home/labex/project/port_range_scan.txt

Здесь опция -p 8000 - 8100 сообщает Nmap сканировать порты в диапазоне от 8000 до 8100. Вывод этого сканирования перенаправляется в файл с именем port_range_scan.txt в директории /home/labex/project.

Чтобы посмотреть результаты этого сканирования:

cat /home/labex/project/port_range_scan.txt

В выводе вы должны увидеть, что порт 8080 (если он входит в сканируемый диапазон) открыт, в то время как другие порты в диапазоне, вероятно, будут закрыты.

Комбинирование методов

Давайте объединим методы, которые мы узнали до сих пор. Мы выполним сканирование с использованием TCP Connect и попытаемся определить сервисы, работающие на портах в диапазоне от 8000 до 8100.

nmap -sT -sV localhost -p 8000-8100 > /home/labex/project/combined_scan.txt

Опция -sV используется для включения обнаружения сервисов. Это означает, что Nmap не только сообщит вам, открыт или закрыт порт, но и попытается определить сервис, работающий на открытых портах. Вывод этого комбинированного сканирования сохраняется в файле combined_scan.txt в директории /home/labex/project.

Чтобы проверить результаты:

cat /home/labex/project/combined_scan.txt

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

Очистка

Перед тем как закончить этот практический урок, нам нужно провести очистку, остановив Python HTTP - сервер, который мы использовали. Сначала нам нужно найти идентификатор процесса (PID) сервера.

ps aux | grep "python3 -m http.server 8080"

Команда ps aux выводит список всех запущенных процессов на вашей системе. Символ | представляет собой конвейер, который берет вывод команды ps aux и передает его в команду grep. Команда grep затем ищет строку, содержащую текст "python3 -m http.server 8080", которая представляет собой команду для запуска Python HTTP - сервера.

Найдите строку, которая показывает процесс Python HTTP - сервера. Второй столбец этой строки содержит идентификатор процесса (PID). После того как вы запишете PID, вы можете использовать команду kill для остановки процесса.

kill <PID>

Замените <PID> на фактический идентификатор процесса, который вы нашли. Например, если PID равен 1234, вы должны выполнить:

kill 1234

Резюме

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

Приобретенные ключевые навыки включают понимание сетевых портов и важности их сканирования, настройку простого HTTP - сервера, использование Nmap для сканирования с использованием TCP Connect, интерпретацию состояний портов, применение опций Nmap для получения подробной информации, сканирование нескольких портов и диапазонов портов, а также идентификацию сервисов на открытых портах. Эти навыки являются основой для сетевой разведки, которая является важной для сетевого администрирования и оценки безопасности. По мере продвижения в области кибербезопасности вы можете основываться на этих основах, чтобы изучить более продвинутые методы и практики безопасности.