Ещё один собирательный случай — но сюжет повторяется настолько часто, что стал почти типовым. Сервер компании начал рассылать спам. Хостинг прислал предупреждение, репутация IP-адреса испортилась, письма перестали доходить до клиентов. Рабочий сайт при этом был обновлён, ухожен и совершенно ни при чём.
Что нашли на сервере
На машине жили четыре сайта:
- рабочий сайт компании — обновлённый, с сертификатом, за ним следили;
- лендинг прошлогодней акции — его не открывали девять месяцев;
- тестовая копия сайта, сделанная перед редизайном, на поддомене вида test;
- старый сайт на движке, который не обновлялся с 2019 года.
Взлом пришёл через тестовую копию. В ней стоял плагин с известной уязвимостью — известной настолько, что её эксплуатируют автоматически, вообще без участия человека.
Почему одна дырка означает весь сервер
Момент, который недооценивают чаще всего: сайты на одном сервере обычно не изолированы друг от друга по-настоящему. Если они работают от имени одного системного пользователя — а на обычном хостинге и на многих VPS это именно так, — то, получив возможность выполнять код через один сайт, атакующий получает доступ и к файлам остальных.
Дальше всё идёт по стандартной схеме: заливается небольшой управляющий скрипт, добавляется рассыльщик, прописывается задача в планировщике, чтобы всё возвращалось после удаления. Рабочий сайт при этом может выглядеть совершенно нормально ещё несколько недель.
Почему забытые сайты опаснее рабочих
- Их никто не обновляет. Рабочий сайт обновляют, потому что им пользуются и за ним следят. Тестовый — нет, потому что о нём просто не вспоминают.
- На них нет мониторинга. Если упадёт рабочий сайт, это заметят за минуты. Если упадёт или изменится тестовый — не заметит никто. Признаки взлома тоже.
- У них слабые пароли. Тестовый сайт делали быстро и «на пару дней»: логин admin, пароль такой, чтобы не забыть.
- Они часто содержат настоящие данные. Тестовая копия магазина — это, как правило, копия реальной базы, с живыми клиентами, адресами и историей заказов.
- Их нет ни в одном списке. Когда компания перечисляет свои сайты, забытые туда не попадают. Про них честно не помнят.
Как найти такое у себя
Задача формулируется просто: составить полный список того, что запущено на сервере. На практике это и есть самая трудная часть работы.
- Посмотреть, какие сайты обслуживает веб-сервер — в панели управления или в его конфигурации.
- Заглянуть в каталог, где лежат сайты. Там регулярно оказывается больше папок, чем ожидалось.
- Проверить DNS-записи домена: какие существуют поддомены. Имена вроде test, dev, old, new, backup — характерные.
- Посмотреть задачи планировщика. Иногда там продолжают жить скрипты от давно удалённых проектов.
- Проверить список баз данных: лишние базы обычно принадлежат забытым сайтам.
Дальше по каждой находке нужно ответить на один вопрос: она нужна?
Что делать с находками
Правило простое: то, что не нужно, — удалять, а не выключать «на всякий случай».
- Не нужен совсем. Снять копию в архив и удалить: сайт, базу, поддомен, задачи в планировщике.
- Нужен, но редко. Закрыть паролем на уровне веб-сервера или ограничить доступ по адресам, чтобы снаружи его просто не было видно.
- Нужен постоянно. Значит, это рабочий сайт со всеми вытекающими: обновления, наблюдение, место в мониторинге.
Отдельным пунктом: тестовые копии не должны содержать реальные данные клиентов. Если копия базы нужна для отладки, персональные данные из неё стоит вычистить — это заодно снимает часть вопросов с точки зрения европейского законодательства.
Коротко
Вывод, который стоит повторить: безопасность сервера равна безопасности самого запущенного на нём сайта. Не среднего по больнице, а именно худшего.
Разбор инфраструктуры мы начинаем со списка того, что вообще работает на сервере. Забытый сайт находится примерно в половине случаев — и почти всегда владелец о нём искренне не помнил.