Skip to main content

Monitoreo y Alertas de Seguridad en WordPress con Wazuh

ANÁLISIS DE REGISTROS WEB EN WORDPRESS

Los registros de acceso web en WordPress contienen información valiosa sobre las interacciones de los usuarios, acciones administrativas y posibles intentos de intrusión. El análisis detallado de estos logs permite identificar patrones de comportamiento legítimo, así como actividades, subidas de archivos no autorizados o explotación de vulnerabilidades en endpoints críticos.

Para ello desarrollamos una guía práctica utilizando Wazuh Manager como SIEM, para la creación de reglas personalizadas de detección, basadas en eventos locales y ataques previamente identificados en el entorno. Estas reglas permitirán:

  • Detección de intentos de intrusión (fuerza bruta, subidas de archivos maliciosos, comportamiento anómalo).
  • Monitoreo de accesos sospechosos a terminales desde el panel de administración (wp-admin).
  • Generación de alertas tempranas ante comportamientos anómalos (Solicitudes AJAX múltiples desde la misma IP, modificaciones no autorizadas en la biblioteca de medios).

A partir de casos reales, se almacenaron distintos tipos de peticiones analizadas múltiples servidores, se establecerán criterios para identificar amenazas. El objetivo final es fortalecer la seguridad del sitio WordPress mediante un sistema de monitoreo proactivo, adaptado a necesidades específicas.

Puedes consultar la guía de instalación de Wazuh en el siguiente enlace: Instalación de Wazuh Open Source Security – Base de Conocimiento CGII

Configuración de WP-CLI

Para que Wazuh pueda interactuar con WordPress y realizar la comprobación de seguridad, es necesario instalar WP-CLI en el servidor. Sigue estos pasos: Descargar e instalar WP-CLI:

curl -O <https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar>
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
Creación de Políticas de Seguridad para WordPress
Crear el Archivo de Políticas

La comprobación de seguridad en WordPress se basa en la aplicación de políticas definidas en un archivo YAML. A continuación, se describe cómo crearlas e implementarlas en Wazuh.

sudo su
mkdir /home/local_sca_policies/
touch /home/local_sca_policies/custom_wordpress_policy.yml
nano /home/local_sca_policies/custom_wordpress_policy.yml

Creamos nuestras propias reglas/políticas que debe cumplir Wazuh, definiendo cada una en el archivo custom_wordpress_policy.yml.

# Security Configuration Assessment
# Hardening policies for WordPress installations

policy:
  id: "wordpress_assessment"
  file: "custom_wordpress_policy.yml"
  name: "Comprobación de configuración de seguridad para instalaciones de WordPress."
  description: "Guía para establecer una configuración segura en instalaciones de WordPress."
  references:
    - https://wordpress.org/support/article/hardening-wordpress/
    - https://wpsecuritychecklist.org/items/

requirements:
  title: "Verificar que el endpoint sea un host de WordPress y que tenga instalada la herramienta wp-cli."
  description: "Requisitos para ejecutar el escaneo de SCA contra la política de configuración de WordPress."
  condition: all
  rules:
    - 'f:$wp_install_dir/wp-config.php'
    - 'c:wp --info --allow-root -> r:^WP\pCLI\sversion\p'

variables:
  $wp_install_dir: /var/www/html # Example: /var/www/html
  $wp_host:  http://172.19.0.5:8000/ # Examples: https://example.com 
  $wp_user: admin # Example: admin
  $wp_security_plugin: wordfence # Example: wordfence 

checks:

En checks, agregamos las siguientes líneas, que explicaremos a continuación: 

Regla 1. ID=100000

  • Propósito: Evitar exploits en versiones antiguas con vulnerabilidades conocidas (CVE).
  • Cuándo actúa: Cuando la versión instalada es inferior a la última estable publicada en wordpress.org.
  • Acción: Actualizar WordPress a la última versión estable disponible.
  - id: 100000
    title: "Fortalecimiento de WordPress: Asegurar que la versión de WordPress esté actualizada."
    description: "La versión instalada de WordPress debe ser la última versión disponible en https://wordpress.org/download/."
    rationale: "Pueden descubrirse nuevas vulnerabilidades en WordPress. Es importante actualizar a la última versión para evitar que se exploten vulnerabilidades descubiertas en versiones antiguas."
    remediation: "Actualizar WordPress a la última versión."
    condition: all
    rules:
      - c:runuser -l $wp_user -c "wp core check-update --path=$wp_install_dir" -> r:WordPress\sis\sat\sthe\slatest\sversion

Regla 2. ID=100001

  • Propósito: Establecer permisos adecuados en el archivo .htaccess.
  • Cuándo actúa: Cuando los permisos del archivo .htaccess no son 644.
  • Acción: Establecer los permisos del archivo .htaccess a 644.
- id: 100001
    title: "Fortalecimiento de WordPress: Asegurar que los permisos del archivo .htaccess estén configurados en 644."
    description: "Esta política verifica los permisos del archivo .htaccess en el directorio raíz de la instalación de WordPress."
    rationale: "Usuarios no autorizados podrían leer el archivo .htaccess si los permisos no son lo suficientemente estrictos. Además, permisos demasiado restrictivos pueden causar errores al cargar un sitio de WordPress."
    remediation: "Establecer los permisos del archivo en 644 ejecutando el comando chmod 644 $wp_install_dir/.htaccess"
    condition: all
    rules:
      - c:stat -c '%a' $wp_install_dir/.htaccess -> r:644

Regla 3. ID=100002

  • Propósito: Desactivar la depuración en WordPress.
  • Cuándo actúa: Si la constante WP_DEBUG en wp-config.php está configurada como true.
  • Acción: Configurar la constante WP_DEBUG como false en el archivo wp-config.php.
  - id: 100002
    title: "Fortalecimiento de WordPress: Asegurar que la depuración de WordPress esté desactivada."
    description: "Esta política verifica si la depuración de WordPress está habilitada en el archivo wp-config.php."
    rationale: "Cuando WP_DEBUG está habilitado, se muestra información detallada sobre errores en las páginas del sitio web. Esto puede incluir información sobre errores, funciones obsoletas y código vulnerable que puede ser explotado por actores maliciosos."
    remediation: "Desactivar la depuración de WordPress estableciendo la variable WP_DEBUG en wp-config.php en false."
    condition: none
    rules:
      - c:runuser -l $wp_user -c "wp config list WP_DEBUG --path=$wp_install_dir" -> r:true|1

Regla 4. ID=100003

  • Propósito: Eliminar archivos de respaldo no necesarios.
  • Cuándo actúa: Si existen archivos .zip.bak.old, etc., en el directorio raíz.
  • Acción: Eliminar archivos de respaldo no necesarios del directorio raíz.
 - id: 100003
    title: "Fortalecimiento de WordPress: Asegurar que no haya archivos de respaldo (.zip, .back, .bac, .old) en el directorio raíz de la instalación de WordPress."
    description: "Esta política verifica si hay archivos de respaldo o comprimidos del sitio web o plugins en el directorio raíz de la instalación de WordPress."
    rationale: "Se pueden crear archivos de respaldo de algunos archivos de configuración sensibles, como wp-config.php.bak, antes de editar la configuración en vivo. Dado que estos archivos ya no terminan en .php, no son procesados por el motor de PHP y pueden ser leídos por cualquiera. Esto puede llevar a la divulgación de información sensible."
    remediation: "Realizar una limpieza de medios para eliminar bases de datos, archivos antiguos y de respaldo. Además, dejar solo los archivos necesarios en el directorio raíz de la instalación de WordPress."
    condition: none
    rules:
      - c:sh -c "cd $wp_install_dir; ls -la" -> r:.zip|.back|.backup|.bak|.old|.previous|.sql

 

Regla 5. ID=100004

  • Propósito: Asegurar la seguridad de las cuentas administrativas.
  • Cuándo actúa: Si se detectan cuentas administrativas con nombres comunes.
  • Acción: Renombrar las cuentas administrativas que utilizan nombres comunes por otros menos predecibles.

 

Regla 6. ID=100005

  • Propósito: Deshabilitar la navegación de directorios.
  • Cuándo actúa: Si no está configurada la directiva Options -Indexes en el archivo .htaccess.
  • Acción: Agregar la directiva Options -Indexes en el archivo .htaccess.

 

Regla 7. ID=100006

  • Propósito: Establecer los permisos de las carpetas principales.
  • Cuándo actúa: Si los permisos de las carpetas principales (wp-admin, wp-includes, wp-content) no son 755.
  • Acción: Establecer los permisos de las carpetas principales a 755.

 

Regla 8. ID=100007

  • Propósito: Evitar exploits por temas desactualizados.
  • Cuándo actúa: Si hay temas con actualizaciones pendientes.
  • Acción: Actualizar temas automáticamente.

 

Regla 9. ID=100008

  • Propósito: Proteger el sitio con un plugin de seguridad.
  • Cuándo actúa: Si el plugin $wp_security_plugin no está activo.
  • Acción: Activar el plugin de seguridad.

 

Regla 10. ID=100009

  • Propósito: Proteger credenciales en wp-config.php.
  • Cuándo actúa: Si wp-config.php es accesible públicamente.
  • Acción: Bloquear acceso al archivo wp-config.php.

 

Regla 11. ID=100010

  • Propósito: Prevenir abuso de xmlrpc.php.
  • Cuándo actúa: Si xmlrpc.php responde a solicitudes HTTP.
  • Acción: Bloquear acceso al archivo xmlrpc.php.

 

Regla 12. ID=100011

  • Propósito: Evitar enumeración de usuarios vía API REST.
  • Cuándo actúa: Si /wp-json/wp/v2/users expone datos de usuarios.
  • Acción: Restringir acceso al endpoint /wp-json/wp/v2/users.

 

 

 

 

 

Paso 2: Configurar el Agente de Wazuh

Para que Wazuh pueda realizar el análisis de seguridad en la instalación de WordPress, es necesario configurar el agente en el servidor para que envíe los registros hacia el servidor y sea procesado.

  • Instalar el agente de Wazuh en el servidor:
wget <https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.9.2-1_amd64.deb>
sudo dpkg -i wazuh-agent_4.9.2-1_amd64.deb
sudo apt --fix-broken install
  • Editar la configuración del agente para habilitar el análisis SCA:
sudo nano /var/ossec/etc/ossec.conf

image (1).png

  • Agregar la configuración necesaria dentro del archivo de configuración del agente:
<policies>
    <policy>/home/local_sca_policies/custom_wordpress_policy.yml</policy>
</policies>

image (2).png

  • Reiniciar el agente de Wazuh para aplicar los cambios:
/var/ossec/bin/wazuh-control restart

image (3).png

Verificación de Resultados

Una vez configurado el análisis de seguridad en Wazuh, puedes verificar los resultados desde la interfaz gráfica.

  • Accede a la interfaz de Wazuh.
  • Navega a Security Configuration Assessment.

image (4).png

  • Revisa los resultados del módulo SCA de seguridad en WordPress.

image (5).png

  • Aplica las recomendaciones de Wazuh para corregir vulnerabilidades identificadas.

image (6).png

Con esta guía, has aprendido a instalar y configurar Wazuh para comprobar la seguridad de una instalación de WordPress. Implementando las políticas de seguridad adecuadas y utilizando WP-CLI, puedes obtener información detallada sobre posibles vulnerabilidades y corregirlas a tiempo para fortalecer la seguridad de tu sitio.

Para obtener más información sobre la configuración avanzada de Wazuh, consulta la documentación oficial.

Recomendaciones.

  • Mantén tu servidor de Wazuh actualizado para garantizar compatibilidad con nuevas versiones de WordPress.
  • Verifica periódicamente los análisis SCA para detectar configuraciones inseguras antes de que puedan ser explotadas.
  • No mantengas las configuraciones predeterminadas tras una instalación.