Accéder à 2FA (Authentification à deux facteurs pour ASA SSL VPN)

Le besoin de fournir un accès à distance à l'environnement d'entreprise se fait de plus en plus pressant, que ce soit pour ses propres utilisateurs ou pour des partenaires ayant besoin d'accéder à un serveur de votre organisation.

Pour ces besoins, la plupart des entreprises utilisent la technologie VPN, qui a fait ses preuves en tant que moyen sécurisé de fournir un accès aux ressources locales de l'organisation.

Mon entreprise ne fait pas exception, et nous utilisons également cette technologie. Comme beaucoup d'autres, nous utilisons un Cisco ASA 55xx comme passerelle d'accès à distance.

Avec l'augmentation du nombre d'utilisateurs à distance, la nécessité de simplifier la procédure de délivrance des identifiants apparaît. Mais il est tout aussi nécessaire de le faire sans compromettre la sécurité.

Nous avons trouvé une solution en appliquant une authentification à deux facteurs pour la connexion via Cisco SSL, VPN, en utilisant des mots de passe à usage unique. Cet article expliquera comment organiser une telle solution avec un minimum de temps et sans coûts supplémentaires pour le logiciel (à condition que Cisco ASA soit déjà présent dans votre infrastructure).

Le marché regorge de solutions prêtes à l'emploi pour générer des mots de passe à usage unique, offrant de nombreuses options pour leur obtention, que ce soit par l'envoi du mot de passe par SMS ou l'utilisation de jetons, qu'ils soient matériels ou logiciels (par exemple, sur un téléphone mobile). Cependant, le désir d'économiser et d'épargner de l'argent pour son employeur, dans le contexte de la crise actuelle, m'a poussé à trouver un moyen gratuit de mettre en œuvre un service de génération de mots de passe à usage unique. Ce dernier, bien qu'étant gratuit, n'est guère inférieur aux solutions commerciales (il convient de préciser que ce produit a aussi une version commerciale, mais nous avons convenu que nos frais seraient nuls).

Voici ce dont nous aurons besoin :

— Une image Linux avec un ensemble d'outils intégrés — multiOTP, FreeRADIUS et nginx, pour accéder au serveur via le web (http://download.multiotp.net/ — j'ai utilisé une image prête pour VMware)
— Un serveur Active Directory
— Le Cisco ASA lui-même (pour plus de commodité, j'utilise ASDM)
— Tout jeton logiciel supportant le mécanisme TOTP (par exemple, j'utilise Google Authenticator, mais FreeOTP fera aussi l'affaire)

Je ne vais pas entrer dans les détails du déploiement de l'image. À la fin, vous obtiendrez Debian Linux avec multiOTP et FreeRADIUS déjà installés, configurés pour fonctionner ensemble, et une interface web pour l'administration OTP.

Étape 1. Nous initialisons le système et le configurons pour notre réseau.
Par défaut, le système est fourni avec les identifiants root root. Je pense que tout le monde devine qu'il serait judicieux de changer le mot de passe de l'utilisateur root après la première connexion. Il est également nécessaire de modifier les paramètres réseau (par défaut, c'est ‘192.168.1.44’ avec passerelle ‘192.168.1.1’). Ensuite, vous pouvez redémarrer le système.

Nous allons créer un utilisateur dans Active Directory. otp, avec le mot de passe MySuperPassword.

Étape 2. Nous configurons la connexion et importons les utilisateurs d'Active Directory.
Pour cela, nous aurons besoin d'un accès à la console, et plus précisément du fichier multiotp.php, avec lequel nous allons configurer les paramètres de connexion à Active Directory.

Allons dans le répertoire /usr/local/bin/multiotp/ et nous exécutons successivement les commandes suivantes :

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

Détermine si un PIN supplémentaire (permanent) est nécessaire lors de la saisie d'un PIN à usage unique (0 ou 1).

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

Détermine si le mot de passe de domaine doit être saisi lors de la saisie d'un PIN à usage unique (0 ou 1).

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

Indique le type de serveur LDAP (0 = serveur LDAP standard, dans notre cas 1 = Active Directory).

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

Indique dans quel format le nom de l'utilisateur doit être présenté (cette valeur ne renverra que le nom, sans le domaine).

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

C'est la même chose, mais pour le groupe.

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

Indique la méthode de détermination de l'appartenance d'un utilisateur à un groupe.

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

Indique si une connexion sécurisée au serveur LDAP doit être utilisée (bien sûr, oui !).

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

Port pour se connecter au serveur LDAP.

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

Adresse de votre serveur Active Directory.

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

Indique où commencer la recherche d'utilisateurs dans le domaine.

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

Indique l'utilisateur qui a les droits de recherche dans Active Directory.

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

Indique le mot de passe de l'utilisateur pour se connecter à Active Directory.

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

Nous définissons le timeout pour se connecter à Active Directory.

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

Nous définissons une limite de temps pour l'opération d'importation des utilisateurs.

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

Activation de la configuration de connexion à Active Directory

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

Importation des utilisateurs depuis Active Directory

Étape 3. Génération du code QR pour le token
C'est assez simple. Ouvrez l'interface web du serveur OTP dans votre navigateur, connectez-vous (n'oubliez pas de changer le mot de passe administrateur par défaut!), et cliquez sur le bouton « Imprimer » :

Accéder à 2FA (Authentification à deux facteurs pour ASA SSL VPN)
Le résultat de cette action sera une page contenant deux codes QR. Nous ignorons le premier (malgré l'invitation séduisante de Google Authenticator / Authenticator / 2 Steps Authenticator) et nous scannons le deuxième code dans le logiciel de token sur le téléphone :

Accéder à 2FA (Authentification à deux facteurs pour ASA SSL VPN)
(oui, j'ai délibérément altéré le code QR pour le rendre illisible).

Après avoir effectué ces actions, votre application générera un mot de passe à six chiffres toutes les trente secondes.

Pour plus de certitude, vous pouvez effectuer un test sur la même interface :

Accéder à 2FA (Authentification à deux facteurs pour ASA SSL VPN)
Saisissez le nom d'utilisateur et le mot de passe à usage unique de l'application sur votre téléphone. Avez-vous reçu une réponse positive? Alors continuons.

Étape 4. Finalisation et test de FreeRADIUS
Comme je l'ai mentionné précédemment, multiOTP est déjà configuré pour fonctionner avec FreeRADIUS, il ne reste plus qu'à effectuer des tests et à ajouter les informations relatives à notre passerelle VPN dans le fichier de configuration de FreeRADIUS.

Revenons à la console du serveur, dans le répertoire /usr/local/bin/multiotp/, saisissez :

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

En activant ainsi un logging plus détaillé.

Dans le fichier de configuration des clients FreeRADIUS (/etc/freeradius/clinets.conf) commentons toutes les lignes concernant localhost et ajoutons deux enregistrements :

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

— pour le test

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

— pour notre passerelle VPN.

Redémarrez FreeRADIUS et essayez de vous authentifier :

radtest username 100110 localhost 1812 testing321

où username = nom d'utilisateur, 100110 = mot de passe délivré par l'application sur le téléphone, localhost = adresse du serveur RADIUS, 1812 — port du serveur RADIUS, testing321 — mot de passe du client du serveur RADIUS (celui que nous avons indiqué dans le config).

Le résultat de cette commande sera un message de sortie, comportant à peu près le contenu suivant :

Envoi de la demande d'accès avec l'identifiant 44 à 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: paquet Access-Accept de l'hôte 127.0.0.1 port 1812, id=44, longueur=20

Nous devons maintenant nous assurer que l'utilisateur a réussi son authentification. Pour cela, nous allons consulter le journal de multiotp :

tail /var/log/multiotp/multiotp.log

Et si la dernière entrée est :

2016-09-01 08:58:17     notice  nom_utilisateur  Utilisateur    OK: L'utilisateur nom_utilisateur s'est connecté avec succès depuis 127.0.0.1
2016-09-01 08:58:17     debug           Débogage   Débogage: 0 OK: Jeton accepté depuis 127.0.0.1

Alors tout s'est bien passé, et nous pouvons exécuter

Étape 5. Configuration de Cisco ASA
Partons du principe que nous avons déjà un groupe et des politiques configurés pour l'accès SLL VPN, en configuration avec Active Directory, et que nous devons ajouter une authentification à deux facteurs pour ce profil.

1. Ajout d'un nouveau groupe serveurs AAA :

Accéder à 2FA (Authentification à deux facteurs pour ASA SSL VPN)
2. Ajoutons notre serveur multiOTP au groupe :

Accéder à 2FA (Authentification à deux facteurs pour ASA SSL VPN)
3. Modifions le profil de connexion, en définissant comme serveur principal d'authentification le groupe de serveurs Active Directory :

Accéder à 2FA (Authentification à deux facteurs pour ASA SSL VPN)
4. Dans l'onglet Avancé -> Authentification choisissons également le groupe de serveurs Active Directory :

Accéder à 2FA (Authentification à deux facteurs pour ASA SSL VPN)
5. Dans l'onglet Avancé -> Secondaire pour l'authentification, choisissons le groupe de serveurs créé, où se trouve le serveur multiOTP. Nous notons que le nom d'utilisateur de session est hérité du groupe primaire de serveurs AAA :

Accéder à 2FA (Authentification à deux facteurs pour ASA SSL VPN)
Appliquons les paramètres et

Étape 6, qui est la dernière
Vérifions si notre authentification à deux facteurs fonctionne pour SLL VPN :

Accéder à 2FA (Authentification à deux facteurs pour ASA SSL VPN)
Voilà ! Lors de la connexion via Cisco AnyConnect VPN Client, un deuxième mot de passe à usage unique sera également demandé.

J'espère que cet article aidera quelqu'un et qu'il suscitera des réflexions sur la façon d'utiliser ce gratuit serveur OTP pour d'autres tâches. Partagez dans les commentaires si vous le souhaitez.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster