Ir a 2FA (Autenticación de dos factores para ASA SSL VPN)

La necesidad de proporcionar acceso remoto al entorno corporativo es cada vez más frecuente, independientemente de si se trata de usuarios internos o socios que requieren acceso a un servidor en su organización.

Para estos fines, la mayoría de las empresas utiliza la tecnología VPN, que se ha consolidado como una forma confiable y segura de proporcionar acceso a los recursos locales de la organización.

Mi empresa no es una excepción, y al igual que muchas otras, utilizamos esta tecnología. Y, como muchos otros, utilizamos como puerta de enlace de acceso remoto el Cisco ASA 55xx.

Con el aumento en el número de usuarios remotos, surge la necesidad de facilitar el procedimiento de entrega de credenciales. Pero al mismo tiempo, es crucial hacerlo sin comprometer la seguridad.

Para nosotros, encontramos una solución en la implementación de la autenticación de dos factores para la conexión a través de Cisco SSL VPN, utilizando contraseñas de un solo uso. Y esta publicación explicará cómo organizar una solución similar con un mínimo de inversión de tiempo y sin costos de software necesarios (con la condición de que ya se cuente con Cisco ASA en su infraestructura).

El mercado está lleno de soluciones empaquetadas para la generación de contraseñas de un solo uso, ofreciendo una variedad de opciones para su obtención, ya sea enviando la contraseña por SMS o utilizando tokens, tanto físicos como software (por ejemplo, en un teléfono móvil). Sin embargo, el deseo de ahorrar y preservar recursos para su empleador, en medio de la actual crisis, me llevó a encontrar una manera gratuita de implementar un servicio de generación de contraseñas de un solo uso. Este método, a pesar de ser gratuito, no tiene mucho que envidiar a las soluciones comerciales (es importante señalar que este producto también tiene una versión comercial, pero hemos acordado que nuestros costos en dinero serán nulos).

Así que necesitaremos:

— Una imagen de Linux con un conjunto de herramientas integradas: multiOTP, FreeRADIUS y nginx, para acceder al servidor a través de la web (http://download.multiotp.net/ — utilicé una imagen lista para VMware)
— Un servidor Active Directory
— El propio Cisco ASA (para facilitar, uso ASDM)
— Cualquier token software que soporte el mecanismo TOTP (yo, por ejemplo, utilizo Google Authenticator, pero también sirve FreeOTP)

No entraré en los detalles de la implementación de la imagen. Al final, obtendrás Debian Linux con multiOTP y FreeRADIUS ya instalados, configurados para trabajar en conjunto, y una interfaz web para la administración de OTP.

Paso 1. Inicializamos el sistema y lo configuramos para nuestra red.
Por defecto, el sistema viene con las credenciales root root. Supongo que todos se dieron cuenta de que sería bueno cambiar la contraseña del usuario root después del primer inicio de sesión. También es necesario cambiar la configuración de la red (por defecto es ‘192.168.1.44’ con la puerta de enlace ‘192.168.1.1’). Luego se puede reiniciar el sistema.

En Active Directory crearemos un usuario otp, con la contraseña MySuperPassword.

Paso 2. Configuramos la conexión e importamos usuarios de Active Directory.
Para esto, necesitaremos acceso a la consola y, directamente, el archivo multiotp.php, con el cual configuraremos los parámetros de conexión a Active Directory.

Pasamos al directorio /usr/local/bin/multiotp/ y ejecutamos los siguientes comandos uno a uno:

.\/multiotp.php -config default-request-prefix-pin=0

Determina si se requiere un pin adicional (permanente) al ingresar un pin de un solo uso (0 o 1).

.\/multiotp.php -config default-request-ldap-pwd=0

Determina si se requiere ingresar la contraseña de dominio al ingresar un pin de un solo uso (0 o 1).

.\/multiotp.php -config ldap-server-type=1

Se especifica el tipo de servidor LDAP (0 = servidor LDAP normal, en nuestro caso 1 = Active Directory).

.\/multiotp.php -config ldap-cn-identifier="sAMAccountName"

Indica en qué formato presentar el nombre de usuario (este valor solo devolverá el nombre, sin dominio).

.\/multiotp.php -config ldap-group-cn-identifier="sAMAccountName"

Lo mismo, pero para el grupo.

.\/multiotp.php -config ldap-group-attribute="memberOf"

Indica el método para determinar la pertenencia de un usuario a un grupo.

.\/multiotp.php -config ldap-ssl=1

¿Usar conexión segura al servidor LDAP? (¡definitivamente sí!).

.\/multiotp.php -config ldap-port=636

Puerto para la conexión al servidor LDAP.

.\/multiotp.php -config ldap-domain-controllers=adSRV.domain.local

Dirección de tu servidor Active Directory.

.\/multiotp.php -config ldap-base-dn="CN=Users,DC=domain,DC=local"

Especificamos desde dónde comenzar la búsqueda de usuarios en el dominio.

.\/multiotp.php -config ldap-bind-dn="otp@domain.local"

Especificamos el usuario que tiene derechos de búsqueda en Active Directory.

.\/multiotp.php -config ldap-server-password="MySuperPassword"

Especificamos la contraseña del usuario para conectarnos a Active Directory.

.\/multiotp.php -config ldap-network-timeout=10

Establecemos un tiempo de espera para la conexión a Active Directory.

.\/multiotp.php -config ldap-time-limit=30

Establecemos un límite de tiempo para la operación de importación de usuarios.

.\/multiotp.php -config ldap-activated=1

Activamos la configuración de conexión a Active Directory

.\/multiotp.php -debug -display-log -ldap-users-sync

Importamos usuarios desde Active Directory

Paso 3. Generamos el código QR para el token
Aquí todo es muy sencillo. Abrimos la interfaz web del servidor OTP en el navegador, iniciamos sesión (¡no olvidemos cambiar la contraseña predeterminada del administrador!) y hacemos clic en el botón «Print»:

Ir a 2FA (Autenticación de dos factores para ASA SSL VPN)
El resultado de esta acción será una página que contiene dos códigos QR. Ignoramos el primero (sin importar el atractivo mensaje de Google Authenticator / Authenticator / 2 Steps Authenticator), y nuevamente escaneamos el segundo código en el token de software en el teléfono:

Ir a 2FA (Autenticación de dos factores para ASA SSL VPN)
(sí, intencionalmente dañé el código QR para que no fuera legible).

Después de realizar estas acciones, en la aplicación comenzará a generarse un código de seis cifras cada treinta segundos.

Para mayor seguridad, se puede realizar una verificación en la misma interfaz:

Ir a 2FA (Autenticación de dos factores para ASA SSL VPN)
Ingresando el nombre de usuario y el código de un solo uso de la aplicación en el teléfono. ¿Obtuvimos una respuesta positiva? Entonces continuamos.

Paso 4. Ajustamos y probamos el funcionamiento de FreeRADIUS
Como mencioné anteriormente, multiOTP ya está configurado para trabajar con FreeRADIUS, solo queda realizar pruebas y agregar información sobre nuestra puerta de enlace VPN al archivo de configuración de FreeRADIUS.

Regresamos a la consola del servidor, en el directorio /usr/local/bin/multiotp/, ingresamos:

.\/multiotp.php -config debug=1\n.\/multiotp.php -config display-log=1

Activando así una mayor registración de logs.

En el archivo de configuración de los clientes de FreeRADIUS (/etc/freeradius/clinets.conf) comentamos todas las líneas relacionadas con localhost y agregamos dos entradas:

client localhost {\n        ipaddr = 127.0.0.1\n        secret          = testing321\n        require_message_authenticator = no\n}

— para la prueba

client 192.168.1.254\/32 {\n        shortname =     CiscoASA\n        secret =        ConnectToRADIUSSecret\n}

— para nuestra puerta de enlace VPN.

Reiniciamos FreeRADIUS y probamos la autenticación:

radtest username 100110 localhost 1812 testing321

donde username = nombre de usuario, 100110 = contraseña proporcionada por la aplicación en el teléfono, localhost = dirección del servidor RADIUS, 1812 — puerto del servidor RADIUS, testing321 — contraseña del cliente del servidor RADIUS (que especificamos en la configuración).

El resultado de este comando será una salida similar a la siguiente:

Sending Access-Request of id 44 to 127.0.0.1 port 1812\n        User-Name = "username"\n        User-Password = "100110"\n        NAS-IP-Address = 127.0.1.1\n        NAS-Port = 1812\n        Message-Authenticator = 0x00000000000000000000000000000000\nrad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=44, length=20

Ahora necesitamos asegurarnos de que el usuario ha pasado la autenticación con éxito. Para ello, echaremos un vistazo al registro de multiotp:

tail /var/log/multiotp/multiotp.log

Y si la última entrada allí es:

2016-09-01 08:58:17     notice  username  User    OK: El usuario username se ha conectado exitosamente desde 127.0.0.1
2016-09-01 08:58:17     debug           Debug   Debug: 0 OK: Token aceptado desde 127.0.0.1

Entonces todo ha ido bien, y podemos proceder con

Paso 5. Configuración de Cisco ASA
Asumiremos que ya tenemos un grupo configurado y políticas para el acceso a través de SSL VPN, configuradas en conjunto con Active Directory, y necesitamos añadir autenticación de dos factores para este perfil.

1. Añadiendo un nuevo grupo servidores AAA:

Ir a 2FA (Autenticación de dos factores para ASA SSL VPN)
2. Añadiendo nuestro servidor multiOTP al grupo:

Ir a 2FA (Autenticación de dos factores para ASA SSL VPN)
3. Editamos el perfil de conexión, estableciendo como servidor de autenticación principal el grupo de servidores de Active Directory:

Ir a 2FA (Autenticación de dos factores para ASA SSL VPN)
4. En la pestaña Advanced -> Authentification también seleccionamos el grupo de servidores de Active Directory:

Ir a 2FA (Autenticación de dos factores para ASA SSL VPN)
5. En la pestaña Advanced -> Secondary en autenticación elegimos el grupo de servidores creado, donde está registrado el servidor multiOTP. Señalamos que el nombre de usuario de la sesión se hereda del grupo primario de servidores AAA:

Ir a 2FA (Autenticación de dos factores para ASA SSL VPN)
Aplicamos la configuración y

Paso 6, que es el último
Verificamos si nuestra autenticación de dos factores funciona para SSL VPN:

Ir a 2FA (Autenticación de dos factores para ASA SSL VPN)
¡Voilá! Al conectar mediante el cliente Cisco AnyConnect VPN, también se solicitará una segunda contraseña de un solo uso.

Espero que este artículo ayude a alguien, y que le dé ideas sobre cómo se puede utilizar este gratuito servidor OTP para otras tareas. Compartan en los comentarios si lo desean.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster