Я предприниматель, а не программист. Руковожу бизнес-миссиями, веду сообщество на 30 000 участников, развиваю собственную CRM. Когда появился вайбкодинг — возможность собирать софт через диалог с нейросетью — я загорелся: зачем нанимать разработчика, если можно всё описать словами?

Нейросеть писала код. Я описывал задачи. CRM заработала, участники регистрировались, проекты создавались. Я чувствовал себя одновременно основателем, техническим директором и системным администратором.

А потом, вечером 10 апреля 2026 года, я заметил, что сервер жутко тормозит. Открыл панель управления — процессор загружен на 100%. Так началась история, которая забрала у меня два полных рабочих дня и научила тому, чего не расскажет ни один курс по вайбкодингу.

~36ч Потрачено на борьбу и восстановление
6 Слоёв заражения обнаружено
3 Сессии с нейросетью до исчерпания контекста
1 Вывод: нужно было сносить сразу

День первый: расследование

Первая мысль — «сейчас быстренько вычищу». Я попросил нейросеть помочь с диагностикой. Она подсказала команды для проверки. И вот что я увидел:

Процессор жрал некий javae — файл, спрятанный в скрытой папке с невинным системным именем. Не Java, не JavaScript. Фальшивка, замаскированная под системный процесс. Внутри — криптомайнер XMRig, программа для добычи криптовалюты Monero. Кто-то добывал крипту на моём сервере, за мой счёт.

$ ps aux --sort=-%cpu | head -5
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.
// Прячутся в папке, которая выглядит как системная.

Ладно, подумал я. Убью процесс, удалю файл, дело закрыто. Убил. Удалил. Через четыре минуты он появился снова.

«Убиваешь процесс — он возвращается. Удаляешь файл — он пересоздаётся. Чувствуешь себя героем фильма ужасов, который закрывает дверь, а она открывается сама.» Первый час расследования

Слой за слоем: анатомия заражения

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

Слой 1
Майнер-маскировщик. Файл javae размером 6.7 МБ, спрятанный в скрытой папке с системным именем. Называется похоже на Java, чтобы не вызывать подозрений. Два экземпляра работают параллельно — убьёшь один, второй продолжает.
Слой 2
Сторожевой скрипт. Фоновая программа проверяет каждые несколько секунд: жив ли майнер? Если нет — запускает заново. Поэтому простое убийство процесса ничего не давало: «сторож» поднимал его обратно.
Слой 3
Планировщик загрузки. Каждые 5 минут сервер обращался к Pastebin — обычному сервису для обмена текстом — и скачивал свежий вредоносный скрипт. Даже если вычистить всё с сервера — через 5 минут зараза скачается снова.
Слой 4
Инструмент разведки. Злоумышленник развернул на моём сервере собственный веб-сервер на Python. Зачем? Чтобы удобно просматривать и скачивать мои файлы через браузер. Конфиги, ключи, данные — всё лежало как на витрине.
Слой 5
Запечённый образ. Самая коварная часть. Злоумышленник зашёл внутрь контейнера с моим приложением и «запёк» инфекцию в его шаблон командой docker commit. Пересобираешь приложение «с нуля» — а оно уже заражённое. Я пересобирал трижды — трижды майнер возвращался.
Слой 6
Критическая уязвимость в коде. Финальное открытие: в моём приложении использовался фреймворк React версии 19.0.0 с известной дырой CVE-2025-55182 (максимальная опасность — 10 из 10). Через неё можно удалённо выполнять любые команды на сервере. Скорее всего, именно через неё атакующий и попал внутрь.

На каждый новый слой уходило от получаса до двух часов. Я блокировал один канал — майнер возвращался через другой. Заблокировал выход в интернет файерволом — не помогло: вредоносный код уже был внутри. Удалил планировщик — «сторож» его восстановил. Убил «сторожа» — планировщик скачал свежую копию.

«Профессиональный вредонос — не один файл, который можно удалить. Это экосистема, где каждый элемент страхует остальные. Как гидра: отрубаешь голову — вырастают две.» Вывод после 8 часов расследования

Побочные повреждения: когда лечение калечит

Расследование — полбеды. Настоящий кошмар начинается, когда ты пытаешься что-то починить и ломаешь другое.

1
Смена ключей убила доступ к базе данных. Я зашёл в панель Supabase и ротировал JWT-секреты — логичный шаг после взлома. Результат: приложение мгновенно потеряло связь с базой. Оказалось, ротация автоматически отключила устаревший формат авторизации, на котором работала моя CRM. Два часа на диагностику. Ещё час — на поиск скрытой галочки «Legacy API Keys» в настройках.
2
Чужой веб-сервер занял порт приложения. Python-сервер атакующего висел на порту 80 — том самом, через который работает сайт. Попытка перезапустить CRM — «порт занят». Мой сайт не может подняться, пока на его месте стоит инструмент разведки злоумышленника.
3
Диспетчер запросов падал при каждом перезапуске. Nginx — программа-маршрутизатор — не мог найти другие компоненты по имени: host not found in upstream "dashboard". Это оказалась давняя ошибка в настройках, которая спала годами и проснулась именно сейчас, при аварийных перезапусках.
4
Хранилище компонентов заблокировало российский IP. Docker Hub — глобальный каталог компонентов для сборки — отказался отвечать. Сервер пытался соединиться по IPv6, который был заблокирован, вместо IPv4. Ещё час на перенастройку приоритетов протоколов.

К концу первого дня я устранил все шесть слоёв заражения, починил побочные поломки, обновил уязвимые компоненты и перезапустил систему. Все четыре контейнера показали зелёный статус. Я выдохнул. Итог: 16 часов непрерывной работы.


День второй: капитуляция

Утром я первым делом проверил сервер. Процессор спокоен. Контейнеры работают. Победа? Но чем больше я думал, тем яснее становилось: уверенности нет.

Я нашёл шесть слоёв. А если есть седьмой, который я не нашёл? Злоумышленник, выстроивший такую эшелонированную защиту, наверняка оставил ещё один запасной вход.

Я спросил нейросеть: «Что в интернете пишут про лечение такого?» Ответ: профессионалы единогласны — заражённый сервер нельзя вылечить с гарантией. Только уничтожить и поставить заново.

«А мы можем обнулить VPS?» — «Да. Кнопка в панели хостинга. Тридцать секунд». Мои 16 часов расследования сводились к одной кнопке.

Мой путь: «вылечить» 16 часов Шесть слоёв заражения. Четыре побочных поломки. Три сессии с нейросетью. И всё равно — нет гарантии, что сервер чист
Правильный путь: снести 30 секунд Кнопка «Переустановить ОС». 100% гарантия чистоты. Остаётся развернуть приложение на свежей системе
«Лучше с нуля» — написал я нейросети утром второго дня. Три слова, которые стоило написать на 16 часов раньше. Момент принятия решения

Восстановление: новые грабли

Нажал кнопку, получил чистую систему. Дальше — развернуть приложение. По плану — час. На практике — ещё целый день.

Грабли 1
Команда для создания ключа не работает. Нейросеть дала инструкцию для Linux, а у меня Windows. Одна команда, разные операционные системы, разное поведение пустых кавычек. Полчаса на поиск обходного пути через Git Bash.
Грабли 2
Сборка сожрала всю память. Сервер завис, SSH-соединение оборвалось. Я сижу перед чёрным экраном. Сборка завершилась? Сервер жив? Пришлось запускать сборку через screen — специальную программу, которая сохраняет процессы при обрыве связи.
Грабли 3
Сертификат безопасности сохранился «не туда». Уже существовала папка со старым самоподписанным сертификатом. Certbot создал новую папку с суффиксом -0001, а nginx ожидал оригинальное имя. Час на то, чтобы понять, что дело в одном суффиксе.
Грабли 4
Один символ сломал всю маршрутизацию. Интерфейс загружается. Кликаю на проект — ошибка 404. Все запросы к серверной части возвращают «не найдено». Часы диагностики. Причина: лишний / в конце строки настроек диспетчера. Браузер отправляет «покажи проект №5», а сервер получает пустой запрос.
$ curl https://****.ru/api/projects
{"message":"Route GET:/ not found","statusCode":404}

// Сервер получает GET:/ вместо GET:/projects
// Причина: proxy_pass http://backend:3000/;
//                                       ^-- этот символ стоил мне полдня

Цена «бесплатного» вайбкодинга

1
Два рабочих дня вместо бизнеса. Вместо организации миссий, общения с клиентами, развития продукта — я копался в серверных логах. Для руководителя направления на 30 000 участников каждый час на счету.
2
Потеря данных. Записи участников, проекты, контакты — пришлось вбивать руками заново. Объём оказался небольшой — около десяти записей. Будь их пятьсот, последствия стали бы катастрофой.
3
Репутационная бомба. Мой сервер добывал криптовалюту. А мог рассылать спам, атаковать другие серверы, хранить запрещённый контент. С моего IP-адреса. С моей ответственностью.
4
Эмоциональные качели. Каждый час — маленькая победа: нашёл, убил, починил. Через пять минут — новая проблема, хуже предыдущей. К концу второго дня я физически не мог смотреть на терминал.

Что я понял: 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-инфраструктуру — не ради технологий, а ради бизнес-результата. Увидеть эталон — лучший способ не повторять чужих ошибок.