fbpx

Vykrádání hesel z webových prohlížečů Chrome/Firefox/IE/Edge

Asi není žádnou novinkou, že ukládat hesla do prohlížečů není úplně dobrý nápad, ale stále to lidé běžně dělají. Ať už proto, že neznají jinou variantu pro jejich ukládání nebo například netuší, jako moc snadné je hesla získat a to i vzdáleně. Cílem tohoto článku bude právě poukázat na to, jak lehce lze vykrást hesla z prohlížečů, jak to technicky na pozadí funguje a v poslední řadě několik tipů, jak je ukládat daleko bezpečněji.

 

Internet Explorer/Microsoft Edge

Pokud přistoupíme na webovou stránku, kde je nutné se přihlásit a zadáme naše uživatelské jméno a heslo, prohlížeč nám velice ochotně nabídne možnost heslo si uložit. Velice pohodlné, to ano. Navíc vše se ještě tváří tak, že přihlašovací údaje jsou uloženy zcela bezpečně a není se čeho obávat. Když si totiž otevřu nastavení v Edge a kliknu na spravovat hesla, vidím jen přihlašovací jméno a tečky namísto hesla. To stejné v případě, že si v ovládacím panelu otevřu Credential Manager a kouknu na Web Credentials, kde sice mám možnost heslo zobrazit, ale to vyžaduje zadání hesla k mému Windows účtu.

ukladani-hesel-credential-manager

 

Problém ale nastává ve chvíli, kdy využiji nějaký nástroj, který mi je hesla schopný vykrást. Jedním z nich je například VaultPasswordView od Nirsoft. Po spuštění se zobrazí všechny webové stránky, kam si uživatel přihlašovací údaje uložil a to včetně uživatelského jména i hesla.

zobrazena-hesla-internet-explorer-edge

 

Toto je schopný udělat každý (i bez znalosti hesla Windows účtu), kdo se dostane k počítači fyzicky nebo vzdáleně po síti a spustí program s administrátorskými právy. Ano, musí být admin, ale to je naprostá většina uživatelských účtů, pod kterými uživatelé jsou do Windows přihlášeni a to i často ve firemních prostředích. Pokud jsem u počítače fyzicky a není zašifrovaný disk, administrátorský účet si vyrobím snadno 🙂

 

Technical background

Windows ukládá hesla do Windows Vault, který přišel s Windows 7. Vault je uložený v cestě %localappdata%\Microsoft\Vault\<GUID> a je složen ze tří souborů. Policy.vpol, <GUID>.vsch (schema), <GUID>.vcrd (zašifrovaná hesla).

microsoft-vault

 

Ve schématu například vidíme, že poukazuje na Windows Web Password Credential a také jsou v něm uvedeny popisy k jednotlivým polím.

microsoft-vault-schema

<GUID>.vcrd je však šifrovaný a hesla v něm nejsou uložena v plain textu. Můžeme je rozšifrovat pomocí klíčů z policy.vpol, které ale šifruje Master key daného uživatele. Ten najdeme v %APPDATA%\Microsoft\Protect\%SID%. Nejdříve musíme zjistit, jaký je SID uživatele, abychom použili ten správný Master key. S tím nám pomůže příkaz whoami /all

 

Ve složce Protect je tedy zjevné, kde přesně je Master Key pro našeho uživatele uložen.

master-key-dpapi-slozka

 

Smůla je, že i Master Key je šifrovaný pomocí AES algoritmu a to heslem uživatele, přesněji tedy jeho SHA-1 hashem (v případě doménového uživatele MD4 hashem). Hash můžeme obstarat z LSASS procesu. 

mimikatz-sekurlsa-logonpasswords

Pokud tedy nyní rozšifrujeme Master Key uživatelovým SHA-1 hashem a poté pomocí Master Key rozšifrujeme Vault, dopracujeme se ke stejnému výsledku, jako udělal VaultPasswordView. To si nakonec můžeme i pomocí něj ověřit, jelikož když ho spustíme, zadáme mu cesty k Vault, Protect a do pole hesla vložíme SHA-1 hash, zobrazí se nám rozšifrované Web Credentials.

 

Pokud jsme tedy schopni vzdáleně na počítači dumpnout uživatelův SHA-1 hash (nebo jen uložit LSASS dump do souboru), můžeme jednoduše odkopírovat tyto soubory a hesla si dešifrovat u sebe.

PS: Technicky je to ještě trošku komplikovanější a při tvorbě Master Key se používá ještě SID uživatele a random data, vytváří se credhist, můžeme v případě domény využít privátní certifikát z DC pro dekrypci…, ale o tom zase někdy příště, šlo mi primárně o to ukázat princip.

 

Google Chrome

V případě Google Chrome, je to velice podobné jako u IE/Edge. Pokud se podíváme na uložená hesla, vidíme jen uživatelské jméno a tečky. Po kliknutí na oko pro zobrazení hesla je vyžadováno zadání hesla od Windows účtu aktuálně přihlášeného uživatele.

Databázi s uloženými hesly najdeme v %localappdata%\google\chrome\user data\default\Login Data, kde jsme schopni zjistit server, uživatelské jméno, ale heslo je zašifrované pomocí Windows funkce CryptProtectData.

login-data-google-chrome

Jako Master Key se používá heslo Windows účtu uživatele. Opět existuje program od Nirsoft a to ChromePass. Ten pomocí CryptUnprotectData funkce rozšifruje databázi s hesly a vypíše nám ji.

zobrazena-hesla-google-chrome

Mozilla Firefox

Nakonec nám zbývá Mozilla Firefox. I v nejnovější verzi 65.0.2 (v době testování) si stále ve výchozím stavu dokážu zobrazit uložené heslo přímo v prohlížeči, aniž bych pro to musel cokoliv udělat.

zobrazena-hesla-mozilla-firefox

 

Hesla je možné chránit použítím master heslem. Databáze je uložena v cestě %AppData%\Mozilla\Firefox\Profiles\<randomstring>.default\logins.json

V tomto případě by šel například použít nějaky keylogger na odchycení master hesla nebo například brute-forcovat, pokud by měl uživatel slabé master heslo.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *