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

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

Введение

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

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

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

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

  1. Для начала убедимся, что 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
    
  2. Теперь выполните свое первое сканирование в отношении localhost. Эта команда дает Nmap указание проверить наиболее распространенные открытые порты на вашей локальной машине.

    nmap localhost
    
  3. Изучите полученные данные. 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 опрашивать открытые порты для получения подробной информации о версии ПО.

  1. Запустите сканирование с определением версий для localhost. Чтобы сделать процесс более эффективным, мы укажем конкретные порты, обнаруженные на первом этапе (22, 2121, 2222, 3001, 8080), вместо сканирования всего диапазона.

    nmap -sV -p 22,8080 localhost
    

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

  2. Сравните результат с базовым сканированием из первого этапа. Теперь вы увидите дополнительный столбец 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 Scripting Engine (NSE) — одна из самых мощных функций Nmap. Она позволяет автоматизировать широкий спектр сетевых задач с помощью библиотеки скриптов. Эти сценарии могут использоваться для расширенного обнаружения, поиска уязвимостей и даже эксплуатации брешей в защите.

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

  1. Запустите сканирование Nmap с включенными скриптами по умолчанию для localhost. Флаг -sC — это удобный способ получить больше информации без необходимости указывать каждый скрипт по отдельности.

    nmap -sC localhost
    
  2. Изучите вывод. Вы увидите дополнительную информацию, расположенную с отступом под каждым портом. Это результат работы скриптов NSE. Например, скрипт 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
    22/tcp   open  ssh
    2121/tcp open  ccproxy-ftp
    2222/tcp open  EtherNetIP-1
    3001/tcp open  nessus
    | ssl-cert: Subject: commonName=localhost
    | Subject Alternative Name: DNS:localhost
    | Not valid before: 2024-07-18T03:37:05
    |_Not valid after:  2034-07-16T03:37:05
    8080/tcp open  http-proxy
    |_http-open-proxy: Proxy might be redirecting requests
    |_http-title: Site doesn't have a title (text/html).
    
    Nmap done: 1 IP address (1 host up) scanned in 0.62 seconds
    

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

Запуск сканирования на уязвимости

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

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

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

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

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

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

    cat vuln_scan.txt
    
  3. Файл отчета довольно объемный, поэтому эффективнее искать в нем ключевые слова. Используйте grep, чтобы найти строки, указывающие на наличие проблем. Слово "VULNERABLE" является явным признаком найденной уязвимости.

    grep "VULNERABLE" vuln_scan.txt
    

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

    |   VULNERABLE:
    |     State: VULNERABLE
    

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

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

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

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

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

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

    nmap -sV -p 8080 --script vuln -oN ~/project/reports/scan_report.txt -oX ~/project/reports/scan_report.xml localhost
    
  3. Формат XML не очень удобен для чтения человеком. Nmap предоставляет утилиту xsltproc для преобразования XML-файла в наглядный HTML-отчет. Выполните следующую команду для генерации scan_report.html.

    xsltproc ~/project/reports/scan_report.xml -o ~/project/reports/scan_report.html
    
  4. Давайте проверим, что все файлы отчетов были созданы в каталоге ~/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 в реальных задачах по оценке сетевой безопасности.