SAM: Pravdy vs. pověry
Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: Emkei
Datum: 13.5.2005
Hodnocení/Hlasovalo: 0/0
Vše, co byste měli vědět o souboru SAM a šifrování SysKey...
V poslední době se snad na všech serverech, které navštěvuji rozhořela žhavá diskuze o souboru SAM a padlo při ní mnoho názorů a rad. Mnohé z nich však byly zavádějící až nepravdivé. Proto jsem se rozhodl napsat tenhle článek, který vám snad odpoví na některé z vašich otázek.
Soubor SAM (Security Account Manager) je jakýmsi úložištěm hesel ve Windows vystavěných na technologii NT. Jedná se vlastně o obdobu souboru /etc/passwd na UNIXových systémech.
Soubor SAM se nachází ve složce %windir%\system32\config. Tento však nelze kopírovat, otevírat, nebo jinak upravovat za běhu Windows, a to ani s právy administrátora. Řešením je "nabootovat" do alternativního operačního systému, třeba do MS-DOSu. Pokud vám v cestě stojí NTFS, použijte program 'NTFSDOS'.
Taktéž je obsah tohoto souboru uložen v registru (HKLM\SAM). Ale opět ani s právy administrátora obsah tohoto klíče neuvidíte.
Posledním místem, kde se SAM soubor nachází je složka %windir%\repair. Soubor SAM se zde jmenuje sam._ a lze jej bez problémů kopírovat i za běhu Windows s minimálními právy. Jedná se však pouze o zálohu originálního souboru SAM, takže v době, kdy ho kopírujete, nemusí být zcela aktuální.
Soubor (ať už originál, nebo záloha) je zkomprimován a případně ještě zašifrován (viz níže). Pokud je pouze zkomprimován, k získání hashů postačí v příkazovém řádku zadat příkaz
expand <
Zdroj> <Cíl>
Jako
zdroj zadejte absolutní cestu k SAM souboru a jako
cíl soubor, do kterého se mají hashe extrahovat, např.
expand C:\WINDOWS\repair\sam._ C:\sam.txt
Program 'expand' je 32 bitová aplikace, není ji tedy možné použít přímo v prostředí MS-DOSu.
Překážka jménem SysKey
SysKey (System Key) je algoritmus, který rozšiřuje původní 40 bitové šifrování na 128 bitové, což by se mohlo zdát jako definitivní řešení, jak SAM soubor zabezpečit. O tom, že to není tak zcela pravda se zmíním v závěru tohoto článku. Šifrování pomocí SysKey je standardně zapnuto ve WinXP. Pokud již bylo šifrování jednou zapnuto, není možné je vypnout (na Internetu se sice objevilo několik programů, které by údajně toto šifrování dokázaly vypnout, jejich používání
však rozhodně nedoporučuji!). Zda je SysKey zapnut si můžete ověřit pomocí programu 'SysKey' ve složce %windir%\system32.
Šifrování případnému útočníkovy poměrně svazuje ruce. Větu like
"SysKey je naprosto neúčinným bezpečnostním nástrojem" může říci opravdu pouze člověk, který do dané problematiky nevidí. Pokud je totiž SAM soubor nezašifrován, je možné jej expandovat a číst jeho obsah i na jiném počítači, kopírování na disketu má tedy smysl. Pokud by byl ale tento soubor zašifrován pomocí SysKey, byl by nám k ničemu, protože jej lze rozšifrovat pouze na stroji, z kterého
jsme ho zkopírovali. Jediné, k čemu bychom ho mohli využít je k získání všech uživatelských jmen, které jsou v zašifrovaném souboru vždy čitelné. I to by ale bylo poměrně časově náročné. V případě, že ale nemáme na daném stroji účet a dostali jsme se "pouze" do MS-DOSu a při přihlašování by se nezobrazovaly všechny účty na daném stroji, pak by to jistě smysl mělo. Přesto by ale asi bylo efektivnější využít přístupu do DOSu a "nabootovat" třeba do Linuxu. Existuje mnoho jednodušších způsobů jak získat userlist. Ale to jsem krapet
odbočil.
V případě, že je soubor SAM zašifrován, nastávají dvě možné situace.
Máme-li k počítači přístup, můžeme využít některé z aplikací stažených z Internetu (PWDUMP2, Cain&Abel, AWPR, ...). Tyto programy využívají tzv. DLL injection k obelstění LSAS a k tomu jsou nutná práva administrátora, nemluvě o tom, že je některé antiviráky vedou ve své databázi.
Pokud však nemáme možnost využít tyto aplikace (nemáme např. dostatečná práva), zkopírování SAM souboru nám, jak už jsem říkal nepomůže. Řešením by v tomto případě bylo použít druhou část programu Cain&Abel, takže Abela (viz nápověda tohoto programu).
Závěrem bych se chtěl zmínit o tom, co vlastně SAM obsahuje. Kromě loginů obsahuje defaultně dva typy hashů hesel, NT hash a LM hash (hash je zašifrovaná podoba hesla, která nelze dešifrovat). NT hash je novodobou obdobou hashe, kterou je prakticky nemožné rozlousknout. Problém je tedy v LM (LanMan) hashi. V souboru je uveden z důvodu zpětné kompatibility se systémy Win9x a 3.1x. Tento hash nerozlišuje mezi malými a velkými písmeny, přesněji řečeno kriptované heslo převede na velká písmena, čímž usnadňuje práci při Brute Force útoku. Dalším nedostatkem tohoto
hashe je, že heslo doplní o prázdné znaky, aby se vždy skládalo ze 14 znaků. Ty pak rozdělí na dvě části po 7, zvlášť zašifruje a opět spojí. Rozluštit levou část může trvat max několik hodin a pravou několik sekund. Nemluvě o tom, že na základě pravé části je někdy možné domyslet si tu levou. Dlouhé heslo se pak stává dvousečnou zbraní. Řešením by bylo používat v hesle některé ascii znaky, které nejsou na klávesnici. S heslem složeného třeba jen z jediného takového znaku si drtivá většina crackerů neporadí.
Na druhou stranu (teď hádám) ascii kódy se pravděpodobně po určitém intervalu opakují, jinak si nedovedu vysvětlit, že například pro zadání hesla složeného z jednoho ascii znaku (pevná mezera) je možné
použít kombinaci Alt+255 nebo Alt+0160.
Pokud nechcete, aby se LM hashe do SAM souboru ukládali (počítač není připojen k síti, nebo je připojen k síti, kde ani na jednom uzlu neběží Win9x nebo 3.1x), zakažte jejich používáni v systémových registrech. To je možné až od W2K SP2. Ve Win2K vytvořte v klíči
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\NoLMHash
hodnotu
@ s obsahem
1. Ve WinXP je provedení totožné s tím rozdílem, že namísto 'Řetězcové hodnoty' vytvořte hodnotu DWORD. Po úpravě registru je nutný restart počítače a opětovné nastavení hesel.
Emkei