Útok na zranitelnosti AD CS ESC pomocí Metasploitu – 1. část
Každý jistě zná nástroje na zneužití chybně nakonfigurované certifikační autority (AD CS) typu Certipy nebo Rubeus. V tomto článku si popíšeme, jak lze nejběžnější zranitelnosti (ECS1-ESC4) exploatovat jednoduše z pohodlí Metasploitu.
Výše uvedený obrázek znázorňuje schéma, jak nejběžnější zranitelnosti fungují. V následujících částech projdeme jednotlivé kroky, počínaje výčtem šablon certifikátů, které server nabízí, a identifikací těch, které jsou zranitelné různými chybnými konfiguracemi a bezpečnostními chybami, dále vytvořením nových certifikátů pomocí těchto šablon certifikátů pomocí modulu icpr_cert v Metasploitu a nakonec použijeme tyto certifikáty k ověření v doméně jako doménový administrátor prostřednictvím Kerberos.
Teoretická část
Každá zranitelnost šablony certifikátu, o které zde bude řeč, má kód ESC, např. Tyto kódy ESC jsou převzaty z původního whitepaperu, který vydala společnost SpecterOps a který tyto útoky na šablony certifikátů, známé jako Certified Pre-Owned, zpopularizoval. V tomto dokumentu Will Schroeder a Lee Christensen popsali 8 různých doménových eskalačních útoků, o kterých zjistili, že je mohou provést prostřednictvím špatně nakonfigurovaných šablon certifikátů:
ESC1 - Eskalace pomocí No Issuance Requirements + Enrollable Client Authentication/Smart Card Logon OID šablon + CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT
ESC2 - Eskalace pomocí No Issuance Requirements + Enrollable Any Purpose EKU or no EKU
ESC3 - Eskalace pomocí No Issuance Requirements + Certificate Request Agent EKU + no enrollment agent restrictions
ESC4 - Eskalace pomocí špatně nakonfigurovaných šablon
ESC5 - Eskalace pomocí zranitelného PKI AD Object Access Control
ESC6 - Eskalace pomocí EDITF_ATTRIBUTESUBJECTALTNAME2 nastavení na CA + No Manager Approval + Enrollable Client Authentication/Smart Card Logon OID šablon
ESC7 – zranitelná validace přístupu k certifikační autoritě
ESC8 - NTLM Relay na AD CS HTTP endpointy
Později vyšel další blog od Olivera Lyaka, který objevil ESC9 a ESC10, další dvě zranitelnosti, které mohou umožnit běžným uživatelům v doméně zneužít chybnou konfiguraci šablon certifikátů k získání oprávnění doménového administrátora.
ESC9 - No Security Extension - CT_FLAG_NO_SECURITY_EXTENSION flag nastaven vmsPKI-EnrollmentFlag. TakéStrongCertificateBindingEnforcementnení nastaven na hodnotu 2 neboCertificateMappingMethodsobsahuje UPN flag.
ESC10 – Zranitelné mapování certifikátů -HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel CertificateMappingMethods obsahuje UPN bit s hodnotu0x4 neboHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc StrongCertificateBindingEnforcement je nastaven na0.
Nakonec tu máme ESC11, kterou objevila společnost Compass Security.
ESC11 - Relaying NTLM na ICPR - Relaying NTLM autentizace na nezabezpečené RPC interface je povoleno díky chybějícímuIF_ENFORCEENCRYPTICERTREQUEST flagu naConfig.CA.Interface.Flags.
V současné době Metasploit podporuje pouze útoky na ESC1, ESC2, ESC3 a ESC4. Proto se tento článek zabývá pouze zneužitím ESC1 až ESC4.
Před pokračováním je třeba poznamenat, že ESC1 se mírně liší od ESC2 a ESC3, jak je uvedeno na výše uvedeném diagramu. Je to proto, že v ESC1 má člověk kontrolu nad polem subjectAltName ve vygenerovaném certifikátu, které je také známé jako pole SAN. Toto pole umožňuje určit, jako kdo se má certifikát ověřovat. Útočníkovi tedy stačí toto pole upravit a může získat certifikát, který mu umožní ověřit se jako libovolný uživatel.
ESC2 je ve všech ohledech podobný ESC1, liší se však v jedné klíčové oblasti. Na rozdíl od zranitelných šablon certifikátů ESC1 totiž nelze u zranitelných šablon certifikátů ESC2 upravovat pole subjectAltName. Kromě toho šablony certifikátů ESC2 definují rozšířené použití klíče Any Purpose (EKU) nebo žádné EKU. Tato poslední část je důležitá, protože umožňuje útočníkovi využít šablonu zranitelného certifikátu ESC2 k vytvoření nového certifikátu, který lze použít k autorizaci pro přihlášení do domény prostřednictvím systému Kerberos jménem jakéhokoli jiného uživatele, a tím mu umožnit přístup do domény jako tomuto uživateli. Všimněte si, že certifikáty, které vůbec neobsahují EKU, budou muset být důvěryhodné pro objekt NTAuthCertificates (což ve výchozím nastavení nebudou), jinak nové certifikáty vytvořené pomocí zranitelné šablony certifikátu ESC2 nebudou pro ověřování domény fungovat. Toto omezení se netýká těch certifikátů zranitelných vůči ESC2, na které byla použita šablona Any Purpose EKU.
Další případ ESC3 je dosti podobný případu ESC2, liší se však ve dvou ohledech: zneužívá se jiný druh EKU a útočník musí ke zneužití zranitelnosti použít dvě různé šablony certifikátů s chybnou konfigurací. Tentokrát se jedná o EKU Certificate Request Agent EKU, alias OID 1.3.6.1.4.1.311.20.2.1, který umožňuje žádat o certifikát jménem jiného uživatele, což se může zdát neobvyklé, ale v prostředí společnosti Microsoft se jedná o běžný scénář. Ke zneužití této EKU musí mít útočník k dispozici následující dvě zranitelné šablony certifikátů:
Šablona certifikátu, která má všechna stejná oprávnění jako ESC1, ale má také nastavenou Certificate Request Agent EKU, alias OID 1.3.6.1.4.1.311.20.2.1. Tato šablona certifikátu je ve výstupu modulu ldap_esc_vulnerable_cert_finder, který budeme používat později, označena jako ESC3_TEMPLATE_1.
Šablona certifikátu, která umožňuje zápis uživatelům s nízkými právy a má zakázané schvalování správcem, stejně jako ESC1. Má však také buď:
Schéma šablony 1
Schéma šablony 2 nebo vyšší a Application Policy Issuance Requirement vyžadující Certificate Request Agent EKU, takže ho mohou vystavit pouze ti, kteří mají certifikát s tímto požadavkem. Musí také definovat EKU, která umožňuje ověřování domény, stejně jako ESC1, a na daném serveru certifikační autority (CA) nesmí být žádná omezení zápisu. Tato šablona certifikátu je ve výstupu modulu ldap_esc_vulnerable_cert_finder, který budeme používat později, označena jako ESC3_TEMPLATE_2.
Pokud jsou obě tato kritéria splněna, může se útočník zaregistrovat do jedné ze zranitelných šablon certifikátů ESC3_TEMPLATE_1 jako uživatel s nízkými právy, aby získal certifikát, který mu udělí oprávnění Certificate Request Agent. Tato oprávnění pak může použít k registraci do zranitelné šablony certifikátu ESC3_TEMPLATE_2 a požádat o certifikát jménem jiného uživatele, například správce domény, a využít skutečnosti, že šablona certifikátu umožňuje ověřování domény, k přihlášení do domény prostřednictvím systému Kerberos jako tento uživatel.
Praktická část
Nejprve je nutné nejprve najít seznam zranitelných šablon, které v doméně existují. Za tímto účelem spustíme modul auxiliary/gather/ldap_esc_vulnerable_cert_finder. Tento modul se připojí k serveru LDAP na cílovém řadiči domény (DC) a spustí sadu dotazů LDAP, aby shromáždil seznam serverů certifikačních autorit (CA) a zranitelných šablon certifikátů, které poskytují k zápisu. Poté se také dotáže na oprávnění certifikační autority i šablony certifikátů, aby zjistil, kteří uživatelé nebo skupiny mohou danou šablonu certifikátu použít ke zvýšení svých oprávnění. V současné době je modul schopen identifikovat techniky ESC1 až ESC3.
Mějte však na paměti, že ve hře jsou dvě sady oprávnění. Existuje jedna sada oprávnění na serveru certifikační autority, která řídí, kdo se může zapsat do jakékoli šablony certifikátu z tohoto serveru, a druhá sada oprávnění, která řídí, kdo se může zapsat do konkrétní šablony certifikátu, která se vztahuje na samotnou šablonu certifikátu. Proto modul také určí, kteří uživatelé se mohou zapsat do konkrétní šablony na konkrétním serveru certifikační autority, aby bylo co nejjasnější, ke kterým uživatelům nebo skupinám je třeba mít přístup, aby bylo možné zranitelnou šablonu certifikátu zneužít.
Následující obrázek zjednodušeně popisuje proces identifikace.
Pro spuštění modulu zadejte přihlašovací údaje doménového uživatele a nastavte RHOSTS na adresu jedné z IP adres řadiče domény (DC) a zadejte příkaz run. Modul se tak přihlásí k serveru LDAP v cílovém DC a vypíše seznam zranitelných šablon certifikátů a serverů certifikačních autorit, které jsou k dispozici, a také oprávnění, která jsou pro zápis do těchto šablon certifikátů vyžadována. Níže je uveden ukázkový výstup spuštění proti testovacímu serveru:
Z výše uvedeného výstupu lze zjistit, že šablona certifikátu SubCA je zranitelná několika útoky. Zatímco však vydávající certifikační autority umožňují vydat tento certifikát jakémukoli ověřenému uživateli, oprávnění šablony certifikátu brání tomu, aby si vystavit pomocí této šablony mohl kdokoli jiný než správci domény a podnikoví správci. V tomto okamžiku tedy pro nás šablona není až tak užitečná.
Přejdeme-li k další šabloně certifikátu, vidíme, že šablona ESC1-Template je zranitelná vůči útoku ESC1, má oprávnění na samotné šabloně, která umožňují zápis libovolnému ověřenému uživateli domény, a má jednu vydávající certifikační autoritu, spatnadomena-WIN- BR0CCBA815B-CA, dostupnou na adrese WIN-BR0CCBA815B.spatnadomena.com, která umožňuje zápis libovolnému ověřenému uživateli. To znamená, že každý uživatel, který je ověřen v doméně, může tuto šablonu využít pomocí útoku ESC1 a zvýšit tak svá oprávnění.
Při pohledu na šablonu ESC2 vidíme stejný příběh, tentokrát je však šablona zranitelná útokem ESC2. ESC3-Template1 je také stejná, ale je zranitelná útokem ESC3_TEMPLATE_1 a ESC3-Template2 je stejná, ale je zranitelná útokem ESC3_TEMPLATE_2.
Vidíme také, že šablona User je zranitelná vůči útokům ESC3_TEMPLATE_2, a skutečnost, že ji lze vystavit od uživatelů domény a že spatnadomena-WIN-BR0CCBA815B-CA umožňuje zápis do ní jakémukoli ověřenému uživateli, potvrzuje teorii, že ji může využít jakýkoli ověřený útočník k útoku ESC3_TEMPLATE_2.
Zajímavá je také šablona Machine, která umožňuje zápis do ní libovolnému počítači připojenému k doméně a jejíž vydávající certifikační autorita umožňuje požádat o ni libovolnému ověřenému uživateli.
Díky tomu máme nyní k dispozici seznam certifikátů, které lze využít ke zvýšení oprávnění. Dalším krokem je použití modulu ipcr_cert k vyžádání certifikátů pro ověření pomocí zranitelných šablon certifikátů.
ESC1
Získat certifikát jako aktuální uživatel je sice super, ale ve skutečnosti chceme eskalovat oprávnění. Naštěstí to můžeme udělat pomocí modulu icpr_cert také. Jen musíme nastavit volby ALT_SID a ALT_UPN, abychom určili, jako kdo se chceme oěřit. Všimněte si, že to funguje pouze se šablonami certifikátů, které jsou zranitelné vůči ESC1 kvůli tomu, že mají nastavený příznak CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT.
Pokud víme, že název domény je spatnadomena.com a správce této domény se jmenuje Administrator, provedeme to následovně:
Pomocí modulu kerberos/get_ticket pak můžeme jako správce domény Administrator získat Kerberos ticket (TGT). Toto bude popsáno v druhé části článku.
ESC2
Z předchozího výčtu víme, že zranitelné vůči ESC2 jsou následující šablony certifikátů:
SubCA - není zneužitelný, protože pro zápis tohoto certifikátu musíte být Domain Admin nebo Enterprise Admin.
ESC2-Template - vystavitelný jakýmkoli ověřeným uživatelem, který je součástí skupiny Domain Users, tedy jakýmkoli ověřeným uživatelem domény.
ESC2-Template použijeme k získání TGT jako doménový administrátor.
K tomu použijeme modul ipcr_cert a nastavíme obvyklé možnosti, budeme jej však muset spustit dvakrát. Je to proto, že v případě ESC2 nemůžeme použít zranitelnost pro vyžádání ověřovacích certifikátů jako ostatní uživatelé, aniž by byl v šabloně nastaven příznak CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT. Místo toho můžeme použít příznak Any Purpose EKU nebo SubCA EKU, které jsou nastaveny na těchto certifikátech, a ověřit se v doméně jako uživatel, který o certifikát požádal. Nejprve tedy získáme zranitelný certifikát ESC2 a poté zneužijeme možnosti použít tento certifikát pro libovolný účel k tomu, abychom následně požádali o certifikát jménem jiného uživatele a použili tento certifikát jako formu ověření pro tuto operaci.
Při prvním spuštění nastavíme obvyklé údaje RHOSTS, CA a CERT_TEMPLATE, přičemž se ujistíme, že CERT_TEMPLATE je nastaven na zranitelnou šablonu certifikátu ESC2-Template, a zadáme platné přihlašovací údaje. Tím získáme certifikát pro našeho aktuálního uživatele, který je založen na zranitelné šabloně ESC2-Template:
Dále musíme použít získaný soubor PFX k vyžádání dalšího certifikátu pro ověření jménem jiného uživatele. Pomocí volby PFX zadáme soubor PFX a pomocí nastavení ON_BEHALF_OF zadáme uživatele, jehož jménem se chceme ověřit. Nakonec změníme šablonu certifikátu na jinou šablonu certifikátu, do které se můžeme zapsat. Zde by měl fungovat výchozí certifikát User, protože umožňuje zápis libovolnému ověřenému uživateli domény.
Pomocí modulu kerberos/get_ticket pak můžeme jako správce domény Administrator získat Kerberos ticket (TGT). Toto bude popsáno v druhé části článku, stejně tak, jako další zranitelnosti ESC3 a ESC4.