Интернет под угрозой Докучаев Дмитрий aka Forb Xakep, номер #067, стр. 067-058-4 Я подключился с удаленного шелла на собственный компьютер. После этого при помощи команды tcpdump -i iface я посмотрел размер окна - в моем случае оно имело границу 5040. В этом же выводе tcpdump'а я узнал и содержимое полей SA, SP, DA и DP, их необходимо было задать при интерактивном опросе эксплойта. Впрочем, эти данные ты можешь определить, выполнив команду netstat -an на локальной машине. Запустив эксплойт и выбрав требуемый тип перебора, я ввел известные о соединении данные. Размер окна можно было оставить минимальным (хотя я ввел цифру, полученную из вывода tcpdump). Установив стартовый SN и время паузы нулевыми, я начал засекать время и периодически проверял активность соединения. Не прошло и 15 минут, как мое FTP-соединение рухнуло, что, признаюсь, вызвало у меня дикий восторг :). 15 минут - это ровно в пять раз больше заявленного автором сплойта времени, но это можно объяснить тем, что между мной и шеллом был довольно узкий канал и перебор едва ли велся на оптимальной скорости. Финальный некролог Даже при двух неизвестных переменных (SN и SP) атака возможна. В первую очередь пострадает протокол BGP, затем некоторые циски (со слабой TCP-реализацией). И, наконец, при желании хакер может сорвать практически любое соединение. Если, конечно, он владеет мощным каналом и определенными навыками во взломе. Уже известны первые крупные срывы соединений, и это не предел, поскольку запатчить протокол TCP на всех серверах в инете практически невозможно. Поэтому в скором будущем жди известий о кратковременной кончине интернета ;). Магические флаги Как я говорил, в TCP-заголовке обязательно указываются флаги. Самыми важными из них являются SYN, ACK, FIN и RST. Вот их краткое описание: Флаг SYN используется при инициализации соединения. При формировании соединения отправитель шлет получателю пакет с начальным SN и взведенным флагом SYN. Получатель, приняв пакет, отправляет ответный запрос с взведенными флагами SYN и ACK. При этом заполняется поле заголовка ACK, которое имеет значение "полученный SN+1". Помимо этого, получатель определяет SN со своей стороны. Отправитель данных, приняв подтверждение, переходит в состояние ESTABLISHED, а также засылает еще один пакет с подтверждением номера очереди получателя (выставляется флаг ACK и значения поля ACK, равное "SN+1"). И только после этого начинается передача данных. Подобная процедура называется "рукопожатием" или "подтверждением трех путей". Процедура завершения соединения представляется похожим образом. Отправитель засылает флаг FIN, что означает "данных больше нет". Получатель выдает подтверждение с флагом ACK и FIN, получив которое, отправитель шлет последний ACK на FIN и закрывает соединение. Приняв последнее подтверждение, получатель окончательно завершает передачу. Флаг RST используется для перезагрузки соединения в случае возникновения ошибок (дубликата SYN и т.п.). Про остальные флажки URG и PSH ты можешь прочитать в RFC793. |