Мой сервер захватил майнер:
чем заканчивается вайбкодинг без инженерии
Я предприниматель, а не программист. Руковожу бизнес-миссиями, веду сообщество на 30 000 участников, развиваю собственную CRM. Когда появился вайбкодинг — возможность собирать софт через диалог с нейросетью — я загорелся: зачем нанимать разработчика, если можно всё описать словами?
Нейросеть писала код. Я описывал задачи. CRM заработала, участники регистрировались, проекты создавались. Я чувствовал себя одновременно основателем, техническим директором и системным администратором.
А потом, вечером 10 апреля 2026 года, я заметил, что сервер жутко тормозит. Открыл панель управления — процессор загружен на 100%. Так началась история, которая забрала у меня два полных рабочих дня и научила тому, чего не расскажет ни один курс по вайбкодингу.
День первый: расследование
Первая мысль — «сейчас быстренько вычищу». Я попросил нейросеть помочь с диагностикой. Она подсказала команды для проверки. И вот что я увидел:
Процессор жрал некий javae — файл, спрятанный в скрытой папке с невинным системным именем. Не Java, не JavaScript. Фальшивка, замаскированная под системный процесс. Внутри — криптомайнер XMRig, программа для добычи криптовалюты Monero. Кто-то добывал крипту на моём сервере, за мой счёт.
root 251 99.2% /tmp/.ICEi-unix/javae --threads=4 --donate=1%
root 256 98.7% /tmp/.ICEi-unix/javae --threads=4 --donate=1%
// Два экземпляра майнера. Замаскированы под Java.
// Прячутся в папке, которая выглядит как системная.
Ладно, подумал я. Убью процесс, удалю файл, дело закрыто. Убил. Удалил. Через четыре минуты он появился снова.
Слой за слоем: анатомия заражения
Оказалось, что мой сервер был заражён не одной программой, а целой системой. Каждый уровень защищал предыдущий. Копаешь — находишь новый. Копаешь глубже — ещё один. Как матрёшка, только каждая следующая кукла злее предыдущей.
javae размером 6.7 МБ, спрятанный в скрытой папке с системным именем. Называется похоже на Java, чтобы не вызывать подозрений. Два экземпляра работают параллельно — убьёшь один, второй продолжает.docker commit. Пересобираешь приложение «с нуля» — а оно уже заражённое. Я пересобирал трижды — трижды майнер возвращался.На каждый новый слой уходило от получаса до двух часов. Я блокировал один канал — майнер возвращался через другой. Заблокировал выход в интернет файерволом — не помогло: вредоносный код уже был внутри. Удалил планировщик — «сторож» его восстановил. Убил «сторожа» — планировщик скачал свежую копию.
Побочные повреждения: когда лечение калечит
Расследование — полбеды. Настоящий кошмар начинается, когда ты пытаешься что-то починить и ломаешь другое.
host not found in upstream "dashboard". Это оказалась давняя ошибка в настройках, которая спала годами и проснулась именно сейчас, при аварийных перезапусках.К концу первого дня я устранил все шесть слоёв заражения, починил побочные поломки, обновил уязвимые компоненты и перезапустил систему. Все четыре контейнера показали зелёный статус. Я выдохнул. Итог: 16 часов непрерывной работы.
День второй: капитуляция
Утром я первым делом проверил сервер. Процессор спокоен. Контейнеры работают. Победа? Но чем больше я думал, тем яснее становилось: уверенности нет.
Я нашёл шесть слоёв. А если есть седьмой, который я не нашёл? Злоумышленник, выстроивший такую эшелонированную защиту, наверняка оставил ещё один запасной вход.
Я спросил нейросеть: «Что в интернете пишут про лечение такого?» Ответ: профессионалы единогласны — заражённый сервер нельзя вылечить с гарантией. Только уничтожить и поставить заново.
«А мы можем обнулить VPS?» — «Да. Кнопка в панели хостинга. Тридцать секунд». Мои 16 часов расследования сводились к одной кнопке.
Восстановление: новые грабли
Нажал кнопку, получил чистую систему. Дальше — развернуть приложение. По плану — час. На практике — ещё целый день.
screen — специальную программу, которая сохраняет процессы при обрыве связи.-0001, а nginx ожидал оригинальное имя. Час на то, чтобы понять, что дело в одном суффиксе./ в конце строки настроек диспетчера. Браузер отправляет «покажи проект №5», а сервер получает пустой запрос.{"message":"Route GET:/ not found","statusCode":404}
// Сервер получает GET:/ вместо GET:/projects
// Причина: proxy_pass http://backend:3000/;
// ^-- этот символ стоил мне полдня
Цена «бесплатного» вайбкодинга
Что я понял: 30% vs 70%
Вайбкодинг помог мне построить рабочее приложение: интерфейс, серверная часть, база данных, авторизация. Но рабочее приложение — только 30% готового продукта.
Оставшиеся 70% — то, о чём я не подумал: автоматическое копирование данных, мониторинг аномалий, ограничение доступа, обновления безопасности, план на случай аварии. Та самая «скучная инфраструктура», которую ни один вайбкодер не просит нейросеть настроить — потому что не знает, что она нужна.
Чеклист: прежде чем запускать
Если вы, как и я, собрали продукт через нейросеть — пройдите этот список перед запуском. Каждый непройденный пункт — открытая дверь.
- Резервные копии настроены и проверены. Не «я знаю, что надо настроить». Настроены, запущены, и вы лично убедились, что из копии можно восстановить систему. 15 минут настройки вместо дней восстановления.
- Мониторинг с уведомлениями в мессенджер. Процессор перегружен больше 10 минут — вы об этом узнаёте. Я бы поймал майнер за минуты, а не за часы.
- SSH только по ключам, файервол включён. У меня стоял простой пароль. Бот подобрал его, вероятно, за минуты. Три команды в терминале закрывают эту дыру навсегда.
- План на аварию записан. Первый пункт: «не лечить — сносить и ставить заново». Этот пункт сэкономил бы мне 16 часов.
- Вы понимаете архитектуру. Не код — архитектуру. Какие компоненты, как связаны, где данные. Без этого невозможно описать проблему даже специалисту.
Главный вывод
Я не жалею, что попробовал вайбкодинг. Этот опыт стоит любого курса по IT-управлению. Но теперь я точно знаю разницу между «собрать» и «эксплуатировать».
Собрать продукт через нейросеть может каждый. Эксплуатировать рабочую систему — задача для инженера. Или, как минимум, для предпринимателя, который выделил время на инфраструктуру безопасности до запуска, а не после взлома.
Нейросеть — идеальный подрядчик. Делает ровно то, что попросили. Проблема в том, что вайбкодер не знает, о чём попросить. Я попросил написать приложение. Не попросил сделать его защищённым. И заплатил за это двумя днями жизни.
Глоссарий
- Вайбкодинг (Vibe Coding)
- Создание программного продукта через диалог с нейросетью. Вы описываете, что хотите — нейросеть пишет код. Термин ввёл Андрей Карпатый из OpenAI.
- VPS (виртуальный сервер)
- Арендованный компьютер в дата-центре. Как квартира в аренду, только вместо жилья — мощности для работы сайтов и приложений.
- Криптомайнер
- Программа для добычи криптовалюты. При взломе устанавливается на чужой сервер. Ваш сервер тормозит — кто-то зарабатывает.
- Контейнер (Docker)
- Изолированная «коробочка» для программы. Как квартира в многоэтажке: у каждого сервиса своё пространство. Один упал — остальные работают.
- SSH (удалённый доступ)
- Протокол подключения к серверу через интернет. Можно войти по паролю (легко взломать) или по ключу (надёжно).
- SSL-сертификат
- Цифровой «паспорт» сайта. Значок замка в адресной строке — это он. Шифрует данные между пользователем и сервером.
- Nginx (диспетчер)
- Программа-маршрутизатор. Принимает запросы пользователей и направляет нужным компонентам. Как администратор на ресепшене.
- CVE (уязвимость)
- Зарегистрированная дыра в безопасности ПО. Имеет номер и оценку от 0 до 10. У моей — было 10 из 10.
- Продакшен
- Рабочая среда с реальными клиентами. Ошибки здесь стоят денег и репутации.
Хотите увидеть, как IT-системы строят профессионалы?
На бизнес-миссиях мы показываем изнутри, как технологичные компании выстраивают IT-инфраструктуру — не ради технологий, а ради бизнес-результата. Увидеть эталон — лучший способ не повторять чужих ошибок.