miércoles, 28 de octubre de 2015

Montar un servidor OTP con Radius

No hace mucho he montado un servidor de autenticación fuerte basado en el algoritmo de One Time Password que usan las librerías de Google Authenticator.

He recopilado la información y los pasos realizados en un tutorial y lo he dejado como sección fija en la página principal ya que me parece que es un servicio bastante interesante y que puede ser muy útil para casi cualquier entorno que requiera una auntenticación segura.

http://www.lasendadeladmin.com/p/lsda-token.html


También he aprovechado que me pidieron una App para Autenticación en iOS personalizada con el logo de la empresa, y con el codigo he hecho mi propia App con el logo del Blog y lo he colgado en iTunes.



Si alguien tiene interes en tener una App personalizada con su propio logo, que no dude en contactar.



Uno de los principales puntos débiles en la seguridad informática es siempre el factor humano. De entre las diferentes maneras que un usuario puede comprometer la seguridad de una empresa, la contraseña es de las primeras que me vienen a la mente. No aplicar una política de contraseña severa (culpa de los Admins), hace que los usuarios puedan usar contraseñas demasiado sencillas y esto es un agujero de seguridad por el que se puede colar cualquiera.

Para solucionar este problema he montado un servidor Linux que usa el método de autenticación basado en OTP de Google Authenticator y utiliza el protocolo Radius para recibir peticiones de autenticación de las aplicaciones externas que requieren autenticación.

Requisitos:

Pasos


1. El primer paso es instalar el modulo PAM google-authenticator y el servicio FreeRadius para realizar la autenticación usando el protocolo RADIUS
sudo apt-get install libpam-google-authenticator build-essential libpam0g-dev freeradius git libqrencode3 ntp

2. El segundo paso es configurar el servicio NTP para que se sincronice con un reloj Online.

3. Después empezamos a configurar el servicio freeradius para autenticar a todos los usuarios. Hay que modificar en el archivo /etc/freedradius/radius.conf el usuario y grupo:

# user/group: The name (or #number) of the user/group to run radiusd as.
#
# If these are commented out, the server will run as the user/group
# that started it. In order to change to a different user/group, you
# MUST be root ( or have root privleges ) to start the server.
#
# We STRONGLY recommend that you run the server with as few permissions
# as possible. That is, if you're not using shadow passwords, the
# user and group items below should be set to radius'.
#
# NOTE that some kernels refuse to setgid(group) when the value of
# (unsigned)group is above 60000; don't use group nobody on these systems!
#
# On systems with shadow passwords, you might have to set 'group = shadow'
# for the server to be able to read the shadow password file. If you can
# authenticate users while in debug mode, but not in daemon mode, it may be
# that the debugging mode server is running as a user that can read the
# shadow info, and the user listed below can not.
#
# The server will also try to use "initgroups" to read /etc/groups.
# It will join all groups where "user" is a member. This can allow
# for some finer-grained access controls.
#
user = freerad
group = freerad
Por:
user = root
group = root

4. Edita también el archivo /etc/freeradius/users . Encuentra las siguientes líneas :

#
# Deny access for a group of users.
#
# Note that there is NO 'Fall-Through' attribute, so the user will not
# be given any additional resources.
Y añade las líneas:
DEFAULT         Group == "radius-disabled", Auth-Type := Reject
                Reply-Message = "Your account has been disabled."
DEFAULT         Auth-Type := PAM
5. Edita el archivo /etc/freeradius/sites-enabled/default, encuentra la línea:
        #  Pluggable Authentication Modules.
#        pam
Y descomenta para que Freeradius use el modulo PAM. 

6. Edita el fichero /etc/freedarius/clients y añade el servidor desde el que van a lanzar las consultas de autenticación: 

       client <IP del Cliente> {
               secret = <clave secreta compartida>
        }
7. Ahora editaremos el modulo de PAM de radius /etc/pam.d/radiusd comentaremos la configuración actual:

# @include common-auth
# @include common-account
# @include common-password
# @include common-session
y añadiremos el modulo de autenticación de Google Authenticator: 
auth requisite pam_google_authenticator.so forward_pass
#auth required pam_unix.so use_first_pass
En mi caso he comentado el usar el pasword de usuario de Unix y solo autentico usando el Token, ya que la autenticación de password la proporciona el AD en mi Appliance. 

Y ya tenemos el servidor de autenticación fuerte basado en OTP configurado. 

Ejemplo:


Para probar que funciona, podemos generar un nuevo usuario, en línia de comando hacemos: 


# useradd fistro -m -p 1234 
# su fistro -c "google-authenticator -t -d -f -Q ANSI -u -w 8"

Y obtendremos la clave secreta y un código QR para capturarla en nuestra App de movil LSDA Token Free:

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/fistro@TOKENSRV%3Fsecret%3DKRD7SXNMRC64ONQ4











Your new secret key is: KRD7SXNMRC64ONQ4
Your verification code is 776735
Your emergency scratch codes are:
  44795543
  93582790
  15091218
  12330765
  17021790
Ahora con diferentes scripts puedes configurar Altas y Bajas de tokens y enviar la información directamente a los usuarios a través de email o como quieras.

Si escaneas el QR en la App veras que genera un codigo de 6 cifras que va cambiando cada 30 segundos:


Si alguien tiene problemas para integrar con su AD o el servicio que use para autenticarse, que no dude en ponerse en contacto. 

Links:

https://github.com/google/google-authenticator

1 comentario: