Paranoia

Un módulo de seguridad que protege los sitios Drupal contra configuraciones inseguras deshabilitando módulos peligrosos, ocultando permisos riesgosos y previniendo la ejecución arbitraria de código PHP.

paranoia
1,534 sites
42
drupal.org

Overview

Paranoia es un módulo de seguridad defensiva diseñado para administradores de sistemas que desean evitar que los administradores del CMS ejecuten código PHP arbitrario. El módulo implementa múltiples capas de protección para reducir los riesgos de seguridad asociados con las capacidades de ejecución de PHP en Drupal.

El módulo deshabilita automáticamente el módulo PHP cuando se instala, oculta permisos peligrosos del formulario de administración de permisos y evita que cualquier rol sea elevado a estado de administrador. También protege la cuenta de superusuario user/1 de ser modificada por otros administradores, asegurando que solo el superusuario pueda cambiar sus propias credenciales.

Paranoia proporciona un sistema de hooks extensible que permite a otros módulos declarar módulos adicionales para deshabilitar, permisos para ocultar, rutas para bloquear y formularios para deshabilitar. Esto lo convierte en un framework de seguridad flexible que puede adaptarse a los requisitos de seguridad específicos del sitio.

Features

  • Deshabilita automáticamente el módulo PHP y el módulo skinr_ui durante la instalación
  • Oculta los permisos 'use PHP for settings' y 'use text format php_code' del formulario de permisos
  • Evita otorgar permisos marcados como 'restrict access' a los roles Anonymous y Authenticated
  • Bloquea permisos riesgosos de módulos contribuidos incluyendo devel, googleanalytics, bueditor, auto_username y auto_entitylabel
  • Elimina la propiedad de rol de administrador de todos los roles y evita que cualquier rol sea elevado a estado de administrador
  • Oculta Paranoia, PHP y otros módulos deshabilitados de las páginas de administración de módulos
  • Protege la cuenta user/1 - solo user/1 puede modificar su propio nombre, correo electrónico y contraseña
  • Bloquea el acceso a rutas peligrosas como devel.execute_php
  • Deshabilita formularios riesgosos que podrían permitir Ejecución Remota de Código (RCE)
  • Proporciona un sistema de hooks extensible para configuraciones de seguridad personalizadas
  • Reporta el estado del módulo PHP en la verificación de requisitos del sitio
  • No puede ser desinstalado a través de la interfaz de administración por diseño - requiere drush o manipulación de la base de datos

Use Cases

Endurecimiento de un sitio con múltiples administradores

En sitios con múltiples administradores, Paranoia evita que cualquier administrador obtenga privilegios elevados o ejecute código PHP arbitrario. Instala Paranoia para asegurar que incluso los administradores de confianza no puedan comprometer accidental o intencionalmente la seguridad del sitio a través de capacidades de ejecución de PHP.

Cumplimiento y auditoría de seguridad

Las organizaciones que requieren cumplimiento de seguridad pueden usar Paranoia para aplicar automáticamente políticas de seguridad. El módulo asegura que los permisos peligrosos no puedan ser otorgados a través de la interfaz de usuario, proporcionando una capa adicional de protección que satisface los requisitos de auditoría de seguridad.

Protección contra cuentas de administrador comprometidas

Si una cuenta de administrador es comprometida, Paranoia limita el daño que un atacante puede hacer. No pueden habilitar el módulo PHP, ejecutar código arbitrario ni modificar la cuenta de superusuario, reduciendo significativamente la superficie de ataque.

Prevención de configuraciones erróneas de seguridad accidentales

Los constructores de sitios pueden no ser conscientes de las implicaciones de seguridad de ciertos permisos. Paranoia oculta automáticamente estos permisos peligrosos, previniendo otorgamientos accidentales que podrían exponer el sitio a vulnerabilidades de ejecución de código.

Bloqueo de módulos de desarrollo en producción

Cuando el módulo devel se deja habilitado accidentalmente en producción, Paranoia bloquea el acceso a rutas peligrosas como devel.execute_php y deshabilita el formulario de ejecución de PHP, previniendo potenciales vulnerabilidades de Ejecución Remota de Código.

Extensión de políticas de seguridad con módulos personalizados

Los desarrolladores pueden crear módulos personalizados que implementen los hooks de Paranoia para agregar restricciones de seguridad específicas del sitio. Por ejemplo, ocultar módulos internos propietarios de la interfaz de administración o bloquear el acceso a rutas personalizadas sensibles.

Tips

  • Instala Paranoia temprano en el proceso de desarrollo del sitio para establecer líneas base de seguridad antes de que otros administradores comiencen a trabajar
  • Usa los hooks de Paranoia en módulos personalizados para extender las políticas de seguridad específicas de tu organización
  • Recuerda que Paranoia no puede ser desinstalado a través de la interfaz de usuario - planifica esto al desplegar a producción
  • Revisa regularmente el informe de estado del sitio para advertencias sobre el módulo PHP habilitado
  • Combina Paranoia con otros módulos de seguridad como Security Kit (seckit) para una protección integral
  • Al desarrollar módulos personalizados, usa hook_paranoia_hide_permissions() para ocultar permisos sensibles que definas

Technical Details

Hooks 5
hook_paranoia_disable_modules

Declara módulos que deben ser desinstalados automáticamente. Cuando se envía el formulario de administración de módulos, cualquier módulo habilitado en esta lista será desinstalado.

hook_paranoia_hide_modules

Declara módulos que deben ser ocultados de las páginas de administración de módulos. Los módulos ocultos no aparecerán en la lista de módulos ni en los formularios de desinstalación.

hook_paranoia_hide_permissions

Declara permisos que deben ser completamente ocultados del formulario de administración de permisos. Estos permisos serán automáticamente revocados de todos los roles.

hook_paranoia_hide_routes

Declara nombres de rutas a las que se les debe denegar el acceso. El RouteSubscriber establecerá el requisito _access a FALSE para estas rutas.

hook_paranoia_risky_forms

Declara IDs de formularios que deben ser deshabilitados por razones de seguridad. Estos formularios tendrán #access establecido a FALSE y una validación que siempre falla.

Troubleshooting 6
No se puede desinstalar Paranoia a través de la interfaz de administración

Esto es por diseño. Paranoia se oculta a sí mismo de las páginas de administración de módulos. Para desinstalar, usa drush: 'drush pm-uninstall paranoia', o elimina el directorio del módulo del sistema de archivos y limpia las cachés.

Aparece un error de estado del módulo PHP en el informe de estado del sitio

El módulo PHP ha sido habilitado directamente en la base de datos, eludiendo la protección de Paranoia. Deshabilita el módulo PHP usando drush: 'drush pm-uninstall php', o actualiza directamente la base de datos para eliminarlo.

No se pueden otorgar ciertos permisos a roles

Paranoia oculta permisos peligrosos del formulario de permisos. Este es un comportamiento de seguridad intencional. Si necesitas otorgar estos permisos, primero debes desinstalar Paranoia.

No se puede establecer un rol como rol de administrador

Paranoia evita que cualquier rol tenga la propiedad admin establecida a TRUE. El módulo bloquea esto en hook_user_role_presave y oculta el selector de rol de administrador de la configuración de usuario.

No se pueden editar los detalles de la cuenta user/1

Paranoia restringe la modificación de las credenciales de user/1 solo a user/1. Inicia sesión como user/1 para hacer cambios al nombre, correo electrónico o contraseña de la cuenta de superusuario.

Ciertos módulos siguen siendo deshabilitados

Paranoia desinstala automáticamente los módulos declarados en hook_paranoia_disable_modules(). Por defecto, esto incluye php y skinr_ui. Verifica si módulos personalizados han agregado a esta lista.

Security Notes 6
  • Paranoia es un módulo defensivo que reduce la superficie de ataque pero no debe considerarse una solución de seguridad completa
  • El módulo protege contra ataques basados en la interfaz de usuario pero la manipulación directa de la base de datos puede eludir las protecciones
  • Siempre mantén Drupal core y los módulos contribuidos actualizados para una seguridad integral
  • Monitorea el canal de registro de paranoia para alertas sobre intentos bloqueados de elevación de rol de administrador
  • La opción de configuración delete_blocked_users debe ser revisada según tus requisitos de seguridad específicos
  • Considera que ocultar módulos y permisos de la interfaz de usuario no previene el acceso programático - pueden ser necesarias protecciones adicionales a nivel de código