Pasar al contenido principal

Cómo Incrementar la Seguridad en Drupal 8

Enviado por Jorge Montoya el Sáb, 22/02/2020 - 14:27

Las características de seguridad en Drupal 8 incluidas por defecto en el núcleo cubren las necesidades de la mayoría de sitios. Sin embargo, existen ocasiones en que un control adicional es requerido. Todos sabemos lo peligroso que puede ser el Internet, siempre existen riesgos de que tu sitio sea atacado.. Estas son situaciones particulares en las que se requieren medidas adicionales. En este artículo encontrarás formas específicas de asegurar tu sitio Drupal y los módulos envueltos en este proceso.

¡Empecemos!

Seguridad en Drupal - Las Características Básicas

El sistema de theming evolucionó en Drupal 8, con el uso del lenguaje de plantillas Twig. Plantillar en Twig tiene muchas ventajas en comparación con plantillar en PHP. Una de ellas, es que el código es mucho más fácil de visualizar. Otra ventaja, es el hecho que todas las variables que se pasen a la plantilla se auto-escaparán automáticamente.. Esto minimiza el riesgo de que una variable incluya un resultado que pueda "romper" el código HTML y en consecuencia tu sitio. El riesgo se minimiza además, porque no ya tienes que escribir código PHP personalizado en tus plantillas.

El módulo PHP Input Filter era parte del núcleo en Drupal 7, en Drupal 8 es un módulo de la comunidad. Esta medida elimina vulnerabilidades.

Se implementó además la configuración de trusted hosts. Esto te permite asociar el código base de Drupal con un dominio específico y así prevenir ataques de spoofing en línea.

Debido al nuevo enfoque programático de Drupal, los módulos se pueden ser "realzados" en sus funcionalidades, al añadir plugins. Estos plugins le proporcionan comportamientos adicionales al módulo. El código se mantiene limpio y fácil de leer y analizar.

El uso de Composer como un gestor de paquetes abre la puerta a nuevas posibilidades de desarrollo para el Software de Código abierto Drupal, esto además contribuye a mantener todos los módulos funcionando correctamente y con todas sus dependencias actualizadas. Este es un factor clave para la estabilidad de los sistemas Drupal.

Cómo mejorar la Seguridad en Drupal en el Acceso - Módulos de la Comunidad

Seguridad en Drupal - Foto de un candado

Existen dos alternativas:

  • Bloquear vectores de ataque dentro del sistema

  • Limitar las vulnerabilidades al cambiar a restringir funciones y operaciones del sistema, retirando de esta forma la responsabilidad al usuario.

Estos módulos proporcionan este tipo de funcionalidad:

Automated Logout

Enlace: https://www.drupal.org/project/autologout

Este módulo te permite configurar el lapso en que los usuarios pueden permanecer conectados al sitio. Puedes configurar diferentes periodos de tiempo para diferentes roles de usuario, asumiendo que un usuario con un rol más elevado, por ejemplo, con acceso a información de mayor en el sitio, debería conectarse al sitio con más frecuencia que un usuario con un rol menor.

Session Limit

Enlace: https://www.drupal.org/project/session_limit

Con el módulo Session Limit, puedes determinar el límite de sesiones simultáneas de un usuario en diferentes navegadores. Si configuras el límite de sesiones en 1 e inicias sesión en otro navegador, la sesión en el primer navegador expirará.

Login Security

Enlace: https://www.drupal.org/project/login_security

Login Security le permite a los administradores de un sitio autenticar usuarios únicamente desde una dirección IP válida. De esta forma es posible garantizar o restringir acceso al sitio a países enteros, en caso de ser necesario, únicamente configurando el dominio correcto. Login security también restringe el número de intento de inicio de sesión, de esta forma se evitan los brute force attacks. Una característica adicional de este módulo, es el hecho de que oculta el mensaje de error de inicio de sesión estándar de Drupal. El atacante tendrá un problema adicional tratando de descubrir si la cuenta que quiere acceder existe en primer lugar.

Security Kit

Enlace: https://www.drupal.org/project/seckit

Security Kit le permite a los desarrolladores cambiar los encabezados de respuesta. Esto es útil cuando existen necesidades de seguridad específicas para sitios con altas probabilidades de Cross-site scripting [insertar enlace] y Cross-site request forgery [insertar enlace].

Honeypot

Enlace: https://www.drupal.org/project/honeypot

Honeypot previene que los robots llenes los formularios, al determinar si el usuario es humano o no. Utiliza dos métodos de identificación. Uno de ellos es utilizar un formulario oculto, el cual no es visible para los humanos. Si se llena este campo, Honeypot detectará esto y bloqueará el envío del formulario. El otro método es tomar el tiempo en segundos en que se llenó el formulario. Un valor bajo (2-3 segundos), denotaría un robot, de tal manera que el módulo bloquea este envío también.

CAPTCHA

Enlace: https://www.drupal.org/project/captcha

Un captcha es un reto a escribir un texto de respuesta, con el fin de determinar si el usuario es humano o no. De esta forma se alcanza el objetivo de bloquear los envíos de formulario falsos, ya que los robots no son capaces de descifrar el captcha.

Seguridad en Drupal 8 - Auditoría - Procedimientos de Control

Seguridad en Drupal - Foto de un candado

Siempre es importante revisar los registros del sistema. Es aún más importante, si el sitio ya se ha visto comprometido una vez. El análisis de estos datos te ayudará además a realizar un seguimiento de las transacciones y el estado actual de tu sistema. Como regla general, debes capturar registros de todos los datos que sean posibles - ¡SIEMPRE!

Algunos de los módulos que proporcionan este tipo de funcionalidad se listan a continuación:

Site Audit

Enlace: https://www.drupal.org/project/site_audit

Site audit realiza un análisis estático de todo el sistema y lo compara con un conjunto de configuraciones recomendadas. El módulo además guarda un reporte de cada análisis. Al realizar este control, como desarrollador puedes estar seguro de que tu sitio está cumpliendo con los estándares de seguridad requeridos.

Security Review

Enlace: https://www.drupal.org/project/security_review

Security Review, como Site Audit, también un análisis del sistema, pero esta vez, compara la información con un conjunto de implicaciones de seguridad potenciales en tu sitio, como por ejemplo los permisos de archivo, formatos de texto y código PHP y JS potencialmente malicioso en el frontend. También genera reportes.

Login History

Enlace: https://www.drupal.org/project/login_history

Login History añade un reporte a la base de datos con un registro de cada inicio de sesión por usuario, incluyendo la fecha y hora, la dirección IP y otra información de agente de usuario en el navegador. Como ya hemos anotado, siempre es bueno registrar tanta información como sea posible.

Seguridad en Drupal 8 - Medidas de Autenticación

Seguridad en Drupal - Foto de un candado

Con frecuencia, la importancia de la información implica una reducción en la usabilidad. Los usuarios se deben someter a esta molestia adicional en los procesos de autenticación.

Los módulos que puedes usar para este propósito se enuncian a continuación:

Two-factor Authentication

Enlace: https://www.drupal.org/project/tfa

Two-factor Authentication proporciona un paso adicional de verificación, el cual asegura la integridad del usuario que se está autenticando. Proporciona además una API a la cual se pueden conectar diferentes plugins (funcionalidades) que integran Drupal con diferentes servicios de autenticación como el módulo Google Authenticator [insertar enlace]

simpleSAMLphp Authentication

Enlace: https://www.drupal.org/project/simplesamlphp_auth

Este módulo te permitirá reemplazar el inicio de sesión por defecto en Drupal por una implementación single-sign-on [insertar enlace]. El módulo se comunica con proveedores de identidad para autenticar los usuarios. De esta forma puedes validar la identidad del usuario por medio de servicios como Twitter, Facebook o Google.

Password Policy

Enlace: https://www.drupal.org/project/password_policy

El módulo Password Policy define un conjunto de reglas para forzar a los usuarios a tener contraseñas fuertes. También forza a los usuarios a cambiar su contraseña de vez en cuando, dependiendo de las opciones de configuración.. Password Policy proporciona una API para definir un propio conjunto de reglas.

Password Strength

Enlace: https://www.drupal.org/project/password_strength

Este módulo proporciona un widget de calificación de estrellas, así los usuarios pueden verificar la fortaleza de sus contraseñas. Puedes potenciar la API de Password Policy para forzar a los usuarios a ingresar una contraseña con un puntaje elevado (puntaje mínimo).

Seguridad en Drupal 8 - Encriptación

Seguridad en Drupal - Foto de un candado

Los datos en reposo (datos que no están siendo utilizados) deberían ser encriptados para prevenir ataques de todo tipo. La encriptación proporciona soluciones a todos los niveles:

  • Hosting

  • Servidor

  • CDN

  • Sistema Drupal

 

Como regla general y con el fin de garantizar la máxima seguridad, la mejor manera de ejecutar una encriptación es en los niveles más bajos dentro de este grupo.

Siempre deberías utilizar HTTPS y SSL para todo el tráfico web de tu sitio, deberías además estar informado con tu proveedor de hosting o de nube acerca de encriptación total del disco.

Algunos módulos útiles son:

Key

Enlace: https://www.drupal.org/project/key

El módulo Key gestiona las claves de sistema y de API. Key proporciona una API con opciones para guardar y recuperar claves sensibles, tales como claves de API o de encriptación. El administrador del sitio puede decidir dónde almacenar estas claves en el sistema. Claves de API son, por ejemplo, las claves públicas para servicios como AWS, PayPal o MailChimp.

Encrypt

Enlace: https://www.drupal.org/project/encrypt

El módulo Encrypt es una API que proporciona una utilidad común de algoritmos para encriptar y decriptar datos aplicación de Drupal. Esta API se incrementa con el uso de varios módulos que utilizan algoritmos para encriptar/decriptar datos (Real AES, Diffuse). existen módulos como Field Encrypt, File Encrypt y otros módulos para casos de uso más específicos como Pubkey Encrypt.

File Encrypt

Enlace: https://www.drupal.org/project/file_encrypt

Este módulo se enfoca en el sistema de archivos y realiza un seguimiento de la encriptación en todos los archivos.

Field Encryption

Link: https://www.drupal.org/project/field_encrypt

Este módulo encripta los datos a nivel del campo, es decir encripta los valores de esos campos.

Seguridad en Drupal 8 - DevOps (Operaciones de Desarrollador)

Seguridad en Drupal - Foto de un candado

El proceso de desarrollo es crítico para poder mantener la seguridad de una manera proactiva. Siempre deberías utilizar repositorios de código y solicitudes de extracción (pull request) para todos tus archivos. Otras medidas implican la ejecución de revisiones de código periódicas, versionar cada uno de los lanzamientos de tu código, mantener el código del sitio actualizado (incluyendo las librerías JS) y siempre trata de evitar procedimientos manuales, ya que estos conllevan a errores. Siempre trata de automatizar tus scripts y utiliza una herramienta como DRUSH.

Algunos de los módulos más relevantes en esta categoría son:

Coder

Enlace: https://www.drupal.org/project/coder

Este módulo tiene extensiones de PHP Code Sniffing que evalúan el código en tu sitio y lo camparan contra los estándares de codificación en Drupal.org. Coder no ejecutará absolutamente nada en tu interfaz de usuario. Es más bien una herramienta de línea de comandos.

Hacked

Enlace: https://www.drupal.org/project/hacked

El módulo Hacked escanea el código del núcleo y de los directorios contrib y lo compara contra el código alojado en Drupal.org. Muestra las diferencias entre ambas bases de código, de tal forma que puedes tomar las medidas correspondientes en cuanto a tu código.

Backup and migrate

Enlace: https://www.drupal.org/project/backup_migrate

Este es un clásico entre los módulos Drupal. Backup and migrate realiza respaldo periódicos de la base de código y de la base de datos, de tal manera que los puedes restaurar, por ejemplo en una instalación nueva. Esto es muy útil en caso de que el sistema se vea comprometido y quieres restaurarlo.

Entorno

Asegurar la infraestructura en la cual es sistema está alojado es tan importante como asegurar Drupal. Trata siempre de mitigar los ataques antes de que sucedan.

  1. Utiliza un flujo de trabajo para el código - asegurándote así de que el mejor código es el que termina en el entorno de producción.

  2. Realiza un análisis detallado de los registros - existen herramientas muy útiles para este propósito, como Splunk o ELK stack.

  3. Si es posible, trata de utilizar entornos basados en la nube, estos son más seguros que entornos alojados.

  4. Trata de utilizar servicios de CDN cada vez que puedas - estos actúan como un firewall que previene ataques maliciosos al principio del proceso.

  5. Asegúrate de tener un entorno actualizado como reemplazo, en caso de existir una falla general del sistema.

Por favor, déjanos tus inquietudes y comentarios a continuación. ¡Gracias por leer!

Las imágenes son cortesía de OSTraining.

Añadir nuevo comentario

HTML Restringido

  • Etiquetas HTML permitidas: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.

Puntos clave