Введение

Недостатком сетевого протокола в оригинальных версиях TFTP является уязвимость, известная как "синдром ученика чародея" (SAS). Она получила свое название в честь поэмы Гёте 1797 года "Der Zauberlehrling" (ставшей популярной благодаря эпизоду "Ученик волшебника" в анимационном фильме "Фантазия" 1940 года), поскольку принцип ее работы тесно перекликается с катастрофой, постигшей ученика чародея: проблема приводила к экспоненциальному увеличению количества копий каждого пакета данных при передаче. Эта уязвимость возникла из-за известного сценария отказа сети, который, по ошибке разработчиков протокола TFTP, не был учтен при его проектировании; этот сценарий, взаимодействуя с определенными особенностями механизмов TFTP, и привел к возникновению SAS.

Технические основы

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

Решение

Исправление SAS включало изменение спецификации TFTP для разрыва цикла.