Введение
Недостатком сетевого протокола в оригинальных версиях TFTP является уязвимость, известная как "синдром ученика чародея" (SAS). Она получила свое название в честь поэмы Гёте 1797 года "Der Zauberlehrling" (ставшей популярной благодаря эпизоду "Ученик волшебника" в анимационном фильме "Фантазия" 1940 года), поскольку принцип ее работы тесно перекликается с катастрофой, постигшей ученика чародея: проблема приводила к экспоненциальному увеличению количества копий каждого пакета данных при передаче. Эта уязвимость возникла из-за известного сценария отказа сети, который, по ошибке разработчиков протокола TFTP, не был учтен при его проектировании; этот сценарий, взаимодействуя с определенными особенностями механизмов TFTP, и привел к возникновению SAS.
Sorcerer's Apprentice syndrome (SAS) is a network protocol flaw in the original versions of TFTP. It was named after Goethe's 1797 poem "Der Zauberlehrling" (popularized by the "Sorcerer's Apprentice" segment of the 1940 animated film Fantasia), because the details of its operation closely resemble the disaster that befalls the sorcerer's apprentice: the problem resulted in an ever growing replication of every packet in the transfer. The problem occurred because of a known failure mode of the internetwork which, through a mistake on the part of the TFTP protocol designers, was not taken into account when the protocol was designed; the failure mode interacted with several details of the mechanisms of TFTP to produce SAS.
Технические основы
TFTP работает в простом пошаговом режиме: в любой момент времени в обращении находится только один пакет, и каждый пакет, полученный одной из сторон, вызывает отправку одного пакета в ответ (до завершения передачи). В спецификации TFTP указано, что при получении любого пакета, получатель обязан отправить соответствующий ответный пакет. Таким образом, получение блока данных инициирует отправку подтверждения, а получение подтверждения – отправку следующего блока данных. TFTP, как и все протоколы, разработанные для работы в ненадежной сети, также включает механизмы контроля времени ожидания. После отправки пакета протокол ожидает ответа и запускает таймер. Если таймер истекает и ответ не получен, предпринимается определенное действие, как правило, повторная отправка исходного пакета.
Решение
Исправление SAS включало изменение спецификации TFTP для разрыва цикла.