Сначала доказательства
На сервере ничего не менялось, пока бэкап не проверен и находки не переданы клиенту.
Реагирование на инцидент WordPress
Польская юридическая и бухгалтерская компания подозревала взлом своих сайтов на WordPress. Мы сделали бэкап, восстановили ход атаки, удалили спам и закрыли все пути, которыми пользовался злоумышленник.
У компании три сайта на WordPress на одном хостинге: корпоративный, сайт услуг и help-центр. Никто не знал, насколько глубоко всё зашло, и никто не хотел чистки, которая уничтожит следы.
«Сайты взломаны, как минимум один. Сделай бэкап, просканируй файлы и базы. Пока ничего не меняй.»
01
02
Каждая правка со спамом шла из настоящего аккаунта администратора, после обычного входа с первой попытки. Подбор паролей тоже шёл, но пароль у злоумышленника уже был. На двух чистых сайтах были те же администраторы.
Первая скрытая ссылка на главной.
Ещё две волны: микрокредиты, казино и обменники криптовалют.
На странице услуг появляется блок ссылок на литовские казино.
Последняя правка главной, с IP-адреса AWS.
Начало бэкапа, расследования и очистки.
Файлы, базы данных, логи доступа и старые архивы всех трёх сайтов, около 10 ГБ, скопированы локально до начала анализа. Базы сохранены побайтово, чтобы польский текст и кириллицу можно было восстановить точно.
Ядро WordPress сверено с официальным дистрибутивом файл за файлом. Плагины, темы, uploads и mu-plugins проверены на веб-шеллы, базы на скрытые блоки и чужих админов, логи на входы и правки. Отдельно проверили, что видит Googlebot.
30 спам-блоков удалены из 11 записей базы, включая 9 старых ревизий, чтобы спам не вернулся через восстановление версии. Каждая правка сверялась с хешем записи, видимый текст страниц не тронут.
Публичные архивы удалены, фейковый плагин и папка с бэкдором удалены, xmlrpc.php закрыт, ключи безопасности заменены, пароли баз сменены. Чужой email, на который приходили сбросы паролей, заменён в 15 местах.
Удалённое выполнение кода в 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 взломан?