Изучите основы Nmap для сканирования сети

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

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

Введение

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/host_discovery("Host Discovery Techniques") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") subgraph Lab Skills nmap/installation -.-> lab-415922{{"Изучите основы Nmap для сканирования сети"}} nmap/port_scanning -.-> lab-415922{{"Изучите основы Nmap для сканирования сети"}} nmap/host_discovery -.-> lab-415922{{"Изучите основы Nmap для сканирования сети"}} nmap/target_specification -.-> lab-415922{{"Изучите основы Nmap для сканирования сети"}} nmap/service_detection -.-> lab-415922{{"Изучите основы Nmap для сканирования сети"}} end

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

Что такое Nmap?

Nmap (сокращение от Network Mapper) — это бесплатный и открытый инструмент. Он в основном используется для обнаружения сетевых ресурсов и проведения аудиторских проверок безопасности. Для многих системных и сетевых администраторов Nmap является очень полезным инструментом. Вот некоторые общие задачи, где Nmap может быть полезен:

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

Настройка тестовой среды

Перед тем, как мы начнем использовать Nmap для выполнения сканирования, нам нужно иметь цель для сканирования. В этом случае мы настроим простой HTTP - сервер, используя встроенные возможности Python.

Сначала нам нужно перейти в наш проектный каталог. Здесь будут храниться все файлы, связанные с этим экспериментом. Для этого мы используем команду cd в терминале. Команда cd означает "change directory" (изменить каталог). Вот команда:

cd /home/labex/project

Теперь, когда мы находимся в правильном каталоге, мы создадим простой HTML - файл. Этот файл будет обслуживаться нашим веб - сервером. Мы используем команду echo для создания HTML - содержимого и оператор > для перенаправления этого содержимого в файл с именем index.html. Файл index.html — это общее имя для главной страницы веб - сайта. Вот команда:

echo "<html><body><h1>Test Web Server for Nmap Scanning</h1></body></html>" > index.html

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

cat index.html

Если все прошло успешно, вы должны увидеть следующее HTML - содержимое:

<html><body><h1>Test Web Server for Nmap Scanning</h1></body></html>

Теперь мы готовы запустить наш простой HTTP - сервер. Мы будем использовать встроенный модуль http.server Python для запуска сервера на порту 8000. Символ & в конце команды важен. Он запускает сервер в фоновом режиме, что означает, что мы можем продолжать использовать терминал для других команд, пока сервер работает. Вот команда:

python3 -m http.server 8000 &

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

[1] 1234
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Теперь у нас есть веб - сервер, работающий на порту 8000. Этот сервер работает на вашем локальном компьютере с IP - адресом 127.0.0.1. Этот локальный сервер будет нашей целью для сканирования с помощью Nmap.

Базовое обнаружение хостов с использованием Nmap

Техники обнаружения хостов

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

  • ICMP Echo Requests (пинги): Это похоже на отправку простого сообщения "привет" хосту и ожидание ответа. Если хост работает, он ответит, сообщая нам, что он активен.
  • TCP SYN - сканирование на определенные порты: Этот метод отправляет SYN - пакет на определенные порты хоста. Если хост отвечает, это означает, что порт открыт и хост, вероятно, активен.
  • TCP ACK - сканирование: Похоже на TCP SYN - сканирование, но использует ACK - пакеты. Это может быть полезно в определенных сетевых средах.
  • UDP - сканирование: UDP представляет собой другой тип сетевого протокола. UDP - сканирование проверяет, открыты ли UDP - порты на хосте, что также может помочь нам определить, активен ли хост.

На этом этапе мы начнем с базового пинг - сканирования, чтобы проверить, активен ли наш локальный хост. Локальный хост — это устройство, на котором мы в настоящее время работаем, и его IP - адрес — 127.0.0.1.

Выполнение пинг - сканирования

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

nmap -sn 127.0.0.1

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-15 12:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds

Вывод показывает, что наш локальный хост (127.0.0.1) работает. Значение задержки (0.000097 с) сообщает нам, сколько времени потребовалось хосту для ответа на наш пинг - запрос. Чем меньше задержка, тем быстрее хост ответил.

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

nmap -sn 127.0.0.1 > /home/labex/project/host_scan.txt

Символ > используется для перенаправления вывода команды слева в файл справа. В этом случае результаты нашего пинг - сканирования будут сохранены в файле host_scan.txt.

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

cat /home/labex/project/host_scan.txt

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

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

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

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

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

  • Идентификация запущенных на системе сервисов: Зная, какие порты открыты, вы можете определить, какие сервисы доступны на конкретной системе. Например, если порт 80 открыт, это обычно означает, что запущен веб - сервер.
  • Поиск потенциальных уязвимостей безопасности: Открытые порты могут представлять риск для безопасности, если они не настроены правильно. Некоторые сервисы могут иметь известные уязвимости, и сканирование портов позволяет выявить эти потенциальные слабые места.
  • Проверка конфигурации брандмауэра: Брандмауэры используются для контроля сетевого трафика. Сканирование портов может помочь вам проверить, правильно ли настроен ваш брандмауэр для блокировки или разрешения определенных портов.
  • Устранение неполадок в сети: Если у вас возникают проблемы с сетью, сканирование портов может помочь определить, недоступен ли определенный сервис из - за того, что соответствующий порт закрыт.

Базовое сканирование портов

Давайте выполним базовое сканирование портов на нашем локальном хосте. Локальный хост — это ваша собственная компьютер, и он представлен IP - адресом 127.0.0.1. Мы будем конкретно сканировать порт 8000, на котором работает наш HTTP - сервер. Для этого мы будем использовать команду nmap, которая является мощным инструментом для исследования сетей и аудита безопасности.

nmap -p 8000 127.0.0.1

В этой команде опция -p используется для указания порта, который мы хотим сканировать. Таким образом, мы сообщаем nmap сканировать порт 8000 на локальном хосте.

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

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

PORT     STATE SERVICE
8000/tcp open  http-alt

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

Вывод показывает, что порт 8000 открыт и запускает сервис, который Nmap идентифицирует как "http - alt" (альтернативный HTTP - порт). Это означает, что на порту 8000 запущен сервис, похожий на HTTP - сервис.

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

nmap -p 8000 127.0.0.1 > /home/labex/project/service_scan.txt

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

cat /home/labex/project/service_scan.txt

Определение версии сервиса

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

nmap -p 8000 -sV 127.0.0.1

Флаг -sV сообщает Nmap проверить открытые порты для определения информации о сервисе и его версии. Когда вы выполните эту команду, Nmap отправит специальные пакеты на открытый порт, чтобы попытаться определить, какой сервис запущен и какая у него версия.

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

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

PORT     STATE SERVICE VERSION
8000/tcp open  http    Python http.server 3.10.6 (Python 3.10.6)

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

Этот вывод предоставляет более подробную информацию, показывая, что сервис на порту 8000 — это Python HTTP - сервер, работающий на Python 3.10.6. Такая информация ценна для оценки безопасности, так как разные версии могут иметь известные уязвимости. Например, если в Python 3.10.6 есть уязвимость безопасности, вы можете предпринять шаги по ее исправлению или обновиться до более безопасной версии.

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

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

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

  1. Определение операционной системы: Это процесс идентификации операционной системы, работающей на целевом устройстве. Знание операционной системы может помочь понять потенциальные уязвимости и функции безопасности целевой машины.
  2. Комплексное сканирование: Это включает в себя комбинирование нескольких методов сканирования для получения более подробного и полного представления о цели. Используя разные методы сканирования вместе, можно выявить больше информации о открытых портах, сервисах и операционной системе цели.
  3. Форматирование вывода: Сохранение результатов сканирования в различных форматах имеет решающее значение для анализа. Разные форматы подходят для разных инструментов анализа и целей. Например, формат XML отлично подходит для дальнейшей обработки с использованием языков программирования, в то время как формат, читаемый утилитой grep, полезен для быстрого текстового анализа.

Определение операционной системы

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

sudo nmap -O 127.0.0.1

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-15 12:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
8000/tcp open  http-alt
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 0 hops

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

Этот вывод предоставляет ценную информацию об операционной системе. В данном случае он сообщает, что вероятная версия Linux, работающая на системе, находится в диапазоне от 4.15 до 5.6.

Комплексное сканирование

Теперь давайте выполним более комплексное сканирование, которое объединяет несколько функций Nmap. Это даст нам более подробное представление о целевой системе.

sudo nmap -sS -sV -O -p 1-1000 127.0.0.1

Эта команда включает несколько важных опций:

  • -sS: Это TCP SYN - сканирование, также известное как скрытое сканирование. Оно называется скрытым, потому что не завершает полное TCP - соединение, что делает его менее вероятным для обнаружения системами обнаружения вторжений.
  • -sV: Эта опция включает определение версии сервисов. Она пытается определить версию сервисов, работающих на открытых портах, что может быть полезно для выявления потенциальных уязвимостей.
  • -O: Как мы видели ранее, это для определения операционной системы.
  • -p 1-1000: Это указывает, что мы хотим сканировать порты от 1 до 1000.

После выполнения этого комплексного сканирования хорошей идеей будет сохранить результаты для дальнейшего анализа.

sudo nmap -sS -sV -O -p 1-1000 127.0.0.1 > /home/labex/project/comprehensive_scan.txt

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

cat /home/labex/project/comprehensive_scan.txt

Форматирование вывода

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

sudo nmap -sS -sV -p 8000 127.0.0.1 -oX /home/labex/project/scan_results.xml

Флаг -oX используется для того, чтобы сообщить Nmap сохранить результаты в формате XML. XML представляет собой структурированный формат, который может быть легко разобран языками программирования и другими инструментами для дальнейшего анализа.

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

sudo nmap -sS -sV -p 8000 127.0.0.1 -oG /home/labex/project/scan_results.grep

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

cat /home/labex/project/scan_results.grep

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

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

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

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

Состояния портов

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

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

Информация о сервисах

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

Определение операционной системы

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

Создание сводного отчета

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

ip addr show | grep "inet " | grep -v "127.0.0.1"

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

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

echo "## Network Scan Summary Report" > /home/labex/project/scan_summary.md
echo "### Date: $(date)" >> /home/labex/project/scan_summary.md
echo "### Target: 127.0.0.1" >> /home/labex/project/scan_summary.md
echo -e "\n#### Open Ports and Services" >> /home/labex/project/scan_summary.md
echo "Port 8000: HTTP service (Python HTTP Server)" >> /home/labex/project/scan_summary.md
echo -e "\n#### Security Recommendations" >> /home/labex/project/scan_summary.md
echo "1. Ensure all services are necessary and up-to-date" >> /home/labex/project/scan_summary.md
echo "2. Consider implementing firewall rules to restrict access to sensitive services" >> /home/labex/project/scan_summary.md
echo "3. Regularly scan for new open ports that might indicate unauthorized services" >> /home/labex/project/scan_summary.md

После создания отчета давайте посмотрим, что мы записали.

cat /home/labex/project/scan_summary.md

Лучшие практики для сетевого сканирования

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

Получение разрешения

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

Ограничение частоты и интенсивности сканирования

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

Конфиденциальность результатов сканирования

Результаты сканирования могут раскрыть конфиденциальную информацию о сетевой инфраструктуре, такую как открытые порты, запущенные сервисы и операционная система. Храните эти результаты в тайне, чтобы предотвратить несанкционированный доступ к этой информации.

Реакция на выявленные проблемы

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

Документирование сканирований

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

Давайте запишем нашу сканирующую активность в журнале.

echo "Scan Log - $(date)" > /home/labex/project/scan_log.txt
echo "Purpose: Learning Nmap host discovery techniques" >> /home/labex/project/scan_log.txt
echo "Target: 127.0.0.1" >> /home/labex/project/scan_log.txt
echo "Scans performed:" >> /home/labex/project/scan_log.txt
echo "1. Basic ping scan: nmap -sn 127.0.0.1" >> /home/labex/project/scan_log.txt
echo "2. Port scan on port 8000: nmap -p 8000 127.0.0.1" >> /home/labex/project/scan_log.txt
echo "3. Service version detection: nmap -p 8000 -sV 127.0.0.1" >> /home/labex/project/scan_log.txt
echo "4. Comprehensive scan: nmap -sS -sV -O -p 1-1000 127.0.0.1" >> /home/labex/project/scan_log.txt

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

cat /home/labex/project/scan_log.txt

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

Резюме

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

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