¿Cómo saber si mi sitio está usando el archivo xmlrpc.php?

25 may 2016, 12:08:32
Vistas: 25.6K
Votos: 5

Me he hecho cargo de un sitio web en mi trabajo que fue desarrollado por un empleado anterior, y parece que recientemente este sitio ha sido víctima de una serie de ataques DDoS a través del uso del pingback xmlrpc, comprobado por entradas de registro como esta:

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)" (Obviamente esto no es un bot de Google porque no hay razón para que Google haga POST a este archivo.)

Creo que hay muchas soluciones para esto (Este tutorial) pero tiendo a inclinarme por simplemente bloquear completamente el acceso al archivo. Sin embargo, no estoy seguro si este sitio está realmente usando los servicios que xmlrpc permite utilizar. ¿Hay alguna manera particular de comprobar si el desarrollador anterior ha implementado algo para usar la funcionalidad xmlrpc de WordPress? ¿Podría buscar funciones en archivos específicos o hay algo que identifique claramente su uso?

¡Cualquier ayuda con esto sería genial!

EDICIÓN: ¿Algo como esto sería útil?

<FilesMatch "^(xmlrpc\.php)">
    Order Deny,Allow
    # Lista blanca de direcciones IP
    Allow from xxx.xxx.xxx.xxx
    Deny from all
</FilesMatch>

Si permito el acceso desde la dirección IP del servidor, ¿funcionaría esto para los plugins, etc., o todos tienen su propia dirección IP que necesitaría ser agregada?

1
Comentarios

La API XML-RPC puede ser utilizada por clientes, como por ejemplo las aplicaciones móviles de WordPress. ¿Cómo saber todas las IPs que deben incluirse en la lista blanca?

cybmeta cybmeta
25 may 2016 13:14:20
Todas las respuestas a la pregunta 2
2

Como has descrito, has sido víctima de un ataque DDoS (o tal vez no, solo asumo que lo sabes). Este tipo de ataques pueden dirigirse a cualquier parte de un sitio web dinámico, por ejemplo, los archivos index.php o xml-rpc.php.

Desde mi punto de vista, la solución correcta no es bloquear la parte atacada, sino bloquear al atacante.

Por lo tanto, no bloquees la API XML-RPC en WordPress, ya que es utilizada por una gran cantidad de plugins y clientes externos; bloquéala solo si realmente sabes lo que estás haciendo y sus consecuencias. En su lugar, bloquea al atacante a nivel de servidor, por ejemplo, puedes incluir su IP en una lista negra en el firewall del servidor o en el archivo .htaccess.

25 may 2016 12:29:56
Comentarios

Esto es algo que ya estoy haciendo, pero si un atacante es persistente, simplemente cambiará la dirección IP que está utilizando por una que aún no he tenido la oportunidad de bloquear, y entonces la lista seguirá creciendo sin resolver realmente el problema de raíz.

LewisJWright LewisJWright
25 may 2016 12:34:20

Y si el atacante va contra index.php, ¿qué harías? La solución es un firewall, no bloquear los scripts utilizados por tu sitio web. En cualquier caso, bloquea XML-RPC API si sabes lo que estás haciendo y no lo necesitas. Desafortunadamente, no puedo responder a tu pregunta sobre "Cómo saber si necesito XML-RPC".

cybmeta cybmeta
25 may 2016 13:07:24
0

Esto parece más un bot de spam o un intento de enumeración que un ataque DDoS. Para estar seguro, deberías revisar el consumo de recursos, la dinámica de las direcciones IP y quizás los payloads.

1. Bloquear el acceso al archivo xmlrpc.php:

Creo que no deberías hacerlo:

  1. No te ayudará a sobrevivir a un ataque DDoS real.
  2. Como @cybmeta mencionó, podría romper muchos servicios de terceros.
  3. Permitir el acceso desde ciertas IPs tampoco ayuda porque las IPs pueden ser falsificadas y no puedes listar todas las IPs que usarán el servicio XML-RPC.

Suelo registrar todas las IPs que hacen solicitudes a xmlrpc.php, usar iptables para establecer límites de tasa y luego bloquear las IPs que claramente son maliciosas.

2. Cómo saber si tu sitio está usando xmlrpc.php

  1. Las funciones y recursos en WordPress que usan el servicio XML-RPC tienen la cadena xmlrpc en el nombre de las funciones o archivos, así que puedes revisar tu tema y plugins para ver si hay coincidencias.
  2. Todas las solicitudes XML-RPC en WordPress pasan por xmlrpc.php, que define define('XMLRPC_REQUEST', true), así que puedes usar:
if ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST ) {
    // Registrar algo.
    // O salir inmediatamente si hay algo malicioso en la solicitud.
}

Ten en cuenta que no puedes usar este código en archivos de temas o plugins. xmlrpc.php es independiente de temas y plugins, así que debes colocarlo en tu archivo wp-config.php.

25 may 2016 17:17:20