tom@home.htb:~$

Blog o HTB

3 December 2020

Live credential extraction z procesní paměti

Úvod a kontext

Po prvním shellu většina lidí automaticky sahá po souborech: .env, config.php, id_rsa, history, vault databázi nebo registry. Jenže část nejcennějších tajemství na disku vůbec neleží. Leží v živém procesu:

Heist je čistý případ právě proto, že root nevzniká z konfiguračního souboru ani z exploitu služby. Vzniká z toho, že na serveru běží Firefox s aktivním přihlášením a jeho paměť obsahuje administrátorské tajemství.

Tenhle článek je o tom, jak přemýšlet o běžících procesech jako o credential store. Ne o dumpování paměti pro efekt, ale o situacích, kdy aktivní proces nese víc hodnoty než celý filesystem.

O čem tenhle článek je a o čem není

Tenhle text není LSASS průvodce ani forenzní příručka pro každou platformu. Je o užším a praktičtějším problému:

Je také důležité oddělit tohle téma od článku o klientských a desktopových artefaktech. Tam je těžiště v souborech typu KeePass, TeamViewer, OST nebo CliXml. Tady je těžiště v aktivním runtime stavu.

Proč jsou živé procesy tak cenné

Procesní paměť má několik vlastností, které z ní dělají vysoce hodnotný cíl:

To je důležitá obranná i útočná hranice. Když uživatel nebo admin udělá chybu a přihlásí se z nevhodného hostu, nemusí po sobě zanechat heslo v souboru. Stačí, že ho drží proces v paměti právě teď.

Heist: Firefox na serveru jako trezor s hesly

Na Heist byl první stabilní přístup otevřen přes WinRM účtem Chase. V tu chvíli ještě root nevyplýval z žádné lokální zranitelnosti. Rozhodující byly až běžící procesy:

Get-Process Fire*

Na serveru běželo několik procesů Firefoxu. To je samo o sobě silná indicie. Browser na serveru není normální provozní stav, obzvlášť pokud jde o server, na kterém se zároveň řeší helpdesk a administrace.

Tím vznikla správná pracovní hypotéza:

Proč tady dává smysl dump procesu

Procesní dump není univerzální první krok po footholdu. Dává smysl tehdy, když existuje konkrétní důvod věřit, že proces drží tajemství:

Na Heist byla situace přesně taková. Firefox neběžel na workstation uživatele, ale přímo na serveru. To znamená, že jakékoli uložené nebo právě použité přihlašovací údaje budou mít vyšší hodnotu než běžný desktopový šum.

Použitý postup byl přímočarý:

  1. identifikovat konkrétní PID,
  2. udělat dump procesu,
  3. a v dumpu hledat přihlašovací artefakty.

Heist: od dumpu ke konkrétnímu heslu

Na Heist se pro dump použil procdump64.exe a následně se nad výstupem hledaly řetězce související s loginem:

Administrator / 4dD!5}x/re8]FBuZ

To je klíčová praktická lekce. Hodnota dumpu nespočívá v tom, že vytvoříš obrovský binární soubor. Hodnota spočívá v tom, že už víš, co v něm hledáš:

Heist je v tomhle směru učebnicový: aktivní browser proces obsahoval přesně to tajemství, které pak otevřelo administratorský WinRM.

Sharp jako hraniční připomínka runtime kontextu

Sharp není čistý procesní dump případ jako Heist. Je ale užitečný jako připomínka, že běžící služba a její runtime kontext často řeknou víc než statické soubory.

U Sharp byla hlavní hodnota v kombinaci:

To není totéž jako vytáhnout heslo z dumpu Firefoxu. Ale je to stejný mentální model:

Heist je tedy hlavní case pro live credential extraction. Sharp doplňuje širší lekci, že runtime stav a živé procesy bývají pro post-exploitation podstatnější než pasivní filesystem.

Jak poznat, že proces stojí za bližší analýzu

Po footholdu dávají největší smysl tyto indikátory:

1. Interaktivní aplikace na neobvyklém hostu

Browser, mail klient nebo support GUI na serveru je silná stopa. Znamená to, že někdo host používá i jako pracovní stanici nebo jump host.

2. Proces zjevně souvisí s autentizací nebo správou

3. Na disku nic relevantního neleží, ale přístup zjevně existuje

Pokud víš, že se někdo přihlašuje do citlivé služby, ale nenacházíš config ani uložené heslo na disku, aktivní proces je logická další vrstva.

4. Proces je právě aktivní a dlouhodobě běžící

Krátké utility mívají menší hodnotu. Naopak dlouho běžící browser, support agent nebo GUI aplikace často drží stav dost dlouho na to, aby se dal analyzovat.

Co má v dumpu smysl hledat

Není účelné dump jen slepě „mít“. Praktický postup začíná tím, že máš hypotézu:

Typické cíle jsou:

Heist ukazuje, že někdy to může být až nepříjemně přímočaré: v dumpu prostě leží jméno a heslo.

Rozdíl proti artefaktům na disku

Je důležité držet hranici mezi dvěma blízkými tématy:

Diskové artefakty

Tyto věci existují i po restartu a tvoří relativně stabilní credential storage.

Live procesní stav

Tenhle článek řeší druhou skupinu. Je výbušnější, ale také dočasnější.

Obrana a hardening

1. Nepoužívat servery jako admin desktop

Browser, poštovní klient nebo jiné interaktivní GUI na serveru dramaticky zvyšují dopad prvního footholdu. Heist je přesně důkaz proč.

2. Omezit ukládání a autofill citlivých údajů v browseru

Pokud se privilegovaný účet používá přes browser, má být minimalizováno:

3. Chránit proti procesním dumpům a detekovat je

Na obranné straně je důležité sledovat:

4. Oddělit správní relace od kompromitovatelných hostů

Administrátor nemá otevírat citlivé panely z hostu, který zároveň slouží jako server pro méně důvěryhodnou službu.

5. Uvažovat o runtime stavu v threat modelu

Nestačí přemýšlet o souborech. Bezpečnostní model musí zahrnout i to, co drží aktivní procesy během práce administrátora nebo supportu.

Shrnutí klíčových poznatků

Co si odnést do praxe

tags: credentials - memory - processes - browser - post-exploitation