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

Чем полезна автоматизация и какие проблемы она решает:

  • Время — сканирование сотен IP вручную может занять часы.

  • Человеческий фактор — пропустить критичный порт или уязвимость очень легко.

  • Регулярность — безопасность требует постоянного контроля и мониторинга, а не разовых проверок.

Что такое Nmap

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

  • Обнаружение хостов: находит все активные устройства в сети (ПК, роутеры, серверы). Поиск происходит путём отправки ICMP-запросов, ARP-запросов (в локальной сети) или TCP/UDP пакетов.

Пример:

nmap -sn 192.168.1.0/24
  • Сканирование портов: проверяет открытые порты (например, 80 — HTTP, 22 — SSH) и определяет, какие сервисы их используют. Методы:

  1. Стелс-сканирование (-sS) — не оставляет логов (только для рута).

  2. Обычное сканирование (-sT) — работает без прав рута.

  3. UDP-сканирование (-sU) — для поиска DNS, DHCP и других UDP-сервисов.

Пример:

nmap -sS -p 1-1000 192.168.1.1
  • Детекция версий и ОС. Собирает информацию о версии ПО (MySQL 5.7, Apache 2.4) и тип ОС (Linux, Windows, macOS).

Пример:

nmap -A 192.168.1.1
  • Скрипты NSE (Nmap Scripting Engine) - встроенный в Nmap язык скриптов (на Lua), который позволяет автоматизировать сложные задачи: от сбора информации до эксплуатации уязвимостей.

В Nmap сотни встроенных скриптов, разделённых на категории:

Категория

Примеры использования

Пример команды

auth

Проверка логинов (Brute Force SSH, FTP)

--script=auth

default

Базовые безопасные проверки (используются при -sC)

--script=default

vuln

Поиск известных уязвимостей (CVE)

--script=vuln

exploit

Попытка эксплуатации уязвимостей

--script=exploit

discovery

Поиск дополнительных хостов и сервисов

--script=discovery

safe

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

--script=safe

malware

Поиск признаков вредоносного ПО

--script=malware

intrusive

Агрессивные скрипты

--script=intrusive

Популярные NSE-скрипты
  1. http-enum — Перебор веб‑директорий и файлов.

  2. http-sql-injection — Поиск SQL‑инъекций.

  3. ssl-heartbleed — Проверка уязвимости Heartbleed (CVE-2014–0160).

  4. smb-vuln-ms17-010 — Обнаружение EternalBlue (MS17–010).

  5. ftp-anon — Проверка анонимного входа на FTP.

  6. ssh-brute — Брутфорс SSH.

  7. dns-zone-transfer — Проверка на трансфер зоны DNS.

  8. vulners — Поиск уязвимостей по CVE.

  9. smb-os-discovery — Определение ОС через SMB.

  10. http-shellshock — Проверка на Shellshock (CVE-2014–6271).

  11. http-vuln-cve2017-5638 — Эксплойт для Apache Struts2 (CVE-2017–5638).

  12. http-robots.txt — Анализ robots.txt на интересные директории.

  13. smb-enum-shares — Перечисление SMB‑шар.

  14. http-wordpress-enum — Перебор плагинов и тем WordPress.

  15. http-apache-server-status — Проверка доступности server-status.

  16. rdp-enum-encryption — Проверка поддерживаемых методов шифрования RDP.Nmap + Bash(двоеточие) полное руководство по автоматизации сканирования сети

  17. http-default-accounts — Поиск учетных записей по умолчанию.

  18. http-title — Получение заголовка веб‑страницы.

  19. smb-vuln-cve2009-3103 — Проверка уязвимости в SMBv2.

  20. http-php-version — Определение версии PHP.

Полный список NSE-скриптов можно найти тут.

Как использовать NSE

  • Базовый запуск скриптов

nmap --script=<название_скрипта> <цель>

Пример: проверка HTTP-заголовков

nmap --script=http-headers example.com
  • Запуск нескольких скриптов

nmap --script=http-title,http-sql-injection example.com
  • Запуск всей категории

nmap --script=vuln 192.168.1.1
  • Использование аргументов в скриптах

Некоторые скрипты требуют параметров:

nmap --script=ftp-anon --script-args=ftp-anon.maxlist=100 192.168.1.1

Оптимизация и тонкая настройка Nmap

Работу nmap можно значительно ускорить или адаптировать под практически любые задачи. Разберём основные функции настройки.

  • Управление скоростью сканирования (-T) Nmap предлагает 6 уровней скорости (-T0 до -T5), где:

  1. -T0 (Paranoid) — очень медленно, для скрытности.

  2. -T3 (Normal) — баланс между скоростью и незаметностью (по умолчанию).

  3. -T5 (Insane) — максимальная скорость, но возможны ложные срабатывания.

Пример:

nmap -T4 -F 192.168.1.1  # Быстрое сканирование популярных портов
  • Параллельное сканирование (--min-parallelism, --max-parallelism) Управление количеством одновременных запросов:

nmap --min-parallelism=100 192.168.1.0/24  # Ускоряет сканирование крупных сетей
  • Пропуск этапов (-Pn, -sS):

  1. -Pn — считает все хосты "живыми" (полезно, если ICMP блокируется).

  2. -sS (SYN-сканирование) — быстрее, чем -sT, но требует прав root.

Альтернативные форматы отчётов

Помимо текстовых файлов (-oN), Nmap поддерживает:

  • XML (-oX) — для обработки программами:

    nmap -oX scan.xml 192.168.1.1
  • HTML (-oX + xsltproc) — визуализация:

    xsltproc scan.xml -o scan.html
  • Grep-файлы (-oG) — удобны для поиска ключевых слов.

Основная часть

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

  • Сканирует подсеть на активные хосты

  • Проверяет открытые порты и сервисы

  • Ищет уязвимости с помощью NSE

  • Генерирует отчёт с критическими данными

Bash-скрипт для автоматического сканирования

#!/bin/bash

# Переменные
SUBNET="192.168.1.0/24"          # Ваша подсеть
OUTPUT_DIR="./scan_results"       # Папка для отчётов
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M")  # Метка времени

# Создаём папку для результатов, если её нет
mkdir -p "$OUTPUT_DIR"

# Функция для сканирования хостов
scan_hosts() {
    echo "[*] Сканируем активные хосты в подсети $SUBNET..."
    nmap -sn "$SUBNET" -oG "$OUTPUT_DIR/hosts_$TIMESTAMP.txt"
    grep "Up" "$OUTPUT_DIR/hosts_$TIMESTAMP.txt" | awk '{print $2}' > "$OUTPUT_DIR/active_hosts.txt"
    echo "[+] Найдено активных хостов: $(wc -l < "$OUTPUT_DIR/active_hosts.txt")"
}

# Функция для сканирования портов и уязвимостей
scan_ports_and_vulns() {
    while read -r host; do
        echo "[*] Проверяем $host..."
        # Стандартное сканирование портов + детекция ОС
        nmap -sV -O "$host" -oN "$OUTPUT_DIR/ports_$host.txt"
        # Запуск NSE-скриптов из категории vuln
        nmap --script=vuln "$host" -oN "$OUTPUT_DIR/vulns_$host.txt"
    done < "$OUTPUT_DIR/active_hosts.txt"
}

# Основной цикл
main() {
    scan_hosts
    scan_ports_and_vulns
    echo "[+] Готово! Результаты сохранены в $OUTPUT_DIR"
}

# Запуск
main

Как это работает?

  1. Обнаружение хостов:

    • nmap -sn находит все живые устройства в подсети.

    • Результат сохраняется в hosts_<дата>.txt, а IP-адреса извлекаются в active_hosts.txt.

  2. Проверка портов и уязвимостей:

    • Для каждого активного IP вызывается nmap -sV -O (определение сервисов и ОС).

    • Скрипты из категории vuln ищут известные CVE (например, уязвимости в SMB или HTTP-серверах).

  3. Отчёты:

    • По каждому хосту создаются два файла: ports_.txt и vulns_.txt.

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

Файл vulns_192.168.1.1.txt может содержать:

Nmap scan report for 192.168.1.1
Host is up (0.045s latency).

PORT    STATE SERVICE
80/tcp  open  http
| http-vuln-cve2017-5638: 
|   VULNERABLE: Apache Struts2 CVE-2017-5638
|   Description: Remote Code Execution vulnerability in Apache Struts2.
|   References: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5638

Заключение

Безусловно, nmap — далеко не единственный инструмент в арсенале системных администраторов, специалистов по безопасности. Для быстрого сканирования массивных сетей лучше подойдет Masscan. Когда нужен современный аналог с асинхронной обработкой — будет лучше использовать RustScan. А для комплексного анализа уязвимостей в корпоративной среде незаменимы Nessus или OpenVAS. Но именно nmap может стать отправной точной, с которой начинается знакомство с сетевым аудитом.

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

P.S. Я веду свою группу в Телеграмм, буду рад видеть всех, кому интересен процесс написания скриптов и автоматизация в мире IT.

Комментарии (0)