Информационная безопасность
[RU] switch to English


Как использовать погрешности в реализации FTP протокола

Дэвид Сэйсердот в своей статье посвященной уязвимости FTP протокола и датированной аж апрелем 1996 года теоретически уязвимость FTP протокола при его некорректной реализации. В статье интересны два момента, причем не связанные напрямую с ее содержанием а именно:

1. С апреля 1996 года проблема нисколько не утратила своей актуальности. Проблема очень серьезная, поскольку позволяет, например, атаковать клиента находящегося за прокси-сервером (подсунув измененные данные прокси серверу вы тем самым подсунете их клиенту).

2. Дэвид ошибался как в оценке уязвимости FTP-клиентов, так и в сложности реализации данной уязвимости, т.к. указанные им методы чересчур сложны для реального использования.

Лечиться эта проблема так же должна другими методами: сервер не должен принимать более одного соединения на порт данных (так делает IIS, поэтому против него такая атака работает лишь как DoS, не позволяя подсоединиться клиентам). Клиент в активном режиме должен проверять IP адрес соединения и так же не позволять двух соединений на один порт. Кроме того, при получении сообщения об ошибке или при неожиданном закрытии контрольного сеанса, сторона, принимающая данные, должна эти данные игнорировать (т.е. удалять принятый файл). Кроме того, желательно наличие в протоколе команды вычисляющей контрольную сумму файла (хотя этим можно воспользоваться как DoS атакой - требуются большие ресурсы сервера).

К счастью, я не читал статью Дэвида (кстати, спасибо [email protected] за посылку на эту статью) иначе никогда не взялся бы за эту проблему. А потому обнаружил, что стандартный ftp из FreeBSD 2.2.5 (и наверняка любой другой BSD4.2 клиент) уязвим, несмотря на заверения Дэвида в обратном. Так же уязвим практически любой FTPD-based FTP сервер (wu-ftpd, например, практически любой версии или стандартный FTPD) . При этом ftp клиент в Midnight Commander, например, такой проблемы не имеет.

А потому, столкнувшись с этой проблеммой на собственной шкуре, я написал эксплоит, который использует точь-в-точь алгоритм предложенный Дэвидом больше трех лет назад. Может быть я и изобрел велосипед, но, похоже, на этом велосипеде за три года кататься разучились. По крайней мере, посещаемость FTP серверов не упала а защищенность не увеличилась.

Итак, рецепт:

Мы угадываем, какой порт будет открыт пассивным Ftp-сервером или активным клиентом и атакуем этот порт постоянными запросами на TCP соединение. Если соединение удалось установить, мы либо посылаем туба свои собственные данные либо читаем данные оттуда. Либо - и то и другое. Вопрос лишь в том, как угадать порт, а сделать это не сложно, если вы можете использовать атакуемую машину или как FTP сервер, или как прокси или как сервер для отправки почты. В случае атаки на FTP сервер - мы не имеем никаких проблем.

Как работает эксплоит?

Открывает соединение на 21й (ftp) порт сервера и через равные интервалы времени дает команду PASV, на которую сервер любезно отвечает номером открытого порта. Вот именно его мы и используем за основу для вычисления атакуемого порта. Соединение устанавливается, программа переходит в режим ожидания данных. Если в течении 5 секунд данные не поступили, то программа сама посылает данные. Работает как против сервера, так и против клиента (при условии, что на машине клиента так же живет FTP-Сервер). Можно атаковать клиента и используя данные о порте полученные другим образом, например, если на компьютере клиента стоит sendmail можно отправлять через него письма на свою машину и определять номер порта, с которого пришло соединения на 25й порт. Если на компьютере клиента есть прокси сервер, то можно запросить любую URL со своего компьютера и так же определить порт входящего соединения.

Как использовать?

ftpspy ip_адрес_сервера

Какие требования?

Канал связи между вами и сервером не должен быть сильно хуже, чем канал между сервером и клиентом. Кроме того, не всегда проходит против локальной машины с удаленным клиентом (ну да это и не интересно). Программа создает обширный трафик, причем мелкими пакетами, и получает обратно на каждый пакет уведомления о недостижимости. При этом программа находится в вечном цикле. Два этих факта вместе могут привести в недоумение локальную систему.

Исходный текст: ftpspy.c

О сайте | Условия использования
© SecurityVulns, 3APA3A, Владимир Дубровин
Нижний Новгород