Jak používat hesla

13. 11. 2005

Sdílet

Audit bezpečnosti hesel ve Windows

Fenomén přihlašovacích jmen a hesel provází svět
informačních technologií již po několik desetiletí.Právě proto,
že nejen většina uživatelů, ale i řada administrátorů považuje
tento mechanismus ověření identity a oprávněnosti přístupu
za spolehlivý, není od věci si vysvětlit, jak bezpečné
používání hesel vlastně je.


Patrik Malina


V podstatě jakýkoliv moderní víceuživatelský operační systém, jenž disponuje možností sdíleného použití pod více uživatelskými účty, je vybaven technologií autentizace. Ověření identity pravého uživatele, tedy zásadní vstupní kontrolní mechanismus, je v nejrozšířenější podobě realizován formou zadání přihlašovacího jména a hesla, jejichž vzájemná kombinace je systémy považována za jednoznačné potvrzení oprávněnosti k přístupu. Tato „tradice“ vznikla především díky tvůrcům operačního systému UNIX, jejichž dílko se od první poloviny sedmdesátých let masivně rozšířilo a velmi úspěšně stále drží krok v mnoha moderních reinkarnacích, včetně Linuxu. Ve stopách UNIXových klonů postupovali, alespoň co se strategie přihlašování týče, rovněž tvůrci dalších platforem, takže proces „logování“ je dnes mateřským mlékem každého uživatele. A možná toto bezkonkurenční rozšíření přihlašovacího mechanismu, v němž hrají klíčovou roli hesla, v nás vyvolává falešný pocit důvěry, ačkoliv ta často není na místě.


Kde bydlí hesla?

Již letmé zamyšlení nad principem přihlašování pomocí zadávání jmen a hesel nám poskytne rámcovou představu o tom, kde se skrývají největší problémy a co zřejmě bude zdrojem potíží jednotlivých implementací. Logický postup je přitom zcela prostý: uživatel, jenž má být ověřen, zadává při „logování“ určitý řetězec, obecně označovaný jako heslo, a tento údaj musí být prověřen. Ale jak vlastně? Operační systém musí rozpoznat jeho validitu a tedy musí disponovat referenční tabulkou či databází. Z toho plyne první závěr: hesla musí být někde lokálně uložena pro účel porovnávání a v principu je tedy možné na ně v tomto úložišti zaútočit. Jejich odolnost je v tomto případě přímo závislá na promyšlenosti a kvalitě postupu, jenž takové skladování hesel provádí.

Jako zářný příklad prvotního vývojového stádia můžeme uvést rané verze operačního systému UNIX. Hesla uživatelů byla zpočátku spolu s dalšími údaji o uživatelských účtech ukládána v podstatě jako holý text v jednom ze souborů, jehož zcizení a zneužití nepředstavovalo nijak velký problém. Pro zaryté příznivce Windows dodejme, že řada NT sice takto primitivním problémem netrpěla, ale v podstatě jen proto, že vznikla o 20 let později a poučila se z průkopnických problémů jiných. Ovšem jako dobrý příklad mohou posloužit (pseudo)víceuživatelské operační systémy Windows 9x, jež ukládaly lokální hesla třeba v nechvalně proslulých souborech PWL, a to bylo prakticky totéž.

Po zjištění, že ve světě počítačů existují zločinci a uživatelé s nekalými úmysly, přišly na řadu nové metody ukládání referenčních tabulek hesel. Všechny z postupně nasazených metod přežívají víceméně dodnes, záleží jen na zvolené platformě. Jednou z metod je klasické šifrování, třeba pomocí běžné symetrické technologie DES. Na první pohled jasná a dobrá věc má jeden háček: právě klasický šifrovací algoritmus zaručuje, že pokud někdo tabulku hesel ukořistí, je schopen za určitých podmínek provést reverzní operaci, tedy dešifrování. Sice to může trvat dlouho, chce to silné počítače, ale je to možné. Proto se uchytila další metoda, označovaná obecně jako hešování (hash funkce). Je důležité si uvědomit, že tento postup se od šifrování zásadně liší v tom, že původní heslo se po použití takové funkce promění ve změť údajů, jejichž analýza by zpět původní formu neměla vydat. Jinými slovy, jde o proměnu nevratnou. A jak je uživatel tedy ověřen, když heslo vlastně neznáme? Při každém přihlášení je zadaný řetězec rovněž hešován a teprve poté porovnáván s referenčním údajem v tabulce. Z naznačeného postupu vyplývá, že dobrá funkce pro hešování by měla produkovat co možná nejvíce zavádějící výsledek a zaručovat, že neexistuje cesta zpět k původnímu heslu.

Na závěr tohoto odstavce dodejme jedno zásadní upozornění, jež možná již z uvedených informací vyplynulo. Bezpečnost lokálních hesel je zcela svázána s fyzickou bezpečností vašich počítačů. Jinými slovy, pokud vám někdo ukradne notebook a bude mít dostatek času na útoky či analýzy, lokálně uložená databáze hesel je opravdu ve velkém nebezpečí.


Jak hesla cestují?

Výrobci operačních systémů se ještě nestačili vypořádat s problémy lokálně ukládaných hesel, a už se objevila nová výzva a nové problémy. Nové překážky pochopitelně přinesla snaha o centralizaci správy a distribuce ověřovacích údajů na síťové servery, jež zajišťují přihlašování uživatelů. Microsoft řešil tuto situaci u obou vývojových větví svých systémů, tedy 9x i NT, vývojová stadia nám dobře poslouží k popisu existujících komplikací.

Prvním mechanismem, jenž byl implementován např. ve službě Sdílení souborů a tiskáren na platformě Windows 95, je tzv. LanManager Hash. Jde o ukázkový případ pofidérní implementace, jež dnes absolutně nemůže odolat výpočetnímu výkonu běžných PC. Slabin zde najdeme hned několik: řetězec tvoří vždy jen velká písmena, maximální délka 14 znaků je vždy násilně rozdělena na sedmiznakové části a hesla kratší než 14 znaků nejsou na konečný počet před výpočtem nijak záludně doplňována. Navíc je použit klasický DES, takže vlastně nejde o heš. Poslat tento údaj pro ověření po síti tedy představuje pro útočníky chutné sousto.

Posílení přinesla až další generace ověřování, označovaná jako NTLM, a jak napovídá název, je spojena s platformou NT. První generace, tedy NTLM verze 1, byla již pravou heší, avšak při cestě sítí byla poměrně náchylná k řadě útoků, což její pověsti rozhodně neprospělo. Proto spolu s balíkem SP3 pro Windows NT 4.0 nastupuje mechanismus NTLM 2, který opět představuje zvýšení ochrany při vzdáleném přihlašování a byl překonán až implementací protokolu Kerberos ve Windows 2000. NTLM 2 rovněž používá zavedenou podobu hešování, avšak síťový přenos je výrazně bezpečnější, neboť kanál je při výměně hešovaných údajů chráněný.


Recept: silné heslo

Z výše uvedených souvislostí je dobře patrné, že v současnosti využívané postupy pro ukládání a přenášení hesel po síti jsou jednoznačně závislé na samotné kvalitě vstupního řetězce, tedy hesla jako takového. A právě zde se dostáváme k jádru celé věci: jako administrátoři jsme nuceni nejen uživatele poučit, nejen jim pomocí technických prostředků vnutit povinnost sestavovat silná a dlouhá hesla, ale také důsledně kontrolovat, zda se tak skutečně děje a zda jsou potřebné politiky dodržovány.

Protože pojem „silné heslo“ je velmi obecný, pojďme si připomenout možnosti, jež pro dosažení potřebné úrovně nabízí platforma Windows 2000/XP/2003. Uživatelům lze vnutit několik pravidel, jejichž součinnost je velmi prospěšná: můžeme stanovit minimální délku hesla v počtu znaků a dále vynutit tzv. komplexitu, což značí, že heslo musí tvořit alespoň tři různé skupiny znaků ze čtyř možných (malá písmena, velká písmena, číslice, ostatní znaky) a zároveň nesmí zahrnovat části uživatelského jména. Protože smrtí každé šifry je dlouhodobé opakování klíče, administrátor též může po určité době zajistit pravidelnou změnu hesla, nastavit minimální trvání nově zvoleného hesla a vynutit tvorbu nových hesel místo opakování již použitých řetězců (tzv. password history).

Na první pohled se zdá, že samotné moderní principy ukládání hesel vlastně vylučují jednoduchou kontrolu, jak silná hesla si uživatelé zvolili. Toto by byla pravda pouze v případě, že hešovací algoritmy a související postupy by byly zcela utajeny, což již dlouho neplatí. Postup, jak jsou NTLM heše generovány, je známý – a to umožňuje pokusy o uhodnutí hesel. O konkrétních možnostech si povíme více v dalších odstavcích.


Důvěřuj, ale prověřuj!

Stará vojenská pravda prý říká, že můžete svému mužstvu geniálně velet, ale pokud nekontrolujete plnění rozkazů, jste stejně jako velitel k ničemu. V oblasti síťové bezpečnosti to platí stoprocentně, takže si představíme nástroj, jehož pomocí lze průběžně provádět kontrolu kvality hesel a popřípadě odhalit ve vaší síti nežádoucí ověřovací sekvence.

Program firmy @stake (opravdu je tam zavináč) již před časem proslul jako L0phtCrack a v současné době je znám jako LC5 (www.at-
stake.com/products/lc). Jedná se o komerční aplikaci s profesionálními možnostmi i rozhraním, která je primárně určena k auditu a případné „záchraně“ neznámých či zapomenutých hesel. Nástroj pracuje s všemožnými zdrojovými informacemi, od monitorování sítě přes průzkum lokálního počítače po načtení zdrojových souborů z jiných strojů a při snaze o nalezení hesla provádí tzv. scoring, tedy průběžné hodnocení kvality zvolených hesel.

Velmi důležité je, že při jeho použití není nutné samotná hesla definitivně uhodnout. Princip kontroly je samozřejmě založen na tom, že v prvních minutách či hodinách, kdy LC5 pracuje se zdrojovými daty, odhalíte nepatřičná nastavení jako prázdná či slabá hesla. Vše, co posléze odolá dlouhé hodiny či dny, je možné považovat za relativně bezpečné. Mezi důležité možnosti programu patří volby, s jakými znakovými sadami bude prováděn útok hrubou silou, dále je možné využívat velké množství seznamů slov pro slovníkové útoky, vyšší verze programu umí pracovat s předem spočítanými tabulkami (viz dále). Analýzy je samozřejmě možné provádět dlouhodobě, činnost aplikace lze naplánovat a definovat tak, aby pracovala automatizovaně.

Protože LC5 patří ve svém oboru (tedy v oblasti veřejně známého a dostupného softwaru) mezi nejlepší nástroje, můžete při jeho činnosti získat dobrý obrázek o tom, jaký význam má prodloužení délky hesla např. z 6 na 8 znaků či využití komplexity místo pouhých písmen a číslic. Při seznamování s možnostmi LC5 doporučujeme začít monitorováním síťového provozu, abyste si udělali představu, jak často putují sítí přihlašovací sekvence a jak rychle s nimi program pracuje. Pro úplnost dodejme, že LC5 si poradí s auditem i v případě UNIXových hesel.


Hesla „na vedlejšák“

Na první pohled by se mohlo zdát, že máme vlastně vyhráno. Pokud použijeme dostatečně silná hesla o vyhovující délce, jejich faktické uhodnutí či prolomení je na hranici momentálně běžně dostupné techniky a jsme-li navíc při provádění kontroly důslední, nebezpečí by mělo být zažehnáno. Zrada však číhá úplně jinde, než byste možná čekali.

Již fakt, že hesla mohou být a typicky jsou např. v doménových strukturách Windows NT důkladně chráněna, vede potenciální útočníky k nalézaní jiných, snazších cest k cíli. Jedna z nich je založena na prostém faktu, že typický uživatel ve firemní síti se zdaleka nepřihlašuje pouze ověřeným a poměrně slušně chráněným mechanismem k řadičům domény Windows NT/2000/2003, ale také k řadě jiných síťových služeb, často provozovaných přímo v internetu, mimo firemní zázemí. Typický uživatel totiž v benevolentním firemním prostředí, které je v tuzemsku v podstatě standardem, běžně používá internetové služby rychlé komu-
nikace (instant messaging), přistupuje ke vzdáleně provozovaným bezplatným poštovním schránkám (freemailům), navštěvuje veřejné FTP servery či využívá služby sdílení souborů (P2P) apod. Potíž spočívá v tom, že řada těchto služeb, včetně mnoha starších internetových protokolů, vyvolává falešný pocit bezpečí tím, že vyžaduje přihlašovací jméno a heslo. Zřejmě již tušíte, kde je zakopán pes: běžný uživatel je schopen ve své paměti udržet jen několik hesel, a proto často volí pro různé typy služeb hesla shodná, což je zárodkem možné katastrofy. Právě proto, že komunikační služby jako ICQ či řada veřejných e-mailových serverů svůj komunikační kanál od klienta nijak nechrání, může potenciální útočník postupovat podle sociotechnické úvahy: proč bych „lámal“ obtížné NTLM heše, když mohu v síti snadno odchytit hesla k řadě jiných služeb a poté bez obtíží vyzkoušet, zda některé z nich nebudou fungovat i při pokusu o přihlášení do domény Windows?

Pokud se nad naznačenou logickou konstrukcí zamyslíte, bezesporu si uvědomíte nesmírnou závažnost podobných uživatelských zlozvyků. Protože i takovým hrozbám musí administrátor bezpečnosti čelit, opět si představíme nástroj, který vám nejen významně poslouží, ale také může pomoci jako demonstrační pomůcka pro nevěřící management. Představíme si program Cain & Abel, což je velmi zdařilé víceúčelové grafické rozhraní pro řešení řady úkolů v oblasti sledování a odhalování hesel. Je běžně dostupný na internetu na stránkách www.oxid.it/cain.html, šířen je jako freeware a díky svým kvalitám a proslulosti je někdy označován jako „LC5 pro chudé“. Kromě auditu kvality hesel operačních systémů Windows, o němž jsme se zmínili výše, dokáže tento nástroj nesmírně pohodlným způsobem filtrovat síťový provoz a zachytávat inkriminované pakety, jež obsahují přihlašovací sekvence ke všemožným internetovým službám. Zapnete-li jeho monitorovací režim, je možné prostě počkat, až proteče dostatek síťového provozu, a poté pouze nahlédnout do přehledně uspořádané tabulky zachycených přihlašovacích údajů. Aplikace si poradí s typickými formami komunikace jako ICQ, MS Messanger, FTP servery, POP3 pro poštu a řadou dalších. Pro monitorování sítě program využívá ovladače WinPcap, jež jsou rovněž volně distribuovány na stránkách winpcap.polito.it, takže z hlediska licencování se nemusíte o legalitu svého počínání obávat. Pro doplnění uveďme, že program Cain & Abel dokáže ještě řadu dalších věcí, jež souvisí s bezpečností či monitorováním sítí, a momentálně zahrnuje v nejnovějších verzích rovněž podporu pro sledování bezdrátové komunikace.

Ačkoliv jeho použití a nasazení, jež možná povede k nepříjemným odhalením koncepčních slabin při užívání hesel, může působit mírně „hackerským“ dojmem, přílišné obavy nejsou na místě: pokud jej nepoužijete vy jako administrátoři včas, udělá to neoprávněný uživatel, který nebude váhat získané údaje zneužít. Audit přihlašování k nedoménovým službám ve vaší síti je věcí nesmírně důležitou a neměli byste jej podceňovat.


Duhové nebezpečí

V souvislosti s ochranou hesel v podobě heší jsme zatím popisovali jak možné útoky, tak postupy auditu převážně jako pokusné útoky. Popsané programy prováděly ověření kvality heše tak, že zkoušely podle určitých pravidel zvolené kombinace hypotetických hesel velmi rychle za sebou a čekaly na shodu, jež by se mohla objevit. Při důkladnější analýze takového útoku dojdeme k závěru, že nedostatek spočívá v samotném čekání na „uloupenou“ heš: teprve poté, až získáme látku k analýze, se náš výpočetní výkon rozběhne na plné obrátky a budeme zkoušet všemožné postupy. Vypadá to, jako bychom až do chvíle „ulovení“ žádané heše nemohli nic dělat.

Zvrátit tuto logiku se ve své práci pokusil Philippe Oechslin a na jeho výsledky navazující projekt s názvem RainbowCrack (www.
antsight.com/zsl/rainbowcrack). Myšlenka je zdánlivě prostá: když víme, jak taková NTLM heš vlastně vzniká, proč bychom si ji nevypočítali předem? Postup je tedy založen na tom, že uživatel již s předstihem definuje množinu a počet znaků, z nichž se heslo může skládat, a spustí časově poměrně náročný výpočet tzv. rainbow tabulky, což vlastně odpovídá jakémusi útoku hrubou silou, ale v předstihu. Obsahem tabulky jsou dvojice heslo-heš, připravené „do foroty“. Výsledné hledání hesla po odchycení inkriminované heše například ze sítě vlastně probíhá jako porovnávání „živé“ hodnoty s příklady, uloženými v tabulce. Je-li vypočítaný údaj v rainbow tabulce uveden, je zjištění hesla otázkou vteřin (!). Ačkoliv postup vypadá velmi slibně a strašidelně, pochopitelně má své meze. Jednou z nich je fakt, že samotné tabulky dvojic heslo-heš mohou být obrovské a pokud byste chtěli vypočítat zásobu např. pro hesla dlouhá až 15 znaků, potřebovali byste opravdu velmi mnoho času a místa na data. Na druhou stranu lze touto metodikou posílit sílu nástroje, jakým je třeba LC5, takže v případě heší z krátkých hesel je nebezpečí opravdu velmi akutní.


Jsou hesla anachronismem?

Jak vyplývá z předchozích odstavců, používání hesel při přihlašování do prostředí operačních systémů či aplikací je potenciálně nebezpečné jak z důvodu principiálních, tak kvůli různým potížím s implementací a chováním uživatelů. Výše nastíněná analýza sice naznačuje, že při využití všech dostupných mechanismů je ověřování pomocí hesel relativně spolehlivý proces, avšak díky růstu výpočetního výkonu se éra hesel nezadržitelně chýlí ke svému konci. Již v současných moderních operačních systémech je možné nahradit klasické ověřování dialogem se jménem a heslem jinými postupy a bezesporu je jen otázkou času, kdy půjde o postup samozřejmý nebo spíše povinný.

Jedním z přístupů, jenž se již poměrně běžně prosazuje, je nasazení infrastruktury s veřejnými klíči (PKI) do služeb přihlašování účtů. Uživatel je v tomto případě vybaven pro ověření své identity zcela jinou informací – certifikátem, čímž dochází k zásadní proměně celého mechanismu předávání ověřovací informace. Významný posun celé strategie ověření a zajištění jedinečnosti klienta je zajištěn díky principům asymetrické kryptografie, s niž implementace PKI velmi těsně souvisí. Velmi jednoduše řečeno při procesu „logování“ provádí uživatel na svém klientském počítači vlastně proces „digitálního podepisování“ přihlašovací výzvy, a to se všemi výhodami, jež tento postup nabízí. Nesmírně důležitý je fakt, že z informací, jež si vyměňují klient a server, nelze žádnou veřejně známou metodou získat původní podobu přihlašovacího údaje (je tím myšleno: nelze ji získat v rozumném časovém horizontu let či desetiletí).

Kromě toho, že síťové ověření je takto bezpečné, je ochrana posílena ještě o další stupeň díky využití principu tzv. vícefaktorové autentizace. Pokud jsme výše použili pouze heslo, bezpečnost byla na tomto heslu závislá: kdo ho znal, měl vše, neboť jiný mechanismus, jakási další vlna ochrany, neexistoval. V případě ověření pomocí certifikátu a asymetrické šifry přichází na řadu autentizace vícefaktorová – uživatel totiž musí nejdříve něco fyzicky mít u sebe, a při použití tohoto materiálního klíče navíc musí znát určitý údaj. Prakticky bývá proces realizován většinou v podobě tak zvané smart (čipové) karty. V jejích těžko dobytných útrobách sídlí nejen uživatelský certifikát, ale také citlivý privátní klíč uživatele pro digitální podpis a dešifrování zpráv, jež byly zaslány pod ochranou asymetrické kryptografie. Důležité je, že karta vydá své tajemství jen tomu, kdo kromě jejího fyzického držení zná další ověřovací údaj, typicky tzv. PIN. Právě ten plní funkci „druhé vlny“ ochrany při přihlašování.

Společnost Microsoft položila pevný základ pro nasazení alternativního ověřování pomocí certifikátů uvedením operačního systému Windows 2000. Právě tato dnes již prakticky pět let stará platforma zahrnuje kompletní podporu pro přihlašování uživatelů prostřednictvím služby Kerberos, jejíž implementace je právě oním přechodem k moderním autentizačním postupům. Protokol Kerberos je sám o sobě (i bez použití smart karet a certifikátů) mnohem silnějším postupem než NTLM autentizace, a to přesto, že používá i kontrolu podle přihlašovacích hesel. Jeho zásadní výhodou je totiž zcela odlišný způsob zasílání ověřovacích zpráv po síti, což z něj v současné době činí velmi odolný mechanismus. Zároveň, na rozdíl od NTLM, umí využívat na straně klienta identifikaci podle certifikátů, takže je možné postupně opouštět řešení pomocí přihlašovacích jmen a hesel. Nejbližší budoucnost platformy Windows v oblasti ověřování klientů bezesporu leží tímto směrem.

Provádění auditu ověřovacích informací protokolu Kerberos rozhodně není tak nutné jako u starších variant, protože jde o řešení výrazně odolnější. Přesto význam auditu nijak neklesá: i nejnovější systémy Windows se totiž umí chovat obojetně a pokud Kerberos „nezabere“, s chutí sáhnou po starším NTLM s cílem přihlásit se za každou cenu. A právě tyto situace je nutné průběžně sledovat a zabránit případným nepříjemným překvapením.


Existuje důvod ke strachu?

Náš článek možná vyzněl trochu strašidelně: popravdě řečeno, problematika přihlašování do chráněné sítě není žádná legrace. Na druhou stranu jste při pozorném čtení jistě postřehli, že není důvod k panice. Doporučení pro autentizaci v sítích s Windows jsou proto následující: využívejte nejnovější Kerberos. Nejde-li to všude, na což asi narazíte, dbejte na vynucení protokolu NTLM 2, a to u všech klientských počítačů (lze doinstalovat i na Windows 9x). A hlavně, provádějte pravidelně audit, abyste věděli, co vlastně lze ve vaší síti při ověřování uživatelů zachytit!


Program Cain&Abel je jedním z nejlepších nástrojů na provádění auditu síťové komunikace za účelem odhalení slabých či nechráněných hesel. Navíc jde o freeware.

Projekt RaindowCrack vrhl poněkud jiné světlo na dosavadní míru spolehlivosti metody přenosu hesel po síti. Především dovoluje připravit útok předem.

Pravděpodobně nejznámějším komerčním nástrojem na profesionální audit kvality hesel je LC5 společnosti @stake. Přehledné výstupy jsou samozřejmostí.

Mezi běžné možnosti programů jako je LC5 patří audit lokálních účtů i sledování sítě a lovení přenášených heší.

Základním mechanismem pro zajištění kvalitních hesel v síti jsou v operačních systémech od Windows 2000 dále Zásady hesla (Password policies).

Ačkoliv volně dostupné soubory s příponou PWL na počítačích Windows 95/98 vypadají zběžně neužitečně, nástroje jako Cain&Abel z nich dokáží bleskově extrahovat slabá hesla.

Autor článku