Implementazione del concetto di accesso remoto ad alta sicurezza

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:

  1. 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);
  2. Autenticazione multifattoriale:
    • Certificato dell'utente con verifica dei campi e secondaria autenticazione su uno di essi;
    • Login (invariabile, preso dal certificato) e password;
  3. 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:

  1. 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;
  2. 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).
  3. 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.
  4. È 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.)
  5. È 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).

Riproduci video

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 un cluster VPN Load-Balancing.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:

Implementazione del concetto di accesso remoto ad alta sicurezza

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).

Implementazione del concetto di accesso remoto ad alta sicurezza

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 link

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 un cluster VPN Load-Balancing..

crypto ca trustpoint ISE-CA
 enrollment terminal
 crl configure

Configuriamo 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) – дока qui

!
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.

Implementazione del concetto di accesso remoto ad alta sicurezza

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;

Implementazione del concetto di accesso remoto ad alta sicurezza

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

Implementazione del concetto di accesso remoto ad alta sicurezza

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

Implementazione del concetto di accesso remoto ad alta sicurezza

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:

Implementazione del concetto di accesso remoto ad alta sicurezza

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:

Implementazione del concetto di accesso remoto ad alta sicurezza

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

Implementazione del concetto di accesso remoto ad alta sicurezza

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

Implementazione del concetto di accesso remoto ad alta sicurezza

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

Implementazione del concetto di accesso remoto ad alta sicurezza

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

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster