Mise en œuvre du concept d'accès à distance hautement sécurisé
Poursuite de la série d'articles sur le thème de l'organisation VPN d'accès à distance accès Je ne peux m'empêcher de partager mon intéressante expérience de déploiement configuration VPN hautement sécurisée. Une tâche non triviale a été présentée par un client (il y a des inventeurs dans les villages russes), mais le défi a été accepté et mis en œuvre de manière créative. Le résultat est un concept intéressant avec les caractéristiques suivantes :
Plusieurs facteurs de protection contre la substitution du terminal (avec engagement strict pour l'utilisateur) ;
Évaluer la conformité du PC de l'utilisateur avec l'UDID attribué au PC autorisé dans la base de données d'authentification ;
Avec MFA utilisant l'UDID du PC du certificat pour l'authentification secondaire via Cisco DUO (Vous pouvez en joindre n'importe quel compatible SAML/Radius);
Authentification multifacteur :
Certificat utilisateur avec vérification du champ et authentification secondaire contre l'un d'eux ;
Login (inchangeable, extrait du certificat) et mot de passe ;
Estimation de l'état de l'hôte connecté (Posture)
Composants de la solution utilisés :
Cisco ASA (passerelle VPN) ;
Cisco ISE (Authentification/Autorisation/Comptabilité, Évaluation d'état, CA) ;
Cisco DUO (authentification multifacteur) (Vous pouvez en joindre n'importe quel compatible SAML/Radius);
Cisco AnyConnect (Agent polyvalent pour postes de travail et OS mobiles) ;
Commençons par les exigences du client :
L'utilisateur doit, grâce à son authentification Login/Mot de passe, pouvoir télécharger le client AnyConnect depuis la passerelle VPN ; tous les modules AnyConnect nécessaires doivent être installés automatiquement conformément à la politique de l'utilisateur ;
L'utilisateur devrait pouvoir émettre automatiquement un certificat (pour l'un des scénarios, le scénario principal est l'émission manuelle et le téléchargement sur un PC), mais j'ai implémenté l'émission automatique à des fins de démonstration (il n'est jamais trop tard pour le supprimer).
L'authentification de base doit s'effectuer en plusieurs étapes, il y a d'abord l'authentification par certificat avec analyse des champs nécessaires et leurs valeurs, puis login/mot de passe, seulement cette fois le nom d'utilisateur spécifié dans le champ du certificat doit être inséré dans la fenêtre de connexion Nom du sujet (CN) sans possibilité de modification.
Vous devez vous assurer que l'appareil à partir duquel vous vous connectez est l'ordinateur portable d'entreprise fourni à l'utilisateur pour un accès à distance, et non autre chose. (Plusieurs options ont été proposées pour satisfaire à cette exigence)
L'état du dispositif de connexion (à ce stade le PC) doit être évalué en vérifiant tout un tableau complet des exigences du client (résumant) :
Fichiers et leurs propriétés ;
Entrées de registre ;
Correctifs de système d'exploitation de la liste fournie (intégration SCCM ultérieure) ;
Disponibilité d'un antivirus d'un fabricant spécifique et pertinence des signatures ;
Activité de certains services ;
Disponibilité de certains programmes installés ;
Pour commencer, je vous suggère de regarder définitivement la démonstration vidéo de l'implémentation résultante sur Youtube (5 minutes).
Je propose maintenant d'examiner les détails de mise en œuvre non abordés dans le clip vidéo.
Préparons le profil AnyConnect :
J'ai déjà donné un exemple de création de profil (en termes d'élément de menu dans ASDM) dans mon article sur la configuration Cluster d'équilibrage de charge VPN. Je voudrais maintenant noter séparément les options dont nous aurons besoin :
Dans le profil, nous indiquerons la passerelle VPN et le nom du profil de connexion au client final :
Configurons l'émission automatique d'un certificat côté profil, en indiquant notamment les paramètres du certificat et, de manière caractéristique, faisons attention au champ Initiales (I), où une valeur spécifique est saisie manuellement C'EST TOI QUI L'AS FAIT machine de test (identifiant de périphérique unique généré par le client Cisco AnyConnect).
Ici, je souhaite faire une parenthèse lyrique, puisque cet article décrit le concept : à des fins de démonstration, l'UDID pour la délivrance d'un certificat est saisi dans le champ Initiales du profil AnyConnect. Bien sûr, dans la vraie vie, si vous faites cela, alors tous les clients recevront un certificat avec le même UDID dans ce domaine et rien ne fonctionnera pour eux, puisqu'ils ont besoin de l'UDID de leur PC spécifique. AnyConnect, malheureusement, n'implémente pas encore la substitution du champ UDID dans le profil de demande de certificat via une variable d'environnement, comme il le fait par exemple avec une variable %UTILISATEUR%.
Il convient de noter que le client (de ce scénario) envisage initialement de délivrer indépendamment des certificats avec un UDID donné en mode manuel à de tels PC protégés, ce qui ne lui pose pas de problème. Cependant, pour la plupart d’entre nous, nous voulons de l’automatisation (enfin, pour moi c’est vrai =)).
Et c’est ce que je peux proposer en termes d’automatisation. Si AnyConnect n'est pas encore en mesure d'émettre automatiquement un certificat en remplaçant dynamiquement l'UDID, il existe un autre moyen qui nécessitera un peu de réflexion créative et des mains habiles - je vais vous expliquer le concept. Tout d'abord, regardons comment l'UDID est généré 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 — Plateforme de hachage SHA-256UUID
Linux/Unix — Hachage SHA-256 de l'UUID de la partition racine.
En conséquence, nous créons un script pour notre système d'exploitation Windows d'entreprise, avec ce script, nous calculons localement l'UDID à l'aide d'entrées connues et formons une demande de délivrance d'un certificat en entrant cet UDID dans le champ requis, en passant, vous pouvez également utiliser une machine certificat délivré par AD (en ajoutant une double authentification par certificat au schéma Certificat multiple).
Préparons les paramètres côté Cisco ASA :
Créons un TrustPoint pour le serveur ISE CA, ce sera celui qui délivrera les certificats aux clients. Je ne considérerai pas la procédure d'importation de Key-Chain ; un exemple est décrit dans mon article sur la configuration Cluster d'équilibrage de charge VPN.
crypto ca trustpoint ISE-CA
enrollment terminal
crl configure
Nous configurons la distribution par Tunnel-Group en fonction de règles conformément aux champs du certificat utilisé pour l'authentification. Le profil AnyConnect que nous avons créé à l'étape précédente est également configuré ici. Veuillez noter que j'utilise la valeur SECUREBANK-RA, pour transférer les utilisateurs disposant d'un certificat délivré vers un groupe de tunnels BANQUE-SÉCURISÉE-VPN, veuillez noter que j'ai ce champ dans la colonne de demande de certificat de profil AnyConnect.
Mise en place de serveurs d'authentification. Dans mon cas, il s'agit d'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 *****
!
! DUO RADIUS PROXY
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
!
Nous créons des politiques de groupe et des groupes de tunnels et leurs composants auxiliaires :
Groupe de tunnels Groupe WEBVPN par défaut sera utilisé principalement pour télécharger le client VPN AnyConnect et émettre un certificat utilisateur en utilisant la fonction SCEP-Proxy de l'ASA ; pour cela, nous avons les options correspondantes activées à la fois sur le groupe de tunnels lui-même et sur la politique de groupe associée AC-Téléchargement, et sur le profil AnyConnect chargé (champs d'émission d'un certificat, etc.). Également dans cette politique de groupe, nous indiquons la nécessité de télécharger Module de posture ISE.
Groupe de tunnels BANQUE-SÉCURISÉE-VPN sera automatiquement utilisé par le client lors de l'authentification avec le certificat émis à l'étape précédente, car, conformément à la carte du certificat, la connexion tombera spécifiquement sur ce groupe de tunnels. Je vais vous parler d'options intéressantes ici :
groupe de serveurs d'authentification secondaire DUO # Définir l'authentification secondaire sur le serveur DUO (Radius Proxy)
nom d'utilisateur à partir du certificatCN # Pour l'authentification primaire, nous utilisons le champ CN du certificat pour hériter du login de l'utilisateur
nom d'utilisateur secondaire à partir du certificat I # Pour l'authentification secondaire sur le serveur DUO, nous utilisons le nom d'utilisateur extrait et les champs Initiales (I) du certificat.
client de pré-remplissage du nom d'utilisateur # rendre le nom d'utilisateur pré-rempli dans la fenêtre d'authentification sans possibilité de le modifier
client secondaire-pré-remplissage-nom d'utilisateur masquer utilisation-commun-mot de passe push # Nous masquons la fenêtre de saisie du login/mot de passe pour l'authentification secondaire DUO et utilisons la méthode de notification (sms/push/téléphone) - dock pour demander l'authentification au lieu du champ du mot de passe ici
!
access-list posture-redirect extended permit tcp any host 72.163.1.80
access-list posture-redirect extended deny ip any any
!
access-list VPN-Filter extended permit ip any any
!
ip local pool vpn-pool 192.168.100.33-192.168.100.63 mask 255.255.255.224
!
group-policy SECURE-BANK-VPN internal
group-policy SECURE-BANK-VPN attributes
dns-server value 192.168.99.155 192.168.99.130
vpn-filter value VPN-Filter
vpn-tunnel-protocol ssl-client
split-tunnel-policy tunnelall
default-domain value ashes.cc
address-pools value vpn-pool
webvpn
anyconnect ssl dtls enable
anyconnect mtu 1300
anyconnect keep-installer installed
anyconnect ssl keepalive 20
anyconnect ssl rekey time none
anyconnect ssl rekey method ssl
anyconnect dpd-interval client 30
anyconnect dpd-interval gateway 30
anyconnect ssl compression lzs
anyconnect dtls compression lzs
anyconnect modules value iseposture
anyconnect profiles value SECUREBANK type user
!
group-policy AC-DOWNLOAD internal
group-policy AC-DOWNLOAD attributes
dns-server value 192.168.99.155 192.168.99.130
vpn-filter value VPN-Filter
vpn-tunnel-protocol ssl-client
split-tunnel-policy tunnelall
default-domain value ashes.cc
address-pools value vpn-pool
scep-forwarding-url value http://ise.ashes.cc:9090/auth/caservice/pkiclient.exe
webvpn
anyconnect ssl dtls enable
anyconnect mtu 1300
anyconnect keep-installer installed
anyconnect ssl keepalive 20
anyconnect ssl rekey time none
anyconnect ssl rekey method ssl
anyconnect dpd-interval client 30
anyconnect dpd-interval gateway 30
anyconnect ssl compression lzs
anyconnect dtls compression lzs
anyconnect modules value iseposture
anyconnect profiles value SECUREBANK type user
!
tunnel-group DefaultWEBVPNGroup general-attributes
address-pool vpn-pool
authentication-server-group ISE
accounting-server-group ISE
default-group-policy AC-DOWNLOAD
scep-enrollment enable
tunnel-group DefaultWEBVPNGroup webvpn-attributes
authentication aaa certificate
!
tunnel-group SECURE-BANK-VPN type remote-access
tunnel-group SECURE-BANK-VPN general-attributes
address-pool vpn-pool
authentication-server-group ISE
secondary-authentication-server-group DUO
accounting-server-group ISE
default-group-policy SECURE-BANK-VPN
username-from-certificate CN
secondary-username-from-certificate I
tunnel-group SECURE-BANK-VPN webvpn-attributes
authentication aaa certificate
pre-fill-username client
secondary-pre-fill-username client hide use-common-password push
group-alias SECURE-BANK-VPN enable
dns-group ASHES-DNS
!
Passons ensuite à ISE :
Nous configurons un utilisateur local (vous pouvez utiliser AD/LDAP/ODBC, etc.), pour plus de simplicité, j'ai créé un utilisateur local dans ISE lui-même et je l'ai attribué sur le terrain la descriptionIDID PC à partir duquel il est autorisé à se connecter via VPN. Si j'utilise l'authentification locale sur ISE, je serai limité à un seul appareil, car il n'y a pas beaucoup de champs, mais dans les bases de données d'authentification tierces, je n'aurai pas de telles restrictions.
Regardons la politique d'autorisation, elle est divisée en quatre étapes de connexion :
Étape 1 — Politique de téléchargement de l'agent AnyConnect et d'émission d'un certificat
Étape 2 — Politique d'authentification primaire Connexion (à partir du certificat)/Mot de passe + Certificat avec validation UDID
Étape 3 — Authentification secondaire via Cisco DUO (MFA) utilisant l'UDID comme nom d'utilisateur + évaluation de l'état
Étape 4 — L'autorisation définitive est en l'état :
Conforme ;
Validation UDID (à partir du certificat + liaison de connexion),
Cisco DUO MFA ;
Authentification par login ;
Authentification du certificat ;
Regardons une condition intéressante UUID_VALIDATED, il semble simplement que l'utilisateur authentifiant provienne en réalité d'un PC avec un UDID autorisé associé dans le champ Description compte, les conditions ressemblent à ceci :
Le profil d'autorisation utilisé aux étapes 1,2,3 est le suivant :
Vous pouvez vérifier exactement comment l'UDID du client AnyConnect nous parvient en consultant les détails de la session client dans ISE. En détail nous verrons qu'AnyConnect à travers le mécanisme ACIDEX envoie non seulement des informations sur la plateforme, mais également l'UDID de l'appareil comme Cisco-AV-PAIR:
Faisons attention au certificat délivré à l'utilisateur et au terrain Initiales (I), qui est utilisé comme identifiant pour l'authentification MFA secondaire sur Cisco DUO :
Du côté DUO Radius Proxy dans le journal, nous pouvons voir clairement comment la demande d'authentification est effectuée, elle utilise l'UDID comme nom d'utilisateur :
Depuis le portail DUO, nous voyons un événement d'authentification réussi :
Et dans les propriétés utilisateur, je l'ai défini ALIAS, que j'ai utilisé pour la connexion, à son tour, il s'agit de l'UDID du PC autorisé pour la connexion :
En conséquence, nous avons obtenu :
Authentification multifacteur des utilisateurs et des appareils ;
Protection contre l'usurpation d'identité de l'appareil de l'utilisateur ;
Évaluer l'état de l'appareil ;
Potentiel de contrôle accru avec certificat de machine de domaine, etc. ;
Protection complète du lieu de travail à distance avec des modules de sécurité déployés automatiquement ;