Сканер портов

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

Сканирование портов — это процесс, при котором клиент отправляет запросы на диапазон портов определённого хоста в попытке обнаружить открытые порты[1]. Анализируя ответы, можно определить, какие сетевые сервисы активны на данном компьютере: порт считается «в режиме прослушивания», «открытым» или «активным», если его использует какой-либо сервис, программный модуль или процесс. Сканирование портов используется в первую очередь для определения доступных сервисов на компьютере, а не обязательно для атаки.

Термин portsweep обозначает сканирование множества хостов по одной и той же целевой порту. Чаще всего эта процедура используется для поиска определённого сервиса, например, сетевой червь, ориентированный на базы данных SQL, может пытаться находить хосты, прослушивающие порт TCP 1433[2].

Основы TCP/IP

Архитектура и функционирование Интернета основываются на стеке протоколов Интернета, обычно называемом TCP/IP. В такой системе хосты и их сервисы адресуются с помощью пары: адрес и номер порта. Всего существует 65536 различных номеров портов, однако большинство сервисов используют ограниченный набор значений.

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

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

  • открыта: хост отправил ответ, информируя о наличии слушающего сервиса на порту,
  • закрыта: хост ответил, что соединение с портом будет отклонено (например, ICMP port-unreachable),
  • заблокирована/фильтруется: от хоста не поступило никакого ответа, поэтому вероятно наличие файрвола или сетевого устройства, блокирующего доступ к порту и недопускающего определить его состояние.

Открытые порты имеют две группы уязвимостей, к которым должны быть внимательны администраторы:

  • безопасность и стабильность должны обеспечиваться приложением, предоставляющим сервис через открытый порт,
  • безопасность и стабильность связаны с операционной системой, установленной на целевом хосте — это относится к открытым и закрытым портам.

Как правило, фильтруемые порты считаются невосприимчивыми к атаке.

Предпосылки

Все виды сканирования портов предполагают, что целевой хост поддерживает стандарт RFC 793 — Transmission Control Protocol. Хотя это справедливо в большинстве случаев, некоторые удалённые хосты могут отправлять нестандартные пакеты или даже генерировать ложные результаты, если их реализация TCP/IP не соответствует спецификации или была модифицирована. Это проявляется, например, для менее распространённых техник, зависящих от реализованной ОС, таких как FIN-сканирование.

Виды сканирования

TCP connect scan

Наиболее простые сканирования портов используют сетевые функции операционной системы — они применяются, если выполнить SYN-сканирование невозможно.

Nmap называет такой режим connect scan — по имени системного вызова Unix connect(), при помощи которого открывается соединение с каждым интересующим портом на целевой машине. Если порт открыт, ОС завершает трёхэтапное TCP-рукопожатие (трёхстороннее установление соединения между двумя хостами), после чего сканер портов тут же разрывает соединение, чтобы не инициировать атаку типа Отказ в обслуживании[3]. В ином случае возвращается ошибка.

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

Этот способ сканирования «шумный», особенно при массовом сканировании (portsweep): сервисы могут записывать исходный IP-адрес отправителя, а IDS способны зафиксировать событие.

SYN scan

SYN-сканирование — другой вариант TCP-сканирования. В отличие от предыдущего метода, сканер самостоятельно формирует IP-пакеты, минуя стандартные сетевые функции ОС, и анализирует полученные ответы. Такая проверка также называется «полуоткрытым сканированием», так как полноценное TCP-соединение не устанавливается. Сканер отправляет SYN-пакет: если порт на целевой машине открыт, та отвечает SYN-ACK, после чего сканер тут же высылает RST, прерывая соединение до завершения рукопожатия. Если порт закрыт, но не фильтруется, система отвечает RST. В обоих случаях соединение не устанавливается полностью и, как следствие, подобная активность редко записывается в журнальных файлах, хотя может быть обнаружена и отмечена IDS.

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

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

Возможна также реализация UDP-сканирования, хотя здесь присутствует ряд технических особенностей. UDP — протокол без установления соединения, соответственно аналог SYN-пакета отсутствует. Если отправить UDP-пакет на неоткрытый порт, система ответит ICMP-пакетом типа 3 код 3 (port unreachable) либо типа 3 код 13 (административно запрещён). Большинство UDP-сканеров строятся на этом способе: отсутствие ответа трактуется как признак открытого порта. Однако если порт заблокирован фаерволом, такой подход может ложно сигнализировать о его открытости.

Альтернативный вариант — рассылка UDP-пакетов, сформированных для конкретных приложений, с надеждой получить реакцию на прикладном уровне. Например, отправка DNS-запроса на порт 53 приведёт к ответу только при наличии DNS-сервера. Такой способ надёжнее определяет открытые порты, но применим лишь к тем приложениям, для которых возможно сгенерировать корректный пробный пакет. Многие инструменты (например, nmap) поддерживают sonding для не более чем 20 UDP-сервисов, коммерческие решения (например, nessus) — до 70. Иногда сервис может слушать порт, но быть сконфигурирован так, чтобы не реагировать на определённый пробный пакет[4].

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

ACK-сканирование — одна из необычных методик: здесь нельзя определить, открыт или закрыт порт, однако удаётся установить, фильтруется порт или нет. Это полезно, если нужно выяснить наличие фаервола и его политики на целевом узле. Для ACK-сканирования отправляются пакеты с установленным только флагом ACK; если порт открыт или закрыт, система отвечает RST, а при отсутствии ответа или ICMP-ошибке порт маркируется как фильтруемый[5].

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

Данный тип сканирования встречается очень редко из-за своей устаревшей природы: Window-сканирование ненадёжно определяет статус порта. Оно формирует пакет, аналогичный ACK-сканированию, однако далее анализируется поле TCP Window возвращённого RST-пакета. Если значение Window положительно, порт считается открытым; если ноль — закрытым. В отличие от ACK-сканирования (где любой возвращённый RST трактуется как нефильтруемый порт), здесь значение Window определяет результат. Window-сканирование редко бывает точным, так как его поддерживают лишь отдельные реализации ОС.

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

Если SYN-сканирование оказывается неэффективным (к примеру, фаервол блокирует SYN-пакеты), используется FIN-сканирование. FIN-пакеты иногда могут проходить через фаерволы без особых препятствий. Закрытые порты отвечают на FIN-пакет возвратом RST, тогда как открытые или фильтруемые проигнорируют запрос. Тем не менее, данный метод ненадёжен, поскольку системы на базе Windows, IRIX, Cisco, HP-UX всегда возвращают RST вне зависимости от состояния порта.

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

Существуют ещё более редкие техники сканирования портов — с заметными ограничениями, поэтому они мало используются. Тем не менее, Nmap поддерживает многие из них.

  • X-mas-сканирование и Null scan: схожи по принципу с FIN-сканированием:[3]
    • X-mas-сканирование отправляет пакеты с активными флагами FIN, URG и PUSH («пакет как рождественская ёлка»),
    • Null scan не устанавливает ни одного бита во флагах TCP (заголовок пуст).
  • Protocol scan: определяет, какие протоколы 3-го уровня (TCP, UDP, GRE и др.) разрешены на хосте.
  • Proxy-сканирование: для запуска используется прокси (SOCKS или HTTP); адрес отправителя — IP прокси-сервера. Некоторое ПО поддерживает сканирование через FTP-сервер.
  • Idle scan: — ещё один способ полностью скрыть свой IP-адрес (полностью «невидимое» сканирование).
  • ICMP-сканирование: применяется, чтобы выяснить, откликается ли хост на ICMP-запросы (например, ping).
  • Декой-сканирование: техника для маскировки действий — к основным сканирующим пакетам добавляются фиктивные с подменённым отправителем (анонимизация через спуфинг IP-адреса).

Фильтрация портов провайдерами

Многие интернет-провайдеры ограничивают возможность сканирования портов на адреса за пределами домашних сетей своих клиентов. Это регулируется в условиях предоставления услуг и политиках использования, на которые клиент должен дать согласие[6]. Некоторые провайдеры внедряют сетевые фильтры пакетов или прозрачные прокси, препятствующие исходящим сервисным запросам на определённые порты. Например, если провайдер использует прозрачный HTTP-прокси для порта 80, при сканировании любого адреса будет казаться, что порт 80 открыт, вне зависимости от реальной конфигурации целевого хоста.

Этические аспекты

Информация, получаемая в ходе сканирования портов, может использоваться для легитимных целей — например, создания инвентаризации сети и проверки её защищённости. Однако порт-сканирование может применяться и для подрыва безопасности. Многие компании используют сканирование портов для поиска открытых портов и отправки специальных шаблонов данных, пытаясь спровоцировать переполнение буфера. Такое действие способно привести к компрометации сети, потере или раскрытию конфиденциальной информации, а также к невозможности дальнейшей работы[3].

Степень угрозы, создаваемая сканированием портов, зависит от использованной методики, типа и номера сканируемого порта, а также реакций администратора. В то же время сканирование портов часто рассматривается как первый этап атаки и потому воспринимается очень серьёзно, так как способно раскрыть чувствительную информацию о хосте[7]. Тем не менее реальная вероятность атаки вслед за сканированием портов весьма низка. Вероятность атаки выше, если сканер портов используется совместно с сканерами уязвимостей.

Юридические последствия

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

  • В июне 2003 года гражданин Израиля Ави Мизрахи был обвинён властями Израиля в попытке получить доступ к компьютерной информации, к которой не имел прав. Он сканировал сайт Моссад. 29 февраля 2004 года был полностью оправдан: судья постановил, что подобные действия не должны пресекаться при их позитивных намерениях[8].
  • В 1998 году 17-летний житель Финляндии был обвинён в попытке получить доступ к сети одного из крупнейших финских банков. Он провёл сканирование портов внутри этой сети, но не добился успеха. 9 апреля 2003 года Верховный суд Финляндии оштрафовал его на 12 000 долларов США за расходы на судебную экспертизу[9].
  • В декабре 1999 года американец Скотт Мултон был арестован ФБР по обвинению в нарушении законов штата Джорджия и федерального закона США Computer Fraud and Abuse Act. На тот момент его компания выполняла обслуживание IT-инфраструктуры округа Чероки (штат Джорджия, США) — в рамках этой работы Мултон сканировал сервера в целях проверки их безопасности. Сканирование веб-сервера, находившегося под контролем другой компании, привело к конфликту и последующему разбирательству. В 2000 году суд оправдал Мултона, признав, что действий, наносящих вред целостности и доступности сети, не совершалось[10].
  • В 2006 году парламент Великобритании одобрил поправку к закону Computer Misuse Act 1990, определяющую ответственность лиц, которые «создают, модифицируют, поставляют или предлагают для передачи любой объект, зная, что он предназначен для или используется в связи с преступлением по статьям 1 или 3 данного акта»[11]. Применимость данной нормы осталась неясной, что подверглось критике со стороны специалистов по безопасности[12].
  • В Германии действует специальная статья Strafgesetzbuch § 202a, b, c.
  • Совет Европейского союза в 2013 году утвердил соответствующую директиву[13].

Онлайн-сканеры портов

  • Sygate Online Scan — расширенная проверка безопасности (Stealth Scan, Trojan Scan)
  • Planet Security Firewall-Check — быстрая, расширенная проверка, контроль критически опасных портов
  • Crucialtests — компактно, с советами по безопасности
  • ShieldsUP (Gibson Research Corporation) — быстрый сканер, наглядный интерфейс
  • DerKeiler’s Port Scanner — доступен только скан своего IP, подходит для интернет-кафе с ограничениями
  • AuditMyPC Free Port Scanning — поддерживает скан всех 65535 портов

Примечания

  1. Internet Security Glossary (англ.). Дата обращения: 16 июня 2024.
  2. Worm (англ.). Microsoft. Дата обращения: 16 июня 2024.
  3. 1 2 3 Erikson, Jon. HACKING the art of exploitation : [англ.]. — 2. — San Francisco : NoStarch Press, 2007. — P. 264. — ISBN 1-59327-144-1.
  4. Secrets of Network Cartography - UDP Scan (-sU) (англ.). Дата обращения: 16 июня 2024. Архивировано 16 мая 2016 года.
  5. Tecniche di Port Scanning (итал.). nmap.org. Дата обращения: 16 июня 2024.
  6. Customer Agreements, Policies & Service Disclosures (англ.). Дата обращения: 16 июня 2024.
  7. Jamieson, Shaun. The Ethics and Legality of Port Scanning : [англ.]. — SANS, 2001.
  8. Hon. Abraham N. Tennenbaum. "Verdict in the case Avi Mizrahi vs. Israeli Police Department of Prosecution" (англ.) (29 февраля 2004). Дата обращения: 16 июня 2024. Архивировано 7 октября 2009 года.
  9. Esa Halmari. "First ruling by the Supreme Court of Finland on attempted break-in" (англ.) (2003). Дата обращения: 16 июня 2024.
  10. Poulsen, Kevin. "Port scans legal, judge says" (англ.) (18 декабря 2000). Дата обращения: 16 июня 2024.
  11. UK Parliament. "Police and Justice Bill - Bill 119" (англ.) (25 января 2006). Дата обращения: 16 июня 2024.
  12. Leyden, John. "UK gov sets rules for hacker tool ban" (англ.) (2 января 2008). Дата обращения: 16 июня 2024.
  13. L_2013218IT.01000801.xml (итал.). eur-lex.europa.eu. Дата обращения: 16 июня 2024.

Литература

  • Staniford, S.; Hoagland, J. A.; McAlerney, J. M. (2002). “Practical automated detection of stealthy portscans” (PDF). Journal of Computer Security [англ.]. 10: 105—136.

Ссылки

  • Nmap

Категории