Сервер взломали через забытый тестовый сайт

Ещё один собирательный случай — но сюжет повторяется настолько часто, что стал почти типовым. Сервер компании начал рассылать спам. Хостинг прислал предупреждение, репутация IP-адреса испортилась, письма перестали доходить до клиентов. Рабочий сайт при этом был обновлён, ухожен и совершенно ни при чём.

Что нашли на сервере

На машине жили четыре сайта:

  • рабочий сайт компании — обновлённый, с сертификатом, за ним следили;
  • лендинг прошлогодней акции — его не открывали девять месяцев;
  • тестовая копия сайта, сделанная перед редизайном, на поддомене вида test;
  • старый сайт на движке, который не обновлялся с 2019 года.

Взлом пришёл через тестовую копию. В ней стоял плагин с известной уязвимостью — известной настолько, что её эксплуатируют автоматически, вообще без участия человека.

Почему одна дырка означает весь сервер

Момент, который недооценивают чаще всего: сайты на одном сервере обычно не изолированы друг от друга по-настоящему. Если они работают от имени одного системного пользователя — а на обычном хостинге и на многих VPS это именно так, — то, получив возможность выполнять код через один сайт, атакующий получает доступ и к файлам остальных.

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

Почему забытые сайты опаснее рабочих

  • Их никто не обновляет. Рабочий сайт обновляют, потому что им пользуются и за ним следят. Тестовый — нет, потому что о нём просто не вспоминают.
  • На них нет мониторинга. Если упадёт рабочий сайт, это заметят за минуты. Если упадёт или изменится тестовый — не заметит никто. Признаки взлома тоже.
  • У них слабые пароли. Тестовый сайт делали быстро и «на пару дней»: логин admin, пароль такой, чтобы не забыть.
  • Они часто содержат настоящие данные. Тестовая копия магазина — это, как правило, копия реальной базы, с живыми клиентами, адресами и историей заказов.
  • Их нет ни в одном списке. Когда компания перечисляет свои сайты, забытые туда не попадают. Про них честно не помнят.

Как найти такое у себя

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

  1. Посмотреть, какие сайты обслуживает веб-сервер — в панели управления или в его конфигурации.
  2. Заглянуть в каталог, где лежат сайты. Там регулярно оказывается больше папок, чем ожидалось.
  3. Проверить DNS-записи домена: какие существуют поддомены. Имена вроде test, dev, old, new, backup — характерные.
  4. Посмотреть задачи планировщика. Иногда там продолжают жить скрипты от давно удалённых проектов.
  5. Проверить список баз данных: лишние базы обычно принадлежат забытым сайтам.

Дальше по каждой находке нужно ответить на один вопрос: она нужна?

Что делать с находками

Правило простое: то, что не нужно, — удалять, а не выключать «на всякий случай».

  • Не нужен совсем. Снять копию в архив и удалить: сайт, базу, поддомен, задачи в планировщике.
  • Нужен, но редко. Закрыть паролем на уровне веб-сервера или ограничить доступ по адресам, чтобы снаружи его просто не было видно.
  • Нужен постоянно. Значит, это рабочий сайт со всеми вытекающими: обновления, наблюдение, место в мониторинге.

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

Коротко

Вывод, который стоит повторить: безопасность сервера равна безопасности самого запущенного на нём сайта. Не среднего по больнице, а именно худшего.

Разбор инфраструктуры мы начинаем со списка того, что вообще работает на сервере. Забытый сайт находится примерно в половине случаев — и почти всегда владелец о нём искренне не помнил.