Ataques de Fuerza Bruta en WordPress usando XML-RPC

Recientemente una persona solicitó mis servicios porque su sitio web desde hacía unos días se caía de forma continuada. Desde el soporte técnico sólamente le indicaban que se debía a un problema de su wordpress. En vista que no le solucionaban el problema contactó conmigo y me proporcionó los datos de conexión al VPS. Esa misma noche me conecté vía SSH y estuve monitorizando la carga de la máquina, la memoria usada, los procesos de apache, la conexiones abiertas, las conexiones establecidas, etcétera… en ese momento el sitio web tenía un tráfico considerable y funcionaba correctamente.

Así que como estaba todo tranquilo estuve entretenido indagando en el registro de accesos (access log) para ver qué había estado ocurriendo durante estos días de caídas continuas y encontré que desde el pasado 31 de julio el sitio estaba recibiendo un Ataque de Fuerza Bruta desde varias direcciones ip localizadas en países como Holanda, Turquía y Arabia Saudí, casi con toda probabilidad ataques controlados a distancia mediante el uso de ordenadores zombis, ataque que ocasionaba, de forma intermitente, denegaciones de servicio.

Bueno, poco iba a durar la tranquilidad… cerca de las 22 horas y 22 minutos dió comienzo un nuevo ataque y a los pocos segundos el apache empezó a motrar los primeros síntomas de fatiga apareciendo los primeros errores: Error 503 Service Unavailable.

Durante los cuatro días que ha durado el ataque, el fichero xmlrpc.php ha llegado a recibir hasta 209.606 peticiones repartidos en los siguientes días:

* Día 31 de julio: 10.871 peticiones
* Día 1 de agosto: 64.971 peticiones
* Día 2 de agosto: 93.203 peticiones
* Día 3 de agosto: 40.561 peticiones

Los nuevos ataques de Fuerza Bruta usando XML-RPC

Ahora que la vulnerabilidad de DDoS XMLRPC “pingback” en WordPress parece estar bajo control desde que fue solucionado en la versión 3.5.1 de WordPress, los crackers están probando nuevos ataques de fuerza bruta para conseguir la contraseña del usuario administrador de WordPress utilizando el método wp.getUsersBlogs del fichero xmlrpc.php.

<?xml version="1.0" encoding="iso-8859-1"?>
<methodCall>
 <methodName>wp.getUsersBlogs</methodName>
  <params>
    <param><value>admin</value></param>
    <param><value>admin123</value></param>
  </params>
</methodCall>

Laboratorio

Actualizado el 5 de agosto.

El objetivo del laboratorio es identificar cuáles son los códigos de respuesta para este ataque de fuerza bruta. Para realizar la prueba se ha montado el laboratorio en localhost, después se ha creado el fichero getcode.xml copiando las líneas anteriormente comentadas y a continuación se ha lanzando la petición con el comando curl, primero con la contraseña correcta y en una segunda prueba con la errónea.

Lanzamos el ataque…

curl -H "Content-Type: application/xml" -X POST --data-binary @getcode.xml http://localhost/laboratorio/xmlrpc.php

Respuesta de un ataque válido:

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <array><data>
  <value><struct>
  <member><name>isAdmin</name><value><boolean>1</boolean></value></member>
  <member><name>url</name><value><string>http://localhost/laboratorio/</string></value></member>
  <member><name>blogid</name><value><string>1</string></value></member>
  <member><name>blogName</name><value><string>laboratorio</string></value></member>
  <member><name>xmlrpc</name><value><string>http://localhost/laboratorio/xmlrpc.php</string></value></member>
</struct></value>
</data></array>
      </value>
    </param>
  </params>
</methodResponse>

Repetimos el ataque pero modificando antes la contraseña en el fichero getcode.xml por una errónea…

Respuesta de un ataque fallido:

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>403</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string>Incorrect username or password.</string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>

Mirando los códigos de respuesta, vemos que si el ataque es válido nos devuelve un isAdmin, y si es fallido nos devuelve un 403.

Un motivo más para seguir las recomendaciones de aseguramiento de nuestro WordPress y la fortificación de WordPress frente ataques de fuerza bruta.

Protegiendo WordPress contra ataques de Fuerza Bruta de XML-RPC

Como solución contra la amenaza que supone la Fuerza Bruta se optó por denegar todo tipo de acceso al archivo xmlrpc.php añadiendo al fichero .htaccess la siguiente directiva:

<Files xmlrpc.php>
 order allow,deny 
 deny from all 
</Files>

El fichero xmlrpc.php incluido en WordPress sirve para dar soporte XML-RPC, por ejemplo; pingback. ¿Qué es un Pingback? Citamos a wikipedia: Pingback es método que se utiliza para que los autores del blog soliciten una notificación cuando alguien enlaza uno de sus post.

La opcion de denegar el acceso al fichero xmlrpc.php a todos mediante .htaccess conlleva que dejaremos de recibir los pingbak/trackback, sin duda un mal menor frente a un ataque de fuerza bruta.

Existen varias formas de proteger nuestro WordPress para frenar ataques de fuerza bruta y mitigar los ataques DDoS, algunas de las cuales las podéis encontrar en la web de perishablepress.com.

Actualizado el 7 de agosto.
Con la nueva actualización de seguridad de WordPress 3.9.2 se soluciona la posibilidad de denegación de servicio al procesar XML PHP en XML-RPC. Sin embargo, sigue existiendo el riesgo de que un cracker pueda obtener la password del administrador del sitio web mediante ataque de fuerza bruta.

Si os ha sido útil este artículo os invito a compartirlo con vuestros amigos en las Redes Sociales haciendo clic en los iconos que aparecen a la izquierda o abajo de la entrada.

, , ,

2 Respuestas a Ataques de Fuerza Bruta en WordPress usando XML-RPC

  1. Henry agosto 6, 2014 en 2:33 pm #

    Muchas gracias.

    Buena y sucinta explicación de un comportamiento que no por errático, es menos común. (Los malos están en todas partes;-) )

Deja un comentario