En poursuivant la série d'articles sur l'organisation VPN d'accès à distance de l'accès, je ne peux m'empêcher de partager une expérience intéressante de déploiement d'une configuration VPN hautement sécurisée. Une tâche peu triviale m'a été confiée par un client (il y a des inventeurs dans les villages russes), mais défi accepté et réalisé de manière créative. Le résultat est un concept intéressant avec les caractéristiques suivantes :
- Plusieurs facteurs de protection contre le spoofing de l'appareil final (fortement lié à l'utilisateur);
- Évaluation de la conformité du PC de l'utilisateur avec le UDID du PC autorisé dans la base d'authentification;
- Avec MFA, utilisant le UDID du PC du certificat pour une authentification secondaire via Cisco DUO (Il est possible de connecter tout système compatible SAML/RADIUS);
- Authentification multifactorielle :
- Certificat de l'utilisateur avec vérification des champs et authentification secondaire par l'un d'entre eux;
- Identifiant (non modifiable, extrait du certificat) et mot de passe;
- Évaluation de l'état de l'hôte se connectant (Posture)
Composants utilisés dans la solution :
- Cisco ASA (Passerelle VPN);
- Cisco ISE (Authentification / Autorisation / Comptabilité, Évaluation de l'État, CA);
- Cisco DUO (Authentification multifactorielle) (Il est possible de connecter tout système compatible SAML/RADIUS);
- Cisco AnyConnect (Agent multi-usage pour stations de travail et systèmes d'exploitation mobiles);
Commençons par les exigences du client :
- L'utilisateur doit pouvoir télécharger le client AnyConnect depuis la passerelle VPN à l'aide de son authentification Identifiant/Mot de passe, tous les modules nécessaires d'AnyConnect doivent être installés automatiquement selon la politique de l'utilisateur;
- L'utilisateur doit avoir la capacité d'émettre un certificat automatiquement (pour l'un des scénarios, le scénario principal étant l'émission manuelle et le chargement sur le PC), j'ai mis en œuvre une émission automatique à des fins de démonstration (il n'est jamais trop tard pour le retirer).
- L'authentification principale doit se dérouler en plusieurs étapes, tout d'abord l'authentification du certificat avec analyse des champs nécessaires et de leurs valeurs, ensuite identifiant/mot de passe, mais cette fois, le nom d'utilisateur indiqué dans le champ du certificat doit être pré-rempli dans la fenêtre de connexion Nom du sujet (CN) sans possibilité de modification.
- Il est nécessaire de s'assurer que l'appareil à partir duquel la connexion est effectuée est l'ordinateur portable d'entreprise délivré à l'utilisateur pour l'accès à distance, et rien d'autre. (Plusieurs options ont été mises en place pour satisfaire cette exigence)
- Une évaluation de l'état de l'appareil connecté (à ce stade, un PC) doit être effectuée en vérifiant l'ensemble des exigences du client (en résumé) :
- Fichiers et leurs propriétés ;
- Clés du registre ;
- Mises à jour du système d'exploitation à partir de la liste fournie (intégration ultérieure de SCCM) ;
- Présence d'un antivirus d'un certain fournisseur et pertinence des signatures ;
- Activité de certains services ;
- Présence de certains programmes installés ;
Pour commencer, je propose de regarder par obligation la démonstration vidéo de la réalisation obtenue sur Youtube (5 minutes).

Je vous propose maintenant de considérer les détails de la mise en œuvre non abordés dans la vidéo.
Préparons le profil AnyConnect :
Un exemple de création de profil (dans le menu ASDM) que j'ai déjà mentionné dans mon article sur la configuration Je veux maintenant souligner les options dont nous aurons besoin :
Dans le profil, nous indiquerons la passerelle VPN et le nom du profil pour la connexion sur le client final :

Nous allons configurer l'automatisation de la délivrance du certificat du côté du profil, en spécifiant, en particulier, les paramètres du certificat et, ce qui est significatif, nous porterons attention au champ Initials (I), où une valeur spécifique est saisie manuellement UDID de la machine de test (Identifiant unique de l'appareil, généré par le client Cisco AnyConnect).

Ici, je souhaite faire une parenthèse lyrique, car cet article décrit un concept, pour des raisons démonstratives, ici le UDID est saisi pour la délivrance du certificat dans le champ Initials du profil AnyConnect. Bien sûr, dans la vraie vie, si vous faites cela, tous les clients recevront un certificat avec le même UDID dans ce champ et rien ne fonctionnera pour eux, car ils ont besoin du UDID de leur propre PC. Malheureusement, AnyConnect ne gère pas encore la substitution dans le profil d'une requête de certificat pour le champ UDID via une variable d'environnement, comme il le fait par exemple avec la variable %USER%.
Il convient de noter que le client (de ce scénario) prévoit initialement de délivrer lui-même des certificats avec le UDID donné manuellement pour ces PC protégés, ce qui ne lui pose pas de problème. Cependant, pour la plupart d'entre nous, l'automatisation est souhaitée (en tout cas, pour moi, c'est certain =).
Voici ce que je peux proposer en matière d'automatisation. Si le certificat est délivré automatiquement, AnyConnect peut dynamiquement substituer le UDID. Cependant, il existe une autre méthode qui demandera un peu de créativité et de compétences – je vais expliquer le concept. Pour commencer, examinons comment le UDID est formé sur différents systèmes d'exploitation par l'agent AnyConnect :
- Windows — hachage SHA-256 de la combinaison de la clé de registre DigitalProductID et Machine SID
- OSX — hachage SHA-256 de PlatformUUID
- Linux — hachage SHA-256 de l'UUID de la partition racine.
- Apple iOS — hachage SHA-256 de PlatformUUID
- Android – Voir le document sur
Nous allons donc créer un script pour nos systèmes d'exploitation Windows d'entreprise, ce script calculera localement le UDID en fonction des paramètres connus et formera une demande de délivrance de certificat en insérant ce UDID dans le champ requis. Au fait, il est possible d'utiliser également le certificat machine délivré par AD (en ajoutant à la procédure une double authentification par certificat. Certificat multiple).
Préparons les configurations du côté de Cisco ASA :
Créons un TrustPoint pour le serveur ISE CA, qui délivrera les certificats aux clients. Je ne vais pas aborder la procédure d'importation de Key-Chain, un exemple est décrit dans mon article sur la configuration. .
crypto ca trustpoint ISE-CA
enrollment terminal
crl configureNous configurons la distribution par Tunnel-Group sur la base des règles correspondant aux champs dans le certificat utilisé pour l'authentification. Un profil AnyConnect, que nous avons créé à l'étape précédente, est également configuré ici. Je souligne que j'utilise la valeur SECUREBANK-RA, pour transférer les utilisateurs avec le certificat délivré dans le groupe de tunnel SECURE-BANK-VPN, notez que ce champ est renseigné dans la demande de certificat du profil AnyConnect.
tunnel-group-map enable rules
!
crypto ca certificate map OU-Map 6
subject-name attr ou eq securebank-ra
!
webvpn
anyconnect profiles SECUREBANK disk0:\/securebank.xml
certificate-group-map OU-Map 6 SECURE-BANK-VPN
!Nous configurons les serveurs d'authentification. Dans mon cas, il s'agit de l'ISE pour la première étape d'authentification et de DUO (Radius Proxy) comme MFA.
! CISCO ISE
aaa-server ISE protocol radius
authorize-only
interim-accounting-update periodic 24
dynamic-authorization
aaa-server ISE (inside) host 192.168.99.134
key *****
!
! PROXY RADIUS DUO
aaa-server DUO protocol radius
aaa-server DUO (inside) host 192.168.99.136
timeout 60
key *****
authentication-port 1812
accounting-port 1813
no mschapv2-capable
!Créons des politiques de groupes et des groupes de tunnel ainsi que leurs composants auxiliaires :
Groupe de tunnel DefaultWEBVPNGroup sera principalement utilisée pour télécharger le client AnyConnect VPN et émettre un certificat utilisateur en utilisant la fonction SCEP-Proxy ASA, pour cela nous avons activé les options correspondantes à la fois dans le groupe de tunnel lui-même et dans la politique de groupe associée. AC-Téléchargement, ainsi que dans le profil AnyConnect téléchargé (champs d'émission de certificat, etc.). De plus, dans cette politique de groupe, nous précisons la nécessité de télécharger. Module de posture ISE.
Groupe de tunnel SECURE-BANK-VPN sera automatiquement utilisé par le client lors de l'authentification avec le certificat émis au cours de l'étape précédente, car conformément à la carte des certificats, la connexion sera effectuée sur ce groupe de tunnel. Je vais parler ici des options intéressantes :
- groupe de serveurs d'authentification secondaire DUO # Задаем вторичную аутентификацию на сервере DUO (Radius Proxy)
- nom d'utilisateur du certificat CN # Используем для первичной аутентификации поле CN сертификата для наследования логина пользователя
- nom d'utilisateur secondaire du certificat I # Для вторичной аутентификации на сервере DUO используем имя пользователя, извлеченное и поля Initials (I) сертификата.
- nom d'utilisateur pré-rempli client # делаем предзаполненным имя пользователя в окне аутентификации без возможности изменения
- nom d'utilisateur secondaire pré-rempli client cacher utiliser mot de passe commun push # Прячем окно ввода логина/пароля для вторичной аутентификации DUO и используем для запроса аутентификации вместо поля пароля метод уведомления (sms/push/phone) – дока
!
access-list posture-redirect étendue permettre tcp any host 72.163.1.80
access-list posture-redirect étendue interdire ip any any
!
access-list VPN-Filter étendue permettre ip any any
!
ip pool local vpn-pool 192.168.100.33-192.168.100.63 masque 255.255.255.224
!
politique de groupe SECURE-BANK-VPN interne
politique de groupe SECURE-BANK-VPN attributs
serveur-dns valeur 192.168.99.155 192.168.99.130
filtre-vpn valeur VPN-Filter
protocole-de-tunnel-vpn ssl-client
politique-de-tunnel-splitté tunnelall
domaine-par-défaut valeur ashes.cc
pools-d'adresse valeur vpn-pool
webvpn
anyconnect ssl dtls activer
anyconnect mtu 1300
anyconnect garder-installateur installé
anyconnect ssl maintenir en vie 20
anyconnect ssl rekey temps aucun
anyconnect ssl rekey méthode ssl
anyconnect dpd-interval client 30
anyconnect dpd-interval passerelle 30
anyconnect ssl compression lzs
anyconnect dtls compression lzs
anyconnect modules valeur iseposture
anyconnect profils valeur SECUREBANK type utilisateur
!
politique de groupe AC-TÉLÉCHARGEMENT interne
politique de groupe AC-TÉLÉCHARGEMENT attributs
serveur-dns valeur 192.168.99.155 192.168.99.130
filtre-vpn valeur VPN-Filter
protocole-de-tunnel-vpn ssl-client
politique-de-tunnel-splitté tunnelall
domaine-par-défaut valeur ashes.cc
pools-d'adresse valeur vpn-pool
scep-forwarding-url valeur http://ise.ashes.cc:9090/auth/caservice/pkiclient.exe
webvpn
anyconnect ssl dtls activer
anyconnect mtu 1300
anyconnect garder-installateur installé
anyconnect ssl maintenir en vie 20
anyconnect ssl rekey temps aucun
anyconnect ssl rekey méthode ssl
anyconnect dpd-interval client 30
anyconnect dpd-interval passerelle 30
anyconnect ssl compression lzs
anyconnect dtls compression lzs
anyconnect modules valeur iseposture
anyconnect profils valeur SECUREBANK type utilisateur
!
groupe-tunnel DefaultWEBVPNGroup attributs-généraux
pool-d'adresse vpn-pool
groupe-serveur-d'authentification ISE
groupe-serveur-de-comptabilité ISE
politique-de-groupe-par-défaut AC-TÉLÉCHARGEMENT
scep-enrollment activer
groupe-tunnel DefaultWEBVPNGroup attributs-webvpn
authentification aaa certificat
!
groupe-tunnel SECURE-BANK-VPN type accès à distance
groupe-tunnel SECURE-BANK-VPN attributs-généraux
pool-d'adresse vpn-pool
groupe-serveur-d'authentification ISE
groupe-serveur-d'authentification-secondaire DUO
groupe-serveur-de-comptabilité ISE
politique-de-groupe-par-défaut SECURE-BANK-VPN
nom d'utilisateur du certificat CN
nom d'utilisateur secondaire du certificat I
groupe-tunnel SECURE-BANK-VPN attributs-webvpn
authentification aaa certificat
nom d'utilisateur pré-rempli client
nom d'utilisateur secondaire pré-rempli client cacher utiliser mot de passe commun push
alias-groupe SECURE-BANK-VPN activer
groupe-dns ASHES-DNS
!Ensuite, passons à l'ISE :
Nous configurons un utilisateur local (il est possible d'utiliser également AD/LDAP/ODBC, etc.), pour simplifier, j'ai créé un utilisateur local directement dans l'ISE et assignez-le au champ description UDID de l'ordinateur à partir duquel il est autorisé à se connecter via VPN. En cas d'utilisation de l'authentification locale sur l'ISE, je serai limité à un seul appareil, puisque les champs sont peu nombreux, mais avec des bases d'authentification tiers, je n'aurai pas de telles restrictions.

Examinons la politique d'autorisation, qui est divisée en quatre étapes de connexion :
- Étape 1 — Politique pour le téléchargement de l'agent AnyConnect et la délivrance du certificat
- Étape 2 — Politique d'authentification primaire Login (du certificat)/Mot de passe + Certificat avec validation UDID
- Étape 3 — Authentification secondaire via Cisco DUO (MFA) avec UDID comme nom d'utilisateur + Évaluation de l'état
- Étape 4 — Autorisation finale dans l'état :
- Conforme;
- validation UDID (du certificat + association au login),
- Cisco DUO MFA;
- Authentification par login;
- Authentification par certificat;

Examinons une condition intéressante UUID_VALIDATED, c'est justement ce qui vérifie que l'utilisateur qui s'authentifie provient réellement d'un ordinateur avec un UDID autorisé associé au champ Description du compte, les conditions sont les suivantes :

Le profil d'autorisation utilisé aux étapes 1, 2 et 3 est le suivant :

Vérifions comment nous recevons le UDID du client AnyConnect en consultant les détails de la session client dans l'ISE. Dans les détails, nous verrons que AnyConnect à travers le mécanisme ACIDEX envoie non seulement des données sur la plateforme, mais aussi le UDID de l'appareil comme Cisco-AV-PAIR:

Notons le certificat délivré à l'utilisateur et le champ Initials (I), qui est utilisé pour le prendre comme login pour l'authentification secondaire MFA sur Cisco DUO :

Du côté du proxy Radius DUO, nous voyons clairement comment la demande d'authentification est faite, en utilisant l'UDID comme nom d'utilisateur :

Du côté du portail DUO, nous avons un événement d'authentification réussi :

Et dans les propriétés de l'utilisateur, j'ai défini ALIAS, que j'ai utilisé pour le login, qui est aussi le UDID autorisé pour le login de l'ordinateur :

En conséquence, nous avons obtenu :
- Une authentification multi-facteurs pour l'utilisateur et l'appareil ;
- Protection contre le remplacement de l'appareil de l'utilisateur ;
- Évaluation de l'état de l'appareil ;
- Potentiel pour un contrôle renforcé avec un certificat machine de domaine, etc.
- Protection complète de l'espace de travail à distance avec des modules de sécurité déployables automatiquement ;
Liens vers les articles de la série Cisco VPN :
Source : habr.com
