Continuando la serie di articoli sul tema dell'organizzazione Remote-Access VPN accesso non posso non condividere un'esperienza interessante di implementazione di una configurazione VPN ad alta sicurezza. Un cliente ha lanciato una sfida non indifferente (ci sono dei creativi nei villaggi russi), ma abbiamo accettato la sfida e l'abbiamo realizzata in modo creativo. Ne è risultato un concetto interessante con le seguenti caratteristiche:
- Diversi fattori di protezione contro la sostituzione del dispositivo finale (con una ferrea associazione all'utente);
- Valutazione della conformità del PC dell'utente all'UDID designato del PC autorizzato nel database di autenticazione;
- Con MFA, utilizzando l'UDID del PC dal certificato per la secondaria autenticazione tramite Cisco DUO (È possibile collegare qualsiasi soluzione compatibile con SAML/RADIUS);
- Autenticazione multifattoriale:
- Certificato dell'utente con verifica dei campi e secondaria autenticazione su uno di essi;
- Login (invariabile, preso dal certificato) e password;
- Valutazione dello stato dell'host in connessione (Posture)
Componenti utilizzati nella soluzione:
- Cisco ASA (Gateway VPN);
- Cisco ISE (Autenticazione / Autorizzazione / Contabilità, Valutazione Stato, CA);
- Cisco DUO (Autenticazione Multifattoriale) (È possibile collegare qualsiasi soluzione compatibile con SAML/RADIUS);
- Cisco AnyConnect (Agente multifunzionale per workstation e sistemi operativi mobili);
Iniziamo con i requisiti del cliente:
- L'utente deve poter scaricare il client AnyConnect dal gateway VPN utilizzando la propria autenticazione Login/Password; tutti i moduli necessari di AnyConnect devono essere installati automaticamente in base alla politica dell'utente;
- L'utente deve avere la possibilità di ottenere automaticamente un certificato (per uno degli scenari, il principale scenario è comunque l'emissione e il caricamento manuale sul PC), ho implementato l'emissione automatica per dimostrazione (eliminarla non è mai troppo tardi).
- L'autenticazione principale deve avvenire in più fasi; prima si effettua l'autenticazione del certificato analizzando i campi necessari e i loro valori, dopodiché login/password, ma stavolta nella finestra di login deve essere inserito il nome utente indicato nel campo del certificato. Nome soggetto (CN) senza possibilità di modifica.
- È necessario assicurarsi che il dispositivo da cui si accede sia un laptop aziendale fornito per l'accesso remoto all'utente e non qualcos'altro. (Sono state realizzate diverse opzioni per soddisfare questo requisito.)
- È necessario valutare lo stato del dispositivo che si sta connettendo (in questa fase il PC) verificando un'ampia tabella dei requisiti del cliente (in sintesi):
- File e loro proprietà;
- Chiavi di registro;
- Patch del sistema operativo dall'elenco fornito (in seguito integrazione SCCM);
- Presenza di antivirus di un determinato fornitore e aggiornamento delle firme;
- Attività di servizi specifici;
- Presenza di programmi installati specifici;
Iniziamo obbligatoriamente con una dimostrazione video della realizzazione su Youtube (5 minuti).

Ora propongo di esaminare i dettagli di implementazione non presenti nel video.
Prepariamo il profilo AnyConnect:
Un esempio di creazione del profilo (in termini di voce di menu in ASDM) l'ho già riportato nel mio articolo sulla configurazione di Attualmente voglio sottolineare le opzioni di cui abbiamo bisogno:
Nel profilo specificeremo il gateway VPN e il nome del profilo per la connessione sul client finale:

Procederemo con la configurazione della generazione automatica del certificato da parte del profilo, specificando, in particolare, i parametri del certificato e, cosa importante, prestando attenzione al campo Initials (I), dove è stato inserito manualmente un valore specifico UDID del dispositivo di prova (Identificatore Unico del Dispositivo generato dal client Cisco AnyConnect).

Qui voglio fare una breve digressione, poiché questo articolo descrive il concetto, per scopi dimostrativi qui è stato inserito un UDID per l'emissione del certificato nel campo Iniziali del profilo AnyConnect. Certamente, nella vita reale, se lo fai, tutti i clienti riceveranno un certificato con lo stesso UDID in questo campo e non funzionerà per loro, poiché hanno bisogno dell'UDID specifico del proprio PC. AnyConnect, purtroppo, non implementa ancora la sostituzione nel profilo della richiesta del certificato nel campo UDID tramite variabile d'ambiente, come ad esempio fa con la variabile %USER%.
È importante notare che il cliente (di questo scenario) prevede inizialmente di emettere certificati con un UDID specificato manualmente per quei PC protetti, il che non rappresenta un problema per lui. Tuttavia, per la maggior parte di noi c'è il desiderio di automazione (per me almeno =) ).
Ecco cosa posso proporre in termini di automazione. Se l'emissione del certificato tramite AnyConnect, sostituendo dinamicamente l'UDID, non è ancora possibile, esiste un altro modo che richiede un po' di creatività e abilità manuali – vi spiegherò il concetto. Iniziamo a esaminare come viene generato l'UDID su diversi sistemi operativi dall'agente AnyConnect:
- Windows — hash SHA-256 della combinazione della chiave di registro DigitalProductID e Machine SID
- OSX — hash SHA-256 del PlatformUUID
- Linux — hash SHA-256 dell'UUID della partizione root.
- Apple iOS — hash SHA-256 del PlatformUUID
- Android – Vedi documento su
Pertanto, creiamo uno script per i nostri sistemi operativi aziendali Windows, utilizzando questo script calcoliamo localmente l'UDID dai dati di input noti e generiamo una richiesta per l'emissione del certificato, inserendo questo UDID nel campo richiesto. Posso anche utilizzare un certificato macchina emesso da AD (facendo aggiungere nella procedura l'autenticazione a due fattori tramite certificato Multiple Certificate).
Prepariamo le impostazioni dal lato Cisco ASA:
Creiamo un TrustPoint per il server ISE CA, che sarà responsabile dell'emissione dei certificati ai client. Non tratterò la procedura di importazione del Key-Chain, un esempio è descritto nel mio articolo sulla configurazione .
crypto ca trustpoint ISE-CA
enrollment terminal
crl configureConfiguriamo la distribuzione per il Tunnel-Group in base alle regole secondo i campi nel certificato utilizzato per l'autenticazione. Qui viene anche configurato il profilo AnyConnect, creato da noi nel passo precedente. Faccio notare che sto usando il valore SECUREBANK-RA, per reindirizzare gli utenti con un certificato rilasciato al gruppo tunnel SECURE-BANK-VPN, si prega di notare che questo campo è stato inserito nella sezione di richiesta del certificato del profilo 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
!Configuriamo i server di autenticazione. Nel mio caso, si tratta di ISE per la prima fase di autenticazione e DUO (Radius Proxy) come 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
!Creiamo politiche di gruppo e tunnel groups e i loro componenti ausiliari:
Tunnel group DefaultWEBVPNGroup sarà utilizzata principalmente per scaricare il client AnyConnect VPN e per emettere il certificato utente utilizzando la funzione SCEP-Proxy di ASA, per questo sono attivate le opportune opzioni sia nel gruppo tunnel che nella politica di gruppo associata. AC-Download, così come nel profilo AnyConnect scaricato (i campi per l'emissione del certificato, ecc.). Inoltre, in questa politica di gruppo indichiamo la necessità di scaricare ISE Posture Module.
Tunnel group SECURE-BANK-VPN verrà automaticamente utilizzato dal client durante l'autenticazione con il certificato emesso nel passaggio precedente, poiché, in base alla mappatura dei certificati, la connessione si appoggerà proprio su questo gruppo tunnel. Descriverò qui delle opzioni interessanti:
- secondary-authentication-server-group DUO # Задаем вторичную аутентификацию на сервере DUO (Radius Proxy)
- username-from-certificate CN # Используем для первичной аутентификации поле CN сертификата для наследования логина пользователя
- secondary-username-from-certificate I # Для вторичной аутентификации на сервере DUO используем имя пользователя, извлеченное и поля Initials (I) сертификата.
- pre-fill-username client # делаем предзаполненным имя пользователя в окне аутентификации без возможности изменения
- secondary-pre-fill-username client hide use-common-password push # Прячем окно ввода логина/пароля для вторичной аутентификации DUO и используем для запроса аутентификации вместо поля пароля метод уведомления (sms/push/phone) – дока
!
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 pool locale 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
!Passiamo a ISE:
Configuriamo un utente locale (è possibile utilizzare anche AD/LDAP/ODBC, ecc.), per semplicità ho creato un utente locale direttamente in ISE e l'ho assegnato nel campo descrizione UDID del PC da cui è consentito l'accesso tramite VPN. In caso di utilizzo dell'autenticazione locale su ISE, sarò limitato a un solo dispositivo, poiché i campi non sono molti, ma non avrò tali restrizioni con database di autenticazione esterni.

Esaminiamo la politica di autorizzazione, suddivisa in quattro fasi di connessione:
- Fase 1 — Politica per il download dell'agente AnyConnect e l'emissione del certificato
- Fase 2 — Politica di autenticazione primaria Login (dal certificato)/Password + Certificato con validazione UDID
- Fase 3 — Autenticazione secondaria tramite Cisco DUO (MFA) usando UDID come nome utente + Valutazione dello stato
- Fase 4 — Autorizzazione finale nello stato:
- Conforme;
- validazione UDID (dal certificato + associazione al login),
- Cisco DUO MFA;
- Autenticazione tramite login;
- Autenticazione tramite certificato;

Guardiamo una condizione interessante UUID_VALIDATED, che verifica effettivamente se l'utente in fase di autenticazione proviene da un PC con UDID consentito associato nel campo Descrizione l'account, le condizioni appaiono così:

Il profilo di autenticazione utilizzato nelle fasi 1, 2 e 3 appare come segue:

Possiamo verificare come ci arriva l'UDID dal client AnyConnect guardando i dettagli della sessione del client in ISE. Nei dettagli vedremo che AnyConnect invia attraverso il meccanismo ACIDEX non solo i dati sulla piattaforma, ma anche l'UDID del dispositivo come Cisco-AV-PAIR:

Facciamo attenzione al certificato rilasciato all'utente e al campo Initials (I), che viene utilizzato per prenderlo come login per la secondaria autenticazione MFA su Cisco DUO:

Dal lato di DUO Radius Proxy nel log vediamo chiaramente come avviene la richiesta di autenticazione, viene effettuata utilizzando l'UDID come nome utente:

Dalla parte del portale DUO vediamo un evento di autenticazione riuscito:

E nelle proprietà dell'utente ho impostato ALIAS, che ho utilizzato per il login, e questo è l'UDID autorizzato per il login PC:

Di conseguenza abbiamo ottenuto:
- L'autenticazione multifattoriale dell'utente e del dispositivo;
- Protezione dalla sostituzione del dispositivo dell'utente;
- Valutazione dello stato del dispositivo;
- Potenziale per intensificare il controllo con il certificato macchina del dominio, ecc.;
- Protezione completa per il lavoro remoto con moduli di sicurezza distribuiti automaticamente;
Link agli articoli della serie Cisco VPN:
Fonte: habr.com
