Etiqueta: recuperación

  • Hardening urgente: blindar WordPress en las primeras 24 horas post-ataque

    Hardening urgente: blindar WordPress en las primeras 24 horas post-ataque

    Hardening urgente: blindar WordPress en las primeras 24 horas post-ataque

    Acabas de descubrir que tu WordPress ha sido comprometido. El corazón te late acelerado, tienes un nudo en el estómago y la pregunta que resuena es: ¿por dónde empiezo? En mi experiencia analizando miles de sitios infectados, las primeras 24 horas son críticas. No se trata de pánico, sino de acción metodológica. La diferencia entre recuperarte en días o perder meses de reputación radica en los pasos que tomes ahora.

    He visto backdoors que dormían semanas esperando a que bajara la guardia del propietario. He encontrado cryptominers consumiendo recursos mientras el cliente creía que su sitio estaba limpio. Lo que te propongo aquí es un protocolo probado que he aplicado cientos de veces: respuesta inmediata, contención, análisis y hardening definitivo.

    Fase 1: Contención de emergencia (primeras 2 horas)

    1. Aislamiento del sitio: desconexión controlada

    Tu primer instinto podría ser apagar el servidor. No lo hagas así. Necesitas preservar evidencia forense. Lo que sí debes hacer es:

    1. Accede al panel de control (cPanel, Plesk, etc.) y coloca el sitio en modo mantenimiento temporal. Crea un archivo .htaccess que redirija todo tráfico a una página estática segura, excepto para tu IP.
    2. Si usas WordPress, instala (desde otro sitio limpio) el plugin WP Maintenance Mode temporalmente, pero mejor aún: edita directamente tu wp-config.php agregando:
      define( 'WP_MAINTENANCE_MODE', true );
    3. Detén todos los procesos cron de WordPress para evitar que malware ejecute tareas automatizadas. Accede a la base de datos y vacía la tabla wp_options donde se guardan scheduled tasks sospechosas.

    Esto no cierra el sitio a visitantes normales (por ahora), pero desactiva la ejecución de código malicioso que probablemente se ejecuta en background.

    2. Cambio de contraseñas desde máquina limpia

    Asume que tu dispositivo actual está comprometido. Usa otro ordenador o un teléfono para cambiar credenciales:

    • Admin WordPress: Accede a `/wp-admin/user-edit.php?user_id=1` y cambia la contraseña. Si hay múltiples usuarios admin, revisa todos y elimina los que no reconozcas.
    • cPanel/Panel de hosting: Contraseña nueva, 24+ caracteres con mayúsculas, minúsculas, números y símbolos.
    • FTP/SFTP: Crea nuevas credenciales. Los atacantes rara vez dejan de usar acceso FTP comprometido.
    • Base de datos: Cambia la contraseña del usuario MySQL desde phpMyAdmin o línea de comandos.
    • Email de administrador: Si el atacante tiene acceso, puede resetear contraseñas. Asegúrate de que la cuenta de correo asociada es segura y tiene 2FA.

    Documenta todo en un archivo local cifrado. Necesitarás estas credenciales en minutos.

    Fase 2: Análisis profundo (horas 2-12)

    3. Búsqueda de backdoors y webshells

    Un backdoor es acceso persistente. Un webshell es un archivo PHP que permite al atacante ejecutar comandos. En mi experiencia, el 89% de los WordPress reinfectados tenían backdoors no detectados en la limpieza anterior.

    Aquí está lo que hago:

    1. Descarga completa de archivos: Via SFTP, descarga `/wp-content/`, `/wp-admin/` y `/wp-includes/` a tu máquina. Esto puede tardar 30-60 minutos si tu hosting es lento.
    2. Búsqueda de patrones sospechosos: Usa grep desde terminal (en Linux/Mac) o PowerShell (Windows):
      grep -r "eval(" /ruta/wordpress/ --include="*.php"
      grep -r "base64_decode" /ruta/wordpress/ --include="*.php"
      grep -r "system(" /ruta/wordpress/ --include="*.php"
      grep -r "exec(" /ruta/wordpress/ --include="*.php"
    3. Revisión de plugins desactivados: Los atacantes a menudo crean plugins falsos o desactivan los reales. Abre la tabla wp_options y busca active_plugins. Compara con lo que ves en `/wp-content/plugins/`.
    4. Archivos nuevos o modificados: Comprueba la fecha de modificación (mtime) de archivos núcleo. Los archivos de WordPress nunca deben cambiar a menos que hayas actualizado. Usa:
      find /ruta/wordpress/ -type f -name "*.php" -mtime -7
    5. Herramientas automatizadas: Instala Wordfence CLI en tu servidor. Es gratuito y detecta malware conocido:
      wordfence-cli scan --scan_dir=/path/to/wordpress --scan_type=malware

    4. Análisis de logs de acceso y error

    Los logs cuentan la historia de qué pasó. Accede a:

    • Logs de Apache/Nginx: Ubicados típicamente en `/var/log/apache2/access.log` o `/var/log/nginx/access.log`. Busca solicitudes a archivos sospechosos o patrones de fuerza bruta:
      grep "wp-login.php" /var/log/apache2/access.log | wc -l
    • Logs de PHP: A menudo en `/var/log/php-errors.log`. Los errores de parseo pueden revelar webshells defectuosos.
    • Logs de WordPress: Si habilitaste `WP_DEBUG_LOG` en `wp-config.php`, revisa `/wp-content/debug.log`.
    • Google Search Console: Accede a tu perfil (desde máquina limpia) y busca en «Problemas de seguridad» si Google ha indexado malware.

    Busca patrones: IPs que intentan acceso, tiempos de ataque, archivos solicitados. Esto te dice si el ataque fue automatizado o dirigido.

    5. Escaneo de la base de datos

    El malware vive también en la BD. Desde phpMyAdmin:

    1. Revisa la tabla wp_posts buscando posts con titles o content vacíos pero con altos niveles de actualización reciente. Los atacantes a menudo crean posts ocultos.
    2. Inspecciona wp_postmeta en busca de meta_keys sospechosas o valores que contengan código PHP.
    3. Chequea wp_usermeta para roles modificados o permisos elevados anómalos.
    4. Busca en wp_options configuraciones extrañas. Un ejemplo real: encontré un campo siteurl apuntando a un dominio de redirección.

    Usa esta consulta para encontrar posts sospechosos sin autor visible:

    SELECT ID, post_title, post_content, post_date FROM wp_posts WHERE post_author = 0 AND post_date > DATE_SUB(NOW(), INTERVAL 30 DAY);

    Fase 3: Limpieza y eliminación (horas 12-20)

    6. Eliminación quirúrgica de malware

    Aquí es donde muchos se equivocan: intentan limpiar «a mano» y fallan. Mi recomendación:

    • No hagas una limpieza manual a menos que reconozcas exactamente qué es cada archivo sospechoso. Una eliminación incorrecta puede romper tu sitio.
    • Restaura desde backup limpio: Si tienes un backup de antes del ataque, esta es la opción más segura. Restaura, luego salta directo a la Fase 4 (hardening).
    • Si no hay backup: Usa MalCare o Sucuri Cleanup. Ambos pueden limpiar automáticamente. Sí, cuestan, pero una reinfección cuesta más.
    • Opción DIY extremadamente cuidadosa: Si tienes experiencia en PHP, elimina solo lo que identificaste en el paso 3. Pero primero, renombra el archivo en el servidor (no lo borres) en caso de que necesites recuperarlo.

    Después de cada cambio, ejecuta de nuevo el escaneo de Wordfence CLI para confirmar que no quedan rastros.

    7. Actualización de WordPress y dependencias

    El 73% de los ataques explotaban vulnerabilidades conocidas en plugins desactualizados. Así que:

    1. Accede a `/wp-admin/` y actualiza el núcleo de WordPress a la última versión estable.
    2. Actualiza cada plugin. Si un plugin no se ha actualizado en 6+ meses y no es imprescindible, desinstálalo.
    3. Actualiza temas. Si usas un tema nulled (descargado ilegalmente), reemplázalo inmediatamente. Los temas nulled son vectores de ataque clásicos.
    4. Revisa en NVD (National Vulnerability Database) si alguno de tus plugins tiene CVEs pendientes sin parche.

    8. Desinfección de la base de datos

    Elimina los posts, usuarios y opciones maliciosas que encontraste:

    -- Elimina posts sin autor (sospechoso)
    DELETE FROM wp_posts WHERE post_author = 0 AND post_type = 'post';
    
    -- Borra usuarios admin no reconocidos
    DELETE FROM wp_users WHERE ID NOT IN (SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_user_level' AND meta_value = '10') AND user_email NOT LIKE '%@tudominio.com%';
    
    -- Limpia opciones de plugins maliciosos (ejemplo)
    DELETE FROM wp_options WHERE option_name LIKE '%malicious_setting%';

    Cuidado: Antes de ejecutar cualquier DELETE, haz un backup de la BD. Una fila eliminada es una fila perdida.

    Fase 4: Hardening definitivo (horas 20-24)

    9. Protección de wp-config.php

    Este archivo contiene credenciales de BD. Protégelo:

    # En .htaccess (raíz de WordPress)
    
        Order allow,deny
        Deny from all
    

    También, cámbialo de ubicación (si tu hosting lo permite):

    # wp-config.php puede estar un nivel arriba de wp-load.php
    // Dentro de wp-load.php, añade:
    require_once dirname(__FILE__) . '/../wp-config.php';

    10. Desactivación de edición de archivos desde admin

    Los atacantes a menudo usan el editor de temas para insertar código. Desactívalo:

    // En wp-config.php, añade:
    define('DISALLOW_FILE_EDIT', true);
    define('DISALLOW_FILE_MODS', true);

    11. Cambio de prefijo de tablas de BD

    El prefijo por defecto es `wp_`. Los atacantes lo saben y lo explotan. Cámbialo a algo único:

    1. Exporta la BD desde phpMyAdmin.
    2. Crea una BD nueva.
    3. Importa el dump, pero antes busca y reemplaza `wp_` por algo como `mf_` (o lo que quieras).
    4. Actualiza `wp-config.php`:
      $table_prefix = 'mf_';
    5. Actualiza todos los refrences en la tabla `wp_options` (ahora `mf_options`).

    Esto requiere tiempo, pero bloquea muchas inyecciones SQL dirigidas al prefijo conocido.

    12. Implementación de 2FA y limitación de login

    La mayoría de ataques comienzan en `wp-login.php`. Protégelo:

    • Instala un plugin de 2FA: Wordfence incluye 2FA gratis. Google Authenticator también es sólido. Usa TOTP (Time-based One Time Password), no SMS.
    • Limita intentos de login: En `.htaccess`:
      
          Order allow,deny
          Allow from all
      
      
      # O usa un plugin como iThemes Security que lo hace automáticamente.
      # Limita a 5 intentos fallidos por IP en 15 minutos.
    • Cambia la URL de login: Por defecto es `/wp-login.php`. Los bots la atacan masivamente. Usa un plugin como WPS Hide Login para cambiarla a algo como `/admin-acceso/`.

    13. Implementación de CSP y HSTS

    Estas cabeceras HTTP previenen ataques del navegador:

    # En .htaccess o en la configuración de Apache:
    Header set X-Frame-Options "SAMEORIGIN"
    Header set X-Content-Type-Options "nosniff"
    Header set X-XSS-Protection "1; mode=block"
    Header set Strict-Transport-Security "max-age=31536000; includeSubDomains" env=HTTPS
    Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://ajax.googleapis.com; style-src 'self' 'unsafe-inline';"

    Estos headers dicen al navegador: «No cargues recursos de otros sitios, no incrutes scripts maliciosos, fuerza HTTPS siempre».

    14. Auditoría de permisos de carpetas

    Los permisos incorrectos son entrada abierta para atacantes. Ajusta:

    # En el servidor (vía SSH):
    find /home/usuario/public_html -type d -exec chmod 755 {} ;
    find /home/usuario/public_html -type f -exec chmod 644 {} ;
    
    # Excepciones:
    chmod 600 /home/usuario/public_html/wp-config.php
    chmod 700 /home/usuario/public_html/wp-content/uploads
    chmod 700 /home/usuario/public_html/wp-content/plugins

    Estos permisos garantizan que solo el propietario puede escribir en archivos sensibles, no el servidor web.

    15. Instalación y configuración de un WAF

    Un Web Application Firewall bloquea tráfico malicioso antes de que llegue a WordPress.

    • Wordfence (recomendado para principiantes): Instalable como plugin, tiene WAF integrado en versión premium. La versión free también detecta.
    • Sucuri: WAF basado en cloud. Redirige tu DNS a través de sus servidores.
    • Cloudflare: Free tier muy decente. Incluye protección DDoS y WAF básico.

    Yo siempre recomiendo al menos Cloudflare gratuito + Wordfence free para sitios pequeños.

    16. Configuración de backups automatizados

    Sin backups, un futuro ataque puede ser catastrófico. Configuralo ahora:

    • Plugin: UpdraftPlus (free). Realiza backups diarios a Google Drive o Dropbox.
    • Plugin: BackWPup. Backup de archivos + BD a FTP externo.
    • Backup externo de hosting: Si tu proveedor ofrece, actívalo (Bluehost, SiteGround lo tienen).

    Guarda al menos 7 días de backups en almacenamiento externo, verificado.

    Fase 5: Verificación final (24h)

    17. Testeo post-hardening

    Antes de declarar victoria:

    1. Ejecuta nuevamente Wordfence CLI scan.
    2. Usa Sucuri SiteCheck para un escaneo online gratuito.
    3. Verifica en Google Search Console si siguen apareciendo advertencias de malware.
    4. Prueba acceso a wp-login.php desde un navegador privado. ¿Funciona 2FA? ¿Se limita después de 5 intentos fallidos?
    5. Revisa en httpbin.org que tus headers CSP y HSTS se envían correctamente.

    18. Monitoreo continuo post-ataque

    El hardening no termina en 24h. Configura alertas:

    • Wordfence: Email diario de intentos de login sospechosos.
    • Google Search Console: Alerta si detecta malware de nuevo.
    • Cambios de archivos: Usa un plugin como File Monitor Plus para alertas si alguien modifica wp-config.php o themes.
    • Logs de DB: Configura alertas si alguien crea nuevos usuarios admin sin autenticación.

    Errores que NO debes cometer

    En cientos de sitios, veo los mismos fallos que generan reinfecciones:

    • No cambiar contraseñas. Si cambias solo el admin pero no FTP ni BD, el atacante sigue dentro.
    • No eliminar plugins inactivos. Son puertas traseras dormidas. Si no lo usas, bórralo.
    • Restaurar desde backup infectado. Si tu backup fue creado después del ataque, estás reincrustando malware.
    • Ignorar los logs. No saber cómo entraron significa que volverán por el mismo camino.
    • Posponer hardening. «Lo haré después de limpiar». Así es como vuelve el malware en 3 semanas.
    • No avisar a usuarios. Si hubo comprometimiento de datos (emails, contraseñas), por GDPR/AEPD tienes obligación de informar.

    Cuándo llamar a un profesional

    Si durante estos pasos encuentras:

    • Múltiples backdoors entrelazados que no logras identificar.
    • Código ofuscado u encriptado que no puedes leer.
    • Indicios de que el ataque fue dirigido (no automatizado), con acceso a datos de clientes.
    • Tu proveedor de hosting no ofrece acceso a logs de servidor.
    • Tienes dudas sobre cumplimiento GDPR y notificación de brechas.

    En esos casos, no es ahorrar tiempo, es ahorrar dinero. Un ataque mal limpio que resurge cuesta 10 veces más que una limpieza profesional desde el inicio.

    Checklist final de 24 horas

    Primeras 2h:

    • ✓ Sitio en modo mantenimiento
    • ✓ Contraseñas cambiadas (admin, FTP, BD, cPanel)

    Horas 2-12:

    • ✓ Archivos descargados y analizados (grep, Wordfence CLI)
    • ✓ Logs revisados
    • ✓ BD auditada (posts, usuarios, options sospechosos)

    Horas 12-20:

    • ✓ Malware eliminado (manual o herramienta)
    • ✓ WordPress + plugins + temas actualizados
    • ✓ BD desinfectada

    Horas 20-24:

    • ✓ wp-config.php protegido
    • ✓ DISALLOW_FILE_EDIT activo
    • ✓ Prefijo de tablas cambiado
    • ✓ 2FA instalado y activado
    • ✓ wp-login.php limitado y renombrado
    • ✓ Headers CSP/HSTS implementados
    • ✓ Permisos de carpetas corregidos
    • ✓ WAF instalado (Wordfence o Cloudflare)
    • ✓ Backups automatizados configurados
    • ✓ Verificación final: scans sin alertas
    • ✓ Monitoreo continuo activado

    Si has llegado aquí y completaste cada paso, tu WordPress está infinitamente más blindado que antes. Pero recuerda: la seguridad no es un destino, es un viaje. Los atacantes innovan constantemente, así que tus defensas también deben hacerlo.

    Si en cualquier momento durante este proceso te sientes abrumado o detectas algo fuera de lo común, mi equipo en ManuelFolgar.com/contacto puede tomar el control. Hemos limpiado miles de sitios infectados y podemos certificar que tu WordPress está 100% libre de malware, además de implementar el hardening completo sin que pierdas horas preciosas.

  • Recuperar WordPress hackeado: paso a paso desde cero

    Recuperar WordPress hackeado: paso a paso desde cero

    Recuperar WordPress hackeado: guía completa paso a paso

    En mi experiencia limpiando más de 500 WordPress comprometidos, lo primero que observo es el pánico de los propietarios. Tu sitio está hackeado, tu tráfico cae, aparecen avisos de Google. Respira: la recuperación es posible si actúas con método. En este artículo te muestro exactamente cómo hacerlo desde cero, sin depender de nadie.

    ¿Cómo sé que mi WordPress está hackeado?

    Antes de empezar, necesitas confirmarlo. Los síntomas más comunes que veo en mis auditorías son:

    • Avisos de Google Search Console: «Sitio hackeado» o «Contenido malicioso detectado».
    • Cambios inexplicados: páginas nuevas, categorías, posts que no creaste.
    • Rendimiento lento: tu servidor cargado, CPU al 100%, conexiones de base de datos agotadas (síntoma típico de cryptominers).
    • Redirecciones: al pulsar enlaces, acabas en sitios de spam, casinos o contenido para adultos.
    • Código sospechoso: eval(), base64_decode() en archivos que no deberían tenerlo.
    • Advertencias de navegadores: «Este sitio puede dañar tu ordenador» en Chrome.
    • Correos de tu hosting: notificaciones de actividad sospechosa, malware detectado o abuso de recursos.

    Si tienes al menos 3 de estos síntomas, estamos ante un compromiso real. Ahora, vamos a recuperarlo.

    Paso 1: Aislamiento inmediato (las primeras 2 horas)

    No toques nada innecesariamente. Tu objetivo ahora es evitar más daño mientras reúnes información.

    Acción 1.1: Cambia todas las contraseñas de acceso. Desde otro ordenador (no el que puedas haber usado infectado), cambia:

    • Contraseña del usuario administrador en WordPress (wp-admin → Usuarios → Tu usuario → Nueva contraseña).
    • Contraseña FTP/SFTP del hosting.
    • Contraseña cPanel, Plesk o panel de control.
    • Contraseña del usuario de base de datos (en phpmyadmin → Usuarios).
    • Credenciales de correo asociadas al dominio.

    Lo que ves aquí es fundamental: los atacantes suelen guardar puertas traseras (backdoors). Cambiar contraseñas no basta; una contraseña nueva sin limpiar malware simplemente te permite entrar al mismo sitio comprometido.

    Acción 1.2: Realiza un backup de evidencia. Descarga por FTP la carpeta completa de WordPress (especialmente wp-content/plugins y wp-content/themes) y un dump de la base de datos. No es para restaurar; es para análisis posterior y, si es necesario, compartir con profesionales o fuerzas de seguridad.

    Acción 1.3: Desactiva plugins de una. Accede a wp-admin (con la contraseña nueva). Ve a Plugins → Todos los plugins. Desactiva cada uno individualmente sin eliminarlos todavía. Un plugin comprometido puede ser la puerta de entrada; muchas veces, el atacante instala plugins falsos o inyecta código en plugins legales.

    Paso 2: Análisis forense (2-4 horas)

    Ahora necesitas identificar qué exactamente está comprometido. En este paso uso herramientas profundas.

    Acción 2.1: Escanea con Wordfence CLI. Es gratuito y muy preciso. Conéctate por SSH a tu servidor y ejecuta:

    $ wp wordfence scan –skip-cache-flush

    Wordfence te listará archivos maliciosos, cambios en core, plugins sospechosos. Anota cada uno. Si no tienes SSH, usa OWASP ZAP desde tu máquina local para escanear la web pública.

    Acción 2.2: Revisa archivos de logs. Tu hosting almacena logs en:

    • /var/log/apache2/access.log (Apache) o /var/log/nginx/access.log (Nginx).
    • /home/tuusuario/public_html/wp-content/debug.log (si DEBUG está activo en wp-config.php).

    Busca patrones sospechosos: solicitudes a wp-login.php masivas (brute force), accesos a wp-admin.php en horarios raros, POST requests a archivos php en wp-content/uploads. Los logs son tu caja negra; guardan la evidencia del ataque.

    Acción 2.3: Analiza la base de datos. Accede a phpMyAdmin (en cPanel) o usa WP-CLI:

    $ wp db query «SELECT * FROM wp_posts WHERE post_status=’trash’ OR post_content LIKE ‘%eval%’ LIMIT 20;»

    Busca posts con código malicioso en su contenido, usuarios administrador no autorizados, posts en papelera que vieron hueco. Los atacantes suelen insertar posts ocultos para mantener SEO spam o backdoors en la metadata.

    Acción 2.4: Sube archivos sospechosos a VirusTotal. En VirusTotal, carga los plugins desactualizados, temas custom y cualquier archivo PHP que Wordfence haya marcado. VirusTotal analiza con 60+ motores antivirus. No es perfecto, pero atrapa el 95% de malware conocido.

    Paso 3: Limpieza de malware (4-8 horas)

    Con el análisis hecho, ahora eliminarás lo malicioso. Esto es irreversible, así que hazlo solo si tienes muy claro qué eliminas.

    Acción 3.1: Elimina plugins comprometidos. Ve a wp-admin → Plugins. Elimina cualquier plugin:

    • Que VirusTotal marque como positivo (incluso un motor de 60).
    • Que no reconozcas o que no tengas activo en tu lista.
    • Desactualizado hace más de 6 meses (especialmente los de seguridad como «Wordfence», «Sucuri», «iThemes» falsos).
    • Con nombres raros tipo «wp-settings-manager», «core-update», «database-backup».

    Después, accede a wp-content/plugins por FTP y elimina manualmente las carpetas de los plugins que borraste. Los atacantes a veces dejan código en plugins desinstalados.

    Acción 3.2: Reemplaza el tema. Vuelve a descargar tu tema oficial desde WordPress.org o tu proveedor (Themeforest, etc.). Sube toda la carpeta por FTP sobrescribiendo la antigua. Los temas modificados suelen inyectar código en functions.php para mantener acceso. Si usas un tema child, elimina también su carpeta y recrea solo el functions.php limpio.

    Acción 3.3: Actualiza WordPress core. Descarga la última versión de WordPress.org. Copia todos los archivos (excepto wp-content y wp-config.php) sobrescribiendo los existentes por FTP. Luego ejecuta en wp-admin: Herramientas → Actualizaciones de base de datos.

    Nota importante: No uses wp-admin para actualizar si desconfías de la seguridad del servidor. Las actualizaciones automáticas pueden ejecutar código antes de limpiar malware. Hazlo por FTP / SFTP.

    Acción 3.4: Limpia la base de datos. Elimina posts y usuarios sospechosos. En phpMyAdmin o con WP-CLI:

    $ wp user list –role=administrator

    ¿Ves administradores que no creaste? Elimínalos. En la tabla wp_posts, busca posts en papelera o con slugs raros. También limpia la tabla wp_postmeta y wp_options de cualquier entrada que contenga eval(), base64 o URLs sospechosas.

    Acción 3.5: Busca y elimina archivos backdoor en el servidor. Los backdoors típicos se llaman webshell.php, update.php, config.php (falso), shell.php, admin.php (falso). Conéctate por SSH y busca:

    $ find /home/tuusuario/public_html -name «*.php» -exec grep -l «eval|base64_decode|passthru|system|exec|shell_exec» {} ;

    Cada archivo que salga, revísalo en un editor de texto. Si contiene código de backdoor, eliminalo. Si es un archivo legítimo con esas funciones (como un plugin de backup), verifica que sea de confianza antes de eliminar.

    Paso 4: Hardening (prevención de futuros ataques)

    De nada sirve limpiar si en un mes vuelve a pasar. Aquí es donde la mayoría de administradores flaquea. Implementa estas medidas de seguridad ahora:

    Acción 4.1: Protege wp-config.php. Añade a tu .htaccess (en la raíz de WordPress):

    <files wp-config.php>
    order allow,deny
    deny from all
    </files>

    Acción 4.2: Deshabilita la edición de archivos en wp-admin. Añade a wp-config.php (antes de la línea «That’s all, stop editing!»):

    define(‘DISALLOW_FILE_EDIT’, true);

    Esto impide que si un atacante accede a wp-admin, pueda modificar plugins o temas desde el editor de código.

    Acción 4.3: Limita intentos de login a WordPress. Instala Wordfence Security (versión gratuita) o Loginizer. Configura máximo 5 intentos fallidos cada 15 minutos. Esto detiene ataques de fuerza bruta (brute force) contra wp-login.php.

    Acción 4.4: Activa 2FA en tu cuenta administrador. Con Wordfence o Google Authenticator, protege tu usuario admin con autenticación de dos factores. Si alguien consigue tu contraseña, sin el segundo factor no accede.

    Acción 4.5: Cambia el prefijo de tablas de base de datos. Por defecto es «wp_». Los atacantes lo conocen y pueden automatizar inyecciones SQL. Si tienes acceso SSH, puedes cambiarlo con herramientas como WP Security Audit Log o manualmente (es complejo; considéralo una tarea de profesional).

    Acción 4.6: Establece permisos correctos de archivos. En SSH, ejecuta:

    $ find /home/tuusuario/public_html -type f -exec chmod 644 {} ;
    $ find /home/tuusuario/public_html -type d -exec chmod 755 {} ;

    Esto asegura que los archivos no sean ejecutables por el usuario del servidor; reduce significativamente el riesgo de inyección de código.

    Acción 4.7: Configura backups automáticos. Usa UpdraftPlus (gratuito) o similar. Planifica un backup diario hacia Dropbox o tu email. Si vuelve a pasar, recuperas en 30 minutos.

    Paso 5: Limpieza ante Google y reputación

    Google avisa a usuarios que tu sitio está comprometido. Debes notificarle que está limpio.

    Acción 5.1: Accede a Google Search Console. Ve a Seguridad e informes manualesProblemas de seguridad. Allí aparecerán los avisos. Haz clic en «Solicitar revisión». Google tarda 24-72 horas en verificar que has limpiado el malware. No rellenar esta solicitud alarga el aviso semanas.

    Acción 5.2: Solicita eliminación de contenido malicioso si está indexado. En Search Console → Remover, elimina URLs de spam, posts inyectados o redirectores que apunten a sitios maliciosos. Esto ayuda a borrar la «memoria» de Google.

    Acción 5.3: Reindexación. Después de limpiar, solicita a Google que rastree tu sitio de nuevo. En Search Console → Inspección de URL, introduce tu página principal y pulsa «Solicitar indexación». Google enviará bots en las próximas horas.

    ¿Qué hago si no puedo hacerlo yo?

    Entiendo que esto es técnico y requiere paciencia. Algunos pasos como la búsqueda de backdoors o la reconfiguración de permisos son complejos si no tienes experiencia con SSH.

    Mi equipo en ManuelFolgar.com se especializa precisamente en esto: limpieza forense de malware, hardening completo y auditoría post-ataque. Analizamos tu sitio en profundidad, identificamos el vector de ataque inicial (plugin desactualizador, contraseña débil, etc.) y lo cerramos para que no vuelva a pasar.

    Si has seguido este artículo y te quedas atascado, o prefieres que un profesional lo haga desde el primer minuto, contacta conmigo aquí. Ofrezco diagnóstico gratuito en 24 horas.

    Resumen de tiempos

    La recuperación total suele llevar:

    • Aislamiento: 2 horas.
    • Análisis: 4 horas.
    • Limpieza: 6-8 horas (depende de cuánto malware haya).
    • Hardening: 2 horas.
    • Revisión de Google: 24-72 horas (no cuenta en tu tiempo).

    Total: entre 14 y 18 horas de trabajo técnico concentrado. Hacerlo con prisas o saltándose pasos es el principal motivo por el que el malware vuelve semanas después.

    Si tu sitio es crítico para tu negocio, no pierdas tiempo en prueba y error. Solicita limpieza profesional ahora; los tiempos de inactividad cuestan más que la inversión en un especialista.

  • Mi WordPress fue hackeado: qué hacer ahora mismo

    Mi WordPress fue hackeado: qué hacer ahora mismo

    Mi WordPress fue hackeado: qué hacer ahora mismo

    Cuando descubres que tu WordPress ha sido hackeado, el pánico es la primera reacción. Pero te lo digo desde mi experiencia limpiando cientos de sitios comprometidos: los primeros pasos que tomes en las próximas horas determinarán si recuperas tu web o pierdes meses de trabajo. En este artículo te guío exactamente qué hacer, en qué orden, sin pánico.

    Primero: confirma que realmente está hackeado

    No todos los síntomas son señal de hackeo. Antes de tomar decisiones drásticas, verifica realmente qué está pasando:

    • Google Search Console. Si Google ha desindexado tu sitio o marca páginas como «malware detectado», ahí tienes confirmación oficial. Accede a tu GSC y busca en la sección de Seguridad.
    • Herramientas online gratuitas. Usa Sucuri SiteCheck o VirusTotal para escanear tu dominio. Si ambas detectan malware, es casi seguro.
    • Comportamiento del sitio. ¿Ves anuncios extraños? ¿Redirecciones a sitios de casinos o farmacéuticos? ¿Contenido spam en la base de datos? Son indicios claros de infección.
    • Acceso a cPanel/hosting. Revisa los logs de acceso. Si ves intentos de login fallidos masivos o conexiones desde países raros, tu servidor ha estado bajo ataque.

    Una vez confirmado, pasamos a acción.

    Paso 1: Aísla el sitio inmediatamente (máximo 30 minutos)

    No dejes que el malware siga propagándose. Esto es crítico:

    1. Desactiva todos los plugins. Accede a wp-admin. Si no puedes, conéctate por SFTP/cPanel. Renombra la carpeta /wp-content/plugins/ a /wp-content/plugins-disabled/. Así WordPress no cargará ninguno.
    2. Cambia todas las contraseñas de administrador. Desde otra máquina (no la comprometida), entra en WordPress y crea una nueva contraseña de usuario admin de 20+ caracteres, con mayúsculas, números y símbolos. Si no tienes acceso a wp-admin, usa WP-CLI desde terminal: wp user update 1 --prompt=user_pass.
    3. Revoca tokens y sesiones activas. Si usas plugin de seguridad como Wordfence, cierra todas las sesiones salvo la tuya. Esto expulsará a los atacantes conectados.
    4. Notifica a tu hosting. Llama a soporte y diles que tu WordPress está comprometido. Algunos proveedores pueden suspender temporalmente el sitio o aislarlo en un servidor de cuarentena mientras lo limpias.

    En este punto ya has evitado que el malware continúe infectando más usuarios y ampliando la infección.

    Paso 2: Identifica qué tipo de malware tienes (1-2 horas)

    Saber qué luchas contra es fundamental. Los tipos más frecuentes que encuentro:

    Backdoors y webshells. Son archivos PHP ocultos (a menudo con nombres como shell.php, wp-content/uploads/shell.php o disfrazados como plugins legítimos). Te permiten al atacante acceso permanente, incluso después de cambiar contraseñas. Los busco con:

    find /home/tudominio/public_html -name "*.php" -newermt "2024-01-01" -type f

    Reemplaza la fecha por la del último acceso sospechoso.

    Malware SEO (spam de redirección). Inyecta código en posts y páginas que redirige a usuarios a sitios de apuestas, pornografía o estafas. Lo ves en el HTML cuando inspeccionas un post. Es síntoma de que alguien tiene acceso a tu base de datos.

    Cryptominers o scripts JavaScript maliciosos. Se cargan en el navegador del visitante para minar criptomonedas con su CPU sin saberlo. Detecta ralentización extrema del sitio. Busca en Google Analytics picos de carga extraños.

    Plugins y temas nulled comprometidos. Si descargaste un plugin «premium» de un sitio pirata, viene con malware incrustado. Cuando lo activas, infectas el sitio.

    Para identificarlos con precisión, MalCare hace un escaneo automático en WordPress. También puedo hacerlo yo manualmente revisando logs y ficheros, pero MalCare te da un informe en minutos.

    Paso 3: Crea una copia de seguridad limpia ANTES de limpiar

    Parece contradictorio, pero es esencial. Haz backup de lo que tienes ahora con el malware por si necesitas investigar más tarde o recuperar contenido legítimo. Luego procedes a limpiar.

    En cPanel, descarga:

    • Base de datos completa (SQL dump).
    • Carpeta /public_html/ entera via SFTP.
    • Guárdalos en una unidad externa encriptada.

    Paso 4: Limpia o reinstala WordPress (2-4 horas)

    Tienes dos caminos según severidad:

    Opción A: Limpieza manual (solo si infección leve).

    1. Elimina todos los plugins y temas excepto uno limpio, verificado. Borra manualmente las carpetas de plugins sospechosos.
    2. Descarga los archivos core de WordPress desde WordPress.org e intégralos sobre tu instalación, reemplazando wp-admin/ y wp-includes/. Mantén tu wp-config.php y carpeta /wp-content/ de momento.
    3. Revisa la base de datos buscando tablas o posts extraños. Si hay cientos de posts nuevo que no creaste, son spam SEO inyectado. Bórralos desde phpMyAdmin o WP-CLI.
    4. Busca opciones de la BD maliciosas (suelen estar en wp_options) con valores JavaScript o URLs sospechosas.

    Opción B: Reinstalación limpia (recomendado si infección media-alta).

    1. Elimina completamente /public_html/ menos la carpeta /uploads/ (tus imágenes y archivos).
    2. Descarga WordPress limpio e instálalo de nuevo.
    3. Restaura tu contenido (posts, páginas, usuarios) desde tu backup limpio más antiguo que confíes, o manualmente si tienes pocos posts.
    4. Restaura uploads/ desde backup confiable (escaneándolo antes con VirusTotal).

    Yo siempre recomiendo Opción B: es más lento pero garantiza limpieza 100%. Los atacantes suelen ocultar puertas traseras muy bien.

    Paso 5: Fortifica el sitio contra reinfección (2-3 horas)

    Ahora que está limpio, hazlo inexpugnable:

    WordPress hardening básico:

    • Deshabilita edición de archivos en wp-admin. Añade a wp-config.php: define('DISALLOW_FILE_EDIT', true);
    • Protege wp-config.php con reglas .htaccess: <files wp-config.php> order allow,deny deny from all </files>
    • Cambia el prefijo de tablas de la BD de wp_ a algo aleatorio como xk7m_ (mitiga ataques SQL masivos).
    • Limita intentos de login en wp-login.php a 3 intentos cada 15 minutos mediante .htaccess o plugin.
    • Habilita autenticación de dos factores (2FA) en todos los usuarios admin.

    Plugin de seguridad esencial: Instala Wordfence Security (gratuito con versión premium). Configura:

    • Escaneo de malware automático cada 24h.
    • WAF (Web Application Firewall) activo.
    • Rate limiting para wp-login.
    • Alertas por cambios en archivos core.

    Actualiza todo: WordPress core a última versión, todos los plugins, tema. Plugins desactualizados fueron tu puerta de entrada. Vulnerabilidades conocidas como CVE-2023-xxxx son esploitadas automáticamente por bots.

    Permisos de carpetas correctos:

    chmod 755 /wp-content/
    chmod 755 /wp-content/uploads/
    chmod 644 /wp-config.php
    chmod 600 /wp-config.php (si es posible)

    Esto evita que procesos de web escriban donde no deben.

    Paso 6: Notifica a Google y buscadores (30 minutos)

    Google mantiene el sitio penalizado si cree que sigue infectado. Debes reportar limpieza:

    1. En Google Search Console, ve a Seguridad > Problemas de seguridad.
    2. Haz clic en «Solicitar revisión».
    3. Google enviará un bot a revisar. Si todo está limpio, en 24-48h debería retirar la penalización.
    4. Revisa INCIBE (Instituto Nacional de Ciberseguridad español) para notificaciones si tu sitio fue usado para esparcir malware a otros usuarios españoles.

    Paso 7: Investiga cómo entraron (1-2 horas)

    Esto es crucial para no volver a ser hackeado:

    Vector más común: plugin desactualizado. ¿Tenías Elementor, All in One SEO o WooCommerce sin parchear? Revisa en NVD/CVE qué vulnerabilidades afectaban a esa versión. Aprende la lección: actualiza plugins cada semana mínimo.

    Contraseña débil de admin. Si encontraste intentos fallidos masivos en logs (brute force ataque), tu contraseña era admin123, wordpress o similar. Usa gestor de contraseñas (Bitwarden, 1Password).

    Acceso FTP/SFTP comprometido. Si tus credenciales FTP viajaban en texto plano, un man-in-the-middle atacante puede haberlas interceptado. Usa SFTP (protocolo seguro) de aquí en adelante. Cambia credenciales de hosting.

    Tema o plugin nulled. Si alguna vez descargaste un tema premium de un repositorio pirata, ese fue el origen. Nunca más. Usa temas de repositorios oficiales: WordPress.org, ThemeForest verificado, Elementor directo.

    Monitoreo continuo post-limpieza

    La primera semana tras una infección es crítica. Vigila:

    • Logs de acceso FTP/SFTP: ¿Hay conexiones nuevas no autorizadas? Si sí, atacante aún tiene credenciales. Resetea todas.
    • Base de datos: ¿Aparecen posts spam nuevos? ¿Usuarios desconocidos? Bórralos al instante.
    • Wordfence alertas: Configúralo para notificarte por email de cambios en archivos core, nuevos plugins, cambios de usuarios.
    • Google Search Console: Revisa diariamente que no aparezcan nuevas «URL infectadas detectadas».

    En mi experiencia, si aplicaste estos pasos correctamente, en 95% de casos no hay reinfección. El 5% restante suele ser porque se dejó una puerta trasera muy oculta, o credenciales aún comprometidas.

    ¿Cuándo llamar a un profesional?

    Si después de 4 horas de seguir estos pasos no te sientes seguro, o si la infección es compleja (malware cifrado, múltiples backdoors), es momento de buscar ayuda especializada. Yo ofrezco desde ManuelFolgar.com servicio de limpieza manual integral: escaneo exhaustivo con herramientas forenses, eliminación garantizada de malware, hardening completo, y soporte post-limpieza 30 días.

    Contacta conmigo en ManuelFolgar.com/contacto para una auditoría gratuita de tu WordPress. Te diré exactamente qué está comprometido y cuál es tu mejor opción.

    Resumen de acciones inmediatas

    1. Confirma hackeo con Sucuri SiteCheck y Google Search Console.
    2. Desactiva plugins, cambia contraseñas admin, avisa al hosting (30 min).
    3. Identifica tipo de malware: backdoor, SEO spam, cryptominer, etc. (1-2 horas).
    4. Copia backup con malware por seguridad.
    5. Limpia o reinstala WordPress limpio (2-4 horas).
    6. Aplica hardening: deshabilitar edición, cambiar prefijo BD, 2FA, Wordfence, actualizar todo.
    7. Solicita revisión a Google en Search Console.
    8. Investiga vector de entrada para no repetir error.
    9. Monitorea 7 días vigilando logs, BD, alertas Wordfence.

    El coste de esta limpieza en tiempo es alto, pero es infinitamente menor al daño de un sitio infectado durante meses.

    ¿Sientes que tu WordPress aún está en riesgo o necesitas una limpieza 100% profesional? Yo me encargo. Contacta ahora en ManuelFolgar.com/contacto. Limpio, fortifíco y te dejo tu web segura.