Избранные работы

Реагирование на инцидент WordPress

Сайт выглядел нормально. Google пять с половиной месяцев видел на нём ссылки на казино.

Польская юридическая и бухгалтерская компания подозревала взлом своих сайтов на WordPress. Мы сделали бэкап, восстановили ход атаки, удалили спам и закрыли все пути, которыми пользовался злоумышленник.

Редактор страницы WordPress с подсвеченными скрытыми спам-блоками и окном двухфакторного входа
Блоки, сдвинутые за край экрана через position:absolute. Посетитель их не видит, поисковик видит.

Задача: сначала понять, что произошло, и только потом что-то трогать

У компании три сайта на WordPress на одном хостинге: корпоративный, сайт услуг и help-центр. Никто не знал, насколько глубоко всё зашло, и никто не хотел чистки, которая уничтожит следы.

«Сайты взломаны, как минимум один. Сделай бэкап, просканируй файлы и базы. Пока ничего не меняй.»

01

Что показало расследование

5,5 месяца
скрытый спам на главной и на странице услуг
8 ссылок
на казино, микрокредиты и обменники криптовалют в 7 скрытых блоках
6000+
попыток подобрать пароль через xmlrpc.php за шесть недель
3,8 ГБ
старых архивов сайта, которые мог скачать любой по ссылке

02

Злоумышленник входил с настоящим паролем администратора

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

  1. 28 мая

    Первая скрытая ссылка на главной.

  2. Июль

    Ещё две волны: микрокредиты, казино и обменники криптовалют.

  3. 28 сентября

    На странице услуг появляется блок ссылок на литовские казино.

  4. 3 ноября

    Последняя правка главной, с IP-адреса AWS.

  5. 12 ноября

    Начало бэкапа, расследования и очистки.

Что мы сделали, по порядку

  1. 01

    Сначала бэкап

    Файлы, базы данных, логи доступа и старые архивы всех трёх сайтов, около 10 ГБ, скопированы локально до начала анализа. Базы сохранены побайтово, чтобы польский текст и кириллицу можно было восстановить точно.

  2. 02

    Расследование

    Ядро WordPress сверено с официальным дистрибутивом файл за файлом. Плагины, темы, uploads и mu-plugins проверены на веб-шеллы, базы на скрытые блоки и чужих админов, логи на входы и правки. Отдельно проверили, что видит Googlebot.

  3. 03

    Очистка

    30 спам-блоков удалены из 11 записей базы, включая 9 старых ревизий, чтобы спам не вернулся через восстановление версии. Каждая правка сверялась с хешем записи, видимый текст страниц не тронут.

  4. 04

    Закрыть двери

    Публичные архивы удалены, фейковый плагин и папка с бэкдором удалены, xmlrpc.php закрыт, ключи безопасности заменены, пароли баз сменены. Чужой email, на который приходили сбросы паролей, заменён в 15 местах.

  5. 05

    Патчи и защита

    Удалённое выполнение кода в WPML (CVSS 9.9) и чтение любых файлов в Smart Slider 3 Pro закрыты патчами в одну строку. Починили упавшую админку, перенастроили обновления, 2FA стала обязательной для всех админов и редакторов.

03

Правила работы на живом продакшене

Сначала доказательства

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

Согласование каждой правки

Каждое изменение мы предлагали, клиент одобрял, и только потом оно применялось.

Бэкап рядом с каждой правкой

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

Всё обратимо

Когда клиент попросил вернуть удалённый файловый менеджер, мы восстановили его из бэкапа за минуту.

04

Самая опасная находка была на «чистом» сайте

Два старых архива в публичной папке главного сайта отдавались с кодом 200 любому, кто знал адрес. В таких архивах обычно лежит wp-config.php с паролями от баз. Доказать, что пароль администратора утёк именно так, нельзя, но это самый вероятный путь. Сейчас по этим адресам 404.

Технические детали

Доступ по SSH и через cPanel UAPI. Работа через WP-CLI и прямые SQL-запросы по соединению latin1, с побайтовой заменой и проверкой MD5, чтобы многоязычный контент не пострадал.

Спам прятали через position:absolute и сдвиги вроде left:-503011px, плюс белый текст или текст 8–12 px. Две копии вставили как экранированный HTML, поэтому на главной был виден сырой код.

Патчи: WPML больше не обрабатывает содержимое шорткода переключателя языков как шаблон Twig (CVE-2024-6386). Экспорт в Smart Slider 3 Pro требует права на редактирование и токен безопасности (CVE-2026-3098).

Двухфакторный вход работает через приложение-аутентификатор (TOTP) с резервными кодами и отсрочкой 30 дней. Админы получили одностраничную PDF-инструкцию со скриншотами, QR-коды размыты.

Расследование вёл AI-агент, работавший по SSH под контролем человека. Агент разбирал логи, сверял файлы и работал с базой. Решения принимали люди, и они же одобряли каждую правку.

Подозреваете, что ваш сайт на WordPress взломан?

Разберёмся, что произошло, прежде чем что-то удалять.

Заказать расследование