Привет, Хабр! В современном мире сети растут крайне быстро, устройств становится всё больше, в связи с чем растёт и количество уязвимых мест. Ручной мониторинг открытых портов, сервисов и дыр в безопасности — схоже с поиском иглы в стоге сена, когда в кармане лежит магнит.
Чем полезна автоматизация и какие проблемы она решает:
Время — сканирование сотен IP вручную может занять часы.
Человеческий фактор — пропустить критичный порт или уязвимость очень легко.
Регулярность — безопасность требует постоянного контроля и мониторинга, а не разовых проверок.
Что такое Nmap
Nmap (Network Mapper) — инструмент для сканирования сетей, аудита безопасности и исследования сетевых устройств. Позволяет обнаруживать хосты, сервисы, ОС, открытые порты и другие характеристики целевых систем. Ключевые функции:
Обнаружение хостов: находит все активные устройства в сети (ПК, роутеры, серверы). Поиск происходит путём отправки ICMP-запросов, ARP-запросов (в локальной сети) или TCP/UDP пакетов.
Пример:
nmap -sn 192.168.1.0/24
Сканирование портов: проверяет открытые порты (например, 80 — HTTP, 22 — SSH) и определяет, какие сервисы их используют. Методы:
Стелс-сканирование (
-sS
) — не оставляет логов (только для рута).Обычное сканирование (
-sT
) — работает без прав рута.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 сотни встроенных скриптов, разделённых на категории:
Категория |
Примеры использования |
Пример команды |
---|---|---|
|
Проверка логинов (Brute Force SSH, FTP) |
|
|
Базовые безопасные проверки (используются при |
|
|
Поиск известных уязвимостей (CVE) |
|
|
Попытка эксплуатации уязвимостей |
|
|
Поиск дополнительных хостов и сервисов |
|
|
Безопасные скрипты |
|
|
Поиск признаков вредоносного ПО |
|
|
Агрессивные скрипты |
|
Популярные NSE-скрипты
http-enum
— Перебор веб‑директорий и файлов.http-sql-injection
— Поиск SQL‑инъекций.ssl-heartbleed
— Проверка уязвимости Heartbleed (CVE-2014–0160).smb-vuln-ms17-010
— Обнаружение EternalBlue (MS17–010).ftp-anon
— Проверка анонимного входа на FTP.ssh-brute
— Брутфорс SSH.dns-zone-transfer
— Проверка на трансфер зоны DNS.vulners
— Поиск уязвимостей по CVE.smb-os-discovery
— Определение ОС через SMB.http-shellshock
— Проверка на Shellshock (CVE-2014–6271).http-vuln-cve2017-5638
— Эксплойт для Apache Struts2 (CVE-2017–5638).http-robots.txt
— Анализrobots.txt
на интересные директории.smb-enum-shares
— Перечисление SMB‑шар.http-wordpress-enum
— Перебор плагинов и тем WordPress.http-apache-server-status
— Проверка доступностиserver-status
.rdp-enum-encryption
— Проверка поддерживаемых методов шифрования RDP.Nmap + Bash(двоеточие) полное руководство по автоматизации сканирования сетиhttp-default-accounts
— Поиск учетных записей по умолчанию.http-title
— Получение заголовка веб‑страницы.smb-vuln-cve2009-3103
— Проверка уязвимости в SMBv2.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
), где:
-T0
(Paranoid) — очень медленно, для скрытности.-T3
(Normal) — баланс между скоростью и незаметностью (по умолчанию).-T5
(Insane) — максимальная скорость, но возможны ложные срабатывания.
Пример:
nmap -T4 -F 192.168.1.1 # Быстрое сканирование популярных портов
Параллельное сканирование (
--min-parallelism
,--max-parallelism
) Управление количеством одновременных запросов:
nmap --min-parallelism=100 192.168.1.0/24 # Ускоряет сканирование крупных сетей
Пропуск этапов (
-Pn
,-sS
):
-Pn
— считает все хосты "живыми" (полезно, если ICMP блокируется).-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
Как это работает?
-
Обнаружение хостов:
nmap -sn
находит все живые устройства в подсети.Результат сохраняется в
hosts_<дата>.txt
, а IP-адреса извлекаются вactive_hosts.txt
.
-
Проверка портов и уязвимостей:
Для каждого активного IP вызывается
nmap -sV -O
(определение сервисов и ОС).Скрипты из категории
vuln
ищут известные CVE (например, уязвимости в SMB или HTTP-серверах).
-
Отчёты:
По каждому хосту создаются два файла:
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.