Подмена одного из участников сетевого обмена в сети при использовании протокола tcp. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Подмена одного из участников сетевого обмена в сети при использовании протокола tcp.



Протокол TCP (Transmission Control Protocol) является одним из базовых протоколов транспортного уровня сети Internet. Этот протокол имеет возможность исправлять ошибки, которые могут возникнуть при передаче пакетов, и является протоколом с установлением логического соединения - виртуального канала. По этому каналу передаются и принимаются пакеты с регистрацией их последовательности, осуществляется управление потоком пакетов, организовывается повторная передача искаженных пакетов, а в конце сеанса - канал разрывается. При этом протокол TCP является единственным базовым протоколом из семейства TCP/IP, имеющим надежную систему идентификации пакетов. Именно поэтому протоколы прикладного уровня FTP и TELNET, предоставляющие пользователям удаленный доступ на хосты Internet, реализованы на базе протокола TCP.

Для идентификации пакета в TCP-заголовке существуют два 32-разрядных идентификатора, которые еще играют и роль счетчика пакетов. Первый идентификатор носит название Sequence Number, а второй-Acknowledgment Number. Также, нас будет интересовать поле, называемое Control Bit. Это поле размером 6 бит может содержать следующие командные биты (слева направо):

URG: Urgent Pointer field significant

ACK: Acknowledgment field significant

PSH: Push Function

RST: Reset the connection

SYN: Synchronize sequence numbers

FIN: No more data from sender

Рассмотрим схему создания TCP-соединения (виртуального TCP-канала). Предположим, что хосту А необходимо создать TCP-соединение с хостом В. Тогда А посылает на В следующий пакет:

1.А->В: SYN.ISSa

Это означает, что в посланном пакете установлен бит SYN (synchronize sequence number), а в поле Sequence Number установлено начальное 32-битное значение ISSa (Initial Sequence Number).

В отвечает:

2. В -> A: SYN, ACK, ISSb, ACK(ISSa+l)

В ответ на полученный от А запрос В отвечает сообщением, в котором установлен бит SYN и установлен бит ACK; в поле Sequence Number хостом В устанавливается свое начальное значение счетчика — ISSb: поле Acknowledgment Number содержит значение ISSa, полученное в первом пакете от хоста А и увеличенное на единицу. А, завершая handshake, посылает:

3. А -> В: ACK, ISSa+1, ACK(ISSb+1) В этом пакете установлен бит ACK; поле Sequence Number содержит ISSa +1; поле Acknowledgment Number содержит значение ISSb+1. Посылкой этого пакета на хост В заканчивается трехступенчатый handshake и TCP-соединение между хостами А и В установлено.

Далее, хост А может посылать пакеты с данными на хост В по только что созданному виртуальному TCP-каналу:

4. А -> В: ACK, tSSa+1, ACK(ISSb+l); DATA

Из рассмотренной выше схемы создания TCP-соединения становится ясно, что для формирования ложного TCP-пакета необходимо знание текущих для данного соединения 32-битных параметров: Sequence Number и Acknowledgment Number. Возможная подмена TCP-пакета становится еще более важной, так как изучение протоколов FTP и TELNET, использующих TCP, показало, что проблема идентификации FTP и TELNET-пакетов целиком возлагается данными протоколами на транспортный уровень, то есть, на TCP. Это означает, что атакующему достаточно, подобрав соответствующие текущие значения идентификаторов TCP-пакета для данного TCP-соединения (например, данное соединение может представлять собой FTP или TELNET подключение с доверенного хоста на сервер), послать пакет с любого хоста в сети Internet от имени одного из участников данного соединения (например, от имени клиента) и данный пакет будет воспринят как верный! Но это еще не все. Так как, FTP и TELNET не проверяют IP-адреса отправителей, от которых им приходят пакеты, то, в ответ на полученный ложный пакет, FTP или TELNET сервер отправит ответ на указанный в ложном пакете настоящий IP-адрес атакующего и в результате, атакующий начнет работу с FTP или TELNET сервером со своего IP-адреса, но с правами легально подключившегося пользователя, который, в свою очередь, потеряет связь с сервером из-за рассогласования счетчиков!

Итак, для осуществления описанной выше атаки необходимым и достаточным условием является знание двух текущих параметров SYN и АСК (не путать с контрольными битами!), идентифицирующих TCP-соединение. Рассмотрим возможные способы их получения. Во-первых, если атакующий находится в одном сегменте с целью атаки или через его сегмент проходит трафик интересующей цели, то задача получения значений SYN и АСК является тривиальной и решается путем анализа сетевого трафика. Наибольший интерес для нас представляют межсегментные атаки, когда атакующий и его цель находятся в разных сегментах сети. В этом случае задача получения значений SYN и АСК является не тривиальной.

Первый вопрос, который необходимо решить в этом случае, как операционная система формирует начальное значение SYN, называемое Initial Sequence Number? В описание протокола TCP в RFC 793 рекомендуется увеличивать значение этого 32-битного счетчика на 1 каждые 4 микросекунды. Однако, это является только рекомендацией, поэтому в Berkeley-совместимых ядрах ОС UNIX значение счетчика увеличивалось на 128 каждую секунду и на 64 для каждого нового соединения. Анализ исходных текстов ядра ОС Linux показал, что значение SYN вычисляется данной ОС по следующей формуле:

(1) SYN = Msec +sec*1000000, где Msec-текущее время в микросекундах sec-текущее время в секундах, причем отсчет его идет от 1970 года.

Следовательно, можно сделать общий вывод, что обычно в ОС значение Initial Sequence Number вычисляется по следующей обобщенной формуле:

(2) SYN = a*Msec + b*sec, где а и b—некоторые коэффициенты, специфичные для данной ОС.

Итак, получить от операционной системы текущее ее значение SYN не составляет труда. Для этого достаточно послать запрос на создание TCP-соединения и в ответ ОС вернет нужное число. Далее, зная формулу, по которой вычисляется SYN, можно с той или иной степенью точности вычислить текущие временные параметры операционной системы, с помощью которых и получается значение SYN. В качестве примера, возьмем ОС Linux 1.2.8. Для этой ОС справедлива обобщенная формула (2), при а=1 и b=1000000. Тогда, получив в ответ на запрос значение SYN можно по формуле (1) вычислить значение Msec, приближенно равное SYN-sec* 1000000 + time/2, где time-это время, через которое пришел ответ на запрос. Узнать текущее значение sec на удаленной ОС не составляет труда. Сложнее обстоит дело с параметром time/2, так как время прохождения пакета туда и обратно может не совпадать. Но, послав несколько запросов и получив ряд значений time можно определить степень точности вычисленного значения Msec (например, с точностью до 1000 мкс или до ЮОмкс). Соответственно, чем ближе цель атаки, тем выше степень точности определения значения Msec.

Теперь, определив параметры, необходимые для вычисления SYN, на операционных системах на сервере и предполагаемом клиенте, атакующий начинает следить за ОС сервера, ожидая подключения предполагаемого клиента. В тот момент времени, когда подключение произошло, атакующий может подсчитать возможный диапазон значений SYN, которыми обменялись при создании TCP-канала данные хосты. Так как атакующий может вычислить значения SYN только приближенно, то ему не избежать подбора нужных значений. Однако, если не проводить описанный выше анализ, то для перебора всех возможных значений SYN и АСК понадобилось бы послать 264 пакетов, что не реально. В случае использования описанного выше анализа в зависимости от полученной степени точности потребуется послать значительно меньшее число пакетов. Например, если удалось вычислить значения SYN на операционных системах с точностью до 1000 мкс, то достаточно послать всего 1000*1000 пакетов.

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



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 297; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.143.0.157 (0.005 с.)