Как узнать, использует ли мой сайт файл xmlrpc.php?

25 мая 2016 г., 12:08:32
Просмотры: 25.6K
Голосов: 5

Я принял в управление веб-сайт на работе, который был разработан предыдущим сотрудником. Недавно этот сайт стал жертвой серии DDoS-атак через использование xmlrpc pingback, что подтверждается записями в логах такого вида:

154.16.63.40 - - [22/May/2016:06:52:49 +0100] "POST /xmlrpc.php HTTP/1.1" 200 596 "-" "Googlebot/2.1 (+http://www.google.com/bot.html)" (Очевидно, что это не Googlebot, так как у Google нет причин отправлять POST-запросы к этому файлу.)

Я знаю, что существует множество решений (Этот туториал), но я склоняюсь к тому, чтобы просто полностью заблокировать доступ к файлу. Однако я не уверен, использует ли сайт сервисы, которые предоставляет xmlrpc. Есть ли способ проверить, настроил ли предыдущий разработчик что-либо для использования функциональности WordPress xmlrpc? Могу ли я проверить наличие определенных функций в конкретных файлах, или есть что-то, что явно указывает на использование?

Буду благодарен за любую помощь!

РЕДАКТИРОВАНИЕ: Может быть, что-то подобное поможет?

<FilesMatch "^(xmlrpc\.php)">
    Order Deny,Allow
    # Белый список IP-адресов
    Allow from xxx.xxx.xxx.xxx
    Deny from all
</FilesMatch>

Если я разрешу доступ с IP-адреса сервера, будет ли это работать для плагинов и т.д., или у них у всех свои IP-адреса, которые нужно добавлять?

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

API XML-RPC может использоваться клиентами, например, мобильными приложениями WordPress. Как узнать все IP-адреса, которые нужно добавить в белый список?

cybmeta cybmeta
25 мая 2016 г. 13:14:20
Все ответы на вопрос 2
2

Как вы описали, ваш сайт подвергся DDoS-атаке (или, возможно, нет, я просто предполагаю, что вы знаете об этом). Такие атаки могут быть направлены на любую часть динамического сайта, например, на файлы index.php или xml-rpc.php.

С моей точки зрения, правильное решение — не блокировать атакуемую часть, а блокировать самого атакующего.

Поэтому не блокируйте XML-RPC API в WordPress — он используется множеством плагинов и внешних клиентов; блокируйте его только если вы действительно понимаете, что делаете, и последствия этого. Вместо этого заблокируйте атакующего на уровне сервера, например, добавив его IP в черный список серверного файрвола или .htaccess.

25 мая 2016 г. 12:29:56
Комментарии

Это то, что я уже делаю, однако, если злоумышленник настойчив, он просто изменит используемый IP-адрес на тот, который я еще не успел заблокировать, и тогда список будет только расти, фактически не решая проблему в корне.

LewisJWright LewisJWright
25 мая 2016 г. 12:34:20

А если злоумышленник атакует index.php, что вы будете делать? Решение — это файрвол, а не блокировка скриптов, используемых вашим сайтом. В любом случае, заблокируйте XML-RPC API, если вы знаете, что делаете, и он вам не нужен. К сожалению, я не могу ответить на ваш вопрос о том, "Как узнать, нужен ли мне XML-RPC".

cybmeta cybmeta
25 мая 2016 г. 13:07:24
0

Это больше похоже на спам-бота или перебор, чем на DDoS-атаку. Чтобы убедиться, вам следует проверить потребление ресурсов, динамику IP-адресов и, возможно, содержимое запросов.

1. Блокировка доступа к файлу xmlrpc.php.:

Я считаю, что вам не стоит этого делать:

  1. Это не поможет вам пережить настоящую DDoS-атаку.
  2. Как @cybmeta сказал, это может нарушить работу многих сторонних сервисов.
  3. Разрешение доступа только с определенных IP-адресов также не поможет, так как IP можно подделать, и вы не сможете перечислить все IP-адреса, которые будут использовать XML-RPC сервис.

Я обычно логирую все IP-адреса, которые делают запросы к xmlrpc.php, использую iptables для установки ограничения на частоту запросов. Затем блокирую IP-адреса, которые явно злонамеренные.

2. Как узнать, использует ли ваш сайт xmlrpc.php

  1. Функции и ресурсы в WordPress, использующие XML-RPC сервис, содержат строку xmlrpc в названиях функций или файлов, так что вы можете быстро проверить вашу тему и плагины на наличие совпадений.
  2. Все XML-RPC запросы в WordPress проходят через xmlrpc.php, который определяет define('XMLRPC_REQUEST', true), так что вы можете использовать:
if ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST ) {
    // Записать что-то в лог.
    // Или немедленно завершить выполнение, если в запросе что-то злонамеренное.
}

Обратите внимание, что этот код нельзя использовать в файлах темы или плагинов. xmlrpc.php независим от тем и плагинов, поэтому код нужно размещать в файле wp-config.php.

25 мая 2016 г. 17:17:20