Сканер портов: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Строка 51: Строка 51:


=== FIN-сканирование ===
=== FIN-сканирование ===
Лишь немногие серверы способны отследить попытку SYN-сканирования их портов. Так, некоторые файрволлы и пакетные фильтры "ожидают" поддельные SYN-пакеты на закрытые порты защищаемого ими сервера, и специальное программное обеспечение типа synlogger или courtney распознает попытку SYN-сканирования. Если сервер "рвет" соединение после опроса нескольких портов, используется FIN-сканирование.


FIN-пакеты способны обойти эти средства защиты. Идея заключается в том, что, согласно RFC 793, на прибывший FIN-пакет на закрытый порт сервер должен ответить RST-пакетом. FIN-пакеты на открытые порты игнорируются сервером. Однако не все ОС придерживаются этой рекомендации. Так, ОС Windows 95/98/NT, по всей видимости, имеют иммунитет к такому сканированию, однако большинство ОС являются восприимчивыми. Таким образом, совместно используя SYN и FIN-сканирование можно с успехом обойти средства защиты сервера и просканировать его порты.
{{В планах|элемент=подраздел}}
{{В планах|элемент=подраздел}}



Версия от 08:23, 20 октября 2009

Сканер портов — программное средство, разработанное для поиска хостов сети, в которых открыты нужные порты. Эти программы обычно используются системными администраторами для проверки безопасности их сетей и злоумышленниками для взлома сети. Может производиться поиск как ряда открытых портов на одном хосте, так и одного определённого порта на многих хостах. Последнее характерно для деятельности ряда сетевых червей.

Сканирование портов может являться первым шагом в процессе взлома или предупреждения взлома, помогая определить потенциальные цели атаки. С помощью соответствующего инструментария, отправляя пакеты данных и анализируя ответы, могут быть исследованы работающие на машине службы (Web-сервер, FTP-сервер, mail-сервер, и т. д.), установлены номера их версий и используемая операционная система.

Протокол TCP/IP

Самым распространённым в Интернете стеком протоколов в настоящее время является TCP/IP. Службы, находящиеся на хостах, адресуются двумя идентификаторами: IP-адресом и номером порта. Существует 65536 возможных номеров портов. Большинство сервисов используют ограниченный набор номеров портов (номер порта закрепляется организацией IANA в случае, если сервис становится достаточно значимым[1]).

Некоторые сканеры портов ищут только наиболее часто используемые, или наиболее уязвимые порты определённого хоста или набора хостов.

Результат сканирования порта обычно подпадает под одну из трёх категорий:

  • Открыт, или соединение принято: хост послал ответ, подтверждающий, что хост «слушает» — принимает соединения на данный порт.
  • Закрыт, запрещено, не слушает: хост послал ответ, показывающий, что соединения на данный порт будут отвергнуты.
  • Заблокирован, отфильтрован: от хоста не поступило ответа.

Уязвимости, связанные с открытыми портами, подразделяются на:

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

Закрытые порты могут представлять опасность только по второму пункту. Заблокированные порты, на настоящее время, реальной опасности не представляют.

Техническая сторона

Технологии сканирования портов исходят из предположения, что хост поддерживает «Протокол управления пересылкой» (ICMP), определённый в RFC 792[2]. Хотя это в большинстве случаев так, тем не менее, хост может посылать в ответ странные пакеты, или даже генерировать ложные положительные срабатывания, когда используемый стек TCP/IP не соответствует RFC или был подвергнут изменениям.

Типы сканирований

SYN-сканирование

Данный тип сканирования является наиболее популярным. Вместо использования сетевых функций операционной системы, сканер портов сам генерирует IP пакеты, и отслеживает ответы на них. Эту технику часто называют сканированием с использованием полуоткрытых соединений, поскольку полное соединение TCP/IP никогда не открывается. Сканер портов генерирует пакет SYN. Если порт на целевом хосте открыт, с него придёт пакет SYN-ACK. Хост сканера отвечает пакетом RST, закрывая тем самым соединение до того, как процесс установления соединения завершился.

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

Мнения по поводу потенциального вреда, наносимого сканируемому хосту, неоднозначны. С одной стороны, SYN-сканирование имеет то преимущество, что отдельные приложения никогда не получают входящее соединение (оно обрывается на этапе установки), с другой, отправка пакета RST во время установления соединения может вызывать проблемы у некоторых сетевых устройств, особенно простых, таких как сетевые принтеры.

TCP-сканирование

Данный более простой метод использует сетевые функции операционной системы, и применяется, когда SYN-сканирование по тем или иным причинам неосуществимо. Операционная система, в случае, если порт открыт, завершает трёхэтапную процедуру установления соединения, и затем сразу закрывает соединение. В противном случае, возвращается код ошибки. Преимуществом данного метода является то, что он не требует от пользователя специальных прав доступа. Тем не менее, использование сетевых функций операционной системы не позволяет производить низкоуровневый контроль, поэтому данный тип используется не столь широко.

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

Сканирование с помощью пакетов UDP также возможно, хотя имеет ряд особенностей. Для UDP отсутствует понятие соединения, и нет эквивалента TCP-пакету SYN. Тем не менее, если послать UDP-пакет на закрытый порт, система ответит сообщением ICMP «порт недоступен». Отсутствие такого сообщения истолковывается как сигнал того, что порт открыт. Однако, если порт блокируется брандмауэром, метод неверно покажет, что порт открыт. Если заблокированы ICMP-сообщения о недоступности порта, все порты будут казаться открытыми. Также, может быть установлено ограничение на частоту использования ICMP-пакетов, что также влияет на результаты, даваемые методом.

Альтернативным подходом является отправка UDP-пакетов, специфичных для приложения, в расчёте на получения ответа с уровня приложения. Например, отправка запроса DNS на порт 53 приведёт к ответу, если по запрашиваемому адресу имеется DNS-сервер. Проблема в данном случае состоит в наличии соответствующего «пробного» пакета для каждого из портов. В некоторых случаях, сервис может присутствовать, но быть сконфигурирован таким образом, чтобы не отвечать на известные «пробные» пакеты.

Также возможен комбинированный подход, сочетающий в себе оба вышеуказанных метода. Так, сканирование может начинаться отправкой UDP-пакета для проверки на ICMP-ответ «порт недоступен», а затем порты с неопределённым результатом «открыт или заблокирован» могут повторно проверяться на ответы, специфичные для приложения.

ACK-сканирование

Данное сканирование применяется для определения, фильтруется данный порт или нет, и особенно эффективен для определения наличия брандмауэров и выяснения их правил. Простая фильтрация пакетов разрешит прохождение пакетов с установленным битом ACK (используемые для уже установленных соединений), тогда как более сложные брандмауэры — нет.

FIN-сканирование

Лишь немногие серверы способны отследить попытку SYN-сканирования их портов. Так, некоторые файрволлы и пакетные фильтры "ожидают" поддельные SYN-пакеты на закрытые порты защищаемого ими сервера, и специальное программное обеспечение типа synlogger или courtney распознает попытку SYN-сканирования. Если сервер "рвет" соединение после опроса нескольких портов, используется FIN-сканирование.

FIN-пакеты способны обойти эти средства защиты. Идея заключается в том, что, согласно RFC 793, на прибывший FIN-пакет на закрытый порт сервер должен ответить RST-пакетом. FIN-пакеты на открытые порты игнорируются сервером. Однако не все ОС придерживаются этой рекомендации. Так, ОС Windows 95/98/NT, по всей видимости, имеют иммунитет к такому сканированию, однако большинство ОС являются восприимчивыми. Таким образом, совместно используя SYN и FIN-сканирование можно с успехом обойти средства защиты сервера и просканировать его порты.

Другие типы сканирования

Защита от сканирования портов

Большинство брандмауэров могут защитить от сканирования портов. Брандмауэр может открыть все порты в системе, чтобы остановить показ портов тем, кто занимается сканированием. Данный метод работает в большинстве случаев, однако, не защищает от новых техник сканирования портов, в числе которых сканирование с помощью ICMP-порта и NULL-сканирование.

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

Моральные и юридические ограничения

Программное обеспечение

  • Nmap [3] — один из самых доступных кроссплатформенных сканеров портов. Может быть установлен на большинстве UNIX-систем (используя последовательность команд configure, make, make install).

См. также

Ссылки

  1. Список портов, закреплённых организацией IANA (англ.)
  2. RFC-792 — Internet Control Message Protocol (англ.)
  3. http://www.insecure.org (англ.) - сайт разработчиков программы Nmap
  4. nmapNT sp1 from eEye Digital Security (англ.). eEye Digital Security. Архивировано 13 июня 2006 года.