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

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

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

Введение

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

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


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/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") subgraph Lab Skills nmap/installation -.-> lab-415927{{"Основы сканирования сети с помощью Nmap"}} nmap/basic_syntax -.-> lab-415927{{"Основы сканирования сети с помощью Nmap"}} nmap/save_output -.-> lab-415927{{"Основы сканирования сети с помощью Nmap"}} nmap/port_scanning -.-> lab-415927{{"Основы сканирования сети с помощью Nmap"}} nmap/target_specification -.-> lab-415927{{"Основы сканирования сети с помощью Nmap"}} nmap/service_detection -.-> lab-415927{{"Основы сканирования сети с помощью Nmap"}} end

Понимание портов и настройка среды

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

  • Зарезервированные порты (Well - known ports): Это порты с номерами от 0 до 1023. Они зарезервированы для определенных служб. Например, порт 80 используется для HTTP (Hypertext Transfer Protocol) — протокола передачи веб - страниц. Порт 22 используется для SSH (Secure Shell) — протокола безопасного доступа к удаленному компьютеру.
  • Зарегистрированные порты (Registered ports): Эти порты находятся в диапазоне от 1024 до 49151. Они зарегистрированы в Internet Assigned Numbers Authority (IANA). Хотя они зарегистрированы, обычные пользователи также могут использовать их для своих собственных приложений.
  • Динамические/частные порты (Dynamic/Private ports): Эти порты находятся в диапазоне от 49152 до 65535. Они свободно доступны для временного использования. Приложения могут использовать эти порты, когда им нужно установить кратковременное соединение.

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

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

cd /home/labex/project

Далее мы создадим простой HTTP - сервер на вашем компьютере. Мы будем использовать встроенный модуль HTTP - сервера Python. Этот сервер будет прослушивать порт 8080. Прослушивание порта означает, что сервер ожидает входящие запросы на этом конкретном порту. Этот сервер станет целью наших сканирований с помощью Nmap. Чтобы запустить сервер, выполните следующую команду:

python3 -m http.server 8080 &

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

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

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

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

ss -tuln | grep 8080

Команда ss используется для отображения статистики сокетов. Опции -tuln сообщают команде показать TCP, UDP, прослушиваемые сокеты и отображать числовые адреса. Символ | представляет собой конвейер (pipe), который берет вывод команды ss и передает его команде grep. Команда grep затем ищет строку 8080 в выводе.

Если сервер работает правильно, вывод должен показать, что порт 8080 используется:

tcp   LISTEN  0       1            0.0.0.0:8080      0.0.0.0:*

Этот вывод подтверждает, что наш HTTP - сервер работает как ожидалось и готов к сканированию с помощью Nmap.

Базовое сканирование портов с использованием Nmap

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

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

nmap --version

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

Nmap version 7.80 ( https://nmap.org )

Выполнение базового сканирования портов

Теперь, когда мы убедились, что Nmap установлен, выполним базовое сканирование, чтобы проверить, открыт ли порт 8080 на нашем локальном компьютере (localhost). Локальный компьютер (localhost) представляет собой компьютер, на котором мы в данный момент работаем, и он обозначается IP - адресом 127.0.0.1. Чтобы выполнить сканирование, выполните следующую команду:

nmap -p 8080 localhost

В этой команде флаг -p используется для указания того, какой порт или порты мы хотим сканировать. Здесь мы интересуемся только портом 8080. Когда вы выполните эту команду, Nmap отправит специальные сетевые пакеты на порт 8080 локального компьютера и проанализирует ответы, чтобы определить, открыт ли порт.

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-01 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00020s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy

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

Этот вывод содержит важную информацию. Он сообщает нам, что порт 8080 открыт и что Nmap определил службу, работающую на этом порту, как "http - proxy".

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

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

В этой команде символ > используется для перенаправления вывода сканирования Nmap в файл с именем basic_scan.txt, расположенный в директории /home/labex/project.

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

cat /home/labex/project/basic_scan.txt

Вы должны увидеть тот же вывод, что и раньше, теперь сохраненный в файле.

Понимание вывода

Рассмотрим более подробно вывод нашего сканирования Nmap, чтобы понять, что означает каждая строка:

  • Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-01 10:00 UTC: Эта строка сообщает нам, когда началось сканирование Nmap. Это полезно для отслеживания времени выполнения сканирования.
  • Nmap scan report for localhost (127.0.0.1): Эта строка идентифицирует целевой хост сканирования. В данном случае это локальный компьютер с IP - адресом 127.0.0.1.
  • Host is up (0.00020s latency): Эта строка подтверждает, что целевой хост онлайн. Значение задержки (latency) показывает, сколько времени требуется сетевым пакетам, чтобы добраться до хоста и вернуться. Ожидается очень низкая задержка для локального компьютера, так как это тот же компьютер, на котором мы работаем.
  • PORT STATE SERVICE: Это заголовок для результатов сканирования портов. Он сообщает нам, какую информацию будут отображать следующие строки.
  • 8080/tcp open http-proxy: Эта строка указывает, что порт 8080 открыт. Часть /tcp указывает на тип сетевого протокола, используемого (TCP, который является распространенным протоколом для надежной передачи данных). Nmap определил службу, работающую на этом порту, как "http - proxy".
  • Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds: Эта строка представляет собой сводку сканирования. Она сообщает нам, что Nmap просканировал один IP - адрес (локальный компьютер), обнаружил, что хост онлайн, и завершил сканирование за 0,05 секунды.

Продвинутые техники сканирования с использованием Nmap

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

Определение версии службы

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

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

nmap -sV -p 8080 localhost

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

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-01 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00022s latency).

PORT     STATE SERVICE VERSION
8080/tcp open  http    SimpleHTTPServer 0.6 (Python 3.10.12)

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

Как вы можете видеть, Nmap теперь предоставляет более подробную информацию о службе, работающей на порту 8080. Он идентифицирует службу как Python SimpleHTTPServer, а также указывает ее версию и версию Python, на которой она запущена.

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

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

Символ > используется для перенаправления вывода команды nmap в указанный файл.

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

cat /home/labex/project/advanced_scan.txt

Понимание различий между базовым и продвинутым сканированием

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

  1. Базовое сканирование (nmap -p 8080 localhost): При выполнении базового сканирования оно только сообщает, что порт 8080 открыт и на нем запущена служба. На основе номера порта Nmap предполагает, что служба может быть "http - proxy". Однако это только приблизительная оценка, и она не дает вам подробной информации о фактической службе.

  2. Продвинутое сканирование (nmap -sV -p 8080 localhost): Напротив, продвинутое сканирование предоставляет гораздо более подробную информацию. Оно сообщает точное название службы (SimpleHTTPServer), ее версию (0.6) и даже язык программирования и его версию (Python 3.10.12), на котором служба запущена.

Эта дополнительная информация ценна по нескольким причинам:

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

Другие полезные опции Nmap

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

  • -sS: Это TCP SYN - сканирование, также известное как скрытое сканирование. Это быстрый и незаметный способ сканировать порты, так как он не завершает полное TCP - соединение, что делает его более сложным для обнаружения.
  • -O: Эта опция включает определение операционной системы. Она позволяет Nmap попытаться определить операционную систему, запущенную на целевом компьютере.
  • -A: Агрессивное сканирование, которое объединяет несколько функций, включая определение ОС, определение версии, сканирование скриптами и трассировку маршрута (traceroute). Оно предоставляет комплексное представление о целевой системе.
  • -T<0 - 5>: Эта опция используется для настройки шаблона времени сканирования. Более высокое число означает более быстрое сканирование, но также может увеличить вероятность обнаружения.
  • -Pn: Эта опция обрабатывает все хосты как онлайн, пропуская фазу обнаружения хостов. Она полезна, когда вы знаете, что цель онлайн и хотите сэкономить время.

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

nmap -F localhost

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

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

Интерпретация и анализ результатов сканирования

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

Сравнение различных типов сканирования

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

nmap -A -p 8080 localhost > /home/labex/project/comprehensive_scan.txt

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

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

cat /home/labex/project/comprehensive_scan.txt

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

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

Nmap сообщает о нескольких возможных состояниях портов. Каждое состояние говорит нам о чем - то особенном о статусе порта.

  • open: Это означает, что приложение активно принимает TCP - соединения или UDP - пакеты на этом порту. Это как дверь, которая открыта и готова принимать посетителей.
  • closed: Порт доступен, но на нем нет приложения, ожидающего подключений. Это как дверь, которая не заперта, но внутри никого нет, чтобы ответить.
  • filtered: Nmap не может определить, открыт ли порт, так как фильтрация пакетов препятствует его запросам достичь порта. Это как если бы охранник блокировал вид Nmap на дверь.
  • unfiltered: Порт доступен, но Nmap не может определить, открыт он или закрыт. Это как смотреть на дверь и не уметь понять, есть ли кто - то внутри.
  • open|filtered: Nmap не может определить, открыт ли порт или он отфильтрован. Это неопределенное состояние, когда мы не уверены, открыта дверь или заблокирована.
  • closed|filtered: Nmap не может определить, закрыт ли порт или он отфильтрован. Подобно предыдущему состоянию, мы не уверены, заперта дверь или заблокирована.

Посмотрим, как эти состояния появляются в наших результатах сканирования, сканируя диапазон портов.

nmap -p 8080-8085 localhost > /home/labex/project/port_states.txt

После завершения сканирования мы можем посмотреть на результаты.

cat /home/labex/project/port_states.txt

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

Практический анализ результатов

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

grep "open" /home/labex/project/comprehensive_scan.txt > /home/labex/project/open_ports.txt

После фильтрации мы можем посмотреть на результаты.

cat /home/labex/project/open_ports.txt

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

Безопасность и последствия

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

  1. Необходимость закрытия ненужных открытых портов: Любой открытый порт является потенциальной точкой входа для атакующих. Если служба не нужна, ее следует отключить. Например, если у вас есть открытый порт для службы, которую вы больше не используете, атакующий может использовать этот порт для доступа к вашей системе.
  2. Состояние обновления служб: Старые версии служб могут иметь известные уязвимости, которые атакующие могут использовать. Важно поддерживать свои службы в актуальном состоянии, чтобы избежать этих рисков.
  3. Правильная настройка служб: Даже актуальные службы могут быть уязвимы, если настроены неправильно. Маленькая ошибка в настройке может сделать вашу систему уязвимой для атак.

В нашей лабораторной среде мы специально открыли порт 8080 для HTTP - сервера. Но в реальной производственной среде вам нужно будет тщательно оценить, нужна ли эта служба и правильно ли она защищена.

Остановка HTTP - сервера

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

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

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

kill <PID>

Замените <PID> на фактический идентификатор процесса из вывода предыдущей команды.

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

pkill -f "python3 -m http.server"

После остановки сервера нам нужно убедиться, что он больше не работает.

ss -tuln | grep 8080

Если нет вывода, это означает, что сервер был успешно остановлен.

Резюме

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

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