Protocolo de seguridad para Joomla 2.5

Protocolo de seguridad para Joomla 2.5
Información sobre la plantilla
SeguridadJoomla.jpeg
Concepto:Grupo de medidas que están encaminadas a evitar vulnerabilidades de seguridad que se pueden presentar sobre los sitios Web implementados con plataforma Joomla 2.5.


El Protocolo de seguridad para Joomla 2.5, consiste en un grupo de medidas que están encaminadas a evitar vulnerabilidades de seguridad que se pueden presentar sobre los sitios Web implementados con plataforma Joomla 2.5, con el objetivo de evitar el hackeo del sitio Web, minimizando las vulnerabilidades que este pueda contener.


Elementos y medidas de seguridad en Joomla

Las medidas que se pueden tomar con Joomla para aumentar el nivel de seguridad del mismo, tienen que partir de la base de que Joomla es seguro, siempre que se realice un buen mantenimiento a nivel de actualizaciones y se tomen ciertas medidas de precaución, tanto a nivel de servidor como del propio programa. Fundamentalmente hay 3 aspectos que deben contemplarse cuando se habla de seguridad en Joomla:

  • La configuración del servidor donde está alojado Joomla.
  • Las medidas tomadas desde la administración del Joomla por parte del administrador, tanto a nivel de configuraciones como extensiones de seguridad.
  • Extensiones de terceros, hay que tener en cuenta su seguridad y mantenerlas actualizadas.

Consideraciones generales

  • Cambiar los passwords o contraseñas regularmente y no usar siempre los mismos. Utilice una combinación aleatoria de letras, números, o símbolos y evite usar nombres o palabras que puedan ser encontradas en un diccionario. Nunca utilice los nombres de sus parientes, mascotas, etc.
  • Si usted esta usando un servicio compartido de hosting en su proveedor, asegúrese de que ningún otro usuario en el servidor pueda ver o acceder a los archivos de su sitio, por ejemplo a través de cuentas shell, cpanels, etc.
  • Nunca dependa de los backups de otro. Hágase responsable personalmente de respaldar regularmente los archivos de su sitio y su base de datos.
  • Utilice un sistema de Prevención/Detección de intrusos para bloquear/alertar sobre solicitudes HTTP maliciosas. Ejemplo de búsqueda en Google (Intrusión+Prevención)


Servidores de desarrollo

  • Configure un servidor local de desarrollo, y realice allí todas las actualizaciones y comprobaciones. Apache provee a XAMPP, un instalador de aplicaciones LAMP fácil de usar y gratuito que trabaja en muchos sistemas operativos, incluyendo GNU/Linux y Windows.

HTTP Server Apache

  • PHP, MySQL y muchos otros componentes base fueron originalmente diseñados para, y generalmente funcionan mejor en, servidores Apache. Evite usar otros servidores si es posible.
¿A quién dejamos acceder?.

*Utilice archivos .htaccess para bloquear intentos de exploits

  • Regularmente revise los registros de acceso en busca de actividad sospechosa. No confié en sumarios y graficas. Revise los "raw logs" (registros en crudo) para detalles mas reales.
  • Configure los filtros de Apache mod_security y mod_rewrite para que bloqueen ataques PHP.

MySQL

  • Asegúrese de que la cuenta MySQL de Joomla esta configurada con acceso limitado. Este consciente de que la instalación inicial de MySQL es insegura. Una cuidadosa configuración manual es requerida luego de la instalación.

En un servidor compartido, si usted puede ver los nombres de las bases de datos de otros usuarios, entonces puede estar bastante seguro de que ellos ven las suyas. Si ellos pueden ver las bases de datos que usted posea, ellos están innecesariamente un paso más cerca de entrar. Un buen ISP limitara estrictamente el acceso de cada usuario a sus propias bases de datos.

PHP

  • Actualice su código PHP a PHP 5.
  • Aplique todos los parches necesarios para PHP y para aplicaciones basadas en PHP.
  • Se recomienda un frecuente escaneo dónde un gran número de aplicaciones PHP están en uso.
  • Utilice herramientas como Paros Proxy para realizar pruebas automáticas de SQL Injection en contra de sus aplicaciones PHP.
  • Siga el principio de "Least Privilege" (El menor privilegio) para correr PHP usando herramientas como PHPsuExec, php_suexec o suPHP desde suPHP.

php.ini

  • Estudie la lista oficial de directivas php.ini en www.php.net.
  • Configure register_globals OFF. Esta directiva determina si registrar o no las variables EGPCS (Environment, GET, POST, Cookie, Server) como variables globales.
  • Use disable_functions para desactivar peligrosas funciones PHP que no son necesarias para su sitio.
  • Desactive allow_url_fopen. Esta opción activa las URL-aware fopen wrappers que permite el acceso a los objetos URL como archivos. Los wrappers (envolturas) son proveídos para el acceso de archivos remotos usando el ftp o el protocolo http, algunas extensiones como zlib son capaces de registrar wrappers adicionales. Nota: Esto solo puede ser configurado en php.ini por motivos de seguridad.
  • Ajuste la directiva magic_gpc_quotes como sea necesario para su sitio. Debería estar en off para usar software bien escrito, y para los pobremente escritos scripts PHP 3 y PHP 4 . magic_gpc_quotes configura el estado magic_quotes state para operaciones GPC (Get/Post/Cookie). Cuando magic_quotes esta on, todas las ' (single-quote/comillas-simples), " (double quote/comillas dobles), \ (backslash-barra invertida) y NUL's son evitadas con una barra invertida \ automáticamente.
  • Modo Seguro: safe_mode (debería estar activado y configurado correctamente)
  • Open_basedir (debería estar activado y configurado correctamente). Limite los archivos que pueden ser abiertos por PHP a el arbol de directorios especificado, incluyendo el archivo mismo. Esta directiva no es afectada si el Safe Mode esta On u Off. La restricción especificada con open_basedir es en realidad un prefijo, no un nombre de directorio. Esto significa que "open_basedir = /dir/incl" también permite el acceso "/dir/include" y "/dir/incls" si es que existen. Cuando quiere restringir el acceso solamente al directorio especificado, cierre con una barra /.

Directivas de ejemplo para las sugerencias anteriores

register_globals = 0 disable_functions = show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open allow_url_fopen = 0 magic_gpc_quotes = 0 safe_mode = 1 open_basedir = /dir/incl/

Núcleo de Joomla (Core)

  • Siempre actualice a la última versión estable.
  • Descargue Joomla! solo de sitios oficiales, sitios de confianza
  • Suscríbase, o revise regularmente anuncios Relacionados con la seguridad Joomla
  • Remueva todas las plantillas (templates) que no sean necesarias en su sitio.
  • Edite globals.php para correr register_globals emulation off en Joomla! . Aunque la emulación Joomla! es mucho mas segura que la directiva PHP register_globals, es mejor no permitir para nada register_globals. Comenzando con PHP 6, esta ni siquiera será una opción, y es cuestión de tiempo.
  • Una vez que su sitio esta configurado y es estable, Proteja contra escritura la mayor cantidad de archivos y directorios que pueda cambiando los permisos de directorios a 755, y los permisos de archivos a 644. Existe una característica de sitio --> Global Configuration (configuración global) --> que puede colocar los permisos de forma masiva por usted. Tenga en cuenta de que esta función masiva puede afectar el funcionamiento de los componentes, si lo hace pruebe el funcionamiento de los mismos. También tenga en cuenta que es posible que no se puedan cambiar los permisos en todos los componentes o extensiones.

Extensiones (Componentes, Módulos, y plugins) de Joomla

  • No utilice extensiones Joomla que requieran register_globals ON.
  • Descargue extensiones solo de sitios de confianza. La definición oficial de "sitio de confianza" es aquel sitio en el que USTED confía.
  • Haga una copia de seguridad de su sitio y de la base de datos MySql, antes de instalar nuevas extensiones.
  • Desinstale cualquier extensión no usada, y revise doblemente que los directorios y archivos relacionados hayan sido borrados.

Reforzando la seguridad en Joomla 2.5

Requeridas

  • Contrate a un consultor profesional de seguridad Joomla! para que revise la configuración de su sitio.
  • No utilice un servidor compartido. Algunos expertos difieren en este item. El punto es, no importa como este configurado su servidor, asegúrese de que usted sea la única organización con acceso.
  • Utilice un servidor SSL para todos los logins y funciones administrativas, y por supuesto para transacciones confidenciales con los clientes. Asegúrese de tener un muy buen abogado si es que no quiere usar SSL.
  • Separe los servidores de desarrollo y producción (pruebas y sitio real), y desactive las funciones administrativas en la parte pública del sitio. Utilizar subdominios es una buena forma de hacer esto.

Recomendadas

  • Mueva archivos básicos que no requieran acceso de escritura por sobre la raíz Web (Web root) y modifique las variables de ruta (path variables) o utilice Symlinks. Por ejemplo los archivos de configuración o el directorio de administración.
  • Para evitar el acceso URL directo a las extensiones, edite la configuración Apache, .htaccess, o mueva directorios de las extensiones por sobre la raíz Web, y modifique las variables de ruta.

Opcionales

  • Asegúrese de que todos los directorios escribibles (images, galleries, caches, etc.) están por sobre la raíz Web y modifique las variables de ruta. Revise los directorios de las extensiones en busca de sus propios directorios de descarga o con permisos de escritura.
  • Mueva todo el sitio Joomla por sobre la raíz Web excepto por aquellos archivos que requieran acceso http directo, tales como "/index.php", y modifique las variables de ruta.
  • Para un mejor control de espacios de nombre dentro de PHP, utilice código OO en sus extensiones.
  • Bloquee accesos cruzados a la base de datos.
  • Cree bases de datos y cuentas MySQL separadas para extensiones confidenciales.
  • Para el acceso a la base de datos principal para extensiones no del todo confiables (inicialmente casi todas), utilice una cuenta de MySQL separada con pocos privilegios.
  • Si no quiere anunciarle a los script kiddies cuáles URLs necesitan protección del acceso directo, puede tratar de redirigirlos a una página de error 404. Esto les indicara que esa URL no es válida, más que anunciarles; que existe pero que necesita protección. (No olvide crear la página de error.) friesengeist apunta a eso, si un cracker usa alguna otra herramienta más que un navegador para acceder a su sitio, el script ignorará el header(), corriendo, y ejecutando el resto del código. Si realmente quiere la redirección, debe añadir exit; después de header.

Fuentes

  • Ayuda de Joomla
  • Ministerio de Educación Nacional de Colombia. Recomendaciones de Seguridad para sitios Web implementados en Joomla. (pdf). Colombia. 2012.