Pokračujeme v sérii článků na téma organizace VPN pro vzdálený přístup přístupu, musím se podělit o zajímavé zkušenosti s nasazením vysoce zabezpečené konfigurace VPN. Problém mi nabídl jeden klient (jsou tady fantazisté v ruských vesnicích), ale výzvu jsem přijal a kreativně realizoval. Výsledkem je zajímavý koncept s následujícími charakteristikami:
- Několik faktorů ochrany proti záměně koncového zařízení (s přísnou vázaností na uživatele);
- Hodnocení shody uživatelského PC s určeným UDID povoleného PC v autentizační databázi;
- S MFA, používající UDID PC ze certifikátu pro sekundární autentizaci přes Cisco DUO (Můžete připojit jakýkoli SAML/RADIUS kompatibilní řešení);
- Vícefaktorovou autentizací:
- Uživatelský certifikát s kontrolou polí a sekundární autentizací na jednom z nich;
- Přihlašovací údaje (neměnitelné, převzaté z certifikátu) a heslo;
- Hodnocení stavu připojeného hostitele (Posture)
Použité komponenty řešení:
- Cisco ASA (VPN brána);
- Cisco ISE (Autentizace / Autorizace / Účtování, Hodnocení stavu, CA);
- Cisco DUO (Vícefaktorová autentizace) (Můžete připojit jakýkoli SAML/RADIUS kompatibilní řešení);
- Cisco AnyConnect (Víceúčelový agent pro pracovní stanice a mobilní OS);
Začneme požadavky klienta:
- Uživatel by měl mít možnost stáhnout klienta AnyConnect z VPN brány na základě své autentizace Přihlašovacími údaji/Heslem, všechny potřebné moduly AnyConnect by se měly automaticky nainstalovat podle politiky uživatele;
- Uživatel by měl mít možnost automatické vydání certifikátu (pro jeden ze scénářů, hlavní scénář však – ruční vydání a nahrání do PC), já jsem realizoval automatické vydání pro demonstraci (nikdy není pozdě odvolat).
- Hlavní autentizace by měla probíhat ve několika krocích, nejprve probíhá autentizace certifikátu s analýzou potřebných polí a jejich hodnot, poté přihlašovací údaje/heslo, tentokrát by se však do přihlašovacího okna mělo automaticky vyplnit uživatelské jméno uvedené v poli certifikátu Název subjektu (CN) bez možnosti úpravy.
- Je nutné zajistit, aby zařízení, ze kterého se přihlašuje, bylo firemní notebook vydaný uživateli pro vzdálený přístup, a ne něco jiného. (Bylo provedeno několik variant splnění tohoto požadavku)
- Je nutné provést hodnocení stavu připojeného zařízení (v tomto kroku počítač) s kontrolou celého obsáhlého seznamu požadavků objednatele (shrnutí):
- Soubory a jejich vlastnosti;
- Záznamy registru;
- Opravy OS z poskytnutého seznamu (v budoucnu integrace SCCM);
- Přítomnost antiviru určitého výrobce a aktuálnost podpisů;
- Aktivita určitých služeb;
- Přítomnost určitých nainstalovaných programů;
Nejprve doporučuji povinně se podívat na video demonstrující výsledek realizace na YouTube (5 minut).

Nyní navrhuji prozkoumat detaily realizace, které nejsou ve videu pokryty.
Připravíme profil AnyConnect:
Příklad vytvoření profilu (v rámci menu položky v ASDM) jsem dříve uváděl ve svém článku o nastavení . Nyní chci zvlášť zdůraznit ty možnosti, které budeme potřebovat:
V profilu uvedeme bránu VPN a název profilu pro připojení na koncovém klientovi:

Provedeme nastavení automatického vystavení certifikátu ze strany profilu, a to včetně specifikace parametrů certifikátu, a jak je důležité, zaměříme se na pole Initials (I), kde je ručně zadaná konkrétní hodnota UDID testovacího zařízení (Unikátní identifikátor zařízení, který generuje klient Cisco AnyConnect).

Tady chci udělat literární odbočku, protože tento článek popisuje koncept, pro demonstrační účely je zde zadané UDID pro vystavení certifikátu v poli Initials profilu AnyConnect. Samozřejmě v reálném životě, pokud to uděláte, všichni klienti obdrží certifikát se stejným UDID v tomto poli a nic jim nepoběží, protože potřebují UDID konkrétně svého počítače. AnyConnect bohužel zatím neimplementuje substituci v profilu pro požadavek na certifikát pomocí proměnné prostředí, tak jak to například dělá s proměnnou %USER%.
Je třeba poznamenat, že objednatel (tohoto scénáře) původně plánuje vydávat certifikáty s daným UDID ručně na takových zabezpečených PC, což pro něj není žádný problém. Nicméně pro většinu z nás bychom chtěli automatizaci (no pro mě určitě =).
A to je, co mohu nabídnout v oblasti automatizace. Pokud nelze certifikát automaticky vydat AnyConnect s dynamickým vložením UDID, existuje i jiný způsob, který si žádá trochu kreativního myšlení a šikovných rukou – představím vám koncepci. Nejprve se podívejme, jak se UDID vytváří na různých operačních systémech prostřednictvím agenta AnyConnect:
- Windows — SHA-256 hash kombinace klíče registru DigitalProductID a Machine SID
- OSX — SHA-256 hash PlatformUUID
- Linux — SHA-256 hash UUID kořenové partition.
- Apple iOS — SHA-256 hash PlatformUUID
- Android – Viz dokument k
Podle toho vytvoříme skript pro naše podniková OS Windows, tímto skriptem místně spočítáme UDID na základě známých vstupních dat a vytvoříme požadavek na vydání certifikátu tím, že tento UDID vložíme do potřebného pole, mimochodem lze to i s certifikátem stroje vydaným AD (přidáním dvojí autentizace pomocí certifikátu Multiple Certificate).
Připravíme nastavení ze strany Cisco ASA:
Vytvoříme TrustPoint pro ISE CA server, ten právě bude certifikáty vydávat klientům. Proceduru importu Key-Chain nebudu rozebírat, příklad je popsán v mém článku o nastavení .
crypto ca trustpoint ISE-CA
enrollment terminal
crl configureNastavujeme distribuci podle Tunnel-Group na základě pravidel odpovídajících polím v certifikátu, podle kterého probíhá autentizace. Zde také nastavujeme profil AnyConnect, který jsme vyrobili v předchozím kroku. Upozorňuji, že používám hodnotu SECUREBANK-RA, pro přiřazení uživatelů s vydaným certifikátem do tunelové skupiny SECURE-BANK-VPN, pozor, že toto pole je u mě vyplněno v sekci žádosti o certifikát profilu 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
!Nastavujeme autentizační servery. V mém případě je to ISE pro první fázi autentizace a DUO (Radius Proxy) jako 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
!Vytváříme skupinové politiky a tunelové skupiny a jejich pomocné složky:
Tunelová skupina DefaultWEBVPNGroup bude primárně použita pro stažení klienta AnyConnect VPN a vydání uživatelského certifikátu pomocí funkce SCEP-Proxy ASA, pro to máme aktivované odpovídající možnosti jak na samotné tunelové skupině, tak na přidružené skupinové politice AC-Stáhnout, tak na stahovaném profilu AnyConnect (pole vydání certifikátu atd.). Také v této skupinové politice uvádíme nutnost stažení ISE Posture Module.
Tunelová skupina SECURE-BANK-VPN bude automaticky používán klientem při ověřování s vydaným certifikátem v předchozím kroku, protože podle Certificate Map připojení spadá právě na tuto tunelovou skupinu. Zde se podívám na zajímavé možnosti:
- 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
!Dále přecházíme k ISE:
Nastavujeme místního uživatele (lze použít i AD/LDAP/ODBC atd.), pro zjednodušení jsem vytvořil místního uživatele přímo v ISE a přiřadil ho do pole description UDID PC z něhož mu je povolen přístup přes VPN. V případě použití místní autentizace na ISE budu omezen pouze jedním zařízením, protože polí není tolik, ale u externích autentizačních databází nebudu mít taková omezení.

Podíváme se na politiku autorizace, je rozdělena do čtyř etap spojení:
- Fáze 1 — Politika pro stahování agenta AnyConnect a vystavení certifikátu
- Fáze 2 — Politika primární autentizace Přihlášení (z certifikátu)/Heslo + Certifikát s validací UDID
- Fáze 3 — Druhá autentizace přes Cisco DUO (MFA) podle UDID jako jména uživatele + Hodnocení stavu
- Fáze 4 — Konečná autorizace ve stavu:
- Kompatibilní;
- validací UDID (z certifikátu + vazba na přihlášení),
- Cisco DUO MFA;
- Autentizací podle přihlášení;
- Autentizací podle certifikátu;

Podíváme se na zajímavou podmínku UUID_VALIDATED, ta právě zajišťuje, že autentizující se uživatel skutečně přišel z PC s povoleným UDID asociovaným v poli Popis uživatelského účtu, podmínka vypadá takto:

Profil autorizace používaný v 1., 2., 3. etapě vypadá následovně:

Jak přesně nám přijde UDID od klienta AnyConnect, můžeme zjistit pohledem na detaily relace klienta v ISE. V detailech uvidíme, že AnyConnect přes mechanismus ACIDEX posílá nejen informace o platformě, ale i UDID zařízení jako Cisco-AV-PAIR:

Poznamenejme si vydaný certifikát uživateli a pole Initials (I), které se používá pro přihlášení při sekundární autentizaci MFA na Cisco DUO:

Na straně DUO Radius Proxy v logu jasně vidíme, jakým způsobem probíhá žádost o autentizaci, využívá UDID jako uživatelské jméno:

Na straně portálu DUO vidíme úspěšnou událost autentizace:

A v vlastnostech uživatele mám nastaveno ALIAS, který jsem použil pro přihlášení, což je v podstatě UDID povoleného PC pro přihlášení:

Výsledkem máme:
- Vícefaktorovou autentizaci uživatele a zařízení;
- Ochranu proti podvržení zařízení uživatele;
- Hodnocení stavu zařízení;
- Potenciál pro zesílení kontroly s certifikátem stroje domény atd.;
- Komplexní ochrana vzdáleného pracovního místa s automaticky nasazovanými bezpečnostními moduly;
Odkazy na články série Cisco VPN:
Zdroj: habr.com
