Como muchos usuarios del CMS (Content Management System) Joomla! sabrán, no es posible cambiar la URL "/administrator" de acceso al Panel de Administración de Joomla!. El Panel de Administración es el back-end del sitio donde los administradores, redactores, editores, etc. ingresan para realizar sus tareas. Similar al "/wp-admin" de Wordpress. Debido a esto es el primer componente por donde los atacantes intentan penetrar sitios Joomla!, probando contraseñas de usuarios por defecto mediante ataques de fuerza bruta o diccionario.

Más allá de que usemos contraseñas prácticamente irrompibles, el mayor problema de sufrir un ataque de fuerza bruta o diccionario, es que puede transformarse rápidamente en un ataque de denegación de servicio (DoS) provocado por un alto consumo de ancho de banda y/o CPU en el servidor víctima.



Lamentablemente Joomla!, al igual que muchas extensiones desarrolladas por terceros, depende fuertemente en la existencia del directorio /administrator. Por supuesto es posible proteger con contraseña este directorio, si el servicio de hosting lo permite. Pero existe una solución, aunque algo más complicada de implementar, mucho más amigable para los usuarios, ya que no requiere utilizar usuarios y contraseñas adicionales y funciona como si efectivamente pudiésemos renombrar el directorio /administrator.

La solución consiste en solicitar una cookie cada vez que se intenta acceder al directorio /administrator. Esta cookie será utilizada como clave secreta y será otorgada al cliente únicamente al acceder a un directorio específico, cuya ubicación debe ser secreta, por ejemplo /adminoculto (¡NO UTILIZAR ESTE NOMBRE PARA EL DIRECTORIO SECRETO!). Para finalizar el circuito, el acceso a este directorio secreto implementa una redirección automática a /administrator (además de entregar la cookie al cliente). Parece complicado pero funciona perfectamente y es una barrera de contención para restringir el acceso e impedir ataques al panel de administración.

Implementación

Dentro del directorio /administrator crear el archivo .htaccess de configuración de Apache con el siguiente contenido:

RewriteEngine On

# si aparece el string 'administrator' en la URL
RewriteCond %{REQUEST_URI} administrator

# y no se encuentra la cookie
RewriteCond %{HTTP_COOKIE} !SesionAdministradorJoomla=654987321987654321987654321987

# denegar el acceso
RewriteRule .* - [L,F]

Options All -Indexes

La cadena 654987321987654321987654321987 representa la clave secreta. Es importantísimo NO UTILIZAR ESTA MISMA CLAVE, de lo contrario la seguridad será nula. Especificar cualquier otra clave larga y compleja.

Luego, crear un directorio secreto dentro del directorio base de la instalación de Joomla! (a la par del directorio /administrator), por ejemplo:

/adminoculto

A riesgo de ser repetitivo, NO UTILIZAR ESTE NOMBRE PARA EL DIRECTORIO SECRETO, elegir cualquier otro nombre que sólo los administradores conozcan.

Dentro del directorio secreto /adminoculto crear el archivo index.php con el siguiente contenido:

<?php
    $admin_cookie_code = "654987321987654321987654321987";
    $segundos = 1;
    $minutos = 60 * $segundos;
    $horas = 60 * $minutos;
    $dias = 24 * $horas;
    $expire = time() + 5 * $dias; // duración de la sesión del administrador (segundos)
    setcookie("SesionAdministradorJoomla",$admin_cookie_code,$expire,"/");
    header("Location: ../administrator/index.php");
?>

Especificar la duración de la cookie en minutos, horas o días, según conveniencia.

Luego de implementar esta solución, al intentar acceder al Panel de Administración directamente (por ejemplo "www.pepe.org/administrator"), se obtiene la respuesta "403 Forbidden" debido a que no tenemos la cookie "SesionAdministradorJoomla":

Es necesario ingresar mediante la URL secreta (por ejemplo "www.pepe.org/adminoculto") para recibir la cookie y ser redireccionado automáticamente:

Utilizando la herramienta "Inspect" del navegador Google Chrome, en la pestaña "Resources" (recursos) es posible comprobar que tenemos la cookie de acceso restricto:

En Mozilla Firefox es posible ver la cookie desde el menú "Tools > Page Info" (ó mediante el atajo de teclado Ctrl+I), luego utilizando el botón "View Cookies" en la pestaña "Security".

Esta solución tal vez no sea la más segura de todas (mejor sería utiliza usuario y contraseña) pero es, para mi gusto, la que presenta el mejor balance entre seguridad y facilidad de uso.

Implementación sin .htaccess

Es posible prescindir del archivo .htaccess (por ejemplo si utilizamos Nginx) y verificar el contenido de la cookie directamente desde PHP, editando el archivo /administrator/index.php:

<?php
/**
 * @package    Joomla.Administrator
 *
 * @copyright  Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

if ($_COOKIE["SesionAdministradorJoomla"] != "654987321987654321987654321987")
{
    die("Go fuck yourself.");
}

// Resto del contenido del archivo original...

El problema con esta implementación, es que cada vez que actualicemos Joomla! es probable que se pierda la edición. Por lo que es recomendable guardar una copia de este archivo en el mismo directorio para acceso rápido (y así recuperar rápidamente la protección de seguridad cuando el actualizador pisa el archivo index.php):

# cp index.php index-seguro.php

¡Espero que les sirva!


Tal vez pueda interesarte


Compartí este artículo