Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #67, ИЮЛЬ 2004 г.

Интернет под угрозой

Докучаев Дмитрий aka Forb

Xakep, номер #067, стр. 067-058-3


SYN-атака и Data Injection

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

Во всех вышеизложенных изъянах хакер посылает абсолютно пустой пакет. То бишь поле DATA имеет нулевой размер. При этом взломщик выигрывает в скорости, но выполняет всего одну задачу - разрыв соединения. Уотсон не исключает случаи внедрения в TCP-соединение, когда хакер может намеренно повредить пересылаемые данные. Для этого нужно не устанавливать флаги, а сформировать правильный пакет с подходящим SN. Если получатель расценит подобные данные как свои, то передаваемая информация заметно исказится. Правда, этот прием эффективен, если происходит передача большого файла с небольшой скоростью. В остальных случаях взломщик, вероятно, не успеет подобрать необходимый SN.

Практическая реализация

Но довольно утомительной теории! Давай проведем практический эксперимент, который покажет, действительно ли такую серьезную опасность представляет собой эта уязвимость. Попробуем протестировать какой-нибудь эксплойт, реализующий одну из вышеописанных атак. В инете выложено несметное количество разнообразных сплойтов для этого бага, но мне понравился только один гибкий Perl-вариант, который был написан K-sPecial'ом. Программа позволяет оборвать соединение с помощью RST-атаки. Как утверждает автор, при тестировании уязвимости он затратил всего 3 минуты на то, чтобы убить сетевое соединение. Посмотрим, что получится у нас :).

Исходник эксплойта и его описание можно найти по ссылке http://lists.netsys.com/pipermail/full-disclosure/2004-April/020458.html. Этот скрипт умеет перебирать как SN, так и SP/DP. В нашем эксперименте я подключусь к своему компьютеру с удаленного шелла и попробую прервать соединение.

Прежде чем тестировать багу, необходимо было установить модуль Net::RawIP, а также библиотеку libpcap. Подобный комплект позволяет создавать TCP-пакеты в Perl-сценариях. После того, как модуль корректно установился, я проверил синтаксис скрипта командой perl -c tcp.pl - интерпретатор не стал ругаться матом и молча пропарсил код сплойта.

Прежде чем начинать эксперимент, я бы хотел обратить твое внимание на ключевой момент сценария:

Создаем raw-socket

$a = new Net::RawIP;

$a-<set({ip =< {saddr =< "$sip",daddr =< "$dip"},

tcp =< {source =< $sport, dest =< $dport, rst =< 1,

syn =< 1, seq =< $i}}) ;

$a-<send;

В первой строке происходит создание объекта, далее заполняются все необходимые поля заголовка, а также устанавливается RST-флаг. Предполагаемый SN является счетчиком цикла.

Назад на стр. 067-058-2  Содержание  Вперед на стр. 067-058-4