Recomendaciones de seguridad para WordPress
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:
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