Hagamos de nuestro Joomla un sistema mas Seguro

No hay fórmulas mágicas ni fáciles. Todo se basa en tiempo y pequeñas actuaciones que sumando, pueden hacer de nuestro Joomla un sistema más seguro, pero no invulnerable. Los “trucos” aquí mostrados dependerán por supuesto del servidor que tengais (sea compartido, dedicado.,..) y del acceso al mismo para configurarlo. Lo básico es usar solo lo imprescindible y con la configuración más restrictiva, aunque eso implique que en ciertos momentos tengamos que probar si algunos componentes funcionan, o haya que desactivar algo en momentos puntuales. Se que es algo latoso, pero si queremos seguridad, es lo que hay…

No soy informático, sinó un usuario “amateur” de Joomla, que a lo largo de los años, he aprendido ciertas lecciones a aplicar, y me gustaría compartirlas.

Una vez aclarados estos puntos, paso a comentarles los puntos que deberan seguir para hacer mas seguro sun CMS JOOMLA!:

1.- Permisos de las carpetas

De todos es sabido no dejar las carpetas con permisos (CHMOD) que puedan dar entrada a ataques (por ejemplo un CHMOD 777). En este caso solo quiero concretar una cosa, y es el hecho de una vez modificado el permiso para que un componente pueda ejecutarse, probar luego a volver a los permisos seguros (por ejemplo un CHMOD 644). En ocasiones muchos programas se ejecutan con permisos seguros aunque nos den aviso de que hay que ponerlos en 777. Es decir, tenemos que dedicar tiempo a repasar permisos, poner todos seguros y luego poco a poco si vemos que el programa no funciona ir probando con otros permisos. Ensayo y error amigos! Aviso: no os olvideis de la carpeta raiz (“httpdocs” o “public_html”). Ayuda sobre permisos y uso cliente FTP

2.- Acceso desde el front-end

Si no es estrictamente necesario no lo hagas. Si tienes tiempo, una web puede subsistir si tu subes los documentos y las imágenes de las Galerías o los componentes de descarga (por ejemplo galerías de imágenes y subida de documentos). Evita habilitar la subida desde el frontend a usuarios registrados (y menos a usuarios públicos). Si lo haces, estás dejando una puerta abierta a código malicioso, y no lo digo que lo hagan tus usuarios, pero si ya hay un lugar en donde cualquier experimetado puede acceder Y si decides dejar esa “puerta abierta” procura restringir concienzudamente el tipo de archivos que vas permitir subir.

3.- Configuración htaccess

htaccess es una potente herramienta (tienes miles de tutoriales en la red). Debes tener un .htaccess configurado con los parámetros que trae Joomla, y luego añadir los tuyos propios. Usa nuevamente Google para ver como utilizar este documento a nivel de seguridad. Te muestro texto básico que debes añadir al inicio del htaccess aparte de, como dije, lo que trae Joomla por defecto (en su .htaccess de ejemplo).

Algunas de las cosas imprescindibles en un htaccess son:
a) Para evitar que enlacen con tus archivos donde pone site.com debes poner su web, y tantas lineas como webs quieras dar acceso a tus archivos:

#Hotlink RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?site.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?otarweb.com [NC] .*\.(jpg|jpeg|png|gif|pdf|zip|rar|mov|mp3|doc|pdf|bmp|swf|flv|wmv)$ - [NC,F,L]

b)Para evitar ataques mediante ejecución de XML

## Deny access to extension xml files (uncomment out to activate) Order allow,deny Deny from all Satisfy all 

Si esto te da problemas con XML de tu web que necesitan ejecutarse, puedes permitirlo mediante:

Allow from all Satisfy all 
Si queremos limitar el acceso a ciertos “sistemas” (como correos temporales) sospechosos lo hacemos tal como se comenta en este artículo: Como utilizar el archivo .htaccess de nuestro Joomla!.
Muchos componentes admiten su propio htaccess (por ejemplo las Galerías de Imágenes y los gestores de descarga). Si es así, crea el htaccess para cada componente dentro de su carpeta. htaccess es todo un mundo, os recomiendo buscar y probar con él las diferentes opciones.

4.- Modulos o componentes que no uses

Todo aquello que no uses elimínalo, aunque lo tengas deshabilitado y no se puede ver en el frontend, un atacante experimentado puede comprobar si tienes un componente y aprovechar sus bugs aunque esté desactivado. Ten en tu servidor solo aquello que estés usando. Y además así ahorrarás espacio. Si no necesitas un componente imprescindiblemente, no lo uses. Cuantos más componentes y plugins, mas código y más posibilidades de que encuentren un lugar débil para atacar.

5.- Templates

Elimina las plantillas que no uses.

6.- Sistemas de seguridad de terceros

Yo personalmente NO. Me refiero a esos componentes (la mayoría de pago) que nos aseguran protegernos contra ataques. A ver, su función pueden hacerla mejor o peor pero mi opinión es que consumen muchos recursos y ralentizan la página. Suelen usar tablas muy grandes en las Bases de Datos para guardar IPs sospechosas. Esas IPs además deben actualizarse y lo que es peor… a veces nos dan errores inesperados o restringen el sitio a gente “normal”. Ya sabemos que eso de las IP asociadas a ciertos usuarios es muy relativo. Muchos además ejecutan en segundo plano scripts que pueden ralentizar e incluso bloquear el propio Joomla. O hacen consultas interminables a la Base de datos, provocando lo mismo que comentamos antes.

6.- Protege el acceso a backend

Por ejemplo mediante una contraseña en tu servidor. En este caso debes estar usando Plesk o CPanel (paneles de control de los servidores) y pones una contraseña para el acceso a esa carpeta (tu dominio/administrator). Es un paso más que un intruso debe pasar. Ah! y no le pongas el mismo usuario y contraseña que tu acceso al backend. Tambien puedes protegerlo mediante un .httpassword.

7.- Base de datos

No pongas el prefijo por defecto a la base de datos (que es jos_) cámbialo cuando hagas la instalación. Relacionado con este punto, siempre que instales un componente que requiera instalar tablas nuevas o una base de datos, hazlo en Bases de Datos independientes si es posible. No uses la Base de Datos de Joomla para todo.

8.- Index.php

No dejes carpetas sin index.php, así se evitará que se pueda acceder al listado de los archivos de una carpeta. Esto se puede controlar también desde el htaccess para evitar mostrar el listado de un directorio.

9.- configuration.php

Este archivo debe estar bien protegido. Mueve el archivo fuera de la carpeta raiz (httpdocs o public_html). Así el acceso al mismo será complicado. Por ejemplo si tu directorio es /home/user/www/public_html, puedes mover el archivo configuration.php a /home/user/www. Ahora, donde estba el antiguo, creamos un nuevo archivo configuration.php con el siguiente contenido.
<?php require( dirname( __FILE__ ) . '/../mijoomla.conf' ); ?>.
Muy atentos de no incluir espacios antes ni después de los tags php porque nos reportaría un error del tipo “headers already sent…”. Este archivo no puede ser escrito para evitar ser sobreescrito por com_config. Si deseamos hacer modificaciones en el archivo de configuración real las realizamos a mano.

10.- robots.txt

Mediante este archivo, limita la indexación de carpetas y archivos que consideres importantes, por ejemplo si tiene documentos que no quieres que Google indexe, o si tienes componentes que dan acceso al front-end. Ficheros y directorios importantes mejor que no se indexen. Joomla trae por defecto este archivo. Infórmate al respecto y adáptalo a tus necesidades.

11.- Uso descontrolado

No permitas el uso “descontrolado de componentes”. Por ejemplo, si permites subidas de archivos (no recomendable, ya sabes) procura usar componentes que te permitan limitar el tamaño de los mismos y el tiempo de subida entre cada uno (antiflood suele llamarse). Así evitaremos subidas o consultas automatizadas. Configura el antiflood para al menos 60 segundos. Lo mismo en el foro. Kunena (muy utilizado en Joomla) permite aplicar el antiflood para la publicación de mensjaes. Ponlo a 60 segundos.

12.- Crear un nuevo Super Admin

Joomla asigna al admin el ID 42. Para cambiárselo, creamos un nuevo Super Administrador, y accediendo con el nuevo, al antiguio lo ponemos como Admin y luego ya podemos eliminarlo. Ahora tenemos nuestro Super Admin con otra ID. Si eres mañoso, esto también puedes hacerlo cambiando la ID con phpMyAdmin.

13.- Usuarios

Utiliza sistemas CAPTCHA en todas las secciones que puedas (sobre todo en el registro). No permitas participación pública, sinó siempre mediante registro. Revisa los usuarios registardos y observa que no aparecen repetidos o con nombres y correos sopechosos. Aquellos usuarios que aún no se han activado, elimínalos periódicamente.

14.- Administración

Hay que evitar el acceso a la administración. Mediante contraseña en el servidor como digimos anteriormente, o también se puede cambiar el nombre de la carpeta “administrator”. Pero CUIDADO, esto requiere muchos cambios y puede ser complicado. Es una buena medida pero infórmate antes de aplicarla o dejarás el acceso al back-end inhabilitado. Ver comentario del usuario Yurima para tener una idea de lo que hay que hacer.

15.- La configuración de Joomla

En las opciones de configuración de Joomla podemos hacer lo siguiente, siempre y cuando os sea posible:
{xtypo_rounded2}Configuración Global > Sistema > Parámetros del Usuario: Activación de cuenta para Nuevos Usuarios > SI Parámetros para los Usuarios de la Portada > NO{/xtypo_rounded2} {xtypo_rounded2}Configuración Global > Sistema > Configuración Multimedia: Extensiones permitidas: Solo las imprescindibles> odt, csv, xcf, y muchas otras no sules utilizarlas. ELIMINALAS. Ruta del directorio de archivo & Ruta del directorio de imágenes> CAMBIALOS… pon nuevas rutas. Subidas restringidas > SI Tipos de MIME Permitidos > Igual que las extensiones permitidas. Habilitar la subida de Flash > NO{/xtypo_rounded2} {xtypo_rounded2}Configuración Global > Sistema > Parámetros de Depuración de errores: NO en las dos opciones{/xtypo_rounded2} {xtypo_rounded2}Configuración Global > Servidor > Configuración del Servidor: Ruta directorio Temporal > Cambiarla. Comprwsión GZIP > NO Informe de errores > NADA{/xtypo_rounded2} {xtypo_rounded2}Configuración Global > Servidor > Parámetros FTP: Habilitar FTP> NO{/xtypo_rounded2} Cuando nos haga falta accedemos y lo habilitamos temporalmente.

16.- La configuración de Componentes

En aquellos componentes que ofrezcan la posibilidad de configurar su seguridad, utilizar las opciones más restrictivas y comprobar si funcionan. Crear htaccess en todos los componentes que os los permitan. Los componentes que creen carpetas para almacenar archivos, modificar esas carpetas. Por ejemplo, las Galería de Imágenes y los gestores de descargas suelen crear una carpeta para almacenar los ficheros. Cambiar la ubicación de la misma. Usa componentes que estén bien integrados en Joomla. Vistiva Joomla Extensions y ahí verás aquellos que según su popularidad están más utilizados. Por ejemplo, si quieres un foro, Kunena se integra perfectamente.

17.- Cosas evidentes

  1. Tener siempre actualizado Joomla y los componentes.
  2. Utilizar contraseñas seguras con letras, números, mayúsculas y minúsculas. Guardarlas en lugar seguro y cambiarlas cada determinado tiempo.
  3. Instalar componentes de los lugares oficiales del desarrollador, o de lugares que os inspiren confianza (comprobar antes el soporte que ofrecen, como e sla web en donde ofrecen el componente…)
  4. Eliminar ficheros de instalación y ejemplos.

18.- El servidor

  1. Utilice lasultimas versiones de PHP, MySQL y en general todos los componentes de su servidor.
  2. Deshabilite el PING a su servidor.
  3. Si teien instalados sistemas de Bases de Datos que no usa, por ejemplo PostreSQL etc… deshabilitelo. Todo lo que no use deshabilítelo.
  4. Configurar PHP correctamente. Debes tener tu Servidor configurado correctamente (si tienes acceso al archivo php.ini lo tienes fácil, pero htaccess también te permite configurar algunos parámetros):
  5. Deshabilitar register_globals
  6. Deshabilitar safe_mode
  7. Comprobar allow_url_fopen, lo mejor es que no se permita abrir ficheros remotos a un script.
  8. Comprobar allow_url_include, esta opción permite incluir ficheros php remotos, y ser ejecutados, en un script. Lo mejor es inhabilitarla.
  9. Utilizar disable_functions para deshabilitar algunas funciones que pudieran dejar tu sitio vulnerable. Algunas de estas funciones son: system, shell_exec, exec, phpinfo, etc
  10. Utilizar open_basedir para definir las rutas desde donde PHP tiene permiso para acceder a ficheros mediante funciones como fopen() o gzopen(). Si algún fichero esta fuera de las rutas incluidas en open_basdir, PHP no permitirá abrirlos.

 RESUMEN: · register_globals = Off · display_errors = Off · log_errors = On · allow_url_fopen = Off · allow_url_include = Off · expose_php = Off

  1. Si es posible no use un servidor compartido. Si usa un servidor compartido, trat de ser malo y ver algo de otros usuarios. Si puedes ver por ejemplo las bases de datos de otros usuarios, pues a ti te está pasando lo mismo.
  2. En http://www.cuwhois.com puedes ver las webs que comparten el servidor contigo, por si crees que alguna puede ser perjudicial.
  3. Logs: revisa los logs del servidor, puede que nos den pistas de si nos han intentado atacar.
  4. Utiliza el Firewall del servidor. Deja solo abiertos los puesrtos imprescindibles

19.- Herramientas online

Existen multitud de herramientas que analizan webs de manera gartuíta para averiguiar vulnerabilidades o si tienen virus. Puede que no sean muy fiables pero no está de más pasarle alguna a ver que resultados obtenemos.

20.- Antivirus

Un buen antivirus puedes pasárselo a los componentes antes de instalarlo. Avast es una opción gratuita, que no es molesta y es actualizada regularmente.

21.- Compartir

Cualquier problema o idea que tengas, debes compartirlo en la Comunidad Joomla. Es la mejor manera de evitar ataques y vulnerabilidades.

22.- Despues de un ataque o Hackeo

NO TE FIES. Aunque localices los archivos implicados, haz una instalación limpia de Joomla. BORRA todo y vuelve a empezar, y vuelve a descargar todos los componentes de sus sitios oficiales. Te ha pasado, ahora te va a llevar tiempo empezar de nuevo pero no hay alternativa ¿no querras que te vuelva a suceder verdad?

23.- Errores más frecuentes

  1. No preocuparse de Joomla. Lo instalo, funciona y ya está.
  2. No dedicarle unos minutos cada día a revisar que todo funciona bien. Que los permisos son los correctos, etc…
  3. Confiar en cualquier componente. Lo buscamos, lo descargamos y lo instalamos.
  4. No tener el sitio web “limpio”
  5. No comprobar que un componente se ha desinstalado correctamente.
  6. Buscar la comodidad. Mejor hacerlo fácil, porque “nunca me va pasar a mi, no quiero complicarme”
  7. No hacer copias de seguridad
  8. Usar contraseñas repetidas en diferentes apartados o utilizar siempre el usuario “admin” para el Administrador.

Cualquier duda para aclaraciones, pueden preguntar en foro de solojoomla o si la resolución de su problemas persiste, y no se atreven, aquí teneis un servicio de pago de resoluciones rápidas.

 

Comments

  1. lorena28

    Archivo configuration
    Muy buenas reseñas, sobre todo lo del archivo configuration.php y como esconderlo. Gracias.

  2. redlo

    A tener en cuenta
    Un texto que todo usuario de joomla deberia pegarse como favorito, sea nuevo o con carrera en este mundillo, entre los cuales me incluyo, que por mucho que uno crea saber, no es suficiente y esta realmente bien que alguien te lo recuerde y todos deberiamos tomar nota. Pequeno74, llevas tiempo sin publicar, pero con esto estas perdonado 😆 Gracias por el recordatiorio.

  3. yiruma

    Espero que lo publiques
    Parece mentira que haya pasado tanto tiempo y hayan aprendido la lección. Igualmente, para no relatizar el servidor no es bueno que todo el directorio de comp se encuentre con .htaccess , lo demás muy bueno, igualmente la carpeta administrator la pondría fuera del espacio público. Creo que hay tres cosas que deben fundamentar este trabajo, que es en el caso de cpanel o plesk tener la web admin con contraseña, segundo el configuration.php cambiado y tercero la carpeta administrator fuera del espacio público. Una cosa que se omitio la BD del joomla, que tenga key. Otra cosa, importante revisar el ftp de joomla no dar señales de vida. Por lo demás, esta claro, el articulo..

  4. lorenzo

    Por?
    ¿Y porque no iba a hacerlo? 😉
    [quote name=”yiruma”]Parece mentira que haya pasado tanto tiempo y hayan aprendido la lección. Igualmente, para no relatizar el servidor no es bueno que todo el directorio de comp se encuentre con .htaccess , lo demás muy bueno, igualmente la carpeta administrator la pondría fuera del espacio público. Creo que hay tres cosas que deben fundamentar este trabajo, que es en el caso de cpanel o plesk tener la web admin con contraseña, segundo el configuration.php cambiado y tercero la carpeta administrator fuera del espacio público. Una cosa que se omitio la BD del joomla, que tenga key. Otra cosa, importante revisar el ftp de joomla no dar señales de vida. Por lo demás, esta claro, el articulo..[/quote]

  5. yiruma

    Considerando el pasado
    Hay varias maneras de proteger a tales archivos sensibles de acceso público, pero la mayoría de ellos no son tan factibles. A continuación vamos a dar instrucciones paso a paso sobre cómo lograr esto.

    Paso 1: Mover configuration.php a un directorio seguro fuera del espacio público.

    Paso 2: para eso habrá que modificar el archivo /includes/defines.php and /administrator/includes/defines.php, más precisamente, esta constante: define (‘JPATH_CONFIGURATION, JPATH_ROOT);

    Si, por ejemplo, que desea mover el archivo a un nivel y en una carpeta denominada “ensayo” la constante se verá así:
    define ( ‘JPATH_CONFIGURATION’, JPATH_ROOT.DS.’..’.DS.’ensayo’ );

    Paso 3: Asegúrese de que el configuration.php no se puede escribir en todos, por lo que no puede ser anulado por com_config.

    Paso 4: Si necesita cambiar la configuración, hacerlo de forma manual en el configuration.php reubicados.

  6. gafita

    seguridad joomla
    amigos, si alguien me puede ayudar en este asunto: tengo mi sitio web, pero ultimamente he notado que muchos miembros se me estan dando de alta con unos correos falsos de un sitio que proporciona correos por 10 minutos. la pagina es (www.nepwk.com = sitio de correos temporales). de esa forma cuando esa web te da un correo por ese tiempo al usuario le llega la activacion de mi sitio. pregunto: Existe una forma que no salgan mas la activaciones desde mi sitio a esa web de correos temporales??. espero que alguien me pueda orientar, ya lo he escrito en varios foros de otros sitios, pero no me dan solucion. saludos.
    pd, no se si he escrito esta preocupacion en el foro correcto

  7. robert

    HTACCESS
    Leete este contenido > [url]http://www.solojoomla.com/utilizar-el-archivo-htaccess-en-joomla.html[/url] Te ayudara a frenar el uso de este tipo de emails.

    [quote name=”gafita”]amigos, si alguien me puede ayudar en este asunto: tengo mi sitio web, pero ultimamente he notado que muchos miembros se me estan dando de alta con unos correos falsos de un sitio que proporciona correos por 10 minutos. la pagina es (www.nepwk.com = sitio de correos temporales). de esa forma cuando esa web te da un correo por ese tiempo al usuario le llega la activacion de mi sitio. pregunto: Existe una forma que no salgan mas la activaciones desde mi sitio a esa web de correos temporales??. espero que alguien me pueda orientar, ya lo he escrito en varios foros de otros sitios, pero no me dan solucion. saludos.
    pd, no se si he escrito esta preocupacion en el foro correcto[/quote]

Deja un comentario