Почему порты — первая точка разведки
Любой сетевой пентест начинается с ответа на вопрос: что слушает целевой хост и какие сервисы за этим стоят. Порт — это не уязвимость сам по себе, а индикатор работающего процесса. Открытый порт означает, что где-то в памяти крутится код, принимающий входные данные. Именно этот код и становится объектом анализа.
Пентестеру нужно понимать три вещи:
- Какой транспортный протокол использует сервис (TCP, UDP или оба).
- В каком состоянии находится порт (открыт, закрыт, фильтруется).
- Какой сервис и какая версия за портом стоят.
Без этого контекста результаты сканирования превращаются в набор чисел без смысла.
TCP: соединение с гарантией доставки
TCP (Transmission Control Protocol) — протокол транспортного уровня, определённый в RFC 9293 (консолидированная замена RFC 793 и множества обновлений). Он обеспечивает надёжную, упорядоченную доставку байтового потока между двумя хостами.
Ключевые свойства TCP, которые важны при пентесте:
- Ориентирован на соединение. Перед передачей данных устанавливается сессия через трёхэтапное рукопожатие (three-way handshake): SYN → SYN-ACK → ACK.
- Надёжность. Потерянные сегменты обнаруживаются по sequence numbers и передаются повторно.
- Контроль потока. Поле Window в заголовке TCP ограничивает объём данных, которые отправитель может послать до получения подтверждения.
- Флаги управления. Заголовок TCP содержит флаги SYN, ACK, FIN, RST, PSH, URG, CWR, ECE. Комбинации флагов определяют тип сегмента и состояние соединения.
Структура заголовка TCP
Заголовок TCP содержит минимум 20 байт (без опций):
| Поле | Размер | Назначение |
|---|---|---|
| Source Port | 16 бит | Порт отправителя |
| Destination Port | 16 бит | Порт получателя |
| Sequence Number | 32 бит | Порядковый номер первого байта данных (или ISN при SYN) |
| Acknowledgment Number | 32 бит | Следующий ожидаемый байт (при установленном ACK) |
| Data Offset | 4 бит | Длина заголовка в 32-битных словах |
| Flags | 8 бит | Управляющие биты: CWR, ECE, URG, ACK, PSH, RST, SYN, FIN |
| Window | 16 бит | Размер окна получателя |
| Checksum | 16 бит | Контрольная сумма заголовка и данных |
| Urgent Pointer | 16 бит | Смещение срочных данных |
| Options | 0–40 байт | Расширения: MSS, Window Scale, SACK, Timestamps |
Для пентестера наиболее важны флаги. Разные типы сканирования в nmap эксплуатируют именно комбинации флагов и поведение стека при получении нестандартных сегментов.
Состояния портов при TCP-сканировании
Когда сканер отправляет SYN-пакет на целевой порт, возможны три ответа:
| Ответ хоста | Состояние порта | Что это значит |
|---|---|---|
| SYN-ACK | open | Сервис слушает и готов принять соединение |
| RST | closed | Порт не занят, но хост отвечает |
| Нет ответа или ICMP unreachable | filtered | Пакет отброшен файрволом или не дошёл |
Это основа SYN-сканирования (
-sS в nmap). Существуют и другие техники: FIN-сканирование, Xmas-сканирование, NULL-сканирование — все они опираются на то, как стек обрабатывает сегменты с неожиданными комбинациями флагов на закрытом порту (по RFC 9293, на сегмент без SYN, RST или ACK, пришедший на закрытый порт, должен быть отправлен RST).UDP: датаграмма без гарантий
UDP (User Datagram Protocol) описан в RFC 768. Это минималистичный протокол: заголовок занимает всего 8 байт, нет рукопожатия, нет контроля доставки, нет повторной передачи.
| Поле | Размер | Назначение |
|---|---|---|
| Source Port | 16 бит | Порт отправителя (опционален, может быть 0) |
| Destination Port | 16 бит | Порт получателя |
| Length | 16 бит | Длина датаграммы включая заголовок (минимум 8) |
| Checksum | 16 бит | Контрольная сумма (может быть 0 — отключена) |
UDP используется там, где задержка важнее надёжности: DNS, NTP, SNMP, DHCP, TFTP, VoIP, игровые протоколы.
Особенности UDP-сканирования
UDP-сканирование принципиально сложнее TCP:
- Если порт закрыт, хост обычно отвечает ICMP Destination Unreachable (тип 3, код 3).
- Если порт открыт, сервис может ответить данными или промолчать.
- Если ответа нет, сканер не может однозначно сказать, открыт порт или пакет потерян.
Поэтому nmap помечает UDP-порты как
open|filtered, когда ответа нет. Для уточнения используются повторные запросы и знание протокола конкретного сервиса.UDP-сканирование медленное: многие ОС ограничивают скорость генерации ICMP-сообщений об ошибках (например, Linux по умолчанию не более одного ICMP destination unreachable в секунду). Это делает полное сканирование всех 65536 UDP-портов крайне долгим.
Диапазоны портов и их категории
Порты делятся на три диапазона по классификации IANA:
| Диапазон | Назначение |
|---|---|
| 0–1023 | Well-known (системные, требуют привилегий для привязки на Unix) |
| 1024–49151 | Registered (зарегистрированные приложения) |
| 49152–65535 | Dynamic/Ephemeral (временные порты клиентских соединений) |
Для пентестера практическое значение имеет то, что сервисы на портах 0–1023 обычно запускаются от root (или через capabilities), а значит, уязвимость в таком сервисе потенциально даёт привилегированный доступ.
Сервисы, которые чаще всего встречаются в инфраструктуре
Ниже — порты и сервисы, которые регулярно появляются в результатах сканирования реальных сетей. Понимание их назначения помогает быстро оценивать поверхность атаки.
TCP-сервисы
| Порт | Сервис | Что искать |
|---|---|---|
| 21 | FTP | Анонимный доступ, устаревшие версии, cleartext-аутентификация |
| 22 | SSH | Версии с известными CVE, слабые алгоритмы, перебор ключей |
| 23 | Telnet | Cleartext-протокол, перехват учётных данных |
| 25 | SMTP | Open relay, перечисление пользователей (VRFY/EXPN) |
| 53 | DNS (TCP) | Zone transfer (AXFR), рекурсивные запросы |
| 80 | HTTP | Веб-уязвимости, устаревшие заголовки, directory listing |
| 110 | POP3 | Cleartext-аутентификация |
| 135 | MSRPC (Windows) | Перечисление интерфейсов, DCOM |
| 139 | NetBIOS | SMB over NetBIOS, перечисление шар |
| 143 | IMAP | Cleartext-аутентификация |
| 443 | HTTPS | Те же веб-уязвимости + проблемы TLS-конфигурации |
| 445 | SMB | EternalBlue-класс уязвимости, null-сессии, перечисление |
| 993 | IMAPS | Проверка сертификата, версии |
| 1433 | MSSQL | Слабые учётные данные, xp_cmdshell |
| 3306 | MySQL | Анонимный доступ, слабые пароли, известные CVE |
| 3389 | RDP | BlueKeep-класс уязвимости, NLA отключён |
| 5432 | PostgreSQL | Слабые учётные данные, доверительная аутентификация |
| 8080 | HTTP-alt | Прокси, админ-панели, забытые сервисы |
| 8443 | HTTPS-alt | То же, что 443 |
UDP-сервисы
| Порт | Сервис | Что искать |
|---|---|---|
| 53 | DNS | Рекурсия, zone transfer, усиление |
| 67/68 | DHCP | Rogue DHCP, информация о сети |
| 69 | TFTP | Анонимный доступ к файлам |
| 123 | NTP | Усиление (monlist), версия с CVE |
| 161 | SNMP | Public community string, перечисление информации |
| 500 | IKE/IPsec | Агрессивный режим, перечисление политик |
| 1900 | SSDP | UPnP, усиление |
| 5353 | mDNS | Перечисление сервисов в локальной сети |
Как интерпретировать результаты сканирования
Сканирование портов — не самоцель, а источник данных для следующего шага. Вот типичный рабочий процесс:
- Обнаружение открытых портов. Быстрое сканирование топ-1000 TCP-портов и ключевых UDP-портов.
- Определение сервисов и версий. Версионное сканирование (
-sVв nmap) позволяет сопоставить порт с конкретным ПО и версией.
- Определение ОС. По особенностям стека (
-Oв nmap) можно предположить операционную систему.
- Приоритизация. Порты с известными CVE, cleartext-протоколы, устаревшие версии — в первую очередь.
- Углублённый анализ. Для каждого приоритетного сервиса — специализированные скрипты, ручная проверка, эксплуатация в лаборатории.
Типичные ошибки начинающих
- Сканировать все 65536 портов по UDP без необходимости. Это занимает часы и часто даёт ложные
open|filtered. Лучше начать с топ-100 UDP-портов.
- Игнорировать фильтруемые порты.
filteredне значит «безопасно». За файрволом может стоять уязвимый сервис. Стоит попробовать другие техники или сканирование через IPv6.
- Доверять баннеру без проверки. Сервис может представляться чужим именем. Версионное сканирование по поведению надёжнее, чем по баннеру.
- Не учитывать контекст сети. Один и тот же открытый порт 445 на контроллере домена и на рабочей станции разработчика — разные риски.
Практический пример: сканирование в лаборатории
Все команды ниже предполагают работу в собственной изолированной лаборатории или в рамках согласованного scope. Сканирование чужих систем без разрешения незаконно.
Быстрое обнаружение хостов в подсети:
Bash:
nmap -sn 192.168.56.0/24
Сканирование топ-1000 TCP-портов с определением версий:
Bash:
nmap -sV -sC 192.168.56.10
Флаг
-sC запускает набор скриптов по умолчанию (безопасные категории). Флаг -sV включает определение версий сервисов.UDP-сканирование топ-100 портов:
Bash:
nmap -sU --top-ports 100 192.168.56.10
Если нужно проверить конкретный порт с детальным выводом:
Bash:
nmap -sV -p 445 --script smb-os-discovery,smb-protocols 192.168.56.10
Результат сканирования — это входные данные, а не вывод. Каждый открытый порт нужно сопоставить с версией сервиса, известными уязвимостями и контекстом целевой системы.
Что делать после обнаружения сервисов
После сканирования пентестер переходит к целевому анализу:
- Веб-сервисы (80, 443, 8080, 8443): ручное исследование приложения, проверка заголовков, directory brute-force, тестирование на OWASP Top 10. Для практики подходит Web Security Academy от PortSwigger — бесплатные интерактивные лаборатории по веб-безопасности.
- SMB (139, 445): перечисление шар, проверка null-сессий, анализ версий протокола.
- SSH (22): проверка версий, перебор только при наличии согласования, анализ конфигурации.
- SNMP (161/UDP): попытка чтения с community string
public, извлечение информации о системе.
- DNS (53): zone transfer, перечисление записей, проверка рекурсии.
Для отработки навыков в безопасной среде используйте специально уязвимые приложения и виртуальные машины Домашняя лаборатория для пентеста: как безопасно учиться на Kali Linux и специально уязвимых приложениях.
Чек-лист: что запомнить
- TCP — соединение, надёжность, флаги. Состояние порта определяется по ответу на SYN.
- UDP — датаграмма, без гарантий. Отсутствие ответа не означает, что порт закрыт.
- Well-known порты (0–1023) обычно привилегированы — уязвимость там критичнее.
- Версионное сканирование важнее баннера.
filtered≠ безопасно.
- UDP-сканирование медленное и менее точное — начинайте с топ-портов.
- Любой результат сканирования — повод для углублённого анализа конкретного сервиса, а не конечный вывод.
