Sistemas de Administración de Contenidos (CMS)

Capítulo destinado a contenido relacionado a CMSs como ser wordpress, drupal, joomla y otros

Guía de seguridad wordpress

Captura desde 2024-06-20 18-19-22.png


1. Introducción

Wordpress es un sistema de gestión de contenido (CMS, Content Management System), que permite crear sitios web, su popularidad ha logrado que resulte muy atractivo para los “ciberatacantes”, con el fin de explotar vulnerabilidad

2. Asegurando Wordpress

Para mitigar el riesgo de ataques a Wordpress, recomendamos las siguientes buenas prácticas de seguridad.

2.1. Configurar el control de acceso de usuarios

Ingresar al panel de administración de usuarios del sitio web: https://[midominio.gob.bo]/wp-admin/users.php y eliminar a los usuarios administradores que no se usan actualmente:

AccesoDeUsuarios.png

2.2. Actualizar el core de Wordpress

Ingresar a su sitio web https://[mi-dominio.gob.bo]/wp-admin/update-core.php y hacer click en el botón “Actualizar ahora”.

ActualizacionDelCore.png

2.3. Actualizar los plugins de Wordpress

Previamente instalar y activar el plugin WP-Rollback (https://es.wordpress.org/plugins/wp-rollback/) que será útil en caso que la actualización de algún plugin no sea exitosa.

Realizar un backup de la base de datos.

Ingresar al sitio https://[mi-dominio.gob.bo]/wp-admin/update-core.php y seleccionar todos los plugins y presionar el botón “Actualizar plugins”.

ActualizacionDePlugins.png

En caso de existir un error durante el proceso de actualización, realizar un ROLLBACK (https://[mi-dominio.gob.bo]/wp-admin/plugins.php).

ActualizacionDePluginsError.png

2.4. Habilitar actualizaciones de seguridad automáticas

Ingresar al panel de administración https://[mi-dominio.gob.bo]/wp-admin/plugins.php y seleccionar todos los plugins.

Seleccionar la acción “habilitar actualizaciones automáticas” y ejecutar “Aplicar”

ActualizacionesDeSeguridadAutomáticas.png

Borrar los themes no usados mediante la URL https://[mi-dominio.gob.bo]/wp-admin/themesphp

2.5. Deshabilitar XML-RPC

Wordpress tiene características para interactuar de forma remota con el sitio web, XML- RPC es una función de WordPress que permite la transmisión de datos con HTTP actuando como mecanismo de transporte y XML como mecanismo de codificación.

En la actualidad la funcionalidad del archivo xmlrpc.php ha disminuido considerablemente y su exposición y configuración insegura representa un riesgo en la seguridad del sitio web, provocando las siguientes vulnerabilidades:

XMLRPC.png

2.5.1. Restringir el acceso al archivo xmlrpc.php

Para restringir el acceso al archivo xmlrpc.php en apache2, se debe editar el archivo de configuración del sitio web o mediante el archivo .htaccess agregando las siguientes líneas:

<files xmlrpc.php>
	order allow,deny
	deny from all
</files>

Después reiniciar apache:

systemctl restart apache2

2.5.2. Deshabilitar la función XML-RPC

Si se determina que la función XML-RPC no es necesaria, se recomienda deshabilitarla, para ello se debe editar el archivo wp-config.php y agregar la siguiente línea:

add_filter('xmlrpc_enabled', '__return_false');

Otra opción para deshabilitar la función XML-RPC es instalando y activando el complemento “Disable XML-RPC”.

2.6. Enumeración de usuarios

Wordpress a través de su REST API puede exponer datos sensibles, como es el caso de los usuarios del sistema, si el sitio no está configurado de forma segura.

EnumeracionDeUsuarios.png

Para solucionar esta vulnerabilidad se debe actualizar a la versión 4.7.1 o posterior de Wordpress.

Una opción, en caso de no hacer uso del API REST de Wordpress, es deshabilitarlo, para ello se debe agregar las siguientes líneas en el archivo de configuración de wordpress wp-config.php:

add_filter('rest_enabled', '_return_false');
add_filter('rest_jsonp_enabled', '_return_false');

2.7. Utiliza contraseñas fuertes y seguras

Utiliza contraseñas complejas y únicas para todas las cuentas de usuario, especialmente para los administradores.

Creación de Contraseñas

En ese sentido en WordPress se debe seguir los siguientes pasos


2.8 Implementa Autenticación de Dos Factores (2FA):

Usa un plugin de 2FA para añadir una capa adicional de seguridad a las cuentas de usuario.

Autenticación de Dos Factores (2FA)

Para aplicar a todos los usuarios de tu sitio wordpress se debe activar la opción todos los usuarios como se ve en la siguiente imagen.

2.9. Limita los Intentos de Inicio de Sesión

Usa un plugin como "Limit Login Attempts Reloaded" para bloquear direcciones IP después de varios intentos fallidos de inicio de sesión.

Instalación de un Plugin de Seguridad:

Configuración del Plugin:

Establecimiento de Límites y Acciones:

Personalización de Mensajes y Notificaciones:

Prueba y Verificación:

Monitoreo Continuo y Ajustes:

2.10. Cambia el Prefijo de la Base de Datos

Durante la instalación, cambia el prefijo predeterminado wp_ de la base de datos a algo único para prevenir ataques SQL.

Cambiar el prefijo de la base de datos en WordPress es una medida de seguridad que puede ayudar a proteger tu sitio contra ataques SQL Injection. Aquí tienes una guía paso a paso para hacerlo:

Encuentra la línea que define el prefijo de la base de datos, que generalmente se ve así:

Copiar código

$table_prefix = 'wp_';

Cambia el prefijo wp_ a algo único, por ejemplo
Copiar código

$table_prefix = 'nuevo_prefijo_';

Ejecuta las siguientes consultas SQL para cambiar el prefijo de todas las tablas
Copiar código

RENAME table `wp_commentmeta` TO `nuevo_prefijo_commentmeta`;

RENAME table `wp_comments` TO `nuevo_prefijo_comments`;

RENAME table `wp_links` TO `nuevo_prefijo_links`;

RENAME table `wp_options` TO `nuevo_prefijo_options`;

RENAME table `wp_postmeta` TO `nuevo_prefijo_postmeta`;

RENAME table `wp_posts` TO `nuevo_prefijo_posts`;

RENAME table `wp_terms` TO `nuevo_prefijo_terms`;

RENAME table `wp_termmeta` TO `nuevo_prefijo_termmeta`;

RENAME table `wp_term_relationships` TO `nuevo_prefijo_term_relationships`;

RENAME table `wp_term_taxonomy` TO `nuevo_prefijo_term_taxonomy`;

RENAME table `wp_usermeta` TO `nuevo_prefijo_usermeta`;

RENAME table `wp_users` TO `nuevo_prefijo_users`;

Actualizar las Referencias en la Base de Datos:

También se puede realizar utilizando el Plugins para cambiar el prefijo de la base de datos ayuda a reducir el riesgo de ataques automatizados que se aprovechan de la configuración predeterminada de WordPress. Esta medida, combinada con otras prácticas de seguridad, puede fortalecer significativamente la protección de tu sitio web

También se puede realizar mediante Plugin el cual describimos a continuación:

Desplegamos el Plugin 


2.11 Oculta la Versión de WordPress:

Ocultar la versión de WordPress es una medida de seguridad que ayuda a proteger tu sitio de ataques dirigidos a vulnerabilidades específicas de la versión que estás utilizando. Aquí tienes una guía paso a paso para hacerlo:

Añade el siguiente código al archivo functions.php

Copiar código

// Eliminar la versión de WordPress del código fuente

remove_action('wp_head', 'wp_generator');

WordPress también incluye la versión del sitio en los feeds RSS. Para eliminar esto, añade el siguiente código al archivo functions.php:

Copiar códigoocultar

// Eliminar la versión de WordPress de los feeds RSS

function remove_wp_version_rss() {

    return '';

}

add_filter('the_generator', 'remove_wp_version_rss');

Los scripts y estilos en WordPress a menudo tienen la versión de WordPress adjunta. Puedes eliminar esto añadiendo el siguiente código al archivo functions.php.
Copiar código

// Eliminar la versión de WordPress de los scripts y estilos

function remove_wp_version_scripts_styles($src) {

    if (strpos($src, 'ver=')) {

        $src = remove_query_arg('ver', $src);

    }

    return $src;

}

add_filter('style_loader_src', 'remove_wp_version_scripts_styles', 9999);

add_filter('script_loader_src', 'remove_wp_version_scripts_styles', 9999);

Implementar estas medidas ayuda a reducir el riesgo de que los atacantes exploten vulnerabilidades específicas de tu versión de WordPress, aumentando así la seguridad general de tu sitio web

2.12. Usa HTTPS/SSL:

Asegúrate de que tu sitio web utiliza HTTPS instalando un certificado SSL.

Aquí tienes los pasos simplificados para instalar un certificado SSL en WordPress:

    1. Actualiza las direcciones URL de WordPress a HTTPS en los campos "Dirección de WordPress (URL)" y "Dirección del sitio (URL)".

2.13. Usa Google reCAPTCHA

Añade Google reCAPTCHA a tus formularios de inicio de sesión, registro y comentarios para evitar el spam y los intentos de inicio de sesión automatizados.


2.14. Configuración de Copias de Seguridad Automáticas.

Instala un Plugin de Copias de Seguridad:

Configura el Plugin de Copias de Seguridad:

Crea un Nuevo Trabajo de Copia de Seguridad:

Selecciona Qué Incluir en la Copia de Seguridad:

Configura la Frecuencia y Horario:

Elige el Destino de la Copia de Seguridad:

Configura Opciones Avanzadas (si es necesario):

Guarda y Activa el Trabajo de Copia de Seguridad:

Prueba y Verifica:

Monitoriza y Mantén:

2.15. Crea Copias de Seguridad Regularmente:

Usa plugins como UpdraftPlus o BackWPup para crear copias de seguridad regulares de tu sitio.

Se puede realizar mediante plugin



En la parte de ajustes dentro del plugins 


Guía de seguridad Joomla

1. Introducción

Joomla es un sistema de gestión de contenido (CMS, Content Management System), que permite crear sitios web, su popularidad ha logrado que resulte muy atractivo para los actores maliciosos, con el fin de explotar vulnerabilidades.

2. Asegurando joomla

Para mitigar el riesgo de ataques a Joomla, se recomiendan las siguientes buenas prácticas de seguridad.

2.1. Verificar parches de seguridad

Comprobar regularmente si hay nuevos parches de seguridad disponibles para solucionar vulnerabilidades de seguridad e instalarlos, para ello existe el complemento “Plugin Securitycheck”.

A continuación se describe los pasos para el uso del Plugin Securitycheck:

https://extensions.joomla.org/extension/securitycheck/

SeguridadJoomla.png

VerificarVulnerabilidades.png

Known vulnerabilities.png

Se recomienda suscribirse a canales de seguridad oficiales de Joomla, por ejemplo:

Siempre debe mantener actualizado Joomla a una versión con soporte.

También se recomienda que se considere actualizar las tecnologías complementarias para el uso de Joomla como es php, mysql y el sistema operativo, tomando en cuenta que estas actualizaciones sean compatibles con la versión de Joomla que utiliza, aplicando estos cambios primero en un entorno de pruebas.

2.2. Asegurar nombre de usuario y contraseña

ConfiugraciondeUsusario.png

Options.png

EstablecerCOntraseña.png

GuardaryCerrar.png

2.3. Proteger el archivo de configuración

Proteger el archivo configuration.php, que se encuentra en el directorio raíz de la instalación de Joomla con apache, para impedir que se pueda editar.

$ sudo nano /etc/apache2/apache2.conf
<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
</Directory>

Cambiar a:

<Directory /var/www/>
	Options FollowSymLinks
	AllowOverride All
	Require all granted
</Directory>
$ sudo service apache2 restart
<FilesMatch “configuration.php”>
	Require all denied
</FilesMatch>

Archivos PHP - 644
Archivos de configuración - 644
configuration.php: 440
Otras carpetas - 755

2.4. Proteger el acceso al panel de administrador

Por defecto el panel de administrador de Joomla se encuentra en la url “/administrator” de la página. Para evitar que personas no autorizadas intenten acceder al panel de administración seguir los siguientes pasos:

$ sudo mkdir miotroadm

$ cd miotroadm
$ sudo nano index.php
$ sudo nano administrator/index.php
if($_COOKIE['JoomlaAdminSession']!="1254789654258")
{
	setcookie('JoomlaAdminSession', null, -1, '/');
	header("Location: ../../index.php");
}
$ sudo nano index.php
if ($_COOKIE['JoomlaAdminSession']!="")
{
	setcookie('JoomlaAdminSession', null, -1, '/');
}
2.5. Ocultar la versión de Joomla

Deberá deshabilitar manualmente ingresando al panel de administración de joomla:

Site > Global Configuration

Establecer en “No” la opción “Show Joomla Version”.

Adicionalmente, deberá eliminar la carpeta “installation” ubicada en el directorio raíz de la instalación de Joomla.

2.6. Activar search engine friendly (sef)

SEF permite hacer las URLs de Joomla más amistosas para el usuario y también dificulta a los escáneres automatizados encontrar información útil para efectuar ataques al sitio web.

Para activar SEF en Joomla debe acceder al panel de administración e ingresar a “Global Configuration”.

Establecer la opción Search Engine Friendly URLs en “Yes”:

SEF.png

2.7. Realizar copia de seguridad

Para realizar la copia de seguridad de Joomla puede utilizar el plugin Akeeba Backup.

https://extensions.joomla.org/extension/akeeba-backup/

RealizarCopiaDeSeguridad.png

DefaultBackupProfile.png

DespliegueBackup.png

ManageBackups.png

BackupsGenerados.png

 

Enumeración de Usuarios en WordPress

¿Qué es la enumeración de usuarios?

La enumeración de usuarios, es una forma de obtener datos de usuarios de su sitio web a través de scripts maliciosos. Aunque el pirata informático solo puede obtener los detalles del nombre de usuario con esto, sigue siendo un riesgo grave. Conocer el nombre de usuario es la mitad del trabajo realizado por un pirata informático al ejecutar un ataque de fuerza bruta.

Método 1: Archivos de autor

Quizás el método más fácil para encontrar nombres de usuario de WordPress es revisar los archivos del autor. Para enumerar nombres de usuario a través del método de archivos del autor. Para enumerar nombres de usuario a través del método de archhivos de autor, simplemente agregue un número entero (es decir: 1,2,3,etc.) como valor al parámetro "autor". Por ejemplo:

Estos valores luego obtendrían resultados como los siguientes:

Por lo tanto, al confundir el autor del parámetro en la URL de inicio de WordPress, se pueden enumerar varios nombres de autor.

Método 2: Mensajes de error

A veces, el atacante intenta iniciar sesión en su sitio de WordPress con un nombre de usuario aleatorio. Si el nombre de usuario existe, el mensaje de error revelará que el nombre de usuario es correcto pero la contraseña es incorrecta. De manera similar, si el nombre de usuario adivinado es incorrecto, el mensaje de error especificaría que el nombre de usuario no existe. Ahora, al utilizar el enfoque de fuerza bruta, el atacante puede enumerar nombres de usuario en función de los mensajes de error.

MensajeDeErrorLogin.png

El mensaje de error revela el nombre de usuario como "admin" se encuentra registrado como usuario del sistema.

Solución a la enumeración de usuarios

Aplique una de las siguientes opciones para evitar la enumeración de usuarios en WordPress (preferente la opción 1):

1. Instalación de WP-Hardening
  1. Instalar y activar el complemento.
    1. Ir a ‘Plugins > Add New’ en el panel de administración.
    2. Buscar ‘WP-Hardening’
    3. Instalar WP-Hardening una vez que aparezca.
    4. Activarlo desde su página Plugins.
    5. El botón WP-Hardening aparecerá en la parte inferior izquierda de su panel de administración.

  2. Ir a la pestaña 'Security Fixers'
    SecurityFixers.png
  3. Mover la tecla junto a "Stop User enumeration"
    StopUserEnumeration.png
2. Editando archivos de WordPress

Agregando un fragmento de código al archivo functions.php o al archivo .htaccess en el nivel raíz. El archivo .htaccess debe editarse solo si desea bloquear la solicitud a nivel del servidor. 

Método 1: Modificar el archivo functions.php.

if (!is_admin()) {
// default URL format
if (preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING'])) die(); add_filter('redirect_canonical', 'shapeSpace_check_enum', 10, 2);
}
function shapeSpace_check_enum($redirect, $request) {
// permalink URL format
if (preg_match('/\?author=([0-9]*)(\/*)/i', $request)) die(); else return $redirect;
}

Método 2: Modificar el archivo .htaccess.

<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* https://tusitioweb.com/? [L,R=302]
</IfModule>
3. Eliminar los mensajes de error en páginas de inicio de sesión

Para eliminar los mensajes de error detallados en la ventana de wp-login, debe ingresar el siguiente código en el archivo functions.php  (Nota.- En caso de funcionar esta solución puede aplicar el código en el archivo wp-login.php):

<?php
//* NO incluyas la etiqueta de apertura

// Cambia el mensaje de error de inicio de sesión en WordPress
 
function failed_login() {
    return 'Las credenciales de acceso son incorrectas.';
}
add_filter('login_errors', 'failed_login');

EliminacionLosMensajesDeError.png