Пока сервер не падает и пользователи не жалуются, рука сама тянется к принципу «не трогаем — работает». Это ловушка. Тишина вокруг старых пакетов — не признак стабильности, а просто отсутствие симптомов. Проблема уже есть, просто она не кричит. И когда она заговорит, это обычно ночь с субботы на воскресенье.
Давайте честно: вы не откладываете обновления, потому что боитесь сломать прод. Боитесь, что после патча сервис не поднимется, начнутся ошибки, клиентам придется объяснять. Понятно. Но откладывание — не нейтральный выбор. Это инвестиция в технический долг, проценты по которому списываются с вас же, но в самый неудобный момент.
Что реально происходит, когда вы держите пакеты годами без внимания?
Во-первых, растет поверхность атаки — количество известных дыр, которые уже описаны в публичных базах и попадают в готовые «нажимные» скрипты.
Во-вторых, усложняется обновление как таковое: из маленького безопасного шага оно превращается в миграцию с множеством несовместимостей.
В-третьих, инфраструктура теряет предсказуемость: документация и инструкции вендора рассчитаны на актуальные версии, а не на зоопарк из эпохи динозавров.
«Мы маленькие, нас никто не атакует». Выйдите из этой иллюзии
Большая часть атак — не ручные, а массовые, с автосканированием всего адресного пространства. Никому не нужно знать ваш домен, чтобы ботнет нашел уязвимый порт и попробовал стандартный эксплойт. Это рулон автомата: пробуют всех, выстрел произойдет, если версия совпала. Вы — просто IP в очереди.
Конкретный пример. Декабрь 2021, Log4Shell. Уязвимость в популярной Java-библиотеке позволяла удаленно выполнять код через одну строку в логах. Команда из трех человек решила «не трогать пока», потому что «сервис внутренний, не торопимся». Через двое суток сервер загрузили до отказа криптомайнером, счёт в облаке вырос в три раза, клиенты не могли залогиниться. Патч тогда ставился за десятки минут, восстановление заняло трое суток с ночными сменами.
Или вспомним WannaCry
Заплатка от Microsoft была доступна за два месяца до вспышки, но тысячи предприятий и частных серверов оказались без патча. Результат — зашифрованные системы, паника и простой. Это не «где-то там», а урок: когда уязвимость становится публичной, обратный отсчет уже идёт.
Старые пакеты — это не только про безопасность. Это и про доступность. Толстые апдейты ядра и драйверов закрывают не только дырки, но и утечки памяти, гонки, падения под нагрузкой. Один незакрытый баг в сетевом стеке — и у вас спорадические таймауты, которые вы месяцами лечите «на уровне Nginx», хотя лекарство — на уровне ядра. Сколько стоит час, потраченный впустую на обходные маневры?
Согласитесь, ещё одна боль — совместимость. Вы обновили библиотеку в приложении, а системный пакет слишком стар, и начинается «танец» с пинами версий, PPA, ручными сборками. Чем старее база, тем больше вероятность, что следующий апдейт завалит половину зависимостей. Регулярные небольшие шаги почти всегда безопаснее, чем редкие и крупные рывки.
Есть и репутационные риски
Старые TLS-шифры — и браузер покажет пользователю предупреждение. Почтовый сервер без современных политик — и письма улетают в спам, потому что провайдеры режут «устаревшие». Для платежных систем нередки требования к версиям компонентов и криптографии. Вы ведь не хотите узнавать об этом из письма от банка с намёком «обновитесь или прощайте»?
Понимаю ваши аргументы. «Нет времени». «Нужен простой, а у нас круглосуточно». «Нечем тестировать». Посмотрите на это иначе: время все равно будет потрачено — либо планово на короткий апдейт, либо аварийно на расследование, восстановление и объяснения клиентам. Простой тоже будет — вопрос в том, контролируете ли вы его. Тестирование можно удешевить за счёт минимальной копии сервиса или хотя бы апдейта всего, кроме критичных узлов, с последовательной раскаткой.
Типичные оправдания и что стоит за ними:
- «Обновления ломают прод». Ломают в основном накопленные большие апдейты. Малые и регулярные почти всегда проходят мягче и предсказуемее.
- «Не хочу ребутить ядро». Откладывая, копите пачку критичных патчей безопасности. Один плановый ребут раз в месяц лучше, чем внезапный даун из‑за краша.
- «У нас всё за фаерволом». Вспомните внутренние угрозы: скомпрометированный ноут админа, уязвимый VPN, проброшенный порт ради «быстрой отладки». Эксплойт не спрашивает разрешения.
- «Мы маленькие, неинтересно». Автоматические сканеры не знают размеров бизнеса. Они проверяют версию — и жмут на кнопку.
Старые пакеты — это ещё и юридические издержки. Утечка персональных данных из‑за уязвимости, на которую был патч, — чужая вечерняя публикация и ваша утренняя головная боль с регуляторами. Объяснять, почему «забыли обновиться», всегда тяжелее, чем объяснять, почему была короткая плановая пауза ночью.
«Но ведь бывает, что апдейт конфликтует с приложением»
Бывает. Это и есть смысл практики маленьких шагов и предварительной проверки. Когда обновляешься раз в квартал, у тебя шанс обнаружить проблему на безопасной стадии, а не в момент, когда нужно прыгать через три промежуточные версии. Да и откат малого изменения проще, чем откат огромного слоя.
Обратите внимание на тревожные индикаторы, что вы уже в красной зоне:
- Дистрибутив вышел из поддержки (EOL), а вы продолжаете жить на нём.
- У вас 100+ доступных обновлений и часть помечена как security.
- В логах пачками прилетают попытки авторизации по SSH, а fail2ban молчит, потому что его версия не понимает новые паттерны.
- SSL‑сканер ставит вашей витрине оценку ниже A из‑за устаревших шифров.
- Вы боитесь ребута потому, что «поднимали это два года назад и уже не помните как». Это прямой сигнал, что надо вернуть контроль.
Деньги — лучший аргумент
Представьте счёт за инцидент: простой на сутки, дежурство команды, срочная помощь внешних специалистов, откат бэкапов, расследование, возможный откат транзакций, коммуникация с пользователями, скидки и компенсации. Теперь рядом положите стоимость пары часов на плановый цикл: проверка, установка, быстрый тест, ребут в окно низкой нагрузки. Какая сумма вас устраивает больше?
Есть ещё один незаметный выигрыш от регулярных апдейтов — скорость реакции
Когда вы в тонусе и инфраструктура свежая, на новые уязвимости вы отвечаете быстро и спокойно. Нет паники, нет узких мест, нет «магии» из прошлого, которую боятся трогать. Это и есть зрелость: не героизм в аварии, а отсутствие аварий.
Вспомните последний неприятный инцидент. Сломалось внезапно или там были звоночки? Обычно звоночки были: старый пакет, предупреждение в логах, давний тикет «заняться бы». Игнорировать мелочь — привычно, но мелочь копится. Обновления — это как регулярная уборка на кухне: можно месяц считать, что «и так сойдёт», а потом полдня отмывать жир.
Никаких сложных терминов. «Уязвимость» — это дыра, через которую злоумышленник может сделать на вашем сервере то, что вы не разрешали. «Эксплойт» — это способ пролезть в эту дыру. «Патч» — заплатка, которая дырку закрывает. Вы же не оставляете дверь офиса на распашку, потому что «замок иногда клинит»?
Ключевая мысль проста:
обновления — это не разовые героические акции, а бытовая гигиена инфраструктуры. Их откладывание — не экономия, а ставка на удачу. Удача закончится — и вы останетесь один на один с чужим кодом у себя на железе, ускоренными сердцебиениями и вопросом: «почему мы это не сделали раньше?» Лучше отвечать на другой вопрос: «когда сегодня удобнее выделить окно на короткий плановый апдейт?»