![]() |
Исследование удаленных хостов с помощью hping
Целью этой статьи является обзор некоторых методов, которые могут быть эффективно использованы для исследования удаленных хостов. Кое-что на эту тему уже публиковалось в «Сетевых Решениях», однако, во-первых, это было давно, и, во-вторых, в тех публикациях упор делался на использование nmap и эвристические техники на основе изучения баннеров работающих сервисов.
Предполагается, что читатель понимает основные идеи host fingerprinting и знаком с принципами функционирования протоколов TCP/IP. Мы рассмотрим методы снятия отпечатков как сервисов, слушающих порт, так и операционных систем в различных защищенных МСЭ средах и попытаемся выяснить преимущества и недостатки различных способов. Знакомство с hping и nmap очень пригодится для понимания изложенного материала. введение Удаленное снятие отпечатков - это процесс идентификации операционной системы хоста и сетевых служб, прослушивающих определенные порты, по сети. Обычно это производится различными способами активного и пассивного сканирования, путем отправки некоторого количества пакетов и анализа ответов. Вообще, общедоступные утилиты, в том числе и nmap, довольно неплохо выполняют сканирование и определение версии удаленной ОС. Но в тех случаях, когда хост находится за межсетевым экраном, эти утилиты мало чем могут помочь, либо выдают неоднозначные или неверные результаты. Это особенно справедливо для машин, трафик которых серьезно фильтруется МСЭ и которым разрешено принимать и отправлять очень небольшое количество типов пакетов. В этих случаях нам нужно использовать другие методы для правильного определения состояния удаленной машины. Мы рассмотрим некоторые из них, включая RING- и ICMP-сканирование. В первом разделе рассматриваются различные методы сканирования портов, тогда как вторая часть пытается пролить свет на снятие отпечатка операционной системы. сканирование портов Начнем с основных методик сканирования портов, с использованием таких утилит, как nmap и hping. Вначале мы обсудим общеизвестное SYN- и SYNACK- сканирование и поведение различных хостов при приеме таких TCP-пакетов. Затем рассмотрим, как различаются результаты сканирования машин находящихся за МСЭ и тех, чей трафик не фильтруется. После этого мы обратим внимание на некоторые продвинутые техники, включая FIN-сканирование и UDP-сканирование хостов, находящихся за МСЭ. hping Hping описывается как утилита, которая может эффективно использоваться для сканирования, снятия отпечатков и тестирования межсетевых экранов. Среди большего количества возможностей утилиты присутствует возможность отправки произвольных пакетов различных протоколов и выполнение удаленного сканирования. Это очень удобно при изучении ответов хоста на различные произвольные пакеты. nmap Network Mapper (nmap) это известная утилита для исследования сетей, которую можно использовать для сканирования портов и определения удаленной ОС. Широкий функционал утилиты включает в себя пассивное и idle-сканирование, хотя возможность отправки произвольных пакетов отсутствует. cканирование с установлением наполовину открытого соединения (SYN) Идея сканирования с установлением наполовину открытого соединения (также известного как SYN-сканирование) очень проста. Отсылается SYN-пакет и ожидается ответ. Если в ответ получено SYN ACK, это означает, что удаленный порт открыт, в противном случае, если получен пакет с флагом RST, порт закрыт. Как вы пониматете, техника предполагает, что трехэтапное установление TCP-соединения не производится. фильтрованные и закрытые порты Однако межсетевой экран может просто заблокировать доступ к каким-то открытым портам. В этих случаях говорят, что порт фильтрован. При таком раскладе мы никогда не получим ответ на наш SYN-пакет. Также многие МСЭ блокируют RST-пакеты, являющиеся «ответом от закрытого порта». В таких ситуациях сложно понять, какие порты закрыты, а какие фильтрованы. Ниже приводятся результаты сканирования с помощью nmap хоста без МСЭ. Код:
root@life# nmap –P0 –p 1,2,21,80 202.83.174.99Код:
root@life# nmap –P0 –p 1,2,21,80 209.41.165.180Код:
root@life# hping -S -p 80 -c 2 209.41.165.180Код:
root@life# hping -S -p 1 -c 2 209.41.165.180Код:
root@life# hping -S -p ++20 209.41.165.180Код:
root@life#hping -S -p 443 209.41.165.180Метод основан на том, что если закрытый порт получает пакет с установленным флагом FIN, при нормальных условиях он ответит RST-пакетом. Открытые порты не отвечают на FIN-пакеты. Это может пригодиться в тех случаях, когда SYN-пакеты блокируются межсетевым экраном. Однако это не применимо при сканировании Windows-компьютеров вследствие того, что они никогда не отвечают на FIN-пакеты. Давайте создадим два хоста в VMWare. На один из хостов установим Linux, а с другого будем отправлять FIN-пакеты. Начнем с того, что заблокируем весь нормальный SYN-трафик на Linux-хосте. Чтобы заблокировать все входящие пакеты с установленным флагом SYN, мы воспользуемся iptables. iptables Iptables – это основная утилита ОС Linux, используемая для фильтрации сетевых пакетов. Iptables организует правила файрволла в виде так называемых таблиц (есть 3 встроенные таблицы, но можно добавить и свои), каждая из которых содержит некоторые заранее определенные цепочки (chains). Таблица filter отвечает за фильтрацию (блокирование или разрешение) и содержит три встроенные цепочки, названные INPUT, OUTPUT и FORWARD. Таким образом, для блокирования всех TCP-пакетов с установленным флагом SYN, нам всего лишь нужно добавить соответствующее правило в цепочку INPUT. Код:
life1# iptables –A INPUT –p tcp –tcpflags SYN –j DROPНиже приведены результаты отправки SYN-пакетов на порт 80. Код:
E:\hping>hping –S –p 80 –c 10 LIFE1Код:
E:\hping>hping –S –p 50 –c 10 LIFE1Код:
E:\hping>hping –F –p 50 LIFE1UDP-порты Сканирование UDP портов – непростое занятие из-за ненадежности получаемых результатов. Стандартный способ состоит в отправке пакетов на UDP- порты и идентификации открытых портов на основании того, что обычно от закрытых портов приходит ICMP-сообщение «Port Unreachable». Однако, не факт, что во всех случаях вы получите такой ответ. Ниже показан результат сканирования UDP-портов с помощью nmap. Код:
root@life#nmap -sU -p 21,53,80 yns1.yahoo.comТак как сканируемый хост – DNS-сервер, высока вероятность того, что его 53 UDP-порт открыт для DNS-запросов. Попробуем просканировать его с помощью hping. Применив стандартный метод UDP-сканирования, мы также не получили ответа. Код:
root@life#hping -2 -p 50++ yns1.yahoo.comКод:
root@life/tmp#tcpdumpКод:
root@life#tcpdumpКод:
root@life#hping -2 -p 11 –c 3 202.179.137.59снятие «отпечатка пальцев» ОС Идентификация систем, находящихся за МСЭ, усложнено из-за того, что межсетевой экран может изменять TCP/IP-пакеты, вводя в заблуждения исследователя системы. Методы снятия отпечатков пальцев ОС (fingerprinting) подразделяются на пассивные и активные. пассивное снятие отпечатков В случае пассивного снятия отпечатков на целевой хост не отправляется никаких пакетов. Вместо этого используется некоторый промежуточный хост (компьютер-зомби) и делается попытки определить ОС целевого хоста, подсчитывая разницу между значениями IPID. Этот метод известен как idle scan. Также попытаться определить целевую ОС можно, получив доступ к входящему и исходящему трафику целевого хоста каким-либо другим способом. Не рассматривая эти способы, давайте сразу перейдем к активному методу. |
активное снятие отпечатков
При активном снятии отпечатков на целевой хост отправляются произвольные пакеты и делается попытка определения ОС на основании таких значений полей заголовка ответных TCP/IP-пакетов, как временные характеристики или IPID, TOS, TCP ISN, флаг фрагментации и т. д. Другой старый метод определения удаленной ОС состоит в анализе значения TTL ICMP echo-пакета. Это простой способ, однако он не может выявить различия разных вариантов одной и той же ОС, например Windows 98, XP и 2000. Обычно в каждой ОС установлено фиксированное, заранее определенное, значение TTL. В операционных системах Microsoft это значение по умолчанию равно 128, тогда как в Linux - 256. Ниже показан пример определения удаленной ОС по значению TTL ответного ICMP echo пакета. Я просто пингую целевую машину и проверяю значение TTL полученного в ответ пакета. В данном случае оно равно 113, что позволяет предположить, что удаленная ОС принадлежит к семейству Windows, так как стартовое значение TTL этих систем равно 128, а маршрут от моей машины до целевой составляет примерно 15 промежуточных хостов (113 + 15 = 128), что может быть проверено с помощью traceroute. Код:
E:\>ping 209.41.165.180Сканируем первый хост (202.83.174.99): Код:
Interesting ports on ntc.net.pk (202.83.174.99):Код:
Interesting ports on 202.83.162.27:Код:
life1# iptables –A INPUT –p tcp –j DROP –s 202.83.162.27Код:
root@life# hping -S -p 80 -c 1 202.83.162.27Теперь проделаем те же действия над первым хостом, для которого достоверно известно, что на нем запущена ОС FreeBSD. Ниже приводится вывод tcpdump. Код:
root@life# hping -S -p 80 -c 1 202.83.174.99Код:
Host1 -> SYN -> Host 2Первый хост (Host1) не отправляет ответов на FIN ACK пакеты второго хоста (Host2). Кроме этого, можно еще использовать RST-пакеты. заключение Автоматизированные способы снятия отпечатков удаленной системы могут давать неплохие результаты, однако в некоторых средах они не всегда эффективны. В этих случаях для получения наиболее точных результатов нужно комбинировать несколько различных методик. Приемы, описанные в этой статье, применяются “вручную” и могут использоваться для получения дополнительной информации об устройстве и функционировании сети. Приведенные подходы не единственные, например, из-за широты тематики не описывались методы пассивного снятия отпечатков. Большинство межсетевых защит блокируют некоторые типы трафика и часто затрудняют идентификацию находящихся за ними систем. Однако тщательное изучение их поведения может помочь опознаванию закрытых, фильтрованных и открытых TCP- и UDP-портов, а также определению операционной системы удаленного хоста. Из журнала "Сетевые решения" |
FraiDex, спасиб за хорошую статью, наконец-то разобрался, в этих syn, fin-сканированиях.)
|
| Время: 12:44 |