Как измерение сети превратилось в сбой
В 1988 году Роберт Таппан Моррис задумал червя как способ оценить размер раннего интернета. В отличие от вируса, которому обычно нужен файл или программа-хозяин, червь сам распространяется между подключёнными компьютерами. Он переходил с машины на машину и тем самым мог оставить след, по которому Моррис рассчитывал судить о масштабах сети.
Проблема была в том, как червь решал, заражён ли компьютер уже. Чтобы не копировать себя повторно, он проверял, работает ли на машине его экземпляр. Но проверка не была надёжной: заражённый компьютер мог ответить так, будто червя на нём нет. Программа принимала такой ответ за повод запустить ещё одну копию.
Почему копии забили компьютеры
Один повторный запуск сам по себе не казался катастрофой. Но каждая копия снова искала другие компьютеры, и те запускали новые экземпляры. Нагрузка росла лавинообразно: машины тратили ресурсы на червя и всё хуже справлялись с обычными задачами. В результате пострадали тысячи компьютеров, многие из которых были мощными мейнфреймами — крупными системами, обслуживавшими организации и университеты.
Так ошибка измерения превратила распространение червя в самоподдерживающийся цикл. Чем больше копий появлялось, тем труднее было системам отвечать на запросы и тем чаще программа могла ошибочно считать, что её ещё нет.
Урок об автоматическом распространении
Замысел Морриса показывает опасный компромисс сетевого эксперимента: программа, которая сама перемещается и запускается на чужих машинах, действует быстрее, чем оператор успевает оценить последствия. Даже если её цель — сбор сведений, ошибка в условии запуска способна превратить полезный тест в перегрузку.
Отец Морриса был экспертом АНБ по компьютерной безопасности, но родственная связь не объясняет техническую причину аварии. Её вызвало конкретное поведение кода: червь не умел надёжно отличать уже заражённую машину от незаражённой — и потому продолжал размножаться.





