Сканирование портов с помощью Nmap

«Сетевые порты, это потенциальные точки входа, а их сканирование — акт разведки, который может быть как легитимной проверкой безопасности, так и подготовкой к атаке. Nmap — стандартный инструмент для такой разведки, но большинство используют лишь пару его базовых функций, не задумываясь о тонкостях, которые влияют на скрытность, скорость и достоверность результата. Понимание различий между методами сканирования критически важно для адекватной настройки систем защиты в соответствии с требованиями ФСТЭК и 152-ФЗ, так как именно от них зависит, что увидит аудитор или злоумышленник.»

🔍 Основы сканирования портов

Nmap определяет состояние порта, отправляя специально сформированные сетевые пакеты и анализируя ответы целевой системы. Этот процесс основывается на логике стека TCP/IP. Например, при классическом SYN-сканировании (самом распространённом) инструмент отправляет пакет с установленным флагом SYN, имитируя начало трёхстороннего рукопожатия. Ответная реакция системы трактуется следующим образом:

Как Nmap интерпретирует ответы

Ответ SYN/ACK указывает на то, что служба готова принять соединение — порт открыт. Пакет RST (сброс) означает, что порт доступен, но не обслуживается — он закрыт. Отсутствие ответа в течение заданного времени чаще всего говорит о том, что пакет был заблокирован сетевым экраном, и порт помечается как фильтруемый.

Состояния портов в Nmap

Состояние порта Ответ от цели Что это означает
Open (Открыт) TCP SYN/ACK На порту работает приложение, готовое принимать входящие соединения. Это потенциальная точка входа.
Closed (Закрыт) TCP RST Порт доступен для соединения на уровне сети, но никакая служба его не слушает. Не представляет прямой угрозы, но раскрывает информацию о системе.
Filtered (Фильтруется) Нет ответа или ICMP-ошибка (типа Destination Unreachable) Сетевой экран или фильтр блокирует пакеты, не давая определить истинное состояние порта. Это признак активной защиты.
Open|Filtered Нет ответа (для некоторых типов сканирования) Nmap не может различить, открыт порт или его фильтруют. Требует дополнительной проверки другими методами.

🔗 TCP Connect Scan (-sT)

Это самый прямой метод, при котором Nmap использует системный вызов connect() для завершения полного TCP-соединения (SYN → SYN/ACK → ACK → RST). Так работает большинство обычных клиентов, например, браузер.

В контексте российских требований к безопасности важно понимать: -sT является самым «шумным» методом. Каждая попытка соединения оставляет запись в логах целевой системы, так как взаимодействие происходит строго по спецификации. Это делает данный метод плохим выбором для скрытной разведки, но идеальным для легитимного аудита в рамках, разрешённых политикой безопасности, — его действия максимально предсказуемы и не используют низкоуровневых манипуляций с пакетами.

Использование -sT не требует прав администратора (root), поэтому оно является методом по умолчанию при запуске Nmap от имени непривилегированного пользователя.

📨 UDP Scan (-sU)

Протокол UDP не подразумевает установления соединения, что кардинально меняет подход к сканированию. Nmap отправляет на целевой порт UDP-датаграмму с нулевой нагрузкой (или с протокол-специфичным содержимым для некоторых портов) и ждёт ответа.

Сложность в том, что открытый UDP-порт может просто проигнорировать пустой пакет, а закрытый — в соответствии со стандартом — должен ответить ICMP-сообщением «Port Unreachable». Однако сетевые экраны часто блокируют исходящие ICMP-сообщения, что приводит к состояниям open|filtered. Это делает UDP-сканирование самым медленным и неточным, но критически важным, поскольку уязвимости в таких сервисах, как DNS (53), SNMP (161), NTP (123) или DHCP (67/68), не менее опасны.

В реальных условиях полное сканирование 65K UDP-портов может занимать десятки часов, поэтому его всегда сужают ключевыми портами (-p) и регулируют таймауты (--max-rtt-timeout).

🕵️ Скрытые методы сканирования: FIN, NULL, XMAS (-sF, -sN, -sX)

Эти методы основаны на аномалии в реализации стека TCP в некоторых операционных системах. Согласно RFC 793, на пакет, не несущий флага SYN, RST или ACK и пришедший на закрытый порт, система должна ответить RST. На открытый порт такой «неправильный» пакет должен быть проигнорирован.

  • FIN-сканирование (-sF): Отправляет пакет только с установленным флагом FIN (обычно означающим завершение соединения).
  • NULL-сканирование (-sN): Отправляет пакет без единого установленного TCP-флага.
  • XMAS-сканирование (-sX): Устанавливает флаги FIN, PSH и URG, «подсвечивая» пакет, как рождественскую ёлку.

Все три метода интерпретируют ответ одинаково: RST означает закрытый порт, отсутствие ответа — открытый или фильтруемый. Их главное преимущество — возможность обхода примитивных систем обнаружения вторжений (IDS), которые ищут только очевидные шаблоны сканирования (например, SYN-пакеты на множество портов).

Важное ограничение: Эти методы работают не на всех системах. Современные версии Windows, а также некоторые специализированные сетевые устройства всегда отправляют RST на такие пакеты, независимо от состояния порта, что приводит к ложным результатам («все порты закрыты»).

Сравнение скрытых методов

Метод сканирования Установленные TCP-флаги Работоспособность
FIN Scan (-sF) FIN Работает против большинства *nix-систем, часто не работает против Windows.
NULL Scan (-sN) Нет флагов Аналогично FIN, но может быть проще для обнаружения из-за крайней нетипичности пакета.
XMAS Scan (-sX) FIN, PSH, URG Наиболее «шумный» из трёх, но иногда лучше обходит старые сигнатуры IDS.

🧟 Idle Scan (-sI)

Это наиболее изощрённый метод, позволяющий проводить сканирование, практически не оставляя следов своего исходного IP-адреса. Он использует сторонний хост («зомби»), IP-идентификатор (IPID) которого предсказуемо увеличивается с каждым отправленным пакетом.

Алгоритм работы сложен: сканер сначала определяет текущий IPID зомби, затем отправляет на целевой хост поддельный пакет с IP-адресом источника зомби. Если порт цели открыт, она попытается ответить зомби (SYN/ACK), что заставит того ответить RST и увеличить свой IPID. Сканер, снова проверяя IPID зомби, видит его изменение и делает вывод об открытом порте. Таким образом, целевая система «видит» сканирование только с IP-адреса зомби.

Этот метод требует тщательного подбора малоактивного зомби-хоста с последовательным IPID и практически не применяется в рутинном аудите, но демонстрирует высший уровень скрытности.

💡 Практический выбор метода для аудита и защиты

Выбор метода должен определяться задачами в рамках модели угроз. Для внутреннего аудита и инвентаризации активов подойдёт быстрое и точное SYN-сканирование (-sS). Для проверки эффективности периметровых средств защиты (ФСТЭК) стоит применять комбинацию методов: базовое SYN для определения общей картины, затем FIN/NULL/XMAS для проверки, не пропускает ли firewall аномальные пакеты, и выборочное UDP для ключевых сервисов.

С точки зрения настройки защиты (152-ФЗ, «безопасность персональных данных»):

  • Системы должны быть настроены так, чтобы на неиспользуемые порты всегда отправлялся RST (митация против FIN/NULL/XMAS).
  • Логировать следует не только успешные соединения (SYN/ACK), но и попытки установления нестандартных соединений (пакеты с флагами FIN, NULL, XMAS), что является признаком разведки.
  • Для критичных UDP-сервисов необходимо применять не только firewall, но и настройки самого сервиса на игнорирование пустых или malformed-пакетов.

Понимание этих методов со стороны защитника позволяет не просто видеть факт сканирования, а классифицировать его уровень сложности и намерения сканирующего, что является ключевым элементом современного Security Operations Center (SOC).

Оставьте комментарий