Web Seguridad

Autenticación Digest para Sitios de Apache

Introducción

Dependiendo del sitio y el contexto en el que el se encuentra es posible que necesitemos definir un área segura (por así decirlo) para la información que habrá en este sitio, para hacer esta segregación Apache nos brinda la posibilidad de autenticar a los usuarios que quieran acceder a la zona segura utilizando un usuario y una contraseña. Partiendo de este punto vamos a ver que existen pricipalmente 2 modos de autenticar a un usuario utilizando usuario y contraseña, el modo Basic, el cual es nativo en Apache 1.3 y el modo Digest, el cual requiere la habilitación del módulo correspondiente. La diferencia entre estos 2 es que en el primero la contraseña del usuario viaja en modo de texto “plano” (así se le suele decir cuando el texto viaja en el paquete TCP/IP tal cual como lo ingresamos en el campo de contraseña), mientras que en el modo digest viaja encriptado.

¿Que es Autenticación Digest?

La autenticación Digest en Apache es una función agregada a través de los módulos que Apache permite, para esto hay que:

  • Habilitar el módulo
  • En la publicación de la carpeta debemos configurar la autenticación Digest
  • Crear el archivo de contraseñas definiendo los usuarios que podrán acceder

Hay 2 grandes diferencias entre el modo Basic y el Digest. La primera y mas importante es que Basic envia la contraseña en texto plano desde el cliente al servidor y en el modo Digest viaja la contraseña encriptada, lo cual es mucho mejor que lo primero, por no decir que lo primero es una locura, y la segunda es que podremos crear grupos de autenticación.

Lo que hace la autenticación Digest es someter a la contraseña a un algoritmo matemático el cual convierte a la contraseña en una cadena de bytes aleatorios que identifican univocamente a la contraseña sin dar indicios de la misma. Este proceso es unidereccional, es decir, que obteniendo el Digest no es posible obtener la contraseña. Este Digest es enviado al servidor en la autenticación y el mismo lo comparará con el que tiene almacenado (el cual seteamos durante la configuración del modo Digest), si estos coinciden el usuario se habrá autenticado.

Configuración de la Autenticación Digest

Como comentamos anteriormente la configuración es muy sensilla, consta de 3 pasos los cuales vamos a demostrarles un ejemplo.

Primero agregamos a nuestro archivo de configuración de Apache la siguiente línea:

http.conf

LoadModule digest_auth_module /usr/lib/apache/modules/mod_auth_digest.so

Luego configuramos la autenticación Digest en alguna carpeta que hayamos publicado y querramos proteger:

http.conf

        AuthName "Digest"
        AuthType Digest
        AuthDigestFile /var/www/users/digest.passwd
        Require valid-user

En donde:

AuthName “Digest” - Indicamos el nombre del grupo (o realm) de autenticación

AuthType Digest - Indica que utilizaremos el modo de autenticación Digest

AuthDigestFile /var/www/users/digest.passwd - Definimos el nombre del archivo que tendra las contraseñas

Require valid-user - Definimos que para esta publicación se necesitará autenticarse sino no se podrá acceder

Y por último creamos el archivo que contendrá los usuarios los grupos y las contraseñas para la autenticación:

Creación del archivo de contraseñas

/var/www/conf# htdigest -c /var/www/users/digest.passwd Digest smart

En donde:

-c - Es para que cree el archivo de contraseñas. Si queremos agregar mas usuarios/grupos no tenemos que poner esta opción.

/var/www/users/digest.passwd - Es el archivo de contraseñas, es el mismo que definimos en httpd.conf

Digest - Es el gropo o realm, nos sirve para facilitar la administración cuando tenemos varias secciones protegidas

smart - Es el nombre del usuario que utilizamos en este caso. Tanto el usuario como el grupo lo elegimos nosotros.

Con esto ya tenemos configurada la autenticación por Digest… nuestras contraseñas viajan a salvo.

Demostración de la diferencia

Ahora vamos a mostrar un breve y simple ejemplo de la GRAN diferencia entre los 2 modos de autenticación. Para esto creamos 2 usuarios diferentes, uno para cada modo de autenticación:

  • Para Basic: dumb
  • Para Digest: smart

Autenticación Basic

Esta es la configuración de la autenticación en la carpeta publicada:

http.conf

    AuthName "Basic"
    AuthType Basic
    AuthUserFile /var/www/users/basic.passwd
    Require valid-user

Y creamos la contraseña del usuario dumb (en el ejemplo usamos “pepe.9090”):

Creación del archivo de contraseñas

/var/www/conf# htpasswd -c /var/www/users/basic.passwd dumb

Luego de esto accedemos al sitio con autenticación, pero antes en nuestro cliente (como podría estarlo en cualquier lugar entre el cliente y el servidor) ejecute un snnifer de paquetes (en este caso WireShark) para capturar toda la información que se transmite entre estos, y como vemos entre los paquetes capturados podemos ver la contraseña… así de fácil es:

center|thumb|600px|Apache Autenticación Basic

Con esto podemos ver que no es recomendable utilizar este modo de autenticación en un medio público y totalmente inseguro como es Internet.

Autenticación Digest

Esta es la configuración de la autenticación en la carpeta publicada:

http.conf

    AuthName "Digest"
    AuthType Digest
    AuthDigestFile /var/www/users/digest.passwd
    Require valid-user

Y creamos la contraseña del usuario smart (en el ejemplo usamos la misma que antes “pepe.9090”):

Creación del archivo de contraseñas

/var/www/conf# htdigest -c /var/www/users/digest.passwd Digest smart

Capturamos los paquetes como lo hicimos anteriormente y nos encontramos con una serie de caracteres muy extraños los cuales conforman el famoso Digest:

center|thumb|600px|Apache Autenticación Digest

Por si no es muy facil de observar pego el texto del paquete en cuestión:

Authorization: Digest username="smart", realm="Digest", nonce="SXKWRw==34f13933927c87ac0a97268f76a2f7a4923ba5c0",
uri="/", algorithm=MD5, response="abf8733a40b3a6573e3c68f2914fc9e5", qop=auth, nc=00000001,
cnonce="bb7d07c91b75866b"rn

Conclusión

Con esto vemos la diferencia entre Basic y Digest. La configuración del segundo es demasiado sencilla como para no hacerlo, la seguridad de nuestro equipo debemos hacerla en todos los aspectos posibles, y la autenticación no escada de esto. Esto es un poroto mas para que nuestro servidor Web OpenBSD sea un poco mas seguro.


Personal Tools