Как избавиться от XML-RPC-атаки на WordPress-сайты?

уязвимость Wordpress

Предыстория

Несколько дней назад я заметил, что нагрузка моих сайтов на хостинг выросла в разы. Если обычно она составляла в районе 100-120 «попугаев» (CP), то за последние несколько дней она возросла до 400-500 CP. Ничего хорошего в этом нет, ведь хостер может перевести на более дорогой тариф, а то и вовсе прикрыть доступ к сайтам, поэтому я начал разбираться.

нагрузка на хостинг

После письма хостеру (Beget) с объяснением ситуации, я получил подробную статистику с рекомендациями по исправлению проблемы. Итак, что мы видим:

Львиная часть запросов идет на WordPress-сайты, а именно — на обращение к файлу xmlrpc.php:

топ запросов

Топ IP-адресов выглядит подобным образом:

топ IP-адресов

Используя соответствующие инструменты (к примеру, тот же http://2ip.ru/whois/), выясняем, что первые два IP (5.196.5.116 и 37.59.120.214) — это и есть наш атакующий. Оба IP из Франции (позже к ним присоединился еще один «француз» — 92.222.35.159). Третий по популярности IP-адрес (178.154.202.251) принадлежит поисковому боту Яндекса, его блокировать не стоит.

Возникает острое желание заблокировать доступ к сайтам с этих двух IP-адресов, это же советует и хостер:

советы хостера

Однако я решил разобраться в характере проблемы подробнее, дабы подобного не возникало впоследствии (к примеру, при смене атакующим IP).

Что это за XML-RPC-атаки?

XML-RPC — это стандартный механизм WordPress, который применяется в частности для механизма пингбэков. А в последних версиях WordPress, начиная с 3.5, пингбэки включены по умолчанию без возможности отключения их стандартными средствами.

Попросту говоря, механизм XML-RPC помогает сообщать другому сайту о том, что на него появилась ссылка в новом материале. Это стандартная возможность WordPress, и она не является уязвимостью.

Плохо становится, когда злоумышленники используют ее для спама/флуда. Используя множество сайтов, при помощи запросов с них xmlrpc.php можно устроить DDoS другому сайту (на который ссылаются). Подробнее об этом механизме можно прочитать в этой статье: там рассказывается о случае 2014 года, когда атака со 162 тысячи Wordpress-сайтов (причем ничем не зараженных) практически «положила» DDoS-ом крупный портал.

механизм DDoS с использованием XML-RPC

Что делать, чтобы избавиться от запросов xmlrpc.php?

Ну что ж, тут, как говорится, все просто. Можно, конечно, попросту отрубить механизм XML-RPC, но это может аукнуться некорректной работой сторонних модулей, использующих его. Это можно сделать как вручную через настройку файлов .htaccess или wp-config.php, так и через установку плагинов (подробнее о всех возможных способах в этой статье).

Но я выбрал метод, который позволит сохранить функциональность XML-RPC: установку плагина Disable XML-RPC-API. Он удаляет лишь «опасные» методы pingback.ping и pingback.extensions.getPingbacks, оставляя функционал XML-RPC. После установки плагин нужно всего лишь активировать — дальнейшая настройка не требуется.

Попутно я забил все IP атакующих в файл .htaccess своих сайтов, чтобы заблокировать им доступ. Просто дописал в конец файла:

Order Allow,Deny
Allow from all
Deny from 5.196.5.116 37.59.120.214 92.222.35.159

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

23 Комментарии

  1. CoolNovo 2.0.9.20 Windows 7 x64 Edition

    Спасибо за статью, действительно очень сильная нагрузка идёт и именно на этот файл. Но почему-то запрет в htaccess не даёт результата, точнее в логи доступа всё равно пишутся строки посещения этого файла. Не знаю как бороться. Может подскажите?

  2. Google Chrome 39.0.2171.95 GNU/Linux x64

    Алекс, а вы оба способа использовали? Попробуйте заблокировать все IP хацкеров в htaccess, установить Disable XML-RPC Pingback, а также еще один плагин для ограничения попыток авторизации — Limit Login Attempts.
    У вас тоже Beget? Я несколько раз связывался с поддержкой, запрашивал статистику. Там несколько IP атакуют, причем они меняются со временем.

  3. CoolNovo 2.0.9.20 Windows 7 x64 Edition

    Я использовал только запрет в хтацесс, думаю этого будет достаточно, у меня посещения были именно с IP 92.222.35.159, именно по этому запросу я и нашёл ваш сайт в гугле. Я немного поправлюсь, дело в том, что даже если в ISP хостинга вообще отключить домен, то оказывается всё равно логи доступа пишутся. Также если прописать запрет в хтацесс, то такой дикой нагрузки действительно уже нет, т.е. ваш метод на самом деле помог, но оказывается логи будут по прежнему писаться. Странно конечно. У вас также?

  4. CoolNovo 2.0.9.20 Windows 7 x64 Edition

    Понятно, спасибо за совет в статье. Будет полезным если новые IP будете добавлять в статью. Страничку добавил в закладки, буду периодически посещать и просматривать обновления.

  5. CoolNovo 2.0.9.20 Windows 7 x64 Edition

    Админ, привет. Добавь в свою статью ещё этот IP 192.3.207.2
    с него тоже сегодня просто невероятно ддосит на этот файл.

  6. CoolNovo 2.0.9.20 Windows 7 x64 Edition

    Хотя нет, поспешил немного. Не могу понять вот что мне логи доступа выдали:
    192.3.207.2 — — [15/Mar/2015:23:24:26 +0300] «POST /xmlrpc.php HTTP/1.0» 403 887 «-» «Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html
    Получается это гугл ддосит что ли? За две минуты на этот файл почти 3000 запросов.

  7. Google Chrome 41.0.2272.89 Windows 8

    Вот с этого 66.225.231.114 мучали через каждый час. Заблокировал все равно запросы идут. Как руками заблокировать без стороних плагинов? Хостинг Джино.

  8. Google Chrome 43.0.2357.130 Windows 7 x64 Edition

    Зимой на бигете была такая же проблема, сегодня началось все снова. Шаманство над xmlrpc и сокрытие wt-login, а так же эти плагины уже не спасают. Надеюсь на глюк апача, иначе больше и не знаю что сделать.
    З,Ы, бигет.

  9. Google Chrome 104.0.0.0 GNU/Linux x64

    Спасибо за статью. Только сейчас Disable XML-RPC Pingback плохо работает, пропускает (о чем отзывы свидетельствуют). А вот плагин Disable XML-RPC-API нормально справляется.

  10. Google Chrome 104.0.0.0 GNU/Linux x64

    Во-во, такая же тема. Нашел этот пост поиском. Тоже возникла проблема с RSS — тупо не обновляет ленту после установки Disable XML-RPC-API! Вернулся на другой плагин.

  11. Google Chrome 104.0.0.0 GNU/Linux x64

    Кстати, нашел решение по поводу нерабочего RSS с плагином Disable XML-RPC-API!
    Надо зайти в настройки плагина, в раздел Speed Up WordPress и ОТКЛЮЧИТЬ опцию Remove RSS and RSD. После этого лента заработает.

  12. Google Chrome 106.0.0.0 GNU/Linux x64

    ram32, спасибо за инфу, чувак!
    Через Disable XML-RPC Pingback ломают постоянно, брутят. А этот плагин — огонь. Теперь можно его опять поставить.

  13. Google Chrome 108.0.0.0 GNU/Linux x64

    Ну, IP блочить — достаточно бессмысленное занятие.
    А вот Disable XML-RPC-API отличный плагин! Рекомендую в статью добавить, а то там до сих пор неактуальный уже прописан.

  14. Google Chrome 109.0.0.0 Windows 10 x64 Edition

    Лишний плагин снова будет более грузить сам сайт на WP. Насколько я знаю есть один плагин универсальный для многих таких случаев XML-RPC Pingback по-моему называется Clerfy.

  15. Google Chrome 110.0.0.0 GNU/Linux x64

    Ну и чем отличается Clearfy от этого плагина?) Тем, что он более монструозный. Если остальные его функции не требуются, но не вижу смысла его ставить ради этой цели. Другое дело, если требуется его другой функционал.

Отправить ответ

Ваш e-mail не будет опубликован.


*


Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.