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

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

Введение

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

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

На этом этапе вы познакомитесь с Nmap, выполнив базовое сканирование. Базовое сканирование используется для обнаружения открытых портов на целевой машине. Открытый порт указывает на то, что служба (например, веб-сервер или SSH) запущена и ожидает подключений.

Лабораторная среда предварительно настроена с несколькими службами, работающими на localhost (вашей виртуальной машине), чтобы вы могли попрактиковаться. Инструмент nmap уже установлен.

Сначала убедитесь, что Nmap установлен, и проверьте его версию. Откройте терминал и выполните следующую команду:

nmap --version

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

Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libssh2-1.8.0 libz-1.2.11 libpcre-8.39 nmap-libpcap-1.9.1
Compiled without:
Available nsock engines: epoll poll select

Теперь выполните свое первое сканирование localhost. Эта команда дает Nmap указание проверить наиболее распространенные открытые порты на вашей локальной машине.

nmap localhost

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

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000092s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
2121/tcp open  ccproxy-ftp
2222/tcp open  EtherNetIP-1
3001/tcp open  nessus
8080/tcp open  http-proxy

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

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

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

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

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

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

nmap -sV -p 22,8080 localhost

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

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

Вывод будет более подробным, примерно таким:

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
8080/tcp open  http    nginx 1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

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

Использование движка сценариев Nmap (NSE)

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

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

Запустите сканирование Nmap с определением службы и включенными сценариями по умолчанию для localhost. Укажите порты 2121 и 8080, чтобы сканирование оставалось быстрым, но при этом отображало вывод сценариев для FTP и веб-служб.

nmap -sV -sC -p 2121,8080 localhost

Изучите вывод. Вы увидите дополнительную информацию с отступами под каждым портом. Это результат работы сценариев NSE. Например, сценарий ftp-anon может сообщить, что анонимный вход по FTP разрешен на порту 2121, сценарий http-title может получить заголовок веб-страницы на порту 8080, а SSL-сценарии могут сообщить детали сертификата.

Вывод будет еще более подробным:

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000099s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 995 closed ports
PORT     STATE SERVICE VERSION
2121/tcp open  ftp     vsftpd 3.0.5
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst:
|   STAT:
| FTP server status:
|      Logged in as ftp
|_End of status
8080/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
Service Info: OS: Unix

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

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

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

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

Лучшая практика — всегда сохранять вывод длительных или важных сканирований в файл. Мы будем использовать флаг -oN для сохранения вывода в обычном формате Nmap.

Сначала объедините полученные знания. Запустите сканирование, которое включает определение службы (-sV) и выполняет все сценарии уязвимостей (--script vuln). Сохраните вывод в файл с именем vuln_scan.txt.

nmap -sV --script vuln -oN vuln_scan.txt localhost

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

После завершения сканирования в вашей текущей директории (/home/labex/project) будет создан файл vuln_scan.txt. Вы можете просмотреть его содержимое с помощью команды cat:

cat vuln_scan.txt

Выходной файл длинный, поэтому эффективнее искать по ключевым словам. Используйте grep для поиска строк, указывающих на уязвимость. Термин "VULNERABLE" является сильным индикатором.

grep "VULNERABLE" vuln_scan.txt

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

|   VULNERABLE:
|     State: VULNERABLE

Чтобы увидеть полные сведения об уязвимости, вы можете найти конкретный CVE или просмотреть полный вывод сканирования. Например, вы можете обнаружить уязвимость Apache DoS (CVE-2011-3192) на порту 8080. Обратите внимание, что вы также можете увидеть некоторые ошибки сценариев (например, clamav-exec: ERROR), которые являются нормальными и их можно игнорировать — они возникают, когда определенные сценарии уязвимостей не могут правильно выполниться в лабораторной среде.

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

Сохранение и форматирование результатов сканирования

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

Сначала создайте отдельную директорию для организации ваших отчетов.

mkdir -p ~/project/reports

Теперь запустите сканирование снова, но на этот раз сохраните вывод в двух форматах одновременно: обычный текст (-oN) и XML (-oX). XML — это структурированный формат, который идеально подходит для обработки другими инструментами.

nmap -sV -p 8080 --script vuln -oN ~/project/reports/scan_report.txt -oX ~/project/reports/scan_report.xml localhost

Формат XML не очень удобен для чтения человеком. Nmap предоставляет утилиту xsltproc для преобразования XML-файла в чистый HTML-отчет. Выполните следующую команду, чтобы создать scan_report.html.

xsltproc ~/project/reports/scan_report.xml -o ~/project/reports/scan_report.html

Убедитесь, что все ваши файлы отчетов были созданы в директории ~/project/reports. Используйте команду ls -l для перечисления файлов и их деталей.

ls -l ~/project/reports

Вы должны увидеть три файла отчета:

total 40
-rw-rw-r-- 1 labex labex 14276 Aug 28 15:12 scan_report.html
-rw-rw-r-- 1 labex labex  5686 Aug 28 15:11 scan_report.txt
-rw-rw-r-- 1 labex labex 14924 Aug 28 15:11 scan_report.xml

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

Резюме

В этой лабораторной работе вы получили практический опыт работы с Nmap, фундаментальным инструментом в кибербезопасности. Вы начали с выполнения базового сканирования портов для идентификации открытых служб на сетевом хосте. Затем вы перешли к более продвинутым методам, включая определение версии службы (-sV) для идентификации конкретного программного обеспечения и его версии. Вы также изучили возможности движка сценариев Nmap (NSE), запустив сценарии по умолчанию (-sC) и полное сканирование на наличие уязвимостей (--script vuln). Наконец, вы освоили профессиональную практику сохранения результатов сканирования в нескольких форматах (-oN, -oX) и их преобразования в читаемый HTML-отчет для анализа и документирования. Эти навыки формируют прочную основу для использования Nmap в реальных оценках сетевой безопасности.