Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > Posts > Odpověď - jak je to vlastně s hesly v Internet Exploreru
duben 27
Odpověď - jak je to vlastně s hesly v Internet Exploreru

Redakce našeho populárně naučného časopisu dostala následující dotaz:

"Existuje na IIS web s Windows Authentication. Přihlásím se na něj přes internet doménovým jménem/heslem. Když tam vlezu druhý den ze stejného prohlížeče (comp nevypínám), vesele mě to příhlásí, aniž by to znovu chtělo heslo. To mě teda dost překvapilo."

Odpověď poněkud rozveďme, ať tomu dáme trošku rámec.

Ověřovací metody v Internet Exploreru

Do webových aplikací je možno zaslat heslo jednou z následujících metod:

  • HTTP basic authentication - čístotextové heslo, bez nějakých zašifrování. Samozřejmě je možno ho chránít pomocí TLS (to jak tomu někdo říká SSL), ale principiálně se přenáší plné heslo. Na IIS web serveru se nejspíš ověřuje vůči doménovým účtům, i když by to mohla vyvolat i webová aplikace samotná a používat svoje vlastní aplikační účty z nějaké databáze.
  • Windows authentication - heslo cestuje v nějaké "zašifrované formě". Jedná se o dva protokoly, buď NTLM (obecně řečeno - ono to má tři verze), nebo Kerberos. V případě NTLM opravdu cestuje heslo v "zahešované" formě (MD4 heslo v HMAC-MD5). V případě Kerberos cestuje pouze TGS tiket, který s heslem uživatele nemá nic společného.
  • Forms-based (cookie-based) authentication - prostě aplikační webová stránka, která po vás chce zadat login a heslo. Heslo cestuje obvykle v plné formě, podobně jako při HTTP basic ověření, ale viděl jsem i weby, které ho o něco lépe chránily (proti TLS strip a vůbec HTTPS inspection). Potom, co si vás webová aplikace ověří, vám web server vydá nejspíš nějakou HTTP cookie. Samozřejmě nemusí, to už je na něm, jak si vás bude pamatovat (například i jen podle IP adresy).

HTTP basic authentication a Windows authentication je součástí HTTP hlaviček. Forms-based authentication se posílá nejspíš jako součást těla POST požadavku, někdy (velmi nevhodně) v podobě GET parametrů.

V případě HTTP basic authentication a Windows authentication na vás může prohlížeč vyskočit s normálním okénkem, kam přihlašovací údaje zadáte. V případě forms-based se jedná o formulář na HTML stránce.

Automatická, uložená, nebo zadaná hesla

Do přihlašovací stránky (forms-based), nebo do přihlašovacího okénka může uživatel něco zadat. Prohlížeč obvykle nabízí možnost tyto informace uložit pro další použití automaticky. Pokud jsou k dispozici Kerberos nebo NTLM přihlašovací údaje uživatele operačního systému (zadané při ctrl-alt-del), prohlížeč je může automaticky použít k odeslání.

Ano, pokud uživatel jednou zadá basic nebo Windows authentication údaje, tyto zůstávají v paměti procesu prohlížeče až do jeho finálního ukončení, bez ohledu na to, jestli jste vybrali "uložit" nebo ne. Pod pojmem proces myslím stejný Windows process. Což zahrnuje také nově otevřené taby (ctrl-t), nově otevřená okna (ctrl-n). Prohlížeč takové údaje nezapomene ani po nějaké době nečinnosti, ani pokud přejdete na úplně jiné stránky. Důvodem je nejspíš jednoduchost jejich funkce a nezávislost na nějakých "oknech" a konkrétních "tcp spojeních". Prohlížeč prostě nemá možnost, jak jednoznačně poznat, že uživatel už práci s danou stránkou "ukončil". A standard mu žádné konkrétní doporučení nedává. Kromě faktu, že nesmí posílat ty údaje do jiných host header webů.

Trvanlivost forms-based přihlašovacích údajů si naopak řídí kompletně webová aplikace a prohlížeč o nich nemá v podstatě ani ponětí. Prohlížeč pouze udržuje v paměti cookies, nebo libovolnou jinou formu identifikace, kterou si webová aplikace vymyslela. Tady se aplikace může sama rozhodnout, kdy přestane dané cookie přijímat, kdy je zruší a jestli nabídne uživateli nějakou možnost explicitního odhlášení.

Obě metody jsou samozřejmě náchylné na cross-site scripting a vůbec brouzdání cizích osob po historii. V případě forms-based authentication se obvykle limituje životnost cookies. V případě HTTP authentication jako je basic, nebo Windows authentication se doporučuje uživatelům zavírat pořádně okna prohlížeče. Vzhledem k obvyklému intranetovému SSO to je ale i tak zbytečné.

Ještě k SSO a výchozím přihlašovacím údajům systému

Obecně se prohlížeč pro intranetové weby bude snažit použít výchozí přihlašovací údaje uživatele z operační systému (Kerberos nebo NTLM zadané při ctrl-alt-del) automaticky, aby tak dosáhl SSO (single-sign-on). SSO je maximálně žádoucí, protože to snižuje opakované zadávání přihlašovacích údajů - ochrana proti odpozorování, keyloggerům atd - tak jak si žádá například i ISO/IEC 27001/27002.

Pokud se ovšem jedná o automatické zasílání SSO přihlašovacích údajů, uvědomme si, že neexistuje možnost odhlášení (logoff). Kdykoliv okno prohlížeče zavřete, nebo i kdybyste dali libovolně aplikaci vědět, že již nechcete pracovat, při příštím otevření stránky se stejně automaticky použijí výchozí přihlašovací údaje systému.

Hesla ukládaná ručně "v prohlížeči"

Pěkný referenční článeček zde.

Internet Explorer (IE) ukládá hesla z formulářů buď jako tzv. "autocomplete passwords" až do verze IE 9. Hesla z formulářů ukládá do uživatelových registrů v plné formě, jen lehce chráněné. Umístění je:

HKCU\Software\Microsoft\Internet Explorer\IntelliForms\Storage2

kde se objevují REG_BINARY hodnoty. Je to tu ale jaksi "zašifrováno" pomocí URL (jeho SHA-1 hash) webové přihlašovací stránky. To znamená, že pokud nevíte, jaké URL to bylo, heslo z toho nedostanete. Naopak, pokud byste věděli URL, heslo se dešifruje v plné formě. Existují na to samozřejmě různé krekry. Ukládání hesel z formulářů se dá vypnout pomocí registrové hodnoty DisablePasswordCaching:

HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings
DisablePasswordCaching = REG_DWORD = 1

Od verze IE 10 se ukládají hesla do Windows credentials manager, stejně jako hesla pro HTTP authentication viz. dále.

Hesla pro HTTP basic a Windows authentication ověřování se ukládají do tzv. credentials manageru, neboli Windows vault. To je to, co najdete od Windows Vista v Control Panel v panelu User Accounts vlevo, kde se dá kliknout buď Manage your network passwords, nebo Manager your credentials. Zde se to rozděluje na dvě části. Hesla systému Windows a od IE 10 i hesla webová. Hesla systému Windows - tedy hesla pro intranetový Kerberos, NTLM, nebo i Basic ověření - se dají prohlížet i na starších systémech a serverech viz. můj dřívější článek.

Credentials manager si ukládá tajná data na disku v profilovém adresáři uživatele:

%appdata%\Microsoft\Credentials

Opět je možné je odtud samozřejmě dostat. Údaje jsou zde chráněné pomocí DPAPI (Data Protection API) a jsou principiálně šifrované uživatelovým přihlašovacím heslem. To je samozřejmě trošku složitější, protože takhle by se uživatelům nemohlo resetovat heslo, ale to je už jiná pohádka. Pro nás je podstatné, že je odtud dostane libovolný program běžící jen pod účtem uživatele. A to i v případě, že bylo uživateli správcem vyresetováno heslo.

A to jsou důvody, proč není moc bezpečné nechat lidi ukládat hesla na počítačích. Pokud chcete vypnout Credentials manager, můžete tak učinit pomocí Group Policy nebo Local Security Policy:

Computer configuration
    Windows Settings
        Security Settings
            Local Policies
                Security Options
                    Network access: Do not allow storage of passwords
                    and credentials for network authentication

Neukládat, zavírat!

Comments

Re: Odpověď - jak je to vlastně s hesly v Internet Exploreru

Děkuju redakci za perfektní vysvětlení :) A posílám odkaz na článek kolegům...
Borek on 28.4.2015 11:01

Re: Odpověď - jak je to vlastně s hesly v Internet Exploreru

nějaké další info ohledně ukládání hesel například pro RDP a RD gateway účty je třeba i tady: https://www.sevecek.com/Lists/Posts/Post.aspx?ID=514
ondass on 7.8.2015 8:05

Add Comment

Sorry comments are disable due to the constant load of spam *


Omlouvám se, ale příval spamu nelze kontrolovat, takže mi prosím pošlete email, pokud máte nějaký dotaz, nebo připomínku.

Title


Pole Title nemusíte vyplňovat, doplní se to samo na stejnou hodnotu jako je nadpis článku.

Author *


Pole Author nesmí být stejné jako pole Title! Mám to tu jako ochranu proti spamu. Roboti to nevyplní dobře :-)

Body *


Email


Emailová adresa, pokud na ni chcete ode mě dostat odpověď. Nikdo jiný než já vaši emailovou adresu neuvidí.

Attachments