Трафик, которого лучше бы не было
На старых сайтах иногда ещё теплится жизнь. В статистике появляются посетители, значительная часть приходит с мобильных устройств, сервер исправно работает. Кажется, что проекты, заброшенные много лет назад, всё ещё кому-то нужны.
У меня таких сайтов несколько. Старые WordPress-проекты, на которых когда-то публиковались статьи и продавались ссылки. Большого поискового трафика давно нет, но какое-то движение сохранялось.
Правда, движение было странным.
В статистике регулярно появлялись мобильные посетители. При этом нормального поведения за ними не наблюдалось: короткие заходы, отсутствие переходов, никакой понятной пользы. Можно было списать всё на ботов, сканеры и обычный интернет-мусор. Сейчас он есть почти на любом сайте.
Гораздо сильнее раздражала нагрузка на сервер. Процессор постоянно был занят, хотя объективных причин для этого не было. Посещаемость небольшая, тяжёлых сервисов нет, сами сайты почти не меняются. Для такого хозяйства сервер работал подозрительно усердно.
Генеральная уборка
При проверке WordPress-сайтов нашлись следы заражения. Ничего эффектного: сайты открывались, главные страницы выглядели нормально, явных баннеров и редиректов не было.
Именно поэтому подобные заражения могут жить годами. Вредоносному коду вовсе не обязательно ломать сайт на глазах владельца. Наоборот, ему выгоднее оставаться незаметным.
Сайты почистили: удалили посторонний код и неизвестные файлы, проверили плагины, темы и точки входа, закрыли найденные уязвимости.
После этого произошло сразу две вещи.
Из статистики практически исчез тот самый трафик, маскировавшийся под мобильные устройства.
А нагрузка на процессор сервера упала примерно в три раза.
Совпадение получилось слишком точным
Сам по себе странный трафик ещё ничего не доказывает. User-Agent мобильного браузера может подставить любой бот. Снижение нагрузки тоже иногда объясняется обновлением плагина, очисткой кеша или прекращением очередной волны сканирования.
Но когда оба изменения происходят сразу после удаления вредоносного кода, связь выглядит вполне убедительно.
Скорее всего, заражённые сайты использовались только при определённых запросах. Код мог проверять тип устройства, адрес посетителя, источник перехода и другие параметры. Обычному владельцу показывался нормальный сайт, а подходящему «мобильному посетителю» выдавалось что-то другое.
Это мог быть редирект, подмена страницы, дорвей, рекламный контент или проксирование чужого сайта. Точный сценарий ещё предстоит восстановить по старым журналам сервера. Но очевидно одно: процессор занимался вовсе не обслуживанием моих реальных читателей.
Сервер работал на кого-то другого.
Почему заражение сложно заметить
Мы по привычке проверяем сайт очень просто: открыли главную страницу, нажали пару ссылок, заглянули в админку. Всё работает, значит, порядок.
Но современный вредоносный код часто умеет выбирать, кому показываться. Он может не срабатывать:
- для администратора WordPress;
- с домашнего IP владельца;
- при прямом заходе без поискового реферера;
- с настольного компьютера;
- при повторном посещении;
- для известных сервисов проверки.
Поэтому чистая главная страница ещё не означает, что сайт действительно чистый.
Иногда заражение выдаёт не содержимое страниц, а косвенные признаки: необъяснимая нагрузка, странные запросы в логах, неизвестные PHP-файлы, исходящие соединения и посетители, которые вроде бы есть, но ведут себя совсем не как люди.
Трафик оказался частью механизма
Самое интересное в этой истории даже не вирус. Вирусы на старом WordPress никого давно не удивляют.
Интереснее другое: поддельный мобильный трафик, вероятно, был не внешним шумом, а частью работающей схемы. Запрос приходил на сайт, вредоносный код что-то проверял, генерировал ответ или обращался к внешнему ресурсу. Каждый такой визит превращался в работу PHP и нагрузку на процессор.
В статистике это выглядело почти обнадёживающе: на старые сайты кто-то продолжает заходить.
На практике сервер просто бесплатно обслуживал чужую инфраструктуру.
После очистки цифры стали скромнее, зато честнее. А процессор наконец перестал изображать бурную деятельность.
Теперь хочется поднять старые логи и понять, чем именно занимались сайты всё это время. Возможно, история на этом только начинается.