Continuând seria de articole pe tema organizării Remote-Access VPN accesului nu pot să nu împărtășesc o experiență interesantă de implementare a unei configurații VPN foarte securizate. O provocare neobișnuită mi-a fost aruncată de un client (există invenți cu adevărat în satele rusești), dar Challenge Accepted și implementat creativ. Ca rezultat, a ieșit un concept interesant cu următoarele caracteristici:
- Mai multe niveluri de protecție împotriva înlocuirii dispozitivului final (cu legare strictă la utilizator);
- Evaluarea conformității PC-ului utilizatorului cu UDID-ul PC-ului permis în baza de autentificare;
- Cu MFA, utilizând UDID-ul PC-ului din certificat pentru autentificarea secundară prin Cisco DUO (Poate fi conectată orice soluție compatibilă SAML/RADIUS);
- Autentificare multifactorială:
- Certificatul utilizatorului cu verificarea câmpurilor și autentificarea secundară pe baza uneia dintre acestea;
- Login (netransferabil, preluat din certificat) și parolă;
- Evaluarea stării gazdelor conectate (Posture)
Componentele soluției utilizate:
- Cisco ASA (Gateway VPN);
- Cisco ISE (Autentificare / Autorizare / Contabilizare, Evaluarea Stării, CA);
- Cisco DUO (Autentificare multifactorială) (Poate fi conectată orice soluție compatibilă SAML/RADIUS);
- Cisco AnyConnect (Agent multipurpose pentru stații de lucru și sisteme de operare mobile);
Să începem cu cerințele clientului:
- Utilizatorul trebuie să aibă posibilitatea, prin autentificarea sa Login/Parolă, să descarce clientul AnyConnect de pe gateway-ul VPN, toate modulele necesare AnyConnect trebuie să fie instalate automat conform politicii utilizatorului;
- Utilizatorul trebuie să aibă posibilitatea emiterea automată a certificatului (pentru unul dintre scenarii, scenariul principal fiind emiterea manuală și încărcarea pe PC), eu am implementat emiterea automată pentru demonstrație (niciodată nu e prea târziu pentru a fi eliminată).
- Autentificarea principală trebuie să aibă loc în mai multe etape, întâi se face autentificarea certificatului cu analiza câmpurilor necesare și a valorilor lor, apoi login/parolă, doar că la acest pas în fereastra de login trebuie să fie introdus numele utilizatorului specificat în câmpul certificatului Subject Name (CN) fără posibilitatea de editare.
- Este necesar să ne asigurăm că dispozitivul de pe care se efectuează logarea este laptopul corporatist emis utilizatorului pentru accesul de la distanță, și nu altceva. (Au fost realizate mai multe variante pentru a satisface această cerință)
- Trebuie efectuată o evaluare a stării dispozitivului conectat (în această etapă, PC-ul) cu verificarea unei liste complete de cerințe ale clientului (în general):
- Fișiere și proprietățile acestora;
- Înregistrări în registru;
- Patch-uri OS din lista furnizată (în continuare integrarea SCCM);
- Existenta antivirus-ului de la un anumit producător și actualitatea semnăturilor;
- Activitatea unor servicii specifice;
- Existenta unor programe instalate;
Pentru început, propun să ne uităm obligatoriu la demonstrația video a realizării obținute pe Youtube (5 minute).

Acum propun să examinăm detaliile implementării care nu au fost acoperite în video.
Să pregătim profilul AnyConnect:
Exemplul de creare a profilului (în ceea ce privește meniul din ASDM) l-am menționat anterior în articolul meu despre configurarea . Acum vreau să subliniez opțiunile de care avem nevoie:
În profil, vom specifica gateway-ul VPN și numele profilului pentru conectarea pe clientul final:

Vom efectua setările pentru emiterea automată a certificatului din partea profilului, menționând, în special, parametrii certificatului și, ceea ce este important, vom acorda atenție câmpului Initials (I), unde este introdus manual o valoare specifică UDID al mașinii de test (Identificatorul unic al dispozitivului, generat de clientul Cisco AnyConnect).

Aici vreau să fac o deviație lirică, deoarece acest articol descrie conceptul, pentru scopuri demonstrative aici este introdus UDID pentru emiterea certificatului în câmpul Initials al profilului AnyConnect. Desigur, în realitate, dacă procedați astfel, toți clienții vor primi un certificat cu același UDID în acest câmp și nimic nu va funcționa pentru ei, deoarece au nevoie de UDID-ul specific al PC-ului lor. Din păcate, AnyConnect nu implementează încă în profil substituirea cererii de certificat în câmpul UDID printr-o variabilă de mediu, așa cum face, de exemplu, cu variabila %USER%.
Este de remarcat că clientul (în acest scenariu) intenționează inițial să emită singur certificate cu UDID-ul specificat manual pe astfel de PC-uri Sigurate, ceea ce nu este o problemă pentru el. Cu toate acestea, pentru majoritatea dintre noi, dorim automatizare (ei bine, pentru mine cu siguranță =).
Și iată ce pot propune în ceea ce privește automatizarea. Dacă certificatul care se eliberează automat prin AnyConnect nu poate insera dinamic UDID, există și o altă metodă, care va necesita puțină gândire creativă și abilități practice – voi descrie conceptul. În primul rând, să analizăm cum se formează UDID pe diferite sisteme de operare prin agentul AnyConnect:
- Windows — hash SHA-256 al combinației dintre cheia de registry DigitalProductID și Machine SID
- OSX — hash SHA-256 al PlatformUUID
- Linux — hash SHA-256 al UUID al partiției root.
- Apple iOS — hash SHA-256 al PlatformUUID
- Android – Vedeți documentul despre
Prin urmare, vom crea un script pentru sistemele noastre de operare corporative Windows, iar cu acest script calculăm local UDID-ul pe baza datelor de intrare cunoscute și formăm o solicitare pentru emiterea certificatului, introducând în câmpul corespunzător acest UDID. De altfel, poate fi utilizat și un certificat de mașină emis de AD (adăugând în schema o autentificare dublă prin certificat) Certificat multiple).
Pregătim configurațiile din partea Cisco ASA:
Vom crea un TrustPoint pentru serverul ISE CA, acesta va elibera certificatele clienților. Nu voi discuta procedura de importare a Key-Chain, exemplul este descris în articolul meu despre configurare .
crypto ca trustpoint ISE-CA
enrollment terminal
crl configureConfigurăm distribuția în funcție de Tunnel-Group pe baza regulilor conform căror câmpuri din certificat se realizează autentificarea. De asemenea, aici se configurează profilul AnyConnect, pe care l-am realizat în etapa anterioară. Sublinez că folosesc valoarea SECUREBANK-RA, pentru a transfera utilizatorii cu certificat emis în grupul de tunel SECURE-BANK-VPN, rețineți că acest câmp este completat în cadrul cererii de certificat pentru profilul 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
!Configurăm serverele de autentificare. În cazul meu, este ISE pentru prima etapă de autentificare și DUO (Radius Proxy) ca 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
!Creăm politici de grup și grupuri de tunel și componentele lor auxiliare:
Grupa de tunel DefaultWEBVPNGroup va fi utilizat inițial pentru descărcarea clientului AnyConnect VPN și emiterea certificatului utilizatorului folosind funcția SCEP-Proxy a ASA, pentru aceasta sunt activate opțiunile corespunzătoare atât în grupul de tunel, cât și în politica de grup asociată AC-Download, precum și în profilul descărcat AnyConnect (câmpurile pentru emiterea certificatului etc.). De asemenea, în această politică de grup specificăm necesitatea descărcării ISE Posture Module.
Grupa de tunel SECURE-BANK-VPN va fi utilizat automat de client în timpul autentificării cu certificatul emis în etapa anterioară, deoarece conform Hărții Certificatului, conexiunea se va alinia cu acest grup de tunel. Voi povesti despre opțiunile interesante aici:
- 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 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
!Să trecem acum la ISE:
Configurăm un utilizator local (se pot folosi și AD/LDAP/ODBC etc.), pentru simplificare am creat un utilizator local în ISE și l-am asignat în câmpul description UDID PC de la care i se permite accesul prin VPN. În cazul utilizării autentificării locale în ISE, voi fi restricționat doar la un singur dispozitiv, deoarece nu sunt atât de multe câmpuri, dar nu voi avea astfel de restricții în bazele externe de autentificare.

Să analizăm politica de autorizare, aceasta este împărțită în patru etape de conectare:
- Etapa 1 — Politica pentru descărcarea agentului AnyConnect și emiterea certificatul
- Etapa 2 — Politica de autentificare inițială Login (din certificat)/Parolă + Certificat cu validarea UDID
- Etapa 3 — Autentificarea secundară prin Cisco DUO (MFA) folosind UDID ca nume de utilizator + Evaluarea stării
- Etapa 4 — Autorizare finală în stare:
- Conform;
- validarea UDID (din certificat + legătura cu login-ul),
- Cisco DUO MFA;
- Autentificare pe baza login-ului;
- Autentificare pe baza certificatului;

Să privim o condiție interesantă UUID_VALIDATED, care verifică dacă utilizatorul care se autentifică provine de la un PC cu UDID-ul permis asociat în câmpul Description contului, condițiile aspectează astfel:

Profilul de autorizare folosit în etapele 1, 2, 3 arată astfel:

Pentru a verifica cum ne este trimis UDID-ul de către clientul AnyConnect, putem verifica detaliile sesiunii clientului în ISE. În detalii, vom observa că AnyConnect prin mecanismul ACIDEX trimite nu doar date despre platformă, ci și UDID-ul dispozitivului ca Cisco-AV-PAIR:

Să ne concentrăm asupra certificatului emis utilizatorului și al câmpului Initials (I), care este folosit pentru a obține login-ul în rolul de autentificare secundară MFA în Cisco DUO:

Pe partea DUO Radius Proxy în jurnal vedem clar cum se efectuează cererea de autentificare, aceasta se face folosind UDID-ul ca nume de utilizator:

Din partea portalului DUO vedem un eveniment de autentificare reușit:

Și în proprietățile utilizatorului am setat ALIAS, pe care l-am folosit pentru login, care de fapt este UDID-ul permis pentru login-ul PC-ului:

În rezultat, am obținut:
- Autentificarea multifactor a utilizatorului și dispozitivului;
- Protecția împotriva falsificării dispozitivului utilizatorului;
- Evaluarea stării dispozitivului;
- Potentțial de consolidare a controlului cu certificatul de mașină al domeniului etc.;
- O soluție completă pentru protecția locului de muncă la distanță cu module de securitate desfășurate automat;
Linkuri către articolele din seria Cisco VPN:
Sursa: habr.com
