Протокол TFTP

В настоящей жизни у всех нас есть родственники, близкие и не очень. Если провести параллель с сетевым миром, то картина выглядит похожей. В данной статье мы рассмотрим двоюродного брата протокола FTP протокол TFTP (Trivial File Transfer Protocol – Протокол передачи обычных файлов). Они обладают одинаковыми свойствами, но в то же самое время у них есть и некоторые существенные различия.

Протокол TFTP и Вы

Протокол TFTP необычный, как может показаться из его названия. Это хорошо сделанный протокол с характерными функциями. Протокол является излюбленным для хакеров, когда они хотят отправить или получить какие-либо файлы. TFTP достаточно быстр, но мы коснемся его скорости немного позже. Так же как большинство других протоколов прикладного уровня, TFTP передается по IP и использует пользовательский протокол данных (UDP ) в качестве протокола передачи.

В протоколе TFTP содержатся 5 сообщений:

  • RRQ, которое выводится как запрос на чтение

  • WRQ, которое выводится как запрос на запись

  • ACK, которое выводится как сообщение подтверждения

  • ERROR, которое выводится как сообщение об ошибке

  • DATA, которое выводится как сообщение на чтение или запись следующей части данных

Когда вы натолкнетесь на пакеты TFTP, вы сможете увидеть такие сообщения в самом пакете. В протоколе TFTP содержатся также коды ошибок, которые вы сможете увидеть ниже. Насколько вы помните, в наших рассказах о протоколах HTTP и SMTP мы говорили, что в них тоже есть коды ошибок и состояния. В функции данных кодов входит создание связанного обмена данными, в которых иногда могут быть ошибки. Данные коды рассматривают различные условия обмена данными между клиентом и сервером.

Протокол TFTP обычно используется для хранения и поиска файлов настроек переключателей Cisco IOS и Catalyst. Я уже упоминал, что хакеры используют его для поиска и хранения файлов на атакуемых компьютерах. Вы не ограничены возможностью передачи содержимого ascii, вы можете передавать также и двоичные файлы. Так как протокол является излюбленным у хакеров, вы всегда должны относиться с подозрением к трафику TFTP на своем компьютере.

Продолжаем!

Я уже говорил, но повторю еще раз: практика - это лучший способ обучения. Поэтому давайте взглянем на трафик TFTP. Далее пойдут небольшие отрывки с моими комментариями.

10:43:20.926155 IP (tos 0x0, ttl 128, id 69, offset 0, flags [none], length:
44) 192.168.1.102.1029 > 192.168.1.101.69: [udp sum ok]  16 RRQ "example"
octet
 0x0000:  4500 002c 0045 0000 8011 b660 c0a8 0166  E..,.E.....`...f
 0x0010:  c0a8 0165 0405 0045 0018 833b 0001 6578  ...e...E...;..ex
 0x0020:  616d 706c 6500 6f63 7465 7400 0000           ample.octet...

Данный трафик был получен с помощью иной версии windump, и выглядит он поэтому несколько иначе, чем тот, к которому вы более привычны. В верхнем пакете представлен запрос на чтение для файла «example». Это видно из подчеркнутой записи RRQ. Далее в скобках следует файл, который запрашивается с сервера TFTP, расположенного по адресу 192.168.1.101 на порту 69. Этот порт ассоциируется с TFTP и находится в зоне от 0 до 1024. Мы также можем видеть запись “octet”, которая следует за именем файла.

Октет означает, что данные будут переданы в 8-разрядных байтах в отличие от другого типа передачи «netascii». В этом случае TFTP воспринял бы файл «example» как строки текста ascii, но я не буду останавливаться на этом подробно. Наконец я покажу, что 16 в сообщении RRQ относится к количеству данных TFTP, отправленных в пакете. Это хорошо видно при элементарном подсчете. Длина пакета составляет 44, как видно из заголовка. IP заголовок состоит из 20 байт, а заголовок UDP – из 8. Оставшиеся 16 байт данных TFTP заключены в самом пакете. Различия в размерах между TCP и UDP объясняет, почему UDP быстрее: на 12 байт заголовочной информации меньше для отправки. Это ускоряет пересылку файлов.

10:43:20.977012 IP (tos 0x0, ttl  64, id 8683, offset 0, flags [DF], length:
130) 192.168.1.101.32768 > 192.168.1.102.1029: [bad udp cksum 424c!] UDP,
length: 102
 0x0000:  4500 0082 21eb 4000 4011 9464 c0a8 0165  E...!.@.@..d...e
 0x0010:  c0a8 0166 8000 0405 006e 849b 0003 0001  ...f.....n......
 0x0020:  5468 6520 6265 7374 2077 6179 2074 6f20  The.best.way.to.
 0x0030:  6c65 6172 6e20 6162 6f75 7420 7468 696e  learn.about.thin
 0x0040:  6773 2069 7320 746f 200a 6163 7475 616c  gs.is.to..actual
 0x0050:  6c79 2064 6f20 6974 2079 6f75 7273 656c  ly.do.it.yoursel
 0x0060:  662e 204d 7563 6820 6c69 6b65 2077 6861  f..Much.like.wha
 0x0070:  740a 4920 616d 2064 6f69 6e67 206e 6f77    t.I.am.doing.now
 0x0080:  210a                                                                 !.

Выше представлен запрашиваемый файл “example”, отправляемый сервером TFTP, который расположен по адресу 192.168.1.101. Из части ascii пакета видно, что содержанием файла является сообщение о том, что лучший способ обучения - это самостоятельная практика.

10:43:20.979434 IP (tos 0x0, ttl 128, id 70, offset 0, flags [none], length:
32) 192.168.1.102.1029 > 192.168.1.101.32768: [udp sum ok] UDP, length: 4
0x0000:  4500 0020 0046 0000 8011 b66b c0a8 0166  E....F.....k...f
0x0010:  c0a8 0165 0405 8000 000c f7af 0004 0001  ...e............
0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............

Это пакет подтверждения. Довольно странно, что это UDP, а не TCP. Почему мы тогда видим данный пакет? На самом деле это часть протокола TFTP и коды операции, которые идут совместно с ним. Где же они расположены? Хороший вопрос. Мы знаем, что наш IP заголовок заканчивается на 0165 байтах, так как это два последних октета IP адреса места назначения. Заголовок UDP начинается с байтов 0405 и заканчивается на байтах f7af.

Таким образом становится понятно, что байты 0004 представляют собой код операции для данного пакета. В этом случае значение равняется 4, и выводится сообщение подтверждения. После значения кода операции следует номер блока 0001. Он также виден в пакете, передающем содержание файла “example”. Довольно просто, не так ли? Таким образом, вы получаете подключение, пригодное для сессии, даже если она основана на UDP. Это и является функцией кодов операции TFTP.

Заключение

Если у вас есть желание ознакомиться с протоколом TFTP, то я советую скачать бесплатную программу, размещенную здесь. Добрые люди из Solarwinds были достаточно любезны, чтобы предоставить сервер TFTP на основе win32 абсолютно бесплатно. Хвала им! После ее установки пробуйте переносить файлы с помощью команд “GET” и “PUT”. Также необходимо исследовать подключение для анализа получившегося трафика. Вот и конец обзора протокола TFTP. Надеюсь, что вам понравилось. До встречи.

Дон Паркер (Don Parker)