Recomendaciones de seguridad para WordPress

12/09/2014

Siguiendo las buenas prácticas el equipo de UNAM-CERT emite las siguientes recomendaciones para que el manejador de contenidos WordPress. Esta guía toma como supuestos los siguientes requerimientos:

  • El manejador de contenidos es WordPress.
  • El servidor web es Apache HTTPD 2.2.x y se ejecuta en el contexto de privilegios del usuario www-data.
  • WordPress se encuentra instalado en el directorio /opt/wordpress.
  • El usuario webmaster es quien da mantenimiento al sitio y puede elevar sus privilegios mediante sudo o su para obtener una sesión como root.

1.Instalación del Plugin wp-security

El plugin eleva los niveles de seguridad en el manejador de contenidos una vez que se instala y configura. Algunas de las características del plugin son las siguientes:

  • Monitoreo de acceso al usuario: analiza cuando el usuario entra o sale del sistema.
  • Doble factor de autenticado : Utiliza una herramienta de Google para poderse autenticar, cuando se accede al manejador de contenidos envía un código personalizado al celular.
  • Exporta e importa configuraciones: Guarda bitácoras de múltiples sitios de WordPress.
  • Escaneo de malware: Analiza automáticamente cualquier dirección URL o archivo en un horario determinado y escanea todo el sitio, así como los usuarios que navegan en él.
  • Listas negras de direcciones IP: Se reportan ataques de fuerza bruta que intenten atacar el sitio, una vez reportada la dirección IP, esta no vuelve a tener acceso al sitio o a ataques similares.

Los pasos que recomendamos para instalar el plugin son:

  • Descargar el paquete de instalación de la siguiente URL:

https://wordpress.org/plugins/better-wp-security/

  • Extraer el paquete wp-security y colocarlo en el directorio wp-content/plugins/ donde se encuentra instalado el manejador de contenidos.

# mv wp-security /opt/wordpress/wp-content/plugins/

  • Activar el plugin desde la interfaz web, dando clic en la pestaña Plugin.

2.Configuración de permisos y propietarios

El servidor web no debe de tener permisos para editar o escribir en los archivos que conforman parte del core o plugins de WordPress.

  • El servidor Apache solamente debe tener acceso de lectura a los archivos que se encuentran en el directorio wp-content
  • El usuario webmaster, que da mantenimiento al sitio es quién podrá escribir en esos archivos.

Para cumplir con estas recomendaciones de seguridad se deberán hacer modificaciones al propietario y el grupo asociado a los archivos y directorios de la aplicación ubicados en /opt/wordpress

  • Se cambian los propietarios y grupo del directorio wordpress

       # chown -cR webmaster:www-data /opt/wordpress

Se pueden asignar permisos de lectura-escritura para el dueño y de solo lectura para el grupo.

  • Se modifican los permisos de los archivos que están dentro del directorio /opt/wordpress/, en particular los siguientes permisos:

7

Permisos globales: lectura, escritura y ejecución para el propietario del archivo.

5

Permisos de lectura y ejecución al grupo en el cual se encuentra el archivo.

5

Permisos de lectura y ejecución para otros usuarios del sistema que utilicen el archivo.

 

6

Permisos globales: lectura, escritura y ejecución para el propietario del archivo.

4

Permisos de lectura para el grupo al cual pertenece el archivo.

4

P ermisos de lectura para otros usuarios del sistema que utilicen el archivo.

 

La utilería find, aplica encontrar todos los directorios con el parámetro d y con el parámetro f aplica encontrar todos los archivos para después aplicar los cambios de permisos a los archivos.

       # find /opt/wordpress -type d –print0 | xargs -0 chmod –c 755

       # find /opt/wordpress -type f –print0 | xargs -0 chmod –c 644

Con el paso anterior se cambian los permisos de lectura-escritura.

En particular el directorio wp-content debe de tener permisos especiales, debido a que el manejador de contenidos escribirá constantemente en él, los cambios de los roles se verán afectados si no se aplican los siguientes permisos.

# cd /opt/wordpress/

# chmod -cR o-w /opt/wordpress/wp-content

# chmod -cR g+w /opt/wordpress/wp-content

3.Sección administrativa

Para que la sección administrativa no pueda ser accesible a cualquier usuario, el acceso se puede filtrar a ciertas direcciones IP o segmentos de red.

Las siguientes configuraciones se pueden aplicar al archivo de configuración principal del servidor de aplicaciones Apache "httpd.conf" o al archivo de configuración donde se define el VirtualHost.

Aplicando la directiva Location, las direcciones IP limitan el acceso a la ubicación /wp-admin

       Order Allow,Deny

       Allow From 132.248.0.0/16

Las configuración anterior pude aplicarse en el directorio wp-admin mediante un archivo de configuración .htaccess con la siguiente sintaxis:

# cat /opt/wordpress/wp-admin/.htaccess

Order Allow,Deny

Allow From 132.248.0.0/16

4.Privilegios

Una cuestión importante son los privilegios, se considera una buena práctica el definir quién puede habilitar las características del sitio, definir los roles.

  • En la pestaña de administración, ir a User.
  • Crear o editar los usuarios
  • Especificar los permisos para un rol, dar clic en -> User

Se pueden agregar editores al sitio web, una buena práctica es crear roles con la propiedad de editor.

Mediante un clic en User -> Add new -> Roles.

5.Forzar el contenido autenticado

  • Descargar el plugin wordpress-https

http://wordpress.org/plugins/wordpress-https/

  • Descomprimir en el directorio /opt/wordpress/wp-content/plugins/
  • Cambiar el propietario

# cd /opt/wordpress/wp-content/plugins/

# chown –cR webmaster:www-data wordpress-https

  • Cambiar los permisos al contenido del plugin

# chmod o-w /opt/wordpress/wp-content/plugins/wordpress-https

# chmod g+w /opt/wordpress/wp-content/plugins/wordpress-https

Habilitar el plugin a través de la interfaz web, en la sección administrador, Plugins.

6.Ejecución de CRON mediante wp-croncontrol

Existen plugins que permiten el uso de un cron, denominado wp-croncontrol el cual revisa periódicamente y verifica  las bitácoras del manejador de contenidos. Se descarga de la página oficial de WordPress en formato .zip

  • Se descomprime el archivo y se coloca la carpeta wp-control dentro de /opt/wordpress/wp-content/plugins/
  • Cambiar el propietario

# cd /opt/wordpress/wp-content/plugins/

# chown –cR webmaster:www-data wp-control

  • Cambiar los permisos al contenido del plugin

# chmod o-w /opt/wordpress/wp-content/plugins/wp-control

# chmod g+w /opt/wordpress/wp-content/plugins/wp-control

Se puede activar a través de la interfaz web, en la sección de plugins, una vez

Bibliografía

http://codex.wordpress.org/Hardening_WordPress
http://www.problogdesign.com/wordpress/11-best-ways-to-improve-wordpress-security/
http://www.wpsecurity.com/safe-wordpress-themes.htm
http://www.wpsecurity.com/safe-plugins.htm
http://www.wpsecurity.com/beware-badware.htm

 

Liberación original: Viernes, 12 Septiembre 2014
Última revisión: Martes, 05 Abril 2016

La Coordinación de Seguridad de la Información/UNAM-CERT agradece el apoyo en la elaboración y revisión de este documento a:

Andrés Leonardo Hernández Bermúdez
Juan Pablo Colín Téllez

Para mayor información acerca de este documento contactar a:

 

UNAM-CERT: Equipo de Respuesta a Incidentes UNAM 
Coordinación de Seguridad de la Información 
Dirección General de Cómputo y Tecnologías de Información y Comunicación 
Universidad Nacional Autónoma de México 
E-Mail: incidentes@cert.unam.mx 
http://www.cert.org.mx
http://www.seguridad.unam.mx
ftp://ftp.seguridad.unam.mx
Tel: 56 22 81 69