Методов сканирования много, однако всех их можно разделить на несколько категорий: определение хоста в сети, сканирование портов, обход/обнаружение фаервола, определение ОС. В этой статье мы рассмотрим техники сканирования портов.

TCP connect

Пожалуй самый распространенный и “шумный” способ сканирования. “Шумный” в том плане, что оставляет после себя следы. Принцип работы довольно прост — сканирующий комп просто инициирует TCP соединение со сканируемым объектом, если соединение удалось, значит порт открыт, если отклонено — закрыт, если нет ответа — возможно блокируется фаерволом.

Вы возможно заметили, что после установления соединения сканер отправляет RST. Это связано с тем, что для завершения соединения необходимо пройти процедуру FIN-CLOSE, которая состоит из нескольких этапов. Это довольно затратное мероприятие в плане времени, поэтому сканер просто разрывает соединение отправкой RST.

TCP connect довольно медленный способ, кроме того системный администратор может легко определить сам факт сканирования, просто взглянув на логи фаервола.

 

Теперь вернемся в Nmap. Для запуска данного способа достаточно выполнить:

nmap -sT 192.168.0.45 -p 22,80,445

Nmap помечает порты одним из 3-х состояний: open (открытый), closed (закрытый), filtered (фильтруется фаерволом). Существуют и другие состояния, но об этом позже. С open и closed все понятно, но что означает filtered?

Означает то, что на сканирующий пакет не было получено ответа (в случае с TCP connect)  возможно из-за фаервола. Так как техник сканирования много, то и состояния портов тоже могут меняться в зависимости от того ответил хост или нет, а также как ответил. Поэтому рекомендую использовать опцию —reason, которая подскажет на каком основании принято то или иное решение:

nmap -sT —reason scanme.nmap.org -p22,80,139

 

TCP Syn (Stealth scan)

Данный тип сканирования является менее заметным по сравнению с предыдущим.

Принцип работы заключается в том, что сканирующий комп использует так называемое полусоединение, то есть, получив SYN-ACK от сканируемого устройства, сканер завершает свою работу.

В конце успешного сканирования сканер посылает TCP RST. Если его не отправить, то сканируемый объект будет считать, что пакет SYN-ACK был потерян и будет снова посылать SYN-ACK, тем самым засоряя сеть ненужными пакетами и демаскируя само сканирование. Поэтому завершающий TCP RST крайне необходим.

Почему данный метод считается менее заметным?

Дело в том, что конечные системы записывают в свои логи сам факт установления соединения. Если попытка соединения была сорвана, то ничего не записывается.

TCP Syn также является более быстрым методом по сравнению с TCP connect. Сканер сразу отправляет пакеты SYN, а затем ждет SYN-ACK. Ему уже не нужно в ответ на SYN-ACK посылать ACK.

Для запуска данного метода выполним команду:

nmap -sS —reason scanme.nmap.org -p 23,80,138

Следует отметить, что данную команду необходимо выполнять от имени суперпользователя (root). Кроме того, при запуске того или иного метода сканирования nmap посылает дополнительные пакеты, чтобы определить, что хост онлайн. В этом легко убедиться, включив опцию —packet-trace:

nmap -sS —packet-trace —reason 192.168.1.2 -p 80

 

UDP сканирование

На первый взгляд техника сканирования выглядит довольно просто. Сканирующий хост посылает пустой UDP пакет (только UDP заголовок) и ждет ответной реакции от сканируемого объекта.

UDP не имеет механизма установления соединения, а потому прикладной уровень сканируемого хоста может отбросить принятый пакет и никак не уведомить об этом сканирующую сторону. Поэтому приходится только догадываться открыт ли порт либо на пути стоит фаервол, которые блокирует входящие пакеты.

Однако иногда фаервол может отправить уведомление о блокировке пакетов.

В каких случаях хост с открытым UDP портом игнорирует сканирующие пакеты?

Ответ прост. Nmap (да и любые другие сканеры) посылают “пустые” пакеты (только UDP заголовок), то есть не содержат полезной нагрузки или данные.

Принимающая сторона, увидев такой пакет примет его за ошибочный, то есть не соответствующим формату данных конкретного приложения. И поэтому просто его уничтожит. Однако так поступают не все приложения.

Почему же сразу не вставить данные в пакет, которые соответствовали бы формату конкретного приложения?

Дело в том, что приложения, использующие протокол UDP не имеют единого стандартизированного формата данных. А содержать целую базу данных под каждый UDP порт задача довольно сложная, поэтому Nmap старается вставить данные в некоторые  пакеты с общеизвестными портами, например, 53 (DNS), 137 (NetBios) и так далее.

Для запуска UDP сканирования со вставкой полезной нагрузки используется команда:

nmap -sUV —reason scanme.nmap.org

 

Null, Xmas, Fin сканирование

Этот экзотический метод сканирования основан на рекомендации RFC 793. Там сказано, если порт устройства закрыт и принят TCP пакет, в котором не установлен флаг RST, то данное устройство должно отправить пакет с установленным флагом RST. Проще говоря, если принят TCP RST пакет, то порт закрыт. Если никакого ответа не последовало, то порт открыт.

Однако не все так хорошо, как кажется. Не все системы придерживаются рекомендациям RFC, то есть могут просто не ответить на такой необычный сканирующий пакет либо всегда отвечают RST, ACK вне зависимости от состояния портов. К таким системам относится Windows. Ситуация также осложняется наличием фаерволов, так как в большинстве случаев они уничтожают подозрительные пакеты и никак об этом не сообщают. Поэтому в Nmap “неответившие” порты помечаются как opened | filtered. Данный метод рекомендуется использовать совместно с другими методами для улучшения результатов сканирования.

Для запуска сканирования используйте следующие команды:

nmap -sN 192.168.1.2 — Null сканирование

nmap -sF 192.168.1.2 — Fin сканирование

nmap -sX 192.168.1.2 — Xmas сканирование