Krypta.cz - Magazín o informační bezpečnosti
Operační systém Windows, ostatně velmi podobě jako UNIX, obsahuje v řadě NT jakési centrální "skladiště hesel", kterému se říká Security Account Manager, zkráceně SAM. Jelikož jde víceméně o obdobu /etc/passwd, jsou v něm obsaženy obdobné informace, tedy především přihlašovací jména a zašifrovaná hesla všech uživatelů systému, popřípadě celé domény, pokud stroj je řadičem domény. Získání a popřípadě dešifrování obsahu takovéhoto souboru je prioritní zájem útočníka. Děje se tak nejčastěji již po průniku do systému za účelem zvýšení privilegií popřípadě umístění "zadních vrátek". Rád bych v tomto článku poukázal na některé slabiny, které by mohly především z dřívějších dob na Vašem systému přetrvávat a představovat tak bezpečnostní riziko.
Kvůli kompatibilitě díra?
Jak již bylo zmíněno, vlastní hesla jsou v souboru zašifrovaná, což by zdánlivě mohlo budit dojem bezpečí (nějaký typ kryptografického útoku se známým originálem zde přichází v úvahu pouze omezeně, neboť dat je velmi málo a ve své podstatě by měla by víceméně náhodná), avšak i zde se problémy objevují. Ten klíčový pramení z požadavku na zpětnou kompatibilitu, kdy programátoři použili starý hashovací (jednostranně kódující/komprimující) algoritmus, který zde zůstal z původního LanManageru. A tak přestože existuje pro NT algoritmus nový a bezpečný, je potřeba zachovat kompatibilitu se systémy 9x/3.11. A tak se vedle nové, bezpečné hodnoty uchovává i stará hodnota LanMan hashe, který byl úspěšně cracknut.
Hned první slabina je konvertování všech písmen na velká. Avšak tou klíčovou je rozdělení hesla na dvě poloviny. Každá má dálku 7 znaků, tedy vlastní heslo je předem doplněno prázdnými znaky na 14 míst. Každá část je šifrována samostatně a výsledek je spojen dohromady. Pokud vám není jasné nakolik je takto algoritmus postižen tak si uvědomte, že celkový keyspace není (2n)/2,kde a je celkový počet bitů hesla, jak by se mohlo na první pohled zdát, ale 2n/2. Obě části tak velmi snadno podlehnou útoku hrubou silou, a to dokonce i na běžném desktopu. Ta plná část může být dešifrována za několik hodin, prav prakticky v řádu sekund. Popřípadě je také možné na levou polovinu pustit brute force/dictionary attack, který bude těžit z informací z poloviny levé (té již rozluštěné). Nebo si první část můžeme prostě domyslet. Další zvětšování délky hesla nad 7 znaků tedy paradoxně může díky jisté obsažené „nápovědě“ znamenat zeslabení bezpečnosti namísto jejího zesílení.
Pro ochranu nejdůležitějších hesel se taktéž doporučuje použití některých nestisknutelných znaků jako AltGr+Num255 nebo AltGr+Num129. Některé brutfocery (např. L0phtcrack) s těmito znaky totiž nepočítají. Samozřejmostí by mělo být vynucování minimální složitosti hesla.
Kde to najdu?
Obsah Security Account Manageru je uložen v adresáři %systemroot%system32config. Obdobně je možné se k němu dostat přes registry (větev HKEY_LOCAL_MACHINESAM), ovšem při normálním prozkoumávání regeditem nečekejte že něco objevíte, neboť dokonce ani pod účtem Administrátora není tento klíč "vidět".
První nápad, jak obsah SAMu získat, by mohl být prosté zkopírování. To jde i nejde. Pod spuštěnými Windows se k souboru nedostanete, ale pokud se vám povede například nabootovat z diskety do jiného systému, již vám stojí v cestě akorát přečtení NTFS oddílu. Jestli se nepletu, existuje ovladač souborového systému NTFSDOS (www.sysinternals.com), který přesně toto dovede.
Další nebezpečí pro SAM je v utilitě NT Repair Disk Utility (rdisk), pokud běží s parametrem /s. Ten totiž říká, že má zálohovat i klíčové informace, tedy i tyto klíče...;-). Záložní kopie se ukládají do adresáře %systemroot%repair a pokud vše "dobře" funguje, SAM by se měl uložit do souboru Sam_.
Pokud jste nalogováni jako administrátor, můžete hashe ze SAMu získat přímo. Na inernetu je na mnoha místech volně k dispozici po utilitka pwdump od Jeremyho Allisona.
V ochraně SAMu hraje důležitou roli i fyzické zabezpečení serveru, neboť je to jediná cesta, jak zabránit nabootování systému z cizí diskety s jiným operačním systémem.
SYSKEY
Na pomoc administrátorům je k dispozici algoritmus SYSKEY, který se objevil v jednom ze Service Packů. Se zde obsaženým šifrováním souboru SAM si standardní utility bohužel neporadí, což ovšem neznamená, že pro případného útočníka jsou dveře do systému kompletně uzamčeny. Mechanismus SYSKEY rozšířil šifrování SAMu ze 40ti na 128 bitů, což je podstatné a teoreticky postačující řešení. Lze jej jednoduše nakonfigurovat spuštěním příkazu syskey. Pokud nemáte toto zlepšení do systému implementováno a hodláte tak učinit, měli byste se přesvědčit, že používáte aktuální verzi. Jenda ze starších obsahuje totiž podstatnou kryptografickou slabinu, která byla později odstraněna příslušnou opravou.
To ale není pro administrátora jediné nebezpečí. Todd Sabin totiž napsal utilitku pwdump2, což je podstatně vylepšená verze programu již zmiňovaného, neboť dokáže mimo jiné obejít SYSKEY. Technika, kterou program využívá se odborně nazývá "DLL injection" (terminus technikus). Při tom svůj vlastní kód načte do procesorového prostoru jiného vysoce privilegovaného procesu. Poté co se tak stane, je použito interní API volání, které mu získá přístup k informacím ze SAMu bez nutnosti dešifrovat SYSKEY. Pwdump2 tak musí být na rozdíl od pwdump spuštěn v procesorovém prostoru cílového systému. Je vyžadováno oprávnění administrátora a knihovna pamdump.dll (standardně bývá s pwdump2 k dispozici).
Cílový privilegovaný proces je lsass.exe, neboli Local Security Authority SubSystem. Pro vlastní injekování kódu je potřeba znát ID procesu (PID), což některé starší verze nezjišťují automaticky a je potřeba to udělat ručně.
To by bylo pro dnešek z ochrany a získávání hesel na Windows NT vše.