Kontynuacja cyklu artykułów na temat organizacji VPN dostępu zdalnego Nie mogę się powstrzymać od podzielenia się ciekawym doświadczeniem z wdrożenia wysoce bezpieczna konfiguracja VPN. Nietrywialne zadanie zostało rzucone przez jednego klienta (w rosyjskich wioskach są wynalazcy), ale wyzwanie zostało przyjęte i kreatywnie zrealizowane. W rezultacie uzyskano interesującą koncepcję o następujących cechach:
- Kilka czynników zabezpieczających przed podmianą urządzenia końcowego (ze sztywnym powiązaniem z użytkownikiem);
- Ocena zgodności komputera użytkownika z przydzielonym identyfikatorem UDID uprawnionego komputera w bazie danych uwierzytelniania;
- Z MFA przy użyciu UDID komputera z certyfikatu do uwierzytelniania wtórnego przez Cisco DUO (Możesz dołączyć dowolny zgodny z SAML/Radius);
- Uwierzytelnianie wieloskładnikowe:
- Certyfikat użytkownika z weryfikacją terenową i uwierzytelnianiem wtórnym dla jednego z nich;
- Login (niezmienny, pobrany z certyfikatu) i hasło;
- Ocena stanu łączącego się hosta (Postawa)
Zastosowane komponenty rozwiązania:
- Cisco ASA (bramka VPN);
- Cisco ISE (uwierzytelnianie/autoryzacja/księgowość, ocena postawy, CA);
- Cisco DUO (uwierzytelnianie wieloskładnikowe) (Możesz dołączyć dowolny zgodny z SAML/Radius);
- Cisco AnyConnect (wielofunkcyjny agent dla stacji roboczych i mobilnych systemów operacyjnych);
Zacznijmy od wymagań klienta:
- Użytkownik musi mieć możliwość pobrania klienta AnyConnect z bramy VPN, korzystając z uwierzytelniania za pomocą swojego loginu i hasła; wszystkie niezbędne moduły AnyConnect muszą zostać automatycznie zainstalowane zgodnie z polityką użytkownika;
- Użytkownik powinien mieć możliwość automatycznego wystawienia certyfikatu (w jednym ze scenariuszy głównym scenariuszem jest ręczne wystawienie i przesłanie na komputer), ale wdrożyłem automatyczne wydawanie na potrzeby demonstracji (nigdy nie jest za późno, aby usunąć).
- Główne uwierzytelnianie musi odbywać się w kilku etapach, najpierw uwierzytelnianie certyfikatu z analizą niezbędnych pól i ich wartości, następnie login/hasło, tylko tym razem nazwa użytkownika podana w polu certyfikatu musi zostać podstawiona w oknie logowania Nazwa podmiotu (CN) bez możliwości edycji.
- Należy upewnić się, że urządzenie, z którego następuje logowanie, jest firmowym laptopem wydanym użytkownikowi do zdalnego dostępu, a nie czymś innym. (Aby spełnić ten wymóg, przygotowano kilka opcji)
- Należy dokonać oceny stanu urządzenia łączącego (na tym etapie komputera PC), sprawdzając całą obszerną tabelę wymagań klienta (podsumowując):
- Pliki i ich właściwości;
- Wpisy do rejestru;
- Poprawki systemu operacyjnego z dostarczonej listy (dalsza integracja z SCCM);
- Dostępność oprogramowania antywirusowego od konkretnego producenta i trafność sygnatur;
- Działalność niektórych usług;
- Obecność niektórych zainstalowanych programów;
Na początek proponuję obejrzeć prezentację wideo przedstawiającą powstałą implementację pod adresem Youtube (5 minut).

Teraz proponuję omówić szczegóły implementacji, których nie uwzględniono w filmie.
Przygotujmy profil AnyConnect:
Przykład tworzenia profilu (w kontekście elementu menu w ASDM) podałem już wcześniej w moim artykule na temat konfiguracji . Teraz chciałbym osobno zanotować opcje, których będziemy potrzebować:
W profilu podajemy bramę VPN i nazwę profilu dla połączenia po stronie klienta końcowego:

Skonfigurujmy automatyczne wydawanie certyfikatów od strony profilu, określając w szczególności parametry certyfikatu i, co typowe, zwracając uwagę na pole Inicjały (I)gdzie konkretna wartość jest wprowadzana ręcznie ZROBIŁEŚ maszyna testowa (unikalny identyfikator urządzenia wygenerowany przez klienta Cisco AnyConnect).

Tutaj chcę zrobić dygresję liryczną, ponieważ ten artykuł opisuje koncepcję, w celach demonstracyjnych wypełniam tutaj UDID do wydania certyfikatu w polu Inicjały profilu AnyConnect. Oczywiście w rzeczywistości, jeśli to zrobisz, wszyscy klienci otrzymają certyfikat z tym samym UDID w tym polu i nic nie zadziała dla nich, ponieważ potrzebują UDID swojego konkretnego komputera. Niestety, AnyConnect nie implementuje jeszcze substytucji pola UDID w profilu żądania certyfikatu za pomocą zmiennej środowiskowej, jak to robi ze zmienną, na przykład %UŻYTKOWNIK%.
Warto zauważyć, że klient (w tym scenariuszu) początkowo planuje ręcznie wydawać certyfikaty z danym UDID takim chronionym komputerom, co nie stanowi dla niego problemu. Jednak dla większości z nas pożądana jest automatyzacja (cóż, dla mnie to prawda =)).
A oto, co mogę zaoferować w zakresie automatyzacji. Jeśli AnyConnect nie jest jeszcze w stanie automatycznie wystawić certyfikatu poprzez dynamiczne podstawianie UDID, istnieje inny sposób, który będzie wymagał odrobiny kreatywnej myśli i zręcznych rąk - opowiem ci o koncepcji. Najpierw przyjrzyjmy się, jak UDID jest tworzony w różnych systemach operacyjnych przez agenta AnyConnect:
- Windows — Skrót SHA-256 kombinacji klucza rejestru DigitalProductID i identyfikatora SID maszyny
- OSX — skrót SHA-256 PlatformUUID
- Linux — Skrót SHA-256 identyfikatora UUID partycji głównej.
- apple iOS — skrót SHA-256 PlatformUUID
- Android - Spójrz na dokument
W związku z tym tworzymy skrypt dla naszych korporacyjnych systemów operacyjnych. WindowsZa pomocą tego skryptu lokalnie obliczamy UDID na podstawie znanych danych wejściowych i generujemy żądanie wydania certyfikatu poprzez wpisanie tego UDID w wymaganym polu. Można również użyć certyfikatu maszyny wydanego przez AD (dodając do schematu podwójne uwierzytelnianie za pomocą certyfikatu). Certyfikat wielokrotny).
Przygotujmy ustawienia po stronie Cisco ASA:
Utwórzmy TrustPoint dla serwera ISE CA, który będzie wystawiał certyfikaty klientom. Nie będę rozważał procedury importu Key-Chain, przykład jest opisany w moim artykule na temat konfiguracji .
crypto ca trustpoint ISE-CA
enrollment terminal
crl configureKonfigurujemy dystrybucję według Tunnel-Group na podstawie reguł zgodnych z polami w certyfikacie, który jest używany do uwierzytelniania. Również tutaj konfigurujemy profil AnyConnect, który utworzyliśmy w poprzednim kroku. Należy zauważyć, że używam wartości SECUREBANK-RA, aby przenieść użytkowników z wydanym certyfikatem do grupy tunelowej BEZPIECZNY-BANK-VPN, proszę zwrócić uwagę, że to pole mam ustawione w kolumnie żądania certyfikatu 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
!Skonfiguruj serwery uwierzytelniania. W moim przypadku jest to ISE na pierwszym etapie uwierzytelniania i 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
!Tworzymy zasady grupowe i grupy tunelowe oraz ich komponenty pomocnicze:
Grupa tunelowa Domyślna grupa WEBVPN będzie używany głównie do pobierania klienta AnyConnect VPN i wystawiania certyfikatu użytkownika przy użyciu funkcji SCEP-Proxy urządzenia ASA, w tym celu aktywowaliśmy odpowiednie opcje zarówno w samej grupie tunelowej, jak i w skojarzonej polityce grupy AC-Pobierz, jak również na pobranym profilu AnyConnect (pola wydania certyfikatu itp.). Również w tej polityce grupy wskazujemy na potrzebę pobrania Moduł postawy ISE.
Grupa tunelowa BEZPIECZNY-BANK-VPN będzie automatycznie używany przez klienta podczas uwierzytelniania certyfikatem wydanym w poprzednim kroku, ponieważ zgodnie z Mapą certyfikatów połączenie trafi do tej grupy tuneli. Opowiem tutaj o ciekawych opcjach:
- serwer-uwierzytelniania-pomocniczego-grupa-DUO # Skonfiguruj uwierzytelnianie pomocnicze na serwerze DUO (serwer proxy Radius)
- nazwa-użytkownika-z-certyfikatu CN # Użyj pola CN certyfikatu do uwierzytelniania podstawowego, aby odziedziczyć login użytkownika
- drugorzędna-nazwa-użytkownika-z-certyfikatu I # W przypadku uwierzytelniania wtórnego na serwerze DUO używamy nazwy użytkownika wyodrębnionej z pól Inicjały (I) certyfikatu.
- klient z wstępnie wypełnioną nazwą użytkownika # ustaw nazwę użytkownika jako wstępnie wypełnioną w oknie uwierzytelniania bez możliwości jej zmiany
- wtórny-wstępny-wypełnij-nazwę-użytkownika klient ukryj użyj-wspólnego-hasła push # Ukryj okno wprowadzania loginu/hasła w celu uwierzytelnienia wtórnego DUO i użyj metody powiadomienia (SMS/push/telefon), aby poprosić o uwierzytelnienie zamiast pola hasła – doc
!
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
!Następnie przechodzimy do ISE:
Utworzyliśmy użytkownika lokalnego (możesz użyć AD/LDAP/ODBC itp.), dla uproszczenia utworzyłem użytkownika lokalnego w samym ISE i przypisałem go w polu opis Komputer UDID z którego może się logować przez VPN. W przypadku korzystania z uwierzytelniania lokalnego na ISE będę ograniczony tylko do jednego urządzenia, ponieważ nie ma tak wielu pól, ale w bazach danych uwierzytelniania stron trzecich nie będę miał takich ograniczeń.

Przyjrzyjmy się polityce autoryzacji, jest ona podzielona na cztery etapy połączenia:
- Krok 1 — Zasady pobierania agenta AnyConnect i wydawania certyfikatu
- Krok 2 — Podstawowa polityka uwierzytelniania Login (z certyfikatu)/Hasło + Certyfikat z walidacją UDID
- Krok 3 — Uwierzytelnianie wtórne za pośrednictwem Cisco DUO (MFA) według UDID jako nazwy użytkownika + ocena statusu
- Krok 4 — Ostateczna autoryzacja w państwie:
- Zgodny;
- Walidacja UDID (od certyfikatu + powiązanie z loginem),
- Cisco DUO MFA;
- Uwierzytelnianie poprzez logowanie;
- Uwierzytelnianie certyfikatem;

Przyjrzyjmy się ciekawej sytuacji UUID_ZATWIERDZONY, wygląda na to, że użytkownik uwierzytelniający faktycznie pochodzi z komputera z dozwolonym identyfikatorem UDID skojarzonym w tym polu OPIS konto, warunki wyglądają następująco:

Profil autoryzacji używany w etapach 1,2,3 wygląda następująco:

Możesz sprawdzić, jak dokładnie otrzymujemy UDID od klienta AnyConnect, przeglądając szczegóły sesji klienta w ISE. Szczegółowo zobaczymy, że AnyConnect poprzez mechanizm Kwasowy wysyła nie tylko dane o platformie, ale także UDID urządzenia jako Para Cisco AV:

Zwróćmy uwagę na certyfikat wydany użytkownikowi i pole Inicjały (I), który jest używany do traktowania go jako loginu do uwierzytelniania MFA w systemie Cisco DUO:

Po stronie DUO Radius Proxy w logu wyraźnie widać, w jaki sposób wysyłane jest żądanie uwierzytelnienia. Jest ono wysyłane przy użyciu UDID jako nazwy użytkownika:

Z poziomu portalu DUO widzimy pomyślne zdarzenie uwierzytelniania:

A we właściwościach użytkownika mam to ustawione ALIAS, którego użyłem do logowania, to z kolei jest UDID komputera, na którym można się zalogować:

W rezultacie otrzymaliśmy:
- Wieloskładnikowe uwierzytelnianie użytkownika i urządzenia;
- Ochrona przed podmianą urządzenia użytkownika;
- Ocena stanu urządzenia;
- Możliwość zwiększenia kontroli nad certyfikatem domeny maszyny itp.;
- Kompleksowa ochrona zdalnego miejsca pracy dzięki automatycznie wdrażanym modułom bezpieczeństwa;
Linki do artykułów z serii Cisco VPN:
Źródło: www.habr.com
