June 9

Сканирование портов и сервисов: Nmap, массовое сканирование, интерпретация результатов

Сканирование портов и сервисов: Nmap, массовое сканирование, интерпретация результатов

Сканирование портов — это процесс проверки сетевых портов на целевой системе для определения, какие сетевые службы (веб-сервер, SSH, FTP, база данных и т.д.) запущены и доступны. Это один из самых информативных, но и наиболее «активных» методов технического OSINT. В отличие от пассивной разведки (DNS, WHOIS, сертификаты), сканирование портов напрямую взаимодействует с целью, оставляя следы в логах. Поэтому критически важно различать легальное сканирование (с разрешения владельца, в рамках пентеста или исследования собственной инфраструктуры) и несанкционированное (противозаконное).

Данная статья описывает методы и инструменты сканирования портов, а также способы получения аналогичной информации пассивно через публичные базы (Shodan, Censys). Акцент будет сделан на интерпретации результатов и на том, как использовать эти данные для составления картины инфраструктуры.

Активное vs пассивное сканирование

для разведки без риска сначала используйте Shodan/Censys. Только при наличии письменного разрешения (или на собственной инфраструктуре) переходите к активному Nmap.

Этап 1: Пассивное сканирование через Shodan

Shodan — поисковая система по интернет-подключенным устройствам. Она постоянно сканирует весь интернет по многим портам (80, 443, 22, 21, 25, 3389, 3306, 5900 и т.д.) и сохраняет баннеры (ответы сервисов). Вы можете искать по IP, домену, организации, порту, географической локации и многим другим фильтрам.

Поиск по IP в Shodan:

https://www.shodan.io/host/8.8.8.8

Что покажет Shodan:

  • Открытые порты (с номером и названием службы).
  • Баннер (HTTP заголовки, версия SSH, сообщение FTP).
  • Страна, город, ASN, организация.
  • История изменений (даты сканирований, если подписка).

Пример фильтрации:

hostname:example.com                     # все IP, связанные с example.com
port:443 org:"Google"                    # порт 443 у организаций, содержащих Google
ssl.cert.subject.CN:"*.example.com"      # сертификаты

Shodan API (Python):

import shodan

api = shodan.Shodan('YOUR_API_KEY')
host = api.host('8.8.8.8')
for item in host['data']:
    print(f"Port {item['port']}: {item.get('banner', '')[:100]}")

Censys — альтернатива Shodan, с фокусом на сертификаты и глубокую информацию о портах. Интерфейс сложнее, но часто даёт больше данных.

Этап 2: Активное сканирование с Nmap (с разрешения!)

Nmap (Network Mapper) — стандарт де-факто для активного сканирования портов. Он поддерживает десятки техник сканирования (TCP SYN, TCP connect, UDP, NULL, FIN и т.д.), определение служб, версий, ОС и скриптовые проверки.

Основные типы сканов:

Базовые команды Nmap:

# Сканирование топ-1000 портов TCP
nmap example.com

# Сканирование определённого диапазона портов
nmap -p 22,80,443,8080 example.com

# Сканирование всех портов (медленно!)
nmap -p- example.com

# Определение версий служб (баннеры)
nmap -sV example.com

# Использование скриптового движка (безопасные скрипты)
nmap -sC example.com

# Сохранение результатов в файл
nmap -oA scan_results example.com

Пример сканирования с определением служб и скриптов:

nmap -sV -sC -p- --min-rate 1000 -T4 example.com

Примечание: --min-rate 1000 и -T4 ускоряют сканирование, но могут вызвать срабатывание IDS. Для легальных тестов это допустимо, для разведки — нежелательно.

Продвинутые техники Nmap:

  • Сканирование подсети: nmap 192.0.2.0/24
  • Сканирование из файла со списком IP: nmap -iL hosts.txt
  • Использование специальных профайлов для времени (для скрытности): -T0 (очень медленно) или -T1 (параноидальный).

Этап 3: Массовое сканирование (masscan, Zmap)

Для сканирования больших диапазонов IP (например, всей сети /16) используют массовые сканеры. Они не определяют версии служб, а только проверяют, открыт ли порт.

Пример masscan:

masscan 192.0.2.0/24 -p80,443,22 --rate=10000

массовое сканирование легко обнаруживается и может быть расценено как атака.

Этап 4: Интерпретация результатов сканирования

Результат сканирования (например, из Nmap или Shodan) — это перечень портов и служб. Что делать дальше?

Таблица портов и типовых служб:

Особые случаи:

  • Порт 8080, 8443, 8000 — часто альтернативные веб-порты (панели администрирования, прокси).
  • Порты с нестандартными службами (например, SSH на 2222) — попытка скрыть сервис.
  • Большое количество открытых портов может указывать на отсутствие файрвола или наличие docker-контейнеров.

Этап 5: Анализ баннеров

Баннер — это текстовая строка, которую сервер отправляет при подключении (например, HTTP заголовок Server: nginx/1.18.0). Из баннера можно узнать версию ПО, что важно для оценки уязвимостей.

Примеры:

  • SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5 → уязвимости OpenSSH 8.2.
  • 220 ProFTPD 1.3.5 Server → старая версия ProFTPD (много уязвимостей).
  • HTTP/1.1 200 OK → баннер неинформативен (скрыт).

Инструменты для анализа баннеров:

  • WhatWeb — определяет CMS, технологии по HTTP баннерам.
  • Wappalyzer (расширение для браузера) — удобно для быстрого анализа веб-сайтов.
  • Httpx (от ProjectDiscovery) — быстрый HTTP-клиент для массового извлечения баннеров.

Этап 6: Скриптовые проверки (NSE)

Скриптовый движок Nmap содержит сотни скриптов для обнаружения уязвимостей, брутфорса, сбора информации.

Категории скриптов:

  • safe — не опасные, не нарушающие работу сервиса.
  • intrusive — могут вызвать сбои или оставить следы.
  • vuln — проверяют на известные уязвимости.
  • brute — подбор паролей.

Пример безопасного скрипта:

nmap --script=http-title,http-headers,ssl-cert -p 443 example.com

Этап 7: Мониторинг изменений портов

Инфраструктура меняется: открываются новые порты, закрываются старые. Важно отслеживать эти изменения.

Методы:

  • Периодическое сканирование с сохранением результатов в файл.
  • Использование Shodan (есть история сканирований, но не для всех портов).
  • Censys — предоставляет снимки на разные даты.

Автоматизация сбора данных через Shodan API:

import shodan
import time

api = shodan.Shodan('YOUR_API_KEY')
domains = ['example.com', 'target.org']
for domain in domains:
    try:
        results = api.search(f'hostname:{domain}')
        for result in results['matches']:
            print(f"{domain}: {result['ip_str']} port {result['port']} - {result.get('data','')[:80]}")
        time.sleep(1)  # не превышать rate limit
    except Exception as e:
        print(e)

Этап 8: Обнаружение ложных срабатываний

  • Некоторые порты могут быть открыты, но фильтроваться файрволом (Nmap покажет filtered или closed).
  • Порты, отображаемые как открытые в Shodan, могут быть уже закрыты (данные устарели).
  • Облачные провайдеры часто перенаправляют трафик через глобальные балансировщики (порты могут быть открыты на всех IP одновременно).

Практический пример: анализ инфраструктуры по портам

Задача: проанализировать открытые порты домена target.org.

  1. Shodan: по IP 203.0.113.20 найдены порты 80, 443, 22, 8080.
    • 80 → HTTP (nginx/1.18.0).
    • 443 → HTTPS, сертификат для target.org.
    • 22 → SSH, баннер OpenSSH 8.2.
    • 8080 → панель управления Jenkins.
  2. Nmap (с разрешения):
    • nmap -sV -p 22,80,443,8080 -sC target.org
    • На порту 8080 Jenkins версия 2.277 (уязвимая, возможно CVE-2024-23897).
    • На порту 22 слабые алгоритмы шифрования (можно попробовать брутфорс).
  3. Анализ: Jenkins доступен из интернета (потенциальная уязвимость). SSH устаревший. Веб-сервер требует проверки на веб-уязвимости.
  4. Рекомендация: закрыть порт 8080 для внешнего доступа, обновить SSH.

  • Никогда не сканируйте чужие системы без письменного разрешения. Даже SYN-сканирование может быть расценено как попытка взлома.
  • Для обучения используйте собственные VPS, локальные виртуальные машины, или специальные площадки (HackTheBox, TryHackMe).
  • Если вам нужны данные о публичных системах для исследования — используйте Shodan, Censys, BinaryEdge.
  • В некоторых странах несанкционированное сканирование портов является уголовным преступлением.

Сканирование портов и служб — мощный метод технического OSINT, но он должен применяться с осторожностью и только на законных основаниях. Пассивные источники (Shodan, Censys) дают почти ту же информацию без риска. Активное сканирование (Nmap) — для глубокого анализа по разрешению. Интерпретация результатов требует знаний о типовых портах, службах и уязвимостях. В связке с поддоменами и DNS это позволяет картировать внешнюю поверхность атаки.