«Сетевые порты, это потенциальные точки входа, а их сканирование — акт разведки, который может быть как легитимной проверкой безопасности, так и подготовкой к атаке. 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).