Кратко

  • Microsoft опубликовала исправление SQL Server 2000 Resolution Service в июле 2002 года, однако в январе 2003-го Slammer, по оценке CAIDA, за десять минут заразил более 90% доступных ему уязвимых узлов.
  • Случай показал разделённые полномочия: производитель исправляет код, дистрибьютор раскрывает встроенный MSDE, владелец приложения меняет работающий процесс, а оператор сети заранее ограничивает автоматическую защиту, способную сработать быстрее человека.

Исправление было реальным, но не всеобщим

Бюллетень Microsoft MS02-039 вышел 24 июля 2002 года. SQL Server 2000 Resolution Service слушал UDP 1434 и помогал клиентам находить сетевой порт именованного экземпляра базы данных. В двух функциях не проверялась длина входа. Специально подготовленный запрос мог переполнить стек и выполнить код с правами учётной записи службы SQL Server.

Под угрозой находились SQL Server 2000 и Microsoft Desktop Engine 2000. Microsoft предоставила патч, версию файла для проверки и совет закрыть UDP 1434 на межсетевом экране там, где служба не нужна. Совокупный патч MS02-061 от 16 октября также содержал исправление.

Эти даты доказывают действие производителя, а не состояние чужой инфраструктуры. Microsoft могла выпустить новые двоичные файлы, но не могла найти каждую копию MSDE, установленную сторонним продуктом, назначить окно обслуживания каждому клиенту и заставить независимо управляемый процесс загрузить обновление. Старый код сохранял власть на каждом доступном узле, где продолжал работать.

Running-Code Primacy отделяет предложение от принятия. Бюллетень описывает возможное новое состояние. Загруженный процесс показывает действующее.

376 байтам не требовался ответ

Slammer, также известный как Sapphire, начал распространяться незадолго до 05:30 UTC в субботу 25 января 2003 года. Тело червя занимало 376 байт; вместе с заголовками CAIDA описывает UDP/IP-пакет размером 404 байта. Попав в уязвимую службу, он вызывал переполнение, после чего новый заражённый узел отправлял ту же программу по псевдослучайным адресам на UDP 1434.

Не было установки соединения и ожидания ответа. TCP-сканер расходует время на сеансы и тайм-ауты. Цикл Slammer сразу переходил к следующему адресу. Ограничителем стала исходящая полоса заражённой машины, а не задержка сети.

CAIDA непосредственно наблюдала около 26 тысяч проб в секунду от одного узла и оценила раннее среднее значение примерно в 4 тысячи на заражённый экземпляр. Через три минуты совокупная скорость превысила 55 миллионов проб в секунду. За десять минут заразилось более 90% достижимых уязвимых систем.

Число 74 856 относится к различным заражённым IP-адресам, замеченным за первые 30 минут, и является нижней границей. Ошибки генератора псевдослучайных чисел скрывали целые циклы адресов от отдельных наблюдателей, а один важный ранний набор данных прервался примерно через две минуты сорок секунд. Точное мировое число неизвестно. Измерения надёжно показывают другое: решающая волна завершилась раньше обычной человеческой процедуры согласования.

Узкое место находилось внутри организации

Slammer не был отражённой атакой. Он не подставлял адрес жертвы, чтобы третья сторона отправила увеличенный ответ. Заражённый SQL Server сам создавал поток проб. У исследованного варианта не было отдельной разрушительной нагрузки; агрессивное размножение уже нарушало работу.

Во многих сетях одна или несколько машин заполняли первый общий канал. Соседние системы теряли связь, хотя сами не были уязвимы. Высокий объём, множество небольших пакетов и постоянно меняющиеся назначения одновременно нагружали полосу, очереди, память и процессор сетевого оборудования. Заражённые узлы начинали конкурировать друг с другом, замедляя даже дальнейший рост червя.

Защита, смотрящая только на входящий периметр, не видит этот механизм. Забытый внутренний компонент способен монополизировать весь исходящий ресурс. Полезные меры находятся ближе: сегментация, анализ исходящих потоков, справедливые очереди, ограничение скорости и точечная изоляция. Внешняя очистка DDoS не возвращает локальный канал, уже занятый собственным сервером.

MSDE скрывался за названием приложения

MSDE 2000 мог устанавливаться как встроенный механизм базы данных другого продукта. В реестре закупок могло не быть строки «SQL Server», хотя Resolution Service работал как зависимость бизнес-приложения. CERT/CC отдельно предупредил о продуктах, включающих MSDE 2000.

Знание оказалось разделено. Microsoft знала компонент. Дистрибьютор — состав пакета. Владелец приложения — бизнес-зависимость. Сетевая команда — порт 1434. Ни один список сам по себе не отвечал, где работает уязвимый код.

Единицей контроля должна быть исполняемая идентичность: какой процесс слушает, какая версия загружена, какой продукт его установил, кто владеет риском обслуживания, кому действительно нужен доступ и по каким путям он возможен. Закрытая заявка на изменение не заменяет эту проверку.

История повторного выпуска MS02-061 показывает реальное препятствие. Microsoft объединила дополнительное исправление, не связанное с безопасностью, и новый установщик после того, как исходная комбинация могла мешать работе SQL Server в некоторых условиях. Это не оправдание открытой уязвимости. Это причина, по которой локальный владелец должен проверить совместимость, провести изменение и подтвердить работающий результат.

Фильтры помогли восстановлению, но не выиграли гонку

По данным CAIDA, многие площадки начали фильтровать пакеты к UDP 1434 в течение часа. Условия были почти идеальными: заметная сигнатура, узкий порт и мало важного публичного трафика в большинстве сетей. Даже тогда первые человеческие фильтры появились после заражения почти всех доступных восприимчивых узлов.

Фильтрация снизила последующий поток сканирования и помогла восстановить связь. Она не устранила заражение и могла не остановить распространение между внутренними сегментами. Cisco поэтому различала ACL на маршрутизаторах и управление внутри VLAN, а также учитывала организации с законной потребностью в службе.

Ответом не является неограниченная автоматизация. Узкое локальное правило может действовать, когда совпадают точная сигнатура, резкий рост числа назначений и исходящая скорость, невозможная для обычной роли узла. Оно временно ограничивает или изолирует. Порог, область, исключения, срок, сохранение доказательств и откат остаются у оператора.

Минимальная общая спецификация фиксирует три результата: знать затронутый runtime, убрать неоправданную достижимость и не позволить одному узлу забрать общий ресурс. Реализация остаётся местной.

Внедрение оставляет четыре независимых следа

Производитель показывает однозначно исправленную версию и рабочий путь установки. Дистрибьютор связывает встроенный компонент с продуктом и клиентом. Владелец приложения показывает загруженную версию, зависимость и доступность. Оператор сети доказывает потоками и учениями, что один endpoint не отнимет весь канал.

Эти доказательства не заменяют друг друга. Межсетевой экран прячет уязвимый код, но не исправляет. Патч не оправдывает лишнюю публичность. Инвентарь устаревает. Слишком широкая карантинная мера может оказаться непригодной в реальном инциденте.

Разделение не требует центрального правителя. Microsoft не обязана управлять клиентскими сетями, чтобы дать исправление. Оператор не обязан переписывать SQL Server, чтобы защитить свою полосу. Каждая сторона раскрывает состояние, необходимое следующей для решения, а право исполнения остаётся там, где несут последствия и откат.

Границы доказательств

Источники подтверждают предварительно выпущенный патч, червь в одном UDP-датаграмме, не менее 74 856 наблюдавшихся заражённых адресов и критическую фазу в несколько минут. Они не доказывают публичность каждой установки, полноту нижней границы или одинаковую причину каждого упомянутого в прессе сбоя.

Для наблюдавшегося варианта также не подтверждены подмена исходного адреса, отражение, кража данных или дополнительная разрушительная нагрузка. Надёжный вывод уже: опубликованный патч не лишает полномочий старый работающий бинарный файл. Если распространение быстрее разрешения человека, узкие автоматические полномочия нужно определить заранее и проверять версиями, сокетами, потоками и учениями.

Источники