Ска́нер порто́в — программное средство, разработанное для поиска хостов сети, в которых открыты нужные порты. Эти программы обычно используются системными администраторами для проверки безопасности их сетей и злоумышленниками для взлома сети. Может производиться поиск как ряда открытых портов на одном хосте, так и одного определённого порта на многих хостах. Последнее характерно для деятельности ряда сетевых червей.
Сам процесс называется скани́рованием портов или (в случае, когда осуществляется проверка многих хостов) сканированием сети́. Сканирование портов может являться первым шагом в процессе взлома или предупреждения взлома, помогая определить потенциальные цели атаки. С помощью соответствующего инструментария путём отправления пакетов данных и анализа ответов могут быть исследованы работающие на машине службы (Web-сервер, FTP-сервер, mail-сервер, и т. д.), установлены номера их версий и используемая операционная система.
Протокол TCP/IP
правитьСамым распространённым в Интернете стеком протоколов в настоящее время является TCP/IP. Службы, находящиеся на хостах, адресуются двумя идентификаторами: IP-адресом и номером порта. Существует 65536 возможных номеров портов. Большинство сервисов используют ограниченный набор номеров портов (номер порта закрепляется организацией IANA в случае, если сервис становится достаточно значимым[1]).
Некоторые сканеры портов ищут только наиболее часто используемые, или наиболее уязвимые порты определённого хоста или набора хостов.
Результат сканирования порта обычно подпадает под одну из трёх категорий:
- Открыт, или соединение принято (англ. open): хост послал ответ, подтверждающий, что хост «слушает» — принимает соединения на данный порт.
- Закрыт, запрещено[уточнить], не слушает (closed): хост послал ответ, показывающий, что соединения на данный порт будут отвергнуты.
- Заблокирован, отфильтрован (filtered, firewalled): от хоста не поступило ответа.
Уязвимости, связанные с открытыми портами, подразделяются на:
- проблемы с безопасностью и стабильностью, связанные с функционированием программ, предоставляющих сервисы,
- проблемы с безопасностью и стабильностью, связанные с операционной системой, работающей на хосте.
Закрытые порты могут представлять опасность только по второму пункту. Заблокированные порты, на настоящее время, реальной опасности не представляют.
Техническая сторона
правитьТехнологии сканирования портов исходят из предположения, что хост поддерживает «Протокол управления пересылкой» (ICMP), определённый в RFC 792[2]. Хотя это в большинстве случаев так, тем не менее, хост может посылать в ответ странные пакеты, или даже генерировать ложные положительные срабатывания, когда используемый стек TCP/IP не соответствует RFC или был подвергнут изменениям.
Типы сканирований
правитьПроверка онлайна
правитьВ ряде случаев, прежде чем начать собственно сканирование, является полезной проверка наличия работающей системы на целевом IP-адресе.
Эта задача может быть решена путём посылки Echo-сообщений протокола ICMP с помощью утилиты ping c последовательным перебором всех адресов сети или отправкой Echo-сообщения по широковещательному адресу.
Анализируя трафик и отслеживая Echo-сообщения, посылаемые за короткий промежуток времени всем узлам, можно выявить попытки сканирования. Вместо Echo-сообщений могут применяться TCP-сегменты с code bit RST, ответы на несуществующие DNS-запросы. Если сканер получит в ответ ICMP Destination Unreachable пакет с кодом 1 (host unreachable), то значит, тестируемый узел выключен или не подключен к сети.
Следует иметь в виду, что (на практике) неполучение ответа на запросы не гарантирует несуществование хоста, поскольку многие системные администраторы ради «безопасности» идут на нарушение сетевых стандартов.
SYN-сканирование
правитьЭтот тип сканирования является наиболее популярным. Вместо использования готовых решений ядра системы, сканер портов сам генерирует TCP пакеты с установленным флагом SYN и с IP заголовками, и отслеживает ответы на них. Эту технику часто называют сканированием с использованием полуоткрытых соединений, поскольку полное соединение TCP/IP никогда не открывается. Этот алгоритм основан на расчёте ненастоящей контрольной суммы, используя псевдо-TCP заголовки. Если порт на целевом хосте открыт, с него придёт пакет с флагами SYN+ACK. Если хост отвечает пакетом с флагом RST, закрывая тем самым соединение до того, как процесс установления соединения завершился, порт считается закрытым, в другом случае порт можно считать фильтрованным, так как ответ не был получен.
Использование самостоятельно сформированных сетевых пакетов имеет ряд преимуществ, давая сканирующей программе полный контроль над посылаемыми пакетами и ответами на них, задержками ответов, и позволяя получить детальные результаты сканирования.
Мнения по поводу потенциального вреда, наносимого сканируемому хосту, неоднозначны. С одной стороны, SYN-сканирование имеет то преимущество, что отдельные приложения никогда не получают входящее соединение (оно обрывается на этапе установки), с другой, отправка пакета RST во время установления соединения может вызывать проблемы у некоторых сетевых устройств, особенно простых, таких как сетевые принтеры.
TCP-сканирование
правитьЭтот более простой метод использует сетевые функции операционной системы, и применяется, когда SYN-сканирование по тем или иным причинам неосуществимо. Операционная система, в случае, если порт открыт, завершает трёхэтапную процедуру установления соединения, и затем сразу закрывает соединение. В противном случае, возвращается код ошибки. Преимуществом данного метода является то, что он не требует от пользователя специальных прав доступа. Тем не менее, использование сетевых функций операционной системы не позволяет производить низкоуровневый контроль, поэтому данный тип используется не столь широко.
Главным недостатком этого метода является большое количество открытых и сразу прерванных соединений, создающее нагрузку на сканируемую систему и позволяющее просто обнаружить активность сканера портов.
UDP-сканирование
правитьСканирование с помощью пакетов UDP также возможно, хотя имеет ряд особенностей. Для UDP отсутствует понятие соединения, и нет эквивалента TCP-пакету SYN. Тем не менее, если послать UDP-пакет на закрытый порт, система ответит сообщением ICMP «порт недоступен». Отсутствие такого сообщения истолковывается как сигнал того, что порт открыт. Однако, если порт блокируется брандмауэром, метод неверно покажет, что порт открыт. Если заблокированы ICMP-сообщения о недоступности порта, все порты будут казаться открытыми. Также, может быть установлено ограничение на частоту использования ICMP-пакетов, что также влияет на результаты, даваемые методом.
Альтернативным подходом является отправка UDP-пакетов, специфичных для приложения, в расчёте на получения ответа с уровня приложения. Например, отправка запроса DNS на порт 53 приведёт к ответу, если по запрашиваемому адресу имеется DNS-сервер. Проблема в данном случае состоит в наличии соответствующего «пробного» пакета для каждого из портов. В некоторых случаях, сервис может присутствовать, но быть сконфигурирован таким образом, чтобы не отвечать на известные «пробные» пакеты.
Также возможен комбинированный подход, сочетающий в себе оба вышеуказанных метода. Так, сканирование может начинаться отправкой UDP-пакета для проверки на ICMP-ответ «порт недоступен», а затем порты с неопределённым результатом «открыт или заблокирован» могут повторно проверяться на ответы, специфичные для приложения.
ACK-сканирование
правитьЭто сканирование применяется для определения, фильтруется данный порт или нет, и особенно эффективен для определения наличия брандмауэров и выяснения их правил. Простая фильтрация пакетов разрешит прохождение TCP пакетов с установленным флагом ACK (используемые для уже установленных соединений), тогда как более сложные брандмауэры — нет. Если хост не защищён брандмауэром, в ответ приходит TCP пакет с флагом RST, в любом другом случае порт можно считать фильтрованным.
WINDOW-сканирование
правитьЭто сканирование очень похоже на ACK, ведь при нём в TCP заголовок также ставится флаг ACK, и он также ждёт от хоста флаг RST. Но, в отличие от него, оно уже может получить состояние порта. Оно было создано также для обхода брандмауэров которые отклоняют SYN пакеты. Его принцип заключается в проверке размера окна TCP заголовка в ответном пакете, если размер окна больше 0, значит порт считается открытым. Если это не так, то порт считается закрытым. Если пакет вовсе пришёл без флага RST, то значит порт отмечается фильтрованным.
FIN-сканирование
правитьНекоторые серверы способны отследить попытку SYN-сканирования их портов. Например, попытка SYN-сканирования может быть распознана по поступлению «поддельных» SYN-пакетов на закрытые порты защищаемого сервера, и в случае опроса нескольких портов сервер разрывает соединение для защиты от сканирования.
Сканирование с использованием FIN-пакетов позволяет обойти подобные средства защиты. Согласно RFC 793, на прибывший FIN-пакет на закрытый порт сервер должен ответить пакетом RST. FIN-пакеты на открытые порты должны игнорироваться сервером. По этому различию становится возможным отличить закрытый порт от открытого. При отправке FIN-пакета в TCP заголовок ставится флаг FIN.
Указанной рекомендации RFC 793 придерживаются не все операционные системы. Например, реакция Windows семейства 95/98/NT на приходящий FIN-пакет не различается для открытого и закрытого порта.
Другие типы сканирования
правитьИ ещё один способ заключается в том, чтобы отправлять сегменты с флагами FIN(no more data from sender), PSH(push function), URG(urgent pointer field significant) либо вообще с пустым полем code bit. Если порт закрыт, то в ответ придёт сегмент с флагом RST, если ответа не будет, то порт открыт (так как такой сегмент просто игнорируется).
Скорость работы
правитьСкорость сканирования зависит от таких факторов как количество проверяемых портов, склонности сканируемых систем к ICMP-ответам, избранного способа сканирования, количества проверяемых хостов и их склонности отвечать на запросы, а также от того, насколько осуществляющая сканирование сторона озабочена незаметностью своей деятельности. Чтобы не дать себя раскрыть, сканер портов может растянуть отправку сообщений во времени. С другой стороны, при большом количестве проверяемых хостов их сканирование может осуществляться параллельно так, что нагрузка на каждый конкретный хост будет весьма низка.
Защита от сканирования портов
правитьБольшинство брандмауэров могут защитить от сканирования портов. Брандмауэр может открыть все порты в системе, чтобы остановить показ портов тем, кто занимается сканированием. Данный метод работает в большинстве случаев, однако, не защищает от новых техник сканирования портов, в числе которых сканирование с помощью ICMP-порта и NULL-сканирование.
Некоторые провайдеры реализуют фильтры пакетов или открытые прокси-серверы, которые препятствуют исходящей активности по сканированию портов.
Моральные и юридические ограничения
правитьМногие интернет-провайдеры прямо запрещают пользователям производить сканирование портов. Обычно данный запрет включается в правила обслуживания, с которыми клиент должен согласиться при подключении.
Уголовным кодексом Российской Федерации предусмотрена уголовная ответственность за следующие преступления[3]:
- Неправомерный доступ к компьютерной информации, если это повлекло уничтожение, блокирование, модификацию либо копирование информации, нарушение работы ЭВМ, системы ЭВМ или их сети;
- Создание, использование и распространение вредоносных программ для ЭВМ;
- Нарушение правил эксплуатации ЭВМ, системы ЭВМ или их сети, повлёкшее уничтожение, блокирование или модификацию информации.
Программное обеспечение
править- Nmap[4] — один из самых доступных кроссплатформенных сканеров портов.
- В Mac OS X — встроенное приложение Network Utility.
См. также
правитьПримечания
править- ↑ Список портов, закреплённых организацией IANA Архивная копия от 2 августа 2002 на Wayback Machine (англ.)
- ↑ RFC 792 — Internet Control Message Protocol] (англ.)
- ↑ Уголовный кодекс Российской Федерации. Глава 28. Преступления в сфере компьютерной информации.
- ↑ http://www.insecure.org (англ.) Архивная копия от 10 июня 2021 на Wayback Machine — сайт разработчиков программы Nmap
Ссылки
править- TCP/IP Security . Дата обращения: 26 января 2010. Архивировано из оригинала 25 июня 2002 года.
- Реализиция многопоточного сканера портов на C++ . Дата обращения: 25 сентября 2012. Архивировано из оригинала 3 июня 2013 года.