Показать сообщение отдельно

  #2  
Старый 09.01.2008, 18:06
FraiDex
Участник форума
Регистрация: 16.06.2006
Сообщений: 179
Провел на форуме:
515368

Репутация: 135
Отправить сообщение для FraiDex с помощью ICQ
По умолчанию

активное снятие отпечатков

При активном снятии отпечатков на целевой хост отправляются произвольные пакеты и делается попытка определения ОС на основании таких значений полей заголовка ответных 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
Pinging 209.41.165.180 with 32 bytes of data:
Reply from 209.41.165.180: bytes=32 time 38ms TTL=113
Reply from 209.41.165.180: bytes=32 time 51ms TTL=113
Ping statistics for 209.41.165.180:
Packets: Sent = 2, Received = 2, Lost = 0 (0% loss), отдел адм практики 9 12
Approximate round trip times in milliseconds:
Minimum = 38ms, Maximum = 51ms, Average = 44ms
Нужно учитывать, что это не самый надежный метод. Если целевой хост является маршрутизатором или находится за NAT (Network Address Translation), описанный способ потерпит неудачу. Не вдаваясь в подробности известных методик снятия отпечатка удаленной ОС, используемых в утилитах типа nmap, я опишу способ, сложный в реализации, но дающий хорошие результаты по опознаванию удаленной ОС. Этот способ известен как RING scan и имеет программную реализацию. Суть методики в отправке произвольных SYN-пакетов на открытый порт и ожидании SYN ACK пакетов. После получения SYN ACK пакета, он молча блокируется, что заставляет удаленный хост заново переслать его по истечению таймаута. Вычисляя задержку между такими SYN ACK пакетами для различных хостов, вы можете собрать статистику задержек для различных операционных систем. Эти данные можно эффективно использовать для опознавания ОС, имеющих сходный тип TCP стека и находящихся за МСЭ, например FreeBSD и Windows 2000, в которых используется одинаковый тип TCP стека. Я привожу пример, в котором nmap не смог верно определить ОС на двух хостах, ошибочно приняв обе за FreeBSD по той причине, что один из хостов находился за межсетевым экраном.

Сканируем первый хост (202.83.174.99):

Код:
Interesting ports on ntc.net.pk (202.83.174.99):
(The 97 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
Device type: general purpose
Running: FreeBSD 4.X
OS details: FreeBSD 4.6.2-RELEASE - 4.8-RELEASE
Данные другого хоста (202.83.162.27):

Код:
Interesting ports on 202.83.162.27:
(The 99 ports scanned but not shown below are in state: filtered)
PORT STATE SERVICE
80/tcp open http
Device type: general purpose
Running: FreeBSD 4.X|5.X
OS details: FreeBSD 4.3 - 4.4PRERELEASE, FreeBSD 4.9 - 5.1, FreeBSD 5.0-RELEASE,
Теперь попробуем применить описанную выше SYN ACK методику. Для начала мы должны настроить локальный МСЭ на тихое блокирование всех SYN ACK пакетов, приходящих с удаленного хоста.

Код:
life1# iptables –A INPUT –p tcp –j DROP –s 202.83.162.27
Теперь отправим SYN пакет на открытый 80 порт и начнем слежение за выводом tcpdump.

Код:
root@life# hping -S -p 80 -c 1 202.83.162.27
17:22:51.079596 202.134.134.230.1816 > 202.83.162.27.http: S win 512
17:22:51.208938 202.83.162.27.http > 202.134.134.230.1816: S ack win 5840
17:22:53.218939 202.83.162.27.http > 202.134.134.230.1816: S ack win 5840
17:23:57.218939 202.83.162.27.http > 202.134.134.230.1816: S ack win 5840
17:23:03.218939 202.83.162.27.http > 202.134.134.230.1816: S ack win 5840
17:23:11.468939 202.83.162.27.http > 202.134.134.230.1816: S ack win 5840
17:24:21.618938 202.83.162.27.http > 202.134.134.230.1816: S ack win 5840
Разница во времени, между получением SYN ACK пакетов составляет примерно 2, 4, 5, 7 и 10 секунд.
Теперь проделаем те же действия над первым хостом, для которого достоверно известно, что на нем запущена ОС FreeBSD. Ниже приводится вывод tcpdump.

Код:
root@life# hping -S -p 80 -c 1 202.83.174.99
17:45:50.019746 202.134.134.230.2644 > 202.83.174.99.http: S win 512
17:45:50.148940 202.83.174.99.http > 202.134.134.230.2644: S ack win 5840
17:45:54.108939 202.83.174.99.http > 202.134.134.230.2644: S ack win 5840
17:46:00.108939 202.83.174.99.http > 202.134.134.230.2644: S ack win 5840
17:46:12.308939 202.83.174.99.http > 202.134.134.230.2644: S ack win 5840
17:46:36.378938 202.83.174.99.http > 202.134.134.230.2644: S ack win 5840
В данном случае разница во времени составляет примерно 4, 5, 12 и 24 секунды, причем после четвертого полученного SYN ACK пакета их отправка закончилась. Эксперименты с другими хостами показали, что задержки повторной передачи SYN ACK пакетов системы FreeBSD составляют примерно 3, 6, 12, 24 секунды, а Windows-хостов соответственно 2, 4, 6, 8, 10 секунд. Это информация может быть полезной для правильного опознавания операционной системы в тех случаях, когда другие методы терпят неудачу и дают неверные результаты. Обратите внимание на то, что представленные выше значения не очень точны и были получены в результате опытов с двумя хостами, на одном из которых установлена Windows 2000, а на другом FreeBSD 4.6. Исследовав несколько десятков хостов можно получить более точные данные. Описанная методика имеет несколько производных от нее, например, вместо проверки времени задержки ответных SYN ACK пакетов, можно продолжить стандартное трехфазовое TCP соединение, а затем закрыть его, отослав FIN пакет, но при этом не отправлять никаких подтверждений на ответные FIN ACK пакеты:
Код:
Host1 -> SYN -> Host 2
Host2 -> SYN ACK -> Host1
Host1 -> ACK -> Host2
Host1 -> FIN -> Host2
Host2 -> FIN ACK -> Host1
Host2 -> FIN ACK -> Host1
Host2 -> FIN ACK -> Host1
И так далее..
Первый хост (Host1) не отправляет ответов на FIN ACK пакеты второго хоста (Host2). Кроме этого, можно еще использовать RST-пакеты.

заключение

Автоматизированные способы снятия отпечатков удаленной системы могут давать неплохие результаты, однако в некоторых средах они не всегда эффективны. В этих случаях для получения наиболее точных результатов нужно комбинировать несколько различных методик. Приемы, описанные в этой статье, применяются “вручную” и могут использоваться для получения дополнительной информации об устройстве и функционировании сети. Приведенные подходы не единственные, например, из-за широты тематики не описывались методы пассивного снятия отпечатков.

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

Из журнала "Сетевые решения"