Kontynuując serię artykułów na temat organizacji VPN z dostępem zdalnym dostępu muszę podzielić się interesującym doświadczeniem wdrożenia wysoko zabezpieczonej konfiguracji VPN. Złożone zadanie zaproponował jeden klient (są wynalazcy w rosyjskich wioskach), ale Challenge Accepted i kreatywnie zrealizowane. W rezultacie powstał interesujący koncept z następującymi cechami:
- Kilka czynników ochrony przed fałszowaniem urządzenia końcowego (sztywne powiązanie z użytkownikiem);
- Ocena zgodności komputera użytkownika z przypisanym UDID dozwolonego komputera w bazie autoryzacji;
- Z MFA, wykorzystującą UDID PC z certyfikatu do wtórnej autoryzacji przez Cisco DUO (Można podłączyć dowolne zgodne z SAML/RADIUS);
- Wieloskładnikową autoryzację:
- Certyfikat użytkownika z weryfikacją pól i wtórną autoryzacją na jednym z nich;
- Login (niemodyfikowalny, pochodzący z certyfikatu) oraz hasło;
- Oceną stanu łączącego się hosta (Postura)
Wykorzystywane komponenty rozwiązania:
- Cisco ASA (Brama VPN);
- Cisco ISE (Autoryzacja / Uwierzytelnianie / Księgowość, Ocena Stanu, CA);
- Cisco DUO (Wieloskładnikowa Autoryzacja) (Można podłączyć dowolne zgodne z SAML/RADIUS);
- Cisco AnyConnect (wielofunkcyjny agent dla stacji roboczych i mobilnych OS);
Zacznijmy od wymagań klienta:
- Użytkownik powinien mieć możliwość pobrania klienta AnyConnect z bramy VPN przy uwierzytelnieniu Login/Hasło, wszystkie niezbędne moduły AnyConnect powinny być automatycznie instalowane zgodnie z polityką użytkownika;
- Użytkownik powinien mieć możliwość automatycznej wydania certyfikatu (w jednym ze scenariuszy, główny scenariusz to ręczne wydanie i załadowanie na PC), ja zrealizowałem automatyczną emisję dla demonstracji (zawsze można usunąć później).
- Główna autoryzacja powinna przebiegać w kilku etapach, najpierw następuje autoryzacja certyfikatu z analizą wymaganych pól i ich wartości, a następnie login/hasło, tylko tym razem w oknie logowania powinno być podstawiane imię użytkownika wskazane w polu certyfikatu Nazwa podmiotu (CN) bez możliwości edytowania.
- Należy upewnić się, że urządzenie, z którego dokonuje się logowania, to laptop korporacyjny wydany użytkownikowi do zdalnego dostępu, a nie cokolwiek innego. (Zrealizowano kilka opcji spełnienia tego wymogu)
- Należy przeprowadzić ocenę stanu podłączonego urządzenia (na tym etapie PC) z weryfikacją całej obszernej tabeli wymagań klienta (ogólnie):
- Pliki i ich właściwości;
- Rejestry;
- Łatki systemu operacyjnego z dostarczonej listy (w przyszłości integracja SCCM);
- Obecność oprogramowania antywirusowego określonego producenta oraz aktualność sygnatur;
- Aktywność określonych usług;
- Obecność określonych zainstalowanych programów;
Na początek proponuję obligatoryjnie obejrzeć wideo-demonstrację uzyskanej realizacji na Youtube (5 minut).

Teraz proponuję omówić szczegóły realizacji, które nie zostały poruszone w wideo.
Przygotujemy profil AnyConnect:
Przykład utworzenia profilu (w zakresie menu w ASDM) wcześniej podałem w moim artykule dotyczącym konfiguracji . Teraz chcę szczególnie podkreślić te opcje, które będą nam potrzebne:
W profilu wskaźnik VPN oraz nazwa profilu do połączenia po stronie klienta:

Przeprowadzimy ustawienia automatycznego wydawania certyfikatu w profilu, określając, w szczególności, parametry certyfikatu i co istotne, zwrócimy uwagę na pole Initials (I), w którym ręcznie wpisane jest konkretne wartości UDID testowej maszyny (Unikalny identyfikator urządzenia, generowany przez klienta Cisco AnyConnect).

Tutaj chcę zrobić małe dygresję, ponieważ niniejszy artykuł opisuje koncepcję, a dla celów demonstracyjnych tutaj wpisano UDID do wydania certyfikatu w polu Initials profilu AnyConnect. Oczywiście w rzeczywistości, jeśli to zrobicie, wszyscy klienci otrzymają certyfikat z tym samym UDID w tym polu i nic nie zadziała, ponieważ potrzebują UDID konkretnie swojego PC. Niestety, AnyConnect obecnie nie wdraża podstawiania w profilu zapytania o certyfikat w polu UDID przez zmienną środowiskową, jak to robi na przykład z zmienną %USER%.
Warto zaznaczyć, że klient (w tym scenariuszu) początkowo planuje samodzielnie wydawać certyfikaty z ustalonym UDID w trybie ręcznym na takie Zabezpieczone PC, co nie stanowi dla niego problemu. Jednak dla większości z nas potrzebna jest automatyzacja (zresztą dla mnie tak na pewno =).
Oto co mogę zaproponować w zakresie automatyzacji. Jeśli certyfikat AnyConnect nie może być automatycznie wypisany z dynamicznie podstawionym UDID, istnieje inny sposób, który wymaga trochę kreatywności i umiejętnych rąk – przedstawię koncept. Na początek przyjrzyjmy się, jak agent AnyConnect generuje UDID w różnych systemach operacyjnych:
- Windows — SHA-256 hash kombinacji klucza rejestru DigitalProductID i Machine SID
- OSX — SHA-256 hash PlatformUUID
- Linuxa — SHA-256 hash UUID partycji root.
- Apple iOS — SHA-256 hash PlatformUUID
- Android – Zobacz dokument dotyczący
W związku z tym tworzymy skrypt dla naszych korporacyjnych systemów Windows, którego używamy lokalnie do obliczenia UDID na podstawie znanych danych, a następnie formujemy żądanie wydania certyfikatu, wpisując w odpowiednie pole ten UDID, zresztą można też użyć certyfikatu maszyny wydanego przez AD (dodając do schemy podwójną autoryzację przy użyciu certyfikatu Multiple Certificate).
Przygotujemy ustawienia po stronie Cisco ASA:
Utworzymy TrustPoint dla serwera ISE CA, który będzie wydawał certyfikaty klientom. Procedurę importu Key-Chain pominę, przykłady opisane są w moim artykule na temat konfiguracji .
crypto ca trustpoint ISE-CA
enrollment terminal
crl configureKonfigurujemy podział według Tunnel-Group na podstawie reguł zgodnych z polami w certyfikacie, przy użyciu którego przeprowadzana jest autoryzacja. Tutaj również konfiguruje się profil AnyConnect, który przygotowaliśmy w poprzednim etapie. Zwracam uwagę, że używam wartości SECUREBANK-RA, do przeniesienia użytkowników z wydanym certyfikatem do grupy tunelowej SECURE-BANK-VPN, zwróć uwagę, że to pole zostało wprowadzone w grafie żą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
!Konfigurujemy serwery autoryzacji. W moim przypadku to ISE jako pierwszy etap autoryzacji oraz 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 polityki grupowe oraz grupy tunelowe oraz ich pomocnicze komponenty:
Grupa tunelowa DefaultWEBVPNGroup zostanie początkowo użyta do pobrania klienta AnyConnect VPN oraz wydania certyfikatu użytkownika za pomocą funkcji SCEP-Proxy ASA, w tym celu aktywowaliśmy odpowiednie opcje zarówno w samej grupie tunelowej, jak i w powiązanej polityce grupowej Pobierz AC, jak i w pobieranym profilu AnyConnect (pola wydania certyfikatu itp.). W tej polityce grupowej wskazujemy także na konieczność pobrania Moduł ISE Posture.
Grupa tunelowa SECURE-BANK-VPN zostanie automatycznie użyty przez klienta przy autoryzacji za pomocą wydanego certyfikatu w poprzednim etapie, ponieważ zgodnie z mapą certyfikatów, połączenie będzie miało miejsce w tej grupie tunelowej. Opowiem o interesujących opcjach tutaj:
- grupa serwerów do weryfikacji wtórnej DUO # Задаем вторичную аутентификацию на сервере DUO (Radius Proxy)
- nazwa użytkownika z certyfikatu CN # Используем для первичной аутентификации поле CN сертификата для наследования логина пользователя
- wtórna nazwa użytkownika z certyfikatu I # Для вторичной аутентификации на сервере DUO используем имя пользователя, извлеченное и поля Initials (I) сертификата.
- wypełnij nazwę użytkownika klienta # делаем предзаполненным имя пользователя в окне аутентификации без возможности изменения
- wtórne wypełnienie nazwy użytkownika klienta ukryj używane-wspólne-hasło push # Прячем окно ввода логина/пароля для вторичной аутентификации DUO и используем для запроса аутентификации вместо поля пароля метод уведомления (sms/push/phone) – дока
!
lista-dostępu posture-redirect rozszerzona zezwól tcp wszelkie host 72.163.1.80
lista-dostępu posture-redirect rozszerzona zabroń ip wszelkie wszelkie
!
lista-dostępu VPN-Filter rozszerzona zezwól ip wszelkie wszelkie
!
pula lokalna vpn-pool 192.168.100.33-192.168.100.63 maska 255.255.255.224
!
polityka-grupowa SECURE-BANK-VPN wewnętrzna
polityka-grupowa SECURE-BANK-VPN atrybuty
serwer-dns wartość 192.168.99.155 192.168.99.130
vpn-filter wartość VPN-Filter
protokół-tunelu vpn ssl-client
polityka-split-tunnel tunnelall
wartość-default-domain ashes.cc
pule-adresowe wartość vpn-pool
webvpn
anyconnect ssl dtls włącz
anyconnect mtu 1300
anyconnect keep-installer zainstalowany
anyconnect ssl keepalive 20
anyconnect ssl rekey czas brak
anyconnect ssl rekey metoda ssl
anyconnect dpd-interval klient 30
anyconnect dpd-interval brama 30
anyconnect ssl kompresja lzs
anyconnect dtls kompresja lzs
anyconnect moduły wartość iseposture
anyconnect profile wartość SECUREBANK typ użytkownika
!
polityka-grupowa AC-DOWNLOAD wewnętrzna
polityka-grupowa AC-DOWNLOAD atrybuty
serwer-dns wartość 192.168.99.155 192.168.99.130
vpn-filter wartość VPN-Filter
protokół-tunelu vpn ssl-client
polityka-split-tunnel tunnelall
wartość-default-domain ashes.cc
pule-adresowe wartość vpn-pool
adres-scep-forwarding-url wartość http://ise.ashes.cc:9090/auth/caservice/pkiclient.exe
webvpn
anyconnect ssl dtls włącz
anyconnect mtu 1300
anyconnect keep-installer zainstalowany
anyconnect ssl keepalive 20
anyconnect ssl rekey czas brak
anyconnect ssl rekey metoda ssl
anyconnect dpd-interval klient 30
anyconnect dpd-interval brama 30
anyconnect ssl kompresja lzs
anyconnect dtls kompresja lzs
anyconnect moduły wartość iseposture
anyconnect profile wartość SECUREBANK typ użytkownika
!
grupy-tunelowe DefaultWEBVPNGroup atrybuty ogólne
pula-adresów vpn-pool
grupa-serwerów-do-autoryzacji ISE
grupa-serwerów-do-rachunkowości ISE
domyślna-polityka-grupowa AC-DOWNLOAD
włączenie-scep-kwalifikowane
grupy-tunelowe DefaultWEBVPNGroup atrybuty webvpn
uwierzytelnienie aaa certyfikat
!
grupy-tunelowe SECURE-BANK-VPN typ zdalny-dostęp
grupy-tunelowe SECURE-BANK-VPN atrybuty ogólne
pula-adresów vpn-pool
grupa-serwerów-do-autoryzacji ISE
wtórna-grupa-serwerów-do-autoryzacji DUO
grupa-serwerów-do-rachunkowości ISE
domyślna-polityka-grupowa SECURE-BANK-VPN
nazwa-użytkownika-z-certyfikatu CN
wtórna-nazwa-użytkownika-z-certyfikatu I
grupy-tunelowe SECURE-BANK-VPN atrybuty webvpn
uwierzytelnienie aaa certyfikat
wypełnij-nazwę-użytkownika klienta
wtórne-wypełnienie-nazwy-użytkownika klienta ukryj używane-wspólne-hasło push
alias-grupy SECURE-BANK-VPN włącz
grupa-dns ASHES-DNS
!Przechodzimy teraz do ISE:
Konfigurujemy lokalnego użytkownika (można używać również AD/LDAP/ODBC itd.), dla uproszczenia utworzyłem lokalnego użytkownika w samym ISE i przypisałem w polu opis UDID PC z którego zezwolono mu na dostęp przez VPN. W przypadku używania lokalnej autoryzacji w ISE będę ograniczony tylko do jednego urządzenia, ponieważ nie ma zbyt wielu pól, jednak w zewnętrznych bazach autoryzacyjnych nie będzie takich ograniczeń.

Przyjrzymy się polityce autoryzacji, która jest podzielona na cztery etapy połączenia:
- Etap 1 — Polityka pobierania agenta AnyConnect i wydania certyfikatu
- Etap 2 — Polityka wstępnej autoryzacji Logowanie (z certyfikatu)/Hasło + Certyfikat z walidacją UDID
- Etap 3 — Autoryzacja wtórna przez Cisco DUO (MFA) na podstawie UDID jako nazwy użytkownika + Ocena stanu
- Etap 4 — Ostateczna autoryzacja w stanie:
- Zgodny;
- walidacja UDID (z certyfikatu + powiązanie z logowaniem),
- Cisco DUO MFA;
- Autoryzacja na podstawie logowania;
- Autoryzacja za pomocą certyfikatu;

Przyjrzymy się interesującemu warunkowi UUID_VALIDATED, który sprawdza, czy użytkownik autoryzowany rzeczywiście należy do komputera z dozwolonym UDID powiązanym w polu Opis konta użytkownika; warunki te wyglądają następująco:

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

Możemy sprawdzić, jak dokładnie UDID jest przekazywany od klienta AnyConnect poprzez sprawdzenie szczegółów sesji klienta w ISE. W szczegółach zobaczymy, że AnyConnect poprzez mechanizm ACIDEX przesyła nie tylko dane o platformie, ale również UDID urządzenia jako Cisco-AV-PAIR:

Zwróćmy uwagę na wydany użytkownikowi certyfikat i pole Initials (I), które jest używane do wzięcia go jako logina do wtórnej autoryzacji MFA w Cisco DUO:

Po stronie DUO Radius Proxy w logach wyraźnie widzimy, w jaki sposób przebiega zapytanie o autoryzację, jest ono wysyłane z użyciem UDID jako nazwy użytkownika:

Na portalu DUO widzimy pomyślną autoryzację:

A w właściwościach użytkownika mam ustawione ALIAS, który wykorzystałem do logowania, jest to właśnie UDID dozwolonego do logowania PC:

W rezultacie otrzymaliśmy:
- Wielofaktorową autoryzację użytkownika i urządzenia;
- Ochrona przed podmianą urządzenia użytkownika;
- Ocena stanu urządzenia;
- Potencjał do wzmocnienia kontroli z certyfikatem maszyny w domenie itd.;
- Złożona ochrona zdalnego miejsca pracy z automatycznie wdrażanymi modułami bezpieczeństwa;
Linki do artykułów z serii Cisco VPN:
Źródło: habr.com
