Fortsættende serien af artikler om emnet organisation Remote-Access VPN af adgang kan jeg ikke lade være med at dele en interessant erfaring med implementering af en højsikkerheds VPN-konfiguration. En udfordrende opgave blev givet af en kunde (der er opfindere i de russiske landsbyer), men Challenge Accepted og kreativt realiseret. Resultatet blev et interessant koncept med følgende karakteristika:
- Flere beskyttelsesfaktorer mod ændring af slutbrugerens enhed (strengt knyttet til brugeren);
- Samsvarsvurdering af brugerens PC til den tildelte UDID for den godkendte PC i autentificeringsdatabasen;
- Med MFA, der bruger UDID fra certifikatet til sekundær autentificering via Cisco DUO (Kan integreres med alle SAML/RADIUS-kompatible systemer);
- Multifaktorautentificering:
- Bruger certifikat med felttjek og sekundær autentificering baseret på en af dem;
- Login (uændret, taget fra certifikatet) og adgangskode;
- Vurdering af tilstanden for den tilsluttede værtsmaskine (Posture)
Brugte komponenter i løsningen:
- Cisco ASA (VPN-gateway);
- Cisco ISE (Autentificering / Autorisation / Regnskab, Tilstandsvurdering, CA);
- Cisco DUO (Multifaktorautentificering) (Kan integreres med alle SAML/RADIUS-kompatible systemer);
- Cisco AnyConnect (Multifunktionsagent til stationære og mobile operativsystemer);
Lad os begynde med kundens krav:
- Brugeren skal have mulighed for at downloade AnyConnect-klienten fra VPN-gatewayen ved hjælp af sin autentificering Login/Adgangskode, og alle nødvendige AnyConnect-moduler skal automatisk installeres i henhold til brugerens politik;
- Brugeren skal have mulighed for automatisk at få udstedt et certifikat (til et af scenarierne, det primære scenarie er manuel udstedelse og upload til PC), men jeg har implementeret automatisk udstedelse til demonstration (det er aldrig for sent at fjerne).
- Den primære autentificering skal finde sted i flere trin; først sker autentificeringen af certifikatet med en analyse af de nødvendige felter og deres værdier, derefter login/adgangskode, men denne gang skal brugernavnet, der er angivet i certifikatets felt, indsættes i login-vinduet Subject Name (CN) uden mulighed for redigering.
- Det er nødvendigt at sikre, at den enhed, der bruges til adgang, er den udleverede virksomhedslaptop til fjernadgang, og ikke noget andet. (Der er lavet flere varianter for at opfylde dette krav)
- Der skal udføres en vurdering af tilslutningsenheden (på dette stadium af PC'en) med kontrol af en hel tabel med kundens krav (sammenfattende):
- Filer og deres egenskaber;
- Registreringsposter;
- OS-opdateringer fra den leverede liste (senere integration af SCCM);
- Tilstedeværelse af antivirus af en bestemt producent og relevansen af signaturerne;
- Aktivitet af bestemte tjenester;
- Tilstedeværelse af bestemte installerede programmer;
For det første vil jeg anbefale, at vi ser en video demonstration af den opnåede implementering på YouTube (5 minutter).

Nu vil jeg foreslå at se på de detaljer ved implementeringen, der ikke blev dækket i videoen.
Lad os forberede AnyConnect-profilen:
Eksemplet på oprettelse af en profil (i menuen i ASDM), jeg tidligere præsenterede i min artikel om indstilling af . Jeg vil nu gerne fremhæve de muligheder, vi har brug for:
I profilen angiver vi VPN-gatewayen og navnet på profilen til forbindelse på den afsluttende klient:

Vi konfigurerer automatisk udstedelse af certifikater fra profilen ved at angive særligt certifikatparametrene, og bemærk, at vi lægger vægt på feltet Initials (I), hvor en specifik værdi er indtastet manuelt UDID af den testmaskine (Unik enhedsidentifikator, som Cisco AnyConnect-klienten genererer).

Her vil jeg gerne tage et litterært sidespring, da denne artikel beskriver konceptet; for demonstrationsformål er UDID indtastet for udstedelse af certifikat i feltet Initials for AnyConnect-profilen. Selvfølgelig, i det virkelige liv, hvis du gør det, vil alle klienter modtage certifikatet med den samme UDID i dette felt, og de vil ikke kunne fungere, da de har brug for UDID'en for deres specifikke PC. AnyConnect implementerer desværre ikke substitutionsanmodningen til certifikatfeltet UDID gennem miljøvariablen, ligesom den gør med variablen %USER%.
Det er værd at bemærke, at kunden (af dette scenarie) oprindeligt planlægger selv at udstede certifikater med den specificerede UDID manuelt til sådanne beskyttede PC'er, hvilket ikke er et problem for dem. Men for de fleste af os ønsker vi automatisering (for mig, i hvert fald =).
Her er, hvad jeg kan tilbyde i forhold til automatisering. Hvis det ikke er muligt at udstede et certifikat automatisk ved at dynamisk indsætte UDID for AnyConnect, er der en anden måde, som kræver lidt kreativ tænkning og dygtige hænder – jeg vil forklare konceptet. Lad os først se på, hvordan UDID dannes på forskellige operativsystemer af AnyConnect-agenten:
- Windows — SHA-256 hash af kombinationen af registreringsnøgle DigitalProductID og Machine SID
- OSX — SHA-256 hash af PlatformUUID
- Linux — SHA-256 hash af UUID på root partition.
- Apple iOS — SHA-256 hash af PlatformUUID
- Android – Se dokumentet om
Derfor laver vi et script til vores virksomheders Windows-operativsystemer, med dette script beregner vi UDID lokalt på basis af kendte input og laver en forespørgsel om udstedelse af certifikat ved at indsætte denne UDID i det relevante felt; i øvrigt kan vi også bruge maskincertifikatet udstedt af AD (ved at tilføje dobbelt autentificering med certifikat til schemaet. Multiple Certificate).
Vi forbereder indstillingerne fra Cisco ASA:
Vi opretter et TrustPoint for ISE CA serveren, som vil udstede certifikater til klienterne. Jeg vil ikke gennemgå proceduren for import af Key-Chain, da det er beskrevet i min artikel om konfiguration. .
crypto ca trustpoint ISE-CA
enrollment terminal
crl configureVi konfigurerer distributionen i Tunnel-Group baseret på regler i overensstemmelse med felterne i certifikatet, som bruges til autentificering. Her konfigureres også AnyConnect-profilen, som vi har lavet i det foregående trin. Jeg vil gerne bemærke, at jeg bruger værdien SECUREBANK-RA, til at flytte brugere med et udstedt certifikat ind i tunnelgruppen SECURE-BANK-VPN, bemærk at dette felt er indsat i forespørgslen om certifikat i AnyConnect-profilerne.
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
!Vi konfigurerer autentificeringsserverne. I mit tilfælde er det ISE til første fase af autentificering og DUO (Radius Proxy) som 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
!Vi opretter gruppepolitikker og tunnelgrupper samt deres støttekomponenter:
Tunnelgruppe DefaultWEBVPNGroup vil blive brugt primært til at downloade AnyConnect VPN-klient og udstede brugerens certifikat ved hjælp af SCEP-Proxy-funktionen på ASA, for dette har vi aktiveret de relevante indstillinger både på selve tunnelgruppen og på den tilknyttede gruppepolitik. AC-Download, såvel som på den downloadede AnyConnect-profil (felter til certifikatudstedelse osv.). I denne gruppepolitik angiver vi også behovet for at downloade. ISE Posture Module.
Tunnelgruppe SECURE-BANK-VPN vil automatisk blive brugt af klienten ved autentificering med det udstedte certifikat fra det foregående trin, da forbindelsen i overensstemmelse med Certificate Map vil blive tilknyttet netop denne tunnelgruppe. Jeg vil fortælle om interessante muligheder her:
- 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
!Lad os gå videre til ISE:
Vi opsætter en lokal bruger (det er muligt at bruge AD/LDAP/ODBC osv.), for nemheds skyld har jeg oprettet en lokal bruger direkte i ISE og angivet i feltet description UDID for PC'en fra hvilken han har adgang til VPN. Ved brug af lokal godkendelse i ISE vil jeg være begrænset til én enhed, da der ikke er mange felter, men i eksterne godkendelsesdatabaser vil jeg ikke have sådanne begrænsninger.

Lad os se på autorisationspolitikken, den er opdelt i fire forbindelsesfaser:
- Trin 1 — Politikken for download af AnyConnect-agenten og udstedelse af certifikat
- Trin 2 — Politikken for primær godkendelse Login (fra certifikatet)/Kodeord + Certifikat med UDID-validering
- Trin 3 — Sekundær godkendelse via Cisco DUO (MFA) med UDID som brugernavn + Statusvurdering
- Trin 4 — Endelig autorisation i tilstand:
- Compliant;
- UDID-validering (fra certifikatet + tilknytning til login),
- Cisco DUO MFA;
- Login-godkendelse;
- Certifikat-godkendelse;

Lad os se på en interessant betingelse UUID_VALIDATED, den kontrollerer netop, om den godkendte bruger virkelig kommer fra en PC med det tilladte UDID, som er associeret i feltet Beskrivelse af kontoen, betingelserne ser således ud:

Autoriseringsprofilen, der anvendes i faserne 1, 2 og 3, ser således ud:

Vi kan tjekke, hvordan UDID ankommer fra klienten AnyConnect ved at se på ISE-sessionens detaljer. I detaljerne ser vi, at AnyConnect via mekanismen ACIDEX sender ikke kun data om platformen, men også UDID'en for enheden som Cisco-AV-PAIR:

Lad os bemærke det udstedte certifikat til brugeren og feltet Initials (I), som bruges til at tage det som login til sekundær MFA-godkendelse på Cisco DUO:

På DUO Radius Proxy-siden ser vi klart, hvordan anmodningen om godkendelse er, den går med brug af UDID som brugernavn:

Fra DUO-portalen ser vi en vellykket godkendelseshændelse:

Og i brugerens egenskaber har jeg angivet ALIAS, som jeg brugte til login, dette er i øvrigt UDID'en der er tilladt for login PC'en:

Som resultat har vi opnået:
- Multifaktorgodkendelse af bruger og enhed;
- Beskyttelse mod enhedsforfalskning;
- Vurdering af enhedens status;
- Potentiale for at styrke kontrol med domænets maskincertifikat osv.;
- Omfattende beskyttelse af den remote arbejdsplads med automatisk implementerede sikkerhedsmoduler;
Links til artikler i serien Cisco VPN:
Kilde: habr.com
