WordPress hackeado: qué hacer y cómo prevenirlo

WordPress hackeado: qué hacer y cómo prevenirlo

A pesar de que WordPress se considera seguro, todas las páginas web tienen riesgo de ser atacadas. Este riesgo se multiplica si no hemos tomado las medidas de seguridad necesarias desde el principio. ¿Tienes sospechas de que han hackeado tu página web en WordPress? No te preocupes, no está todo perdido. En este artículo veremos como comprobar si han atacado tu página, cómo recuperarla, y como prevenirnos ante un hackeo. ¡Comenzamos!

Cómo saber si tengo el WordPress hackeado

Si tu sitio web se está comportando de manera extraña, no necesariamente tiene que ser por un hackeo, puede ser un problema del hosting o incluso de caché por ejemplo. Al principio es difícil detectar si este comportamiento se debe a un ataque.

Estos son algunos de los síntomas que pueden indicar un hackeo:

Cambios en la página que tú no has hecho

Algunos hackers inyectan contenido para redirigir a los usuarios, o para intentar conseguir su información. Este contenido puede ser un anuncio, botones, formularios, de todo.

La página no carga

WordPress puede lanzar varios errores al intentar cargar la página. Analizar estos mensajes nos puede dar pistas sobre lo que está pasando.

Ordenador con error 500 internal server error - WordPress Hackeado
  • HTTP 500 Internal Server Error: Este es el más común, y también el más general. Puede dar alguna pista como «Error Establishing a Database Connection», «Internal Server Error» o «Connection Timed Out».
  • HTTP 502 Bad Gateway Error o 503 Service Unavailable: La causa más habitual para que se lance alguno de estos errores es un gran número de peticiones HTTP, si tu web no recibe grandes cantidades de tráfico normalmente, esto nos puede indicar que el sitio está siendo atacado, pero también puede ser un problema del hosting.
  • 401 Unauthorized, 403 Forbidden, y Connection Refused by Host: Si tu página muestra alguno de estos errores, es porque ya no tienes acceso al contenido del servidor, habitualmente por un problema de credenciales, permisos de archivos o cambio de contraseñas. Si no has cambiado tu contraseña ni los permisos, podría haber sido alguien externo.

No puedo entrar en el panel de WordPress

Si no puedes entrar en el panel de WordPress, lo primero que debes intentar es restablecer la contraseña. Puede ser que el hacker haya cambiado el correo asociado y no podamos restablecerla. Si el mensaje de error es «Error: The username ‘tunombre’ is not registered on this site», es probable que tu cuenta haya sido eliminada completamente.

Aviso de Google Navegación Segura

Google tiene una herramienta llamada Navegación Segura que escanea la página en busca de Malware. La mayoría de los buscadores usan esta herramienta, si salta el aviso de malware, es muy probable que tu página haya sido hackeada.

Cómo recuperar mi WordPress hackeado

Si has confirmado que tienes tu WordPress hackeado, no te preocupes, no está todo perdido. Aquí tienes unos pasos a seguir para recuperar el control de tu web.

Cambia las credenciales

Este paso es quizá el más evidente, lo primero que tenemos que hacer es cambiar todas las contraseñas, de los usuarios, de la base de datos, del servidor, todas.

WordFence

WordFence es un plugin de seguridad que deberíamos tener instalado en nuestras páginas desde el inicio, como comentaremos más adelante en cómo proteger tu página. Este plugin nos ofrece varios servicios de seguridad, pero en una situación post-hackeo, nos centraremos en su servicio «analizar».

En la pestaña de analizar pulsaremos sobre «Iniciar una nueva exploración». Pasados unos minutos, WordFence habrá detectado cambios en tus archivos respecto a una instalación limpia de WordPress. También nos dirá que líneas de código son sospechosas, y qué pueden significar.

Plugins y temas

En el caso de los plugin y los temas, tendremos que comprobar los archivos a mano, ya que WordFence solo actúa sobre los ficheros de WordPress.

Indexación y redirecciones

Puede que los hackers hayan indexado páginas en Google bajo nuestro dominio. Para ver si este es el caso, escribiremos en el buscador de Google site:nombredenuestrositio. Aquí veremos si solo indexa nuestras páginas o también incluye algunas otras. Para solucionar este problema, primero haremos redirecciones. Por cada URL indexada crearemos una línea en nuestro .htaccess con este formato.

Redirect 301 url-infectada/ https://www.nuestrositio.com/

Las redirecciones pueden ser 301 o 302, las 301 son redirecciones permanentes, avisan a Google de que la nueva dirección de esa URL es la que nosotros establecemos, esto favorece a una reindexación. Las 302, sin embargo, son redirecciones temporales, por los que Google no las reindexará.

Limpia la base de datos

Es posible que los atacantes hayan alterado la base de datos de tu WordPress hackeado, por ello debemos revisarla muy bien y eliminar los registros sospechosos. Es recomendable mirar la tabla de usuarios, la de páginas, la de posts o la de comentarios entre otras. Nos puede resultar muy útil una copia de seguridad para contrastar datos.

Protege tu página WordPress de hackeos

Más vale prevenir que curar, y es que una protección inicial de nuestra página nos puede ahorrar muchos disgustos. A continuación vamos a ver algunas recomendaciones de configuración para proteger nuestra página web de hackeos.

  • Mantener WordPress y plugins actualizados.
  • Eliminar temas y plugins que vienen por defecto en WordPress.
  • Crear copias de seguridad de manera periódica.
  • Esconder el inicio de sesión: Si los atacantes no saben por qué URL entramos a el panel de WordPress, se lo ponemos algo más difícil. Esto lo podemos hacer con plugins como WP Hide Login, o incluyendo estas reglas en functions.php.
// Add rewrite rule and flush on plugin activation
register_activation_hook( __FILE__, 'NLURL_activate' );
function NLURL_activate() {
    NLURL_rewrite();
    flush_rewrite_rules();
}

// Flush on plugin deactivation
register_deactivation_hook( __FILE__, 'NLURL_deactivate' );
function NLURL_deactivate() {
    flush_rewrite_rules();
}

// Create new rewrite rule
add_action( 'init', 'NLURL_rewrite' );
function NLURL_rewrite() {
    add_rewrite_rule( 'login/?$', 'wp-login.php', 'top' );
    add_rewrite_rule( 'register/?$', 'wp-login.php?action=register', 'top' );
    add_rewrite_rule( 'forgot/?$', 'wp-login.php?action=lostpassword', 'top' );
}


//register url fix
add_filter('register','fix_register_url');
function fix_register_url($link){
    return str_replace(site_url('wp-login.php?action=register', 'login'),site_url('register', 'login'),$link);
}

//login url fix
add_filter('login_url','fix_login_url');
function fix_login_url($link){
    return str_replace(site_url('wp-login.php', 'login'),site_url('login', 'login'),$link);
}

//forgot password url fix
add_filter('lostpassword_url','fix_lostpass_url');
function fix_lostpass_url($link){
    return str_replace('?action=lostpassword','',str_replace(network_site_url('wp-login.php', 'login'),site_url('forgot', 'login'),$link));
}

//Site URL hack to overwrite register url
add_filter('site_url','fix_urls',10,3);
function fix_urls($url, $path, $orig_scheme){
    if ($orig_scheme !== 'login')
        return $url;
    if ($path == 'wp-login.php?action=register')
        return site_url('register', 'login');

    return $url;
}
  • Cambiar el prefijo de las tablas de la base de datos en la instalación: si cambiamos el prefijo por defecto «wp_», será más difícil de encontrar para los hackers.
  • Uso de CDNs: Con intermediarios entre el navegador y el hosting, tenemos una barrera extra de seguridad. Existen varias opciones, por ejemplo CloudFlare tiene un plan gratuito bastante completo.
  • WordFence: Esta herramienta que hemos mencionado antes, es la más completa y más recomendable. El primer paso es hacer un análisis, como hemos ya hemos visto. Después configuraremos el cortafuegos. Aquí podremos bloquear IPs y, en la versión premium, bloquear países. En el propio escritorio de WordPress tenemos una opción para configurar el cortafuegos y que se lance automáticamente antes de cada petición. En la pestaña «Herramientas» tenemos la opción «ver tráfico en vivo», aquí tendrás acceso a una tabla con los intentos de acceso a tu web, se muestra su país, fichero al que han intentado acceder, y la IP, que podremos bloquearla directamente desde aquí.
  • Deshabilitar el editor de temas: en el wp-config.php podremos añadir estas dos líneas de código que impedirán la edición de la plantilla desde WordPress.
define(‘DISALLOW_FILE_EDIT’,true);
define(‘DISALLOW_FILE_MOD’,true);
  • Eliminar acceso al XMLRPC: Una gran cantidad de ataques van a por este fichero, podemos impedir el acceso incluyendo este código en el .htaccess. Incluiremos las IP que queramos admitir y bloquearemos todas las demás.
<Files xmlrpc.php>
order deny,allow
deny from all
allow from XXX.XXX.XXX
</Files>
  • Ocultar la versión de WordPress: Cuantas menos pistas les demos a los hackers, mejor. Por defecto, WordPress incluye una línea en el código fuente con la información de su versión. Podemos evitar esto con el siguiente código en functions.php.
remove_action(‘wp_head’,’wp_generator’);
  • Eliminar FEED, RSS: Estas acciones ya no nos interesan a día de hoy, son herencias de cuando WordPress era para blogs. En functions.php podemos encontrar sentencias add_action haciendo referencia a estos servicios. Eliminaremos los que no nos interesen para evitar que WordPress se conecte con sistemas externos de manera pública.
  • Permisos en el servidor: Es recomendable cambiar los permisos de los archivos más sensibles a 400. Esto hará que solo el administrador los pueda leer. Para editarlos habría que cambiar los permisos temporalmente.

Resumiendo

Como has podido comprobar, librarse de un hackeo es difícil, pero hay acciones que podemos tomar. Lo más importante es configurarlo bien desde el principio y blindar tu página. ¿Conoces alguna otra técnica para limpiar los hackeos? ¡Cuéntanos en comentarios!

Dejar una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Puedes usar estas etiquetas y atributos HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>