Сканирование портов и сервисов: 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, домену, организации, порту, географической локации и многим другим фильтрам.
https://www.shodan.io/host/8.8.8.8
- Открытые порты (с номером и названием службы).
- Баннер (HTTP заголовки, версия SSH, сообщение FTP).
- Страна, город, ASN, организация.
- История изменений (даты сканирований, если подписка).
hostname:example.com # все IP, связанные с example.com port:443 org:"Google" # порт 443 у организаций, содержащих Google ssl.cert.subject.CN:"*.example.com" # сертификаты
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 и т.д.), определение служб, версий, ОС и скриптовые проверки.
# Сканирование топ-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 192.0.2.0/24 - Сканирование из файла со списком IP:
nmap -iL hosts.txt - Использование специальных профайлов для времени (для скрытности):
-T0(очень медленно) или-T1(параноидальный).
Этап 3: Массовое сканирование (masscan, Zmap)
Для сканирования больших диапазонов IP (например, всей сети /16) используют массовые сканеры. Они не определяют версии служб, а только проверяют, открыт ли порт.
masscan 192.0.2.0/24 -p80,443,22 --rate=10000
массовое сканирование легко обнаруживается и может быть расценено как атака.
Этап 4: Интерпретация результатов сканирования
Результат сканирования (например, из Nmap или Shodan) — это перечень портов и служб. Что делать дальше?
Таблица портов и типовых служб:
- Порт 8080, 8443, 8000 — часто альтернативные веб-порты (панели администрирования, прокси).
- Порты с нестандартными службами (например, SSH на 2222) — попытка скрыть сервис.
- Большое количество открытых портов может указывать на отсутствие файрвола или наличие docker-контейнеров.
Баннер — это текстовая строка, которую сервер отправляет при подключении (например, 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.
- 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.- Nmap (с разрешения):
nmap -sV -p 22,80,443,8080 -sC target.org- На порту 8080 Jenkins версия 2.277 (уязвимая, возможно CVE-2024-23897).
- На порту 22 слабые алгоритмы шифрования (можно попробовать брутфорс).
- Анализ: Jenkins доступен из интернета (потенциальная уязвимость). SSH устаревший. Веб-сервер требует проверки на веб-уязвимости.
- Рекомендация: закрыть порт 8080 для внешнего доступа, обновить SSH.
- Никогда не сканируйте чужие системы без письменного разрешения. Даже SYN-сканирование может быть расценено как попытка взлома.
- Для обучения используйте собственные VPS, локальные виртуальные машины, или специальные площадки (HackTheBox, TryHackMe).
- Если вам нужны данные о публичных системах для исследования — используйте Shodan, Censys, BinaryEdge.
- В некоторых странах несанкционированное сканирование портов является уголовным преступлением.
Сканирование портов и служб — мощный метод технического OSINT, но он должен применяться с осторожностью и только на законных основаниях. Пассивные источники (Shodan, Censys) дают почти ту же информацию без риска. Активное сканирование (Nmap) — для глубокого анализа по разрешению. Интерпретация результатов требует знаний о типовых портах, службах и уязвимостях. В связке с поддоменами и DNS это позволяет картировать внешнюю поверхность атаки.