Червь Морриса — каталог первородных грехов, которые до сих пор живут в продакшене
📊 Червь Морриса — каталог первородных грехов, которые до сих пор живут в продакшене
Утром 3 ноября 1988 года администраторы MIT, Стэнфорда и Пентагона обнаружили, что их UNIX-серверы превратились в тыкву: load average зашкаливал, процессы `sh` плодились сотнями, а почтовые шлюзы захлебнулись. 23-летний аспирант Роберт Моррис запустил программу из 99 строк, чтобы тихо измерить размеры ARPANET — а положил 6 000 узлов, 10% тогдашнего интернета. Причина не в злом умысле, а в сборке трёх уязвимостей, которые по отдельности казались безобидными. Sendmail с режимом DEBUG, включённым по умолчанию, позволял передать тело письма сразу в `/bin/sh`. Демон fingerd использовал `gets()` без проверки границ, и 536-байтовый пейлоад подменял адрес возврата, отдавая root-шелл. Там, где не срабатывали бинарники, в ход шёл словарь из 432 паролей и «доверенные» файлы `.rhosts` — скомпрометировав одну учётку студента с паролем `qwerty`, червь бесшумно растекался по всему кампусу.
Фатальной стала попытка обмануть будущую «вакцинацию». Даже если машина уже была заражена, с вероятностью 1 к 7 (≈14%) запускалась новая копия. Моррис не учёл плотности связей в университетских сетях — на один узел обрушивалась лавина заражений, и каждый седьмой раз процесс оставался, вызывая цепную реакцию отказа в обслуживании. Единственным способом остановить эпидемию стал физический разрыв сети: админы выдёргивали Ethernet-кабели из маршрутизаторов и координировались по телефону, пока группы из Беркли и MIT разбирали код.
• Дата: 2–3 ноября 1988, масштаб: ~6 000 серверов Sun и VAX.
• Векторы: sendmail DEBUG (CVE отсутствует, бэкдор уровня протокола), переполнение буфера в fingerd через `gets()`, подбор 432 паролей + `.rhosts`.
• Ошибка: правило 1 к 7 превратило тихий зонд в глобальный fork-bomb.
Спустя 38 лет мы всё ещё наступаем на те же грабли: расшаривание привилегированных сервисов по умолчанию, небезопасные API в духе `gets()` и доверенные отношения между узлами. Современные облачные среды и Kubernetes-кластеры страдают ровно от той же беды — стоит атакующему попасть в pod, и соседние сервисы отдаются без боя благодаря избыточным правам и отсутствию сегментации. Единственное различие: сегодня мы не выдёргиваем кабели, а включаем EDR и надеемся, что сработает.
Хабр Infosec
#MorrisWorm #BufferOverflow #Sendmail #ИсторияИБ #1988