www.SAMURAJ-cz.com 

23.04.2024 Vojtěch Translate to English by Google     VÍTEJTE V MÉM SVĚTĚ

Články

FortiGate SSL VPN Host Check - kontroly klienta při připojení

Neděle, 03.05.2020 09:05 | Samuraj - Petr Bouška |
V tomto článku doplníme poslední část k dříve popsanému vytvoření SSL VPN na FortiGate. Budeme se věnovat kontrolám klienta při připojení do SSL VPN. Na klientovi můžeme ověřit řadu věcí a podle výsledku kontroly rozhodnout, zda se může nebo nemůže připojit do VPN. Kontroly můžeme provádět pouze na operačním systému Windows (něco málo na Macu). Ověřovat můžeme verzi operačního systému, přítomnost antiviru a firewallu, klientskou MAC adresu, existenci určitého souboru, procesu nebo klíče v registrech.

Pozn.: Popis v článku vychází z FortiGate FG-300E s FortiOS verzí 6.2.3. Který je nakonfigurovaný jako FGCP cluster a využívá VDOM.

Host Check, aneb kontroly klienta při připojení na portál

FortiGate, ve spolupráci s FortiClientem, umožňuje v průběhu přihlašování ověřit různé parametry na klientovi a podle výsledku kontroly teprve povolit připojení do SSL VPN. Fortinet tyto kontroly/informace souhrnně označuje jako Host Check. I když jsem v dokumentaci FortiClienta žádnou zmínku o této vlastnosti nenalezl.

Kontrolovat můžeme určité verze OS (Windows a Mac), na Windows přítomnost Antiviru a Firewallu, klientskou MAC adresu, přítomnost určitého souboru, procesu nebo klíče v registrech.

Nastavení se provádí v rámci SSL-VPN Portal a většinu věcí musíme provést pomocí příkazové řádky (CLI), pouze malou část lze nastavit v GUI.

Pozn.: Stále si stěžuji na dokumentaci Fortinetu, tak pro tuto oblast je to ještě horší. Řada věcí se musí konfigurovat v CLI a dokumentace příkazů je téměř nulová. Takže můj popis vychází z testů a popisuje moji představu fungování.

Jakou verzi FortiClient použít a chybové hlášky

Je tu jedna zásadní a důležitá věc, která mne stála týden času. Pokud používáme zdarma verzi klienta, tak musíme použít FortiClient 6.0.x (testoval jsem 6.0.9) a ne FortiClient VPN 6.2.x (zkoušel jsem 6.2.6). Od verze FortiClient 6.2.0 začalo jít o placený produkt, který musí být řízený pomocí EMS (Enterprise Management Server). Fortinet dává k dispozici zdarma pouze omezenou verzi FortiClient VPN 6.2. Ta neobsahuje jiné komponenty než SSL a IPsec VPN klient (i když je instalační balíček stejně velký jako plný FortiClient), ale i tyto možnosti jsou omezené.

Tento klient (FortiClient VPN 6.2.x) nepodporuje žádnou funkci Host Check. Pokud je na portále Host Check zapnuto, a klient se pokusí přihlásit, tak vždy dostane chybu.

Unable to establish the VPN connection. The VPN server may be unreachable. (-14)
FortiClient VPN 6.2.x chyba při nepodporování Host Check

V žádné Fortinet dokumentaci jsem nenalezl informaci, že tuto verzi klienta nelze použít pro kontroly na klientovi. Takže jsem dlouho řešil, proč mi žádná kontrola nefunguje. Až jsem v jedné diskuzi narazil na malou zmínku a vyzkoušel jsem starší verzi klienta. A vše začalo fungovat. Chtěl jsem k tomu nalézt nějakou informaci od Fortinetu. Chvíli jsem myslel, že jde o funkci Endpoint Telemetry, kde je u vlastností FortiClient EMS and FortiGate Endpoint Licenses poznámka Requires FortiClient to be managed by EMS. Ale tato funkce je patrně něco jiného a stejná poznámka je i u starší verze.

Pokud máme verzi FortiClient, který podporuje kontroly klienta, a nějaká kontrola je nastavena. Tak v případě, že kontrola neprojde, dostaneme chybu.

Your PC does not meet the host checking requirements set by the firewall. Please check that your OS version or antivirus
 and firewall applications are installed and running properly or you have the right network interface. (-455)
FortiClient 6.0.x chyba pokud neprojde Host Check kontrola

Při testech jsem ještě narazil na bug, který se projevil ve FortiClient 6.0.9 i 6.2.6 (takže je to možná chyba FortiOS 6.2.3). Pokud mám speciální Realm, kde mám zapnutou autentizaci certifikátem. A standardní (kořenový) Realm, kde certifikát vyžadován není, kam se nyní přihlašuji. K oběma je přiřazený portál, kde je nějaká kontrola hosta. Tak když kontrola neprojde (tedy na 6.2.6 vždy), tak vrátí nesmyslnou chybu, že je potřeba použít certifikát. Pokud kontrola projde, tak samozřejmě certifikát nevyžaduje.

The server you want to connect to requests identification, please choose a certificate and try again. (-455)
FortiClient bug při Host Check a certifikát

Kontroly pro nepodporovaný OS a webový prohlížeč

Pro využití funkce Host Check potřebujeme OS Windows (Linux a Mac jsem zatím nezkoušel, ale v dokumentaci FortiOS 5.2 je poznámka, že kontrola integrity hosta je možná pouze pro klienty běžící na platformě Microsoft Windows, a v jednom KB se uvádí, že je podporován pouze Windows klientský OS nikoliv Windows Server) a aplikaci FortiClient.

Obecně další možnost je připojení prohlížečem k Web VPN. Ve webu žádné kontroly nefungují (dokumentace FortiOS 5.2 sice uvádí, že Host Check je aplikovatelný na Web VPN i Tunnel VPN, někde jsem četl, že je tam i plugin pro prohlížeč, ale mě nic nefunguje), přesto se přihlásíme. Ale toto chování můžeme změnit, když vypneme přeskočení kontrol pro prohlížeč. Na druhou stranu můžeme chtít, aby se kontroly prováděly pouze při navázání tunelu, ale připojení na web fungovalo vždy (nabízí omezené funkce).

config vpn ssl web portal
  edit "VPN1"
    set skip-check-for-browser disable
  next
end

Mobilní klienti (testoval jsem Android, Legacy i nového klienta) jsou patrně brány jako nepodporovaný OS. Protože po nastavení kontrol klienta (které nemohou projít) se z Android klienta připojíme. Ve chvíli, kdy vypneme přeskočení kontrol pro nepodporovaný OS, tak se již nepřipojíme a ani nedostaneme žádnou informační chybu. Je to možnost, jak jednoduše zablokovat připojení z mobilních klientů (a možná i dalších OS).

config vpn ssl web portal
  edit "VPN1"
    set skip-check-for-unsupported-os disable
  next
end

MAC Host Check - kontrola klientských MAC adres

Dokumentace vpn ssl web portal, Technical Tip: MAC host check on SSL VPN, Additional configuration options 6.0 - Host Check, Additional configuration options 5.2 - Host Check

parametrech portálu můžeme konfigurovat omezení, že je možné připojení pouze z určitých MAC adres. Když se vzdálený klient přihlašuje na portál, tak FortiGate ověří jeho klientskou MAC adresu a pouze některá zařízení se připojí do tunelu. Vypadá to, že se kontrolují MAC adresy všech síťových adaptérů klienta (je tedy jedno, zda v konfiguraci použijeme Ethernet nebo Wireless adaptér).

Konfigurace se provádí v CLI. Povolíme kontrolu MAC adres a nastavíme akci pro případ, že adresa odpovídá dále definovanému pravidlu. Vytvoříme pravidla, která obsahují MAC adresy. Zadat můžeme přímo MAC adresu nebo podmnožinu MAC adres.

MAC adresách se jako oddělovač musí použít dvojtečka, více adres oddělíme mezerou. Dokumentace takové detaily (jako vstupní formát či adresa jakého interface se použije) neuvádí, takže toto je vypozorováno z praxe. Pokud zkusíme v příkazu zadat MAC adresu třeba s pomlčkami místo dvojteček, tak hned dostaneme chybu, že to není validní MAC adresa.

config vpn ssl web portal
  edit <name>
    set mac-addr-check enable
    set mac-addr-action allow
    config mac-addr-check-rule
      edit <name>
        set mac-addr-list <addr1> <addr2>
        set mac-addr-mask {integer 1 - 48}
      next
    end
  end

Příklad konfigurace, kde jsou vyjmenovány povolené tři MAC adresy.

config vpn ssl web portal
  edit "VPN1"
    set mac-addr-check enable
    set mac-addr-action allow
    config mac-addr-check-rule
      edit "Rule1"
        set mac-addr-mask 48
        set mac-addr-list 78:2b:cb:ac:2c:a3 00:09:0f:fe:00:01 00:05:9a:3c:7a:00
      next
    end
  end

Příklad pravidla, kde se používají podmnožiny (rozsahy) adres, který by měl pokrýt veškeré MAC adresy (pro test).

edit "Rule1"
  set mac-addr-mask 1
  set mac-addr-list 00:00:00:00:00:00 80:00:00:00:00:00
next

Debug informace

Kontrola MAC adres by měla být součástí funkce HostCheck. Bohužel se mi nepovedlo najít, jak by se dala debugovat tato funkce. Když zapneme debug pro SSL VPN

diagnose debug application sslvpn -1
diagnose debug enable

a klient je FortiClient VPN 6.2.6, tak se v logu objeví pouze následující.

[9314:FWINT:41b]login_succeeded:523 redirect to hostcheck
[9314:FWINT:41b]User Agent: FortiSSLVPN (Windows NT; SV1 [SV{v=02.01; f=07;}])

Žádná informace ani o tom, že selhalo ověření MAC adresy nebo vůbec Host Check, natož něco detailnějšího. Pokud máme klienta FortiClient 6.0.9, tak je situace o malinko lepší.

[9314:FWINT:6ae]login_succeeded:523 redirect to hostcheck
[9314:FWINT:6ae]User Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) [SV{v=01.01;}]
[9314:FWINT:6ae]req: /remote/hostcheck_validate
[9314:FWINT:6ae]host check result:0 0000,10.0.18362,00:05:9a:3c:7a:00|00:09:0f:aa:00:01|2c:d0:5a:b8:42:db

Poznámky

Když mi zpočátku kontrola MAC adres vůbec nefungovala, tak jsem pročítal různá fóra. Našel jsem jen pár příspěvků, většinou k verzi FortiOS 5.2. Kde lidé píší, že to částečně funguje, ale pro některé klienty se špatně načítá MAC adresa (je tam zmíněn i nějaký oficiální bug). Také často uvádí, že jim nefunguje blokování pro připojení z mobilních zařízení, která se připojí vždy. To jsem zjistil, že způsobuje výchozí natavení, kdy se nemá kontrola provádět na nepodporovaném OS (již popsáno výše). Ale že jsou mobilní klienti nepodporovaný OS, mi přijde velmi špatné.

config vpn ssl web portal
  edit "VPN1"
    set skip-check-for-unsupported-os disable
    set skip-check-for-browser disable
  next
end

OS Host Check - omezení na určitou verzi OS

Dokumentace Verifying remote user OS and software, vpn ssl web portal, vpn ssl web host-check-software, Additional configuration options 6.0 - Host Check, Additional configuration options 5.2 - Host Check

FortiClient nám může zjistit verzi operačního systému a případně i instalované opravy. Bohužel podpora OS je omezená, asi na Windows a Mac. Tady mi hlavně vadí, že se nedetekují mobilní OS. Konfigurace se dá provést v GUI a CLI.

  • (VDOM) > VPN > SSL-VPN Portals
  • zatrhneme Restrict to Specific OS Versions
  • vidíme tabulku s některými verzemi Windows a Mac, můžeme nastavit Allow, Deny, Check up to date
FortiGate SSL-VPN Portals - Restrict to Specific OS Versions

Debug informace a verze Windows

Když zapneme debug SSL VPN, a máme podporu na straně klienta, tak se v jednom řádku loguje výsledek kontroly. Druhá hodnota je právě verze Windows (BTW opět jsem nikde nenalezl popis tohoto debug řádku).

[9315:FWINT:6d0]host check result:0 0000,10.0.17134,00:05:9a:3c:7a:00|00:ff:8b:e3:54:fa

V tomto formátu si ji můžeme zobrazit třeba příkazem systeminfo.exe

OS Version: 10.0.17134 N/A Build 17134

Konfigurace pomocí CLI

Při konfiguraci pomocí příkazové řádky nejprve zapneme kontrolu OS a pak definujeme chování pro jednotlivé podporované verze OS. Seznam předdefinovaných OS (který nemůžeme měnit) se nabídne

FW1 (VPN1) # config os-check-list ?
name   Name.
macos-catalina-10.15  
macos-high-sierra-10.13  
macos-mojave-10.14  
macos-sierra-10.12  
os-x-el-capitan-10.11  
os-x-mavericks-10.9  
os-x-yosemite-10.10  
windows-7  
windows-8  
windows-8.1  
windows-10  
windows-2000  

Konfigurace v CLI je uvedena níže. Výchozí akce je povolení (Allow). Pokud zvolíme check-up-to-date, tak můžeme také kontrolovat Build / Patch Level. Minimální hodnotu zadáváme v příkazu latest-patch-level. Pro Windows 10 se kontroluje číslo sestavení uvedené ve verzi OS. V příkladu výše Build 17134, když nastavíme hodnotu 17000, tak je test OK, hodnota 18000 již neprojde.

config vpn ssl web portal
  edit "VPN1"
    set os-check enable
    config os-check-list "windows-10"
      set action check-up-to-date
      set tolerance 0
      set latest-patch-level 17000
    end
  next
end

AV, FW Host Check - kontrola přítomnosti antiviru a firewallu

Dokumentace SSL VPN tunnel mode host check, , Additional configuration options 6.0 - Host Check, Additional configuration options 5.2 - Host Check, vpn ssl web portal, vpn ssl web host-check-software

Další kontrola na klientovi, kterou může provádět FortiClient (správný klient na správném OS) ve spolupráci s FortiGate, je přítomnost bezpečnostního SW obecně Antivirus a Firewall. Konfigurace se provádí pro určitý portál. Základní povolení můžeme provést v GUI, ale všechny detaily nastavíme až v CLI.

  • (VDOM) > VPN > SSL-VPN Portals
  • zatrhneme Host Check
  • volíme AntiVirus, Firewall nebo oboje
FortiGate SSL-VPN Portals - Host Check AntiVirus, Firewall nebo oboje

Podle Technical Tip: FortiClient Host Checker Support for Windows Operating Systems including Windows Server (článek také popisuje, jak otestovat, že Windows detekuje náš AV/FW) detekuje FortiClient bezpečnostní software pomocí Windows Security Center (čte WMI namespace nebo použije Win32API funkci) a GUID produktu. Ve FortiOS je definována řada produktů, pokud zapneme obecně kontrolu AV či FW, tak se (pravděpodobně) detekuje přítomnost libovolného z nich. Seznam si můžeme vypsat v CLI (v příkladu níže je pouze první položka).

FW1 (host-check-software) # show 
config vpn ssl web host-check-software
  edit "FortiClient-AV"
    set guid "1A0271D5-3D4F-46DB-0C2C-AB37BA90D9F7"
  next

Konfigurace pomocí CLI

Pomocí CLI můžeme nastavit to samé jako v GUI, zapnutí pomocí hodnot av, fw či av-fw.

config vpn ssl web portal
  edit "VPN1"
    set host-check [none|av|fw|av-fw|custom]
  next
end

Ale v CLI můžeme nastavit i více. Můžeme zadat detekci pouze určitého AV/FW pomocí custom a předdefinovaného produktu. Můžeme přidat i periodické opakování kontroly, hodnota 0 znamená kontrolu pouze při připojení.

config vpn ssl web portal
  edit "VPN1"
    set host-check custom
    set host-check-policy AVG-Internet-Security-FW Trend-Micro-FW ESET-Smart-Security-AV
    set host-check-interval 0
  next
end

Přidání nové bezpečnostní aplikace

Pokud náš bezpečnostní software není v seznamu na FortiGate, tak jej můžeme doplnit. Návod, jak zjistíme GUID produktu pomocí wbemtest.exe je v článku Adding custom host check definitions for FortiGate SSL VPN host check feature (skoro to samé Technical Note: How to add non listed 3rd Party AntiVirus and Firewall product to the FortiGate SSL VPN Host check). Vytvoříme novou definici a případně můžeme omezit i určitou minimální verzi produktu.

config vpn ssl web host-check-software
  edit MyAV
    set type av
    set guid "768124D7-F5F7-6D2F-DDC2-94DFA4017C95"
    set version "4.9"
  next
end

Debug informace

Když zapneme debug SSL VPN, a máme podporu na straně klienta, tak se v jednom řádku loguje výsledek kontroly. První hodnota ukazuje výsledek kontroly (je to stejné jako pro ověření souboru, registrů nebo procesu). Pokud kontrola neprojde, tak je 4 0000, pokud projde 4 0100.

[9314:FWINT:6e2]host check result:4 0000,10.0.17134,78:2b:cb:ac:2c:a3

File, Registry, Process Host Check - kontrola existence klíče v registrech, souboru nebo procesu

Dokumentace vpn ssl web portal, vpn ssl web host-check-software, Technical Tip: Configuring custom registry checks for SSL VPN, Technical Tip: Checking AD domain of host connecting to a SSL VPN tunnel, Configuring SSL VPN host check based on MD5 fingerprint, Additional configuration options 6.0 - Host Check, Additional configuration options 5.2 - Host Check

Pomocí vlastního pravidla můžeme také kontrolovat existenci a případně hodnotu nějakého klíče v registrech. Existenci souboru, případně včetně MD5 hashe. Nebo přítomnost běžícího procesu. Veškerá konfigurace se provádí v CLI. V rámci pravidla můžeme provádět více kontrol či ověřovat více položek.

Obecná konfigurace vypadá následně, řada příkazů zůstává ve výchozích hodnotách.

config vpn ssl web host-check-software
  edit <name> 
    config check-item-list
      edit <id>
        set action [require|deny]
        set type [file|registry|process]
        set target {string}
        set version {string}
        set md5s <id1>, <id2>, ...
      next
    end
  next
end

Kontrola klíče v registrech

Pro kontrolu registrů musíme zadat cestu v registrech (Key a Subkey) a jméno hodnoty (Value Name), případně můžeme kontrolovat data hodnoty (Value Data). Formát zadání

Key\Subkey\Subkey:ValueName==ValueData

Při zadávání v CLI musíme pro cestu používat jedno lomítko, ale pokud si vypíšeme konfiguraci, tak uvidíme lomítka zdvojená (ale pokud bychom je zdvojená zadali, tak se uloží čtyři). Místo názvů kořenových klíčů můžeme použít i jejich zkratky, například HKEY_LOCAL_MACHINE = HKLM, HKEY_CURRENT_USER = HKCU.

Příklad kontroly registrů. Hodnota, kde je uložen název domény.

config vpn ssl web host-check-software
  edit TestRegistry 
    config check-item-list
      edit 1 
        set type registry
        set target "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters:Domain==firma.local"
    next
  end
end

Aplikace pravidla

Aplikace kontrolního pravidla na portál se provede následně.

config vpn ssl web portal
  edit "VPN1"
    set host-check custom
    set host-check-policy "TestRegistry"
  next
end

Kontrola souboru

Pokud chceme kontrolovat přítomnost souboru. Tak zadáme cestu (s jedním lomítkem) a jméno souboru. Pokud chceme přesnější specifikaci, tak můžeme použít verzi souboru (nevím, jak se kontroluje, ale v příkladu níže stačí zadat 11 a funguje, 12 nefunguje). Případně kontrolovat MD5 hash souboru.

config vpn ssl web host-check-software
  edit TestFile
    config check-item-list
      edit 1 
        set type file
        set target "%programfiles%\internet explorer\iexplore.exe"
        set version "11.0.17134.1"
        set md5s "6465cb92b25a7bc1df8e01d8ac5e7596"
      next
  end
end

Kontrola aplikace/procesu

Poslední možnost je kontrolovat běžící aplikaci/proces. Identifikujeme názvem souboru a můžeme také omezit podle verze a MD5 hash.

config vpn ssl web host-check-software
  edit TestProcess
    config check-item-list
      edit 1 
        set type process
        set target "iexplore.exe"
      next
  end
end

Debug informace

Když zapneme debug SSL VPN, a máme podporu na straně klienta, tak se v jednom řádku loguje výsledek kontroly. První hodnota ukazuje výsledek kontroly pro ověření souboru, registrů nebo procesu. Pokud kontrola neprojde, tak je 4 0000, pokud projde 4 0100. Je to úplně stejné, jako při kontrole AV, FW. Čekal bych, že číslice 4 určuje druh kontroly, ale patrně ne. Řádky z logu

[9314:FWINT:6e2]login_succeeded:523 redirect to hostcheck
[9314:FWINT:6e2]req: /remote/hostcheck_validate
[9314:FWINT:6e2]host check result:4 0000,10.0.17134,78:2b:cb:ac:2c:a3
[9314:FWINT:6e2]rmt_hcvalidate_cb_handler:404 hostcheck validation failed
zobrazeno: 8352krát | Komentáře [3]

Autor:

Související články:

Fortinet FortiGate a další

Bezpečnostní řešení firmy Fortinet. Nejvíce zaměřeno na Next Generation Firewall (NGFW) FortiGate.

VPN - Virtual Private Network

Série článků, která obsahuje obecný popis technologie VPN. Rozebírá jednotlivé typy VPN, jako je Site to Site VPN a Remote Access VPN. A popisuje konfigurace na různých zařízeních.

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže.

Komentáře

  1. [1] PM

    Jak je to s temi verzemi a licencemi je popsane zde

    https://kb.fortinet.com/kb/documentLink.do?externalID=FD48147

    Čtvrtek, 21.10.2021 08:59 | odpovědět
  2. [2] Bárt

    S FortiClientem 7.0.7 se k SSL VPN nelze připojit, pokud je aktivní host-check nebo os-check.

    Pondělí, 12.09.2022 14:13 | odpovědět
  3. [3] Samuraj

    odpověď na [2]Bárt: Bohužel, těch chyb je tam zase více :-(. Například, když se využívá SAML ověření v externím prohlížeči, tak se většinou vyvolá 2x najednou (otevřou se 2 záložky).

    Čtvrtek, 15.09.2022 10:57 | odpovědět
Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách