Implementarea conceptului de acces la distanță înalt protejat

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:

  1. 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);
  2. Autentificare multifactorială:
    • Certificatul utilizatorului cu verificarea câmpurilor și autentificarea secundară pe baza uneia dintre acestea;
    • Login (netransferabil, preluat din certificat) și parolă;
  3. 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:

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

Redați video

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

Implementarea conceptului de acces la distanță înalt protejat

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

Implementarea conceptului de acces la distanță înalt protejat

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 linkul

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

crypto ca trustpoint ISE-CA
 enrollment terminal
 crl configure

Configură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) – дока aici

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

Implementarea conceptului de acces la distanță înalt protejat

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;

Implementarea conceptului de acces la distanță înalt protejat

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:

Implementarea conceptului de acces la distanță înalt protejat

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

Implementarea conceptului de acces la distanță înalt protejat

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:

Implementarea conceptului de acces la distanță înalt protejat

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:

Implementarea conceptului de acces la distanță înalt protejat

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:

Implementarea conceptului de acces la distanță înalt protejat

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

Implementarea conceptului de acces la distanță înalt protejat

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

Implementarea conceptului de acces la distanță înalt protejat

Î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

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster