7.3 Ukládání hesel
Hesla jsou obvykle uložena v souborové databázi obsahující minimálně uživatelská jména a jejich zahashované hodnoty.
- Uživatel zadá heslo.
- Hodnota hesla je zahashována (prohnána hashovací funkcí).
- Hodnota hashe je uložena v databázi.
- Při ověřování se zadané heslo znovu zahashuje a porovná se s uloženou hodnotou hashe.
Pro tyto účely je nutná kryptograficky bezpečná hashovací funkce. Slabá funkce (jako třeba obyčejná suma nebo parita) by usnadnila zjištění hesla.
Linuxový systém (/etc/passwd a /etc/shadow)
Obsahuje zahashovaná hesla uživatelů a nastavení jejich platnosti.
Formát hashe je typicky: $id$salt$hashed
$1$: MD5$2a$,$2y$: Blowfish$5$: SHA-256$6$: SHA-512
Za hashem navazuje např. počet dní od poslední změny hesla a expirace.
Použití takzvané soli (salt) brání proti útokům pomocí předpočítaných hashů, protože každé heslo je před zahašováním osoleno unikátní náhodnou hodnotou.
Windows Hashování (LM a NTLM)
Způsob, jakým Windows ukládaly hesla před verzí NT. Kvůli zpětné kompatibilitě (SMB) jej podporoval i systém Windows NT.
- Uživatelské heslo je omezeno na maximálně 14 znaků.
- Heslo je převedeno na velká písmena.
- Je doplněno nulovými bajty na 14 bajtů.
- Poté je rozděleno na dvě sedmibajtové poloviny.
- Tyto hodnoty se použijí pro vytvoření dvou DES klíčů (ECB), kterými se zašifruje konstantní ASCII řetězec
KGS!@#$%. - Dvě získané šifrované hodnoty tvoří 16bajtový LM hash.
LM hash nevyužívá sůl (salt protection) a je tedy velmi náchylný k útokům pomocí duhových tabulek.
Novější verze. NTLM hash = MD4(UTF-16-LE(password))
Windows Security Account Manager (SAM)
Databázový soubor hesel, cesta: %SystemRoot%/system32/config/SAM
- Obsahuje LM nebo NTLM hashe.
- Přístup je systémově chráněn. Hodnota je v registrech HKLM/SAM.
- Extrakce hashe: dump cachovaných pověření, extrakce hashů a využití nástrojů pro lámání (např. hashcat).
- Nástroje: cachedump, pwdump, mimikatz.