|

IP-Spoofing в никсах
Как подделывать свой IP
Xakep, номер #036, стр. 036-058-3
А, чтобы установить обмен данными, посылает следующее:
3. A -> B: ACK, ISSa+1, ACK(ISSb + 1)
В этом пакете установлен бит ACK; поле Sequence Number содержит ISSa + 1; поле Acknowledgment Number содержит значение ISSb + 1. Посылкой этого пакета на хост В заканчивается трехступенчатая стадия, и TCP-соединение между хостами А и В считается установленным, смотри:
4. A -> B: ACK, ISSa+1, ACK(ISSb+1); DATA
Теперь хост А может посылать пакеты с данными на хост В по только что созданному TCP-каналу:
Как видишь, единственными идентификаторами TCP-соединения являются два 32-битных параметра Sequence Number (SEQ) и Acknowledgment Number (ACK). Поэтому для создания ложного TCP-пакета хакеру необходимо знать текущие идентификаторы для данного соединения - ISSa и ISSb. А их нужно подобрать. По сути, это единственная серьезная трабла, которую нужно преодолеть в IP-Spoofing'е.
Rlogin
Rlogin - это простой серверный протокол, имеющий прямое отношение к TCP, поскольку последний использует его. Этот протокол позволяет входить пользователю с одного хоста на другой. То есть, если один сервак доверяет другому, то последний может установить соединение с первым без пароля! Подтверждением, как я уже говорил, тут выступает ACK. Как видишь, этот протокол очень помогает тем, кто хочет провести IP-Spoofing. Его демон сидит на 513 порту.
Нужные проги
Мы заюзаем следующие программы:
Spoofit_v3.h - Новая версия известной spoofit-библиотеки.
SEQ-scan.c - Программа, чтобы анализировать SEQ-номер генератора хоста.
Eriu.c - Автоматизированная spoofing-утилита.
Действуем!
Поскольку атакующий хост не видит второго пакета, в частности ISSb, мы не можем его использовать, чтобы вычислить требуемый ACK (ISSb + 1) для третьего пакета. Поэтому не остается ничего, кроме того как угадать :). Но нам также нужно и значение ISSa, поэтому для осуществления описанной выше атаки необходимым и достаточным условием является знание двух текущих 32-битных параметров ISSa и ISSb, идентифицирующих TCP-соединение. Но главная загвоздка состоит в том, что мы не узнаем, правильно ли мы ввели ISSb или нет :(. Кроме того, так как наш хост начал соединение с атакуемым хостом первым, то после того как второй пакет достигнет его, тот отправит доверенному хосту флажок - третий пакет, но вследствие того что доверенный сервак на самом деле не хотел подключаться, он просто пошлет атакуемому серваку флажок RST, и полетит к нам птица-обломинго :(. Мы, естественно, должны это предотвратить. Самым распространенным способом является так называемый SYN-флуд на доверенный хост, после удачного такого флуда атакованный им хост не сможет обрабатывать поступающие пакеты. Что нам и нужно! А что такое SYN-флуд? Да это просто многократные запросы на соединение (SYN) с каким-либо хостом! Чтобы его провести, просто забросай доверенный хост многократными запросами на подключение, вследствие чего он не сможет послать губительный для нас RST-флажок. Теперь о том, как предсказать ISS. Нужно просто знать, как сервер выбирает ISS. Очевидно, что самым худшим для нас вариантом является тот, когда это значение выбирается случайно, без каких-либо зависимостей. Но, как показывает практика, достаточное количество ОСевух выбирают это значение в зависимости от прошедшего времени! Например, в ОС Linux 1.2.8 значение ISS выбирается по формуле:
Назад на стр. 036-058-2 Содержание Вперед на стр. 036-058-4
|