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=0Dé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=0Dé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=1Indique 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=1Indique si une connexion sécurisée au serveur LDAP doit être utilisée (bien sûr, oui !).
./multiotp.php -config ldap-port=636Port pour se connecter au serveur LDAP.
./multiotp.php -config ldap-domain-controllers=adSRV.domain.localAdresse 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=10Nous définissons le timeout pour se connecter à Active Directory.
./multiotp.php -config ldap-time-limit=30Nous définissons une limite de temps pour l'opération d'importation des utilisateurs.
./multiotp.php -config ldap-activated=1Activation de la configuration de connexion à Active Directory
.\/multiotp.php -debug -display-log -ldap-users-syncImportation 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 » :

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 :

(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 :

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=1En 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 testing321où 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=20Nous 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.logEt 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.1Alors 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 :

2. Ajoutons notre serveur multiOTP au groupe :

3. Modifions le profil de connexion, en définissant comme serveur principal d'authentification le groupe de serveurs Active Directory :

4. Dans l'onglet Avancé -> Authentification choisissons également le groupe de serveurs Active Directory :

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 :

Appliquons les paramètres et
Étape 6, qui est la dernière
Vérifions si notre authentification à deux facteurs fonctionne pour SLL 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
