Článek přečtěte do 7 min.

Microsoft konečně vydal záplatu jádra pro třídu zranitelností ovlivňujících Microsoft Windows od roku 2015. Tyto chyby zabezpečení vedou ke zvýšení oprávnění (EoP), což umožňuje účtu s uživatelskými právy získat oprávnění SYSTEM na zranitelném hostiteli. Hlavní příčinou tohoto útoku je podle blogu z roku 2015 schopnost běžného uživatelského účtu nahradit původní disk C:\ falešným umístěním symbolického odkazu pro systémové disky do mapy zařízení pro každou relaci přihlášení. Tento falešný disk bude během zosobnění následovat jádro namísto původního systémového disku. Více než pět měsíců poté, co byly vydány opravy těchto zranitelností, stále vidíme některé z jejich exploitů ve volné přírodě, protože je to velmi snadný způsob, jak rychle získat NT AUTHORITY\SYSTEM, a proto může být oblíbený u známých aktéři hrozby.

Konference BlackHat MEA

O těchto zjištěních jsme diskutovali na konferenci BlackHat MEA v listopadu 2023 a v prosinci 2023 a lednu 2024 našli dva exploity, které by stále mohly používat tento útočný povrch v neopravené verzi Windows. Oba exploity jsou zabaleny v UPX. Po analýze prvního jsme viděli, že se jedná o zabalenou verzi ukázky Google Project Zero PoC. Druhý vzorek byla zabalená verze veřejného PoC Secure Disclosure SSD , a to i pomocí stejného NamedPipe „\\\\.\\Pipe\\TyphoonPWN“ bez úprav. Cesty PDB pro oba vzorky jsou:

  • C:\Users\Administrator\source\repos\exp\x64\Release\exp.pdb
  • C:\VVS-Rro\CVEs\spool\BitsPoc\src\x64\Release\PoC_BITs.pdb

Níže zvýrazníme klíčové body a poté se zaměříme na to, jak zkontrolovat, zda byla některá ze zranitelností zneužita nebo zda došlo k nějakým pokusům o jejich zneužití, a vyjmenujeme oblíbené CVE zahrnuté v tomto zranitelném povrchu.

Mezi ovlivněné procesy a služby patří nativní služby Windows, které se ve výchozím nastavení spouštějí na většině verzí operačního systému.

Tyto zahrnují:

  • CSSS
  • Hlášení chyb systému Windows (WER)
  • Služba historie souborů
  • Služba přenosu informací na pozadí (BITS)
  • Print Spooler

Zranitelné procesy a služby Windows

Zranitelné procesy a služby Windows

Zneužití ovlivňující tento útočný povrch sdílí společnou logiku nebo vzorec, včetně:

  • Hledání DLL, která běží s integritou systému.
  • DLL má soubor manifestu s ohledem na izolaci.
  • Schopnost změnit kořenový adresář C:\ na zapisovatelný adresář pomocí symbolických odkazů.

CSSS | CVE-2022-22047

Tato chyba zabezpečení týkající se otravy mezipaměti kontextu aktivace vede k eskalaci místních oprávnění. Je to jedno z CVE, které bylo aktivně využíváno aktérem hrozby jménem  KNOTWEED | Džínové Tsunami .

Vrácení in-the-wild exploitu pro CVE-2022-22047 ukazuje:

  • Vykořisťování vytváří volání do CSSS.
  • Volání vyžaduje kontext aktivace pro privilegovaný spustitelný soubor a určuje škodlivý manifest.
  • Manifest používá nezdokumentovaný atribut XML manifestu s názvem loadFrom . Tento atribut umožňuje neomezené přesměrování knihoven DLL do libovolného umístění na disku, včetně umístění mimo normální vyhledávací cestu, aniž by bylo nutné měnit kořenový disk C:\.

Zde je podrobný blogový příspěvek od ZDI vysvětlující CSRSS Cache Poisoning.

CSSS | CVE-2022-37989

Druhá chyba zabezpečení zahrnující otravu mezipamětí CSRSS byla řešením pro první CVE-2022-22047. Po záplatě nezdokumentovaného atributu „LoadFrom“ existoval další atribut, který bylo možné zneužít k načtení souboru manifestu z cesty řízené uživatelem deklarováním závislého sestavení pomocí procházení cesty v atributu name .

Oprava pro CVE-2022-37989 byla jednoduchá: zkontrolujte, zda atribut name v závislosti obsahuje nějaké dopředné nebo zpětné lomítko, a nastavte příznak pro zastavení ukládání tohoto podezřelého manifestu do mezipaměti, pokud je zjištěno procházení cesty názvu. Toto CVE bylo objeveno ZDI.

Print Spooler je služba, která se standardně spouští téměř ve všech verzích Windows. Je zodpovědný za správu papírových tiskových úloh odeslaných z počítače na tiskárnu nebo tiskový server. Vrácení zneužití chyby zabezpečení CVE-2022-29104 Print Spooler ukazuje, že se jedná o ukázku .NET, která vytváří symbolický odkaz z C:\ na falešný kořenový adresář C:\Imprint. Ukázka byla nahrána do VirusTotal.

Falešná struktura disku C:\:

  • C:\ Imprint \Windows\system32
  • C:\ Imprint \Windows\WinSxS

Všechny složky ve složce Imprint jsou zapisovatelné, což útočníkovi umožňuje kontrolovat jejich obsah.

Procházení cesty je přidáno do „AssemblyIdentity“, aby ukazovalo na zapisovatelnou cestu Imprint.

Analýza zranitelnosti ukazuje, že:

  • Útočník může během zosobnění přemapovat kořenový disk (C:\) pro privilegované procesy.
  • Během zosobnění jsou všechny přístupy k souborům prováděny pomocí mapy zařízení DOS zosobněného procesu.
  • CSRSS používá pro generování aktivačního kontextu uživatelsky upravený manifest vedle sebe, namísto manifestu ve složce WinSxS C:\Windows\WinSxS.
  • Složka WinSxS ukládá více kopií systémových souborů a součástí.
  • Složka WinSxS poskytuje centrální umístění pro ukládání různých verzí systémových souborů, které sdílí více aplikací a procesů.
  • Složka WinSxS poskytuje stabilitu a kompatibilitu systému tím, že umožňuje různým aplikacím používat konkrétní verze souborů, které potřebují.
  • WinSxS se vyhýbá peklu DLL, problému, který nastává, když různé aplikace vyžadují různé verze stejné DLL.

Operační systém Windows používá manifest aplikace k určení, která verze je vhodná pro kterou aplikaci.

Manifest aplikace je uložen ve formátu XML a popisuje:

  • Závislosti spojené s aplikací.
  • Jaká oprávnění aplikace vyžaduje.
  • Jaká nastavení kompatibility aplikace podporuje.

Zmírnění CSRSS bylo povoleno pro soubory spoolsv.exe a printfilterpipelinesvc.exe  , aby zastavily zosobnění při načítání externích zdrojů a poté, co byly načteny externí zdroje, pokračovaly v zosobnění.

Po opravě CVE-2022-29104 byla objevena další chyba zabezpečení ovlivňující službu Print Spooler – CVE-2022-41073. Vrácení divokého zneužití této chyby zabezpečení ukazuje určitou manipulaci s XML pomocí procházení cesty k zapisovatelné cestě obsahující upravenou verzi  prntvpt.dll  načtenou službou Print Spooler.

Podle  Project Zero bylo do CSRSS přidáno zmírnění, záplata jednoduše zastavila jakékoli zosobnění před voláním LoadLibraryExW ve winspool!LoadNewCopy a poté jej obnovila.

Poté se vrátilo volání LoadLibraryExW :

NtOpenFile se volá s příznakem OBJ_IGNORE_IMPERSONATED_DEVICEMAP . Zastaví zosobnění při načítání jakýchkoli externích zdrojů při používání LoadNewCopy API. Zastavení zosobnění znamená, že privilegované procesy nebudou používat falešný kořenový adresář implementovaný procesem střední integrity a místo toho použijí původní kořenový adresář jednotky C:\, aby se zabránilo načítání nedůvěryhodných nebo škodlivých zdrojů.

Hlášení chyb systému Windows | CVE-2023-36874

Windows Error Reporting (WER) je privilegovaná služba, která analyzuje a hlásí různé softwarové problémy ve Windows. Hlavní příčinou zneužití zranitelnosti CVE-2023-36874 je CreateProcess API, když dojde k havárii, protože CreateProcess API lze oklamat, aby následoval falešný kořenový adresář a vytvořil proces z tohoto zapisovatelného falešného kořenového adresáře v kontextu privilegované služby WER. , což vede k eskalaci privilegií.

CVE-2023-36874 byl využíván ve volné přírodě a má několik publikovaných PoC . Exploit interaguje s rozhraním IWerReport COM a volá SubmitReport, pak je volán UtilLaunchWerManager, který volá CreateProcess. CreateProcess API je pak zranitelné vůči úpravám zařízení DoS.

Jakmile je zneužití k odeslání falešné zprávy o selhání spuštěno, skončí voláním zranitelného rozhraní CreateProcess API.

Služba historie souborů | CVE-2023-35359

Službu historie souborů lze použít k automatickému zálohování osobních složek a souborů, jako jsou dokumenty, obrázky a videa. Vrácení in-the-wild exploitu ukazuje, že když se služba File History Service spustí, zosobňuje aktuálního uživatele a poté načte DLL s názvem fhcfg.dll v rámci zosobnění. Tato knihovna DLL má „konfiguraci manifestu s vědomím aplikace“, která se pokouší načíst jiný prostředek s názvem msasn1.dll.  Zneužití začíná obvyklou technikou změny kořenového adresáře C:\ na falešný zapisovatelný kořenový adresář.

Hlášení chyb systému Windows – 2. exploit | CVE-2023-35359

Po záplatě první chyby zabezpečení systému Windows Error Reporting, která používala rozhraní CreateProcess API uvnitř privilegované služby WER a při vytváření procesu sledovala falešný kořen. Opravená služba WER začala používat CreateProcessAsUser namísto CreateProcess API. Po této opravě však protivníci našli jiný způsob, který by mohl za určitých podmínek vést k opětovnému použití CreateProcess, což bylo považováno za novou zranitelnost. Pokud byla například služba WER v systému označena jako zakázaná a v tomto systému existoval privilegovaný proces vydávající se za uživatele se střední integritou a během zosobnění dojde k neošetřené výjimce, která má za následek selhání, pokusí se selhání povolit WER. služba pro podávání zpráv.  Podrobná analýza tohoto CVE ukazuje, že se nezdá být zneužitelný.

Využití CVE-2023-35359

Využití CVE-2023-35359

BITS | CVE-2023-35359

Služba BITS (Background Intelligence Transfer Service) je zodpovědná za usnadnění asynchronního a prioritního přenosu souborů mezi klientem a serverem. BITS funguje na pozadí, což znamená, že může provádět přenosy souborů, aniž by přerušil uživatele nebo spotřeboval veškerou dostupnou síť.

Můžete si všimnout, že číslo CVE-2023-35359 se u posledních tří CVE nezměnilo, protože Microsoft se v posledním patchi rozhodl přiřadit stejné CVE všem zranitelnostem tohoto typu. Existují tedy různé zranitelnosti v různých procesech/službách, ale se stejným číslem CVE.

Časová osa procesu obcházení/záplatování od roku 2015 do srpna 2023

Časová osa procesu obcházení/záplatování od roku 2015 do srpna 2023

Jak byla aplikována záplata pro tento útočný povrch?

Oprava byla aplikována na ObpLookupObjectName,  aby zkontrolovala, zda je načtený prostředek souborový objekt a zda je volání ObpUseSystemDeviceMap úspěšné. Poté zosobnění ignoruje a použije SystemDevice.

ObpLookupObjectName zkontroluje FileObjectType následovaný voláním ObpUseSystemDeviceMap.

Funkce ObpUseSystemDeviceMap zkontroluje SystemDevice, které má být použito namísto zosobněného zařízení.

Jak zkontrolovat, zda byla zranitelnost zneužita nebo zda byly učiněny nějaké pokusy o její zneužití?

Při analýze většiny exploitů zaměřených na tento útočný povrch jsme pozorovali běžné chování, které by mohlo být použito jako indikátor toho, zda došlo k pokusům o zneužití:

  • Většina divokých exploitů vytváří zapisovatelnou složku uvnitř jednotky C:\ a struktura této složky napodobuje strukturu původní jednotky C:\, například:
    • C:\Windows\System32 → C:\FakeFolder\Windows\System32
    • C:\Windows\WinSxS → C:\FakeFolder\Windows\WinSxS
  • Takže nalezení zapisovatelné složky, která napodobuje strukturu složek jednotky C:\, může být indikátorem pokusu o zneužití.
  • Zkopírování souborů manifestu z původní složky WinSxS v  C:\Windows\WinSxS do zapisovatelného adresáře a jejich úprava může být dobrým indikátorem pokusu o zneužití.
  • Soubory manifestů, které obsahují nezdokumentované atributy XML, jako je „LoadFrom“ nebo soubory manifestu, které obsahují procházení cesty v atributu „name“,  mohou být platným znakem pokusu o zneužití.
  • Vytvoření symbolického odkazu z původní systémové jednotky na zapisovatelný adresář, zejména z procesů se střední integritou pomocí objektového adresáře \RPC Control\.

Zdroj: Kaspersky