Nejprve troška motivace: hesla jsou nebezpečná (o jejich nekvalitě si přečtěte tu). Jsou jednoduchá a jednoduše je zjistíte, například pomocí nějakého hardware keyloggeru. Nebezpečnost hesel osobně pociťuji jako jeden z hlavních problémů (ne)bezpečnosti současných firemních počítačových sítí.
Rozhodl jsem se, že se začnu více věnovat čipovým kartám (smart card) a přihlašování (smart card logon) s nimi do Windows. Nebojte se jich. S Windows 7 a Windows 8 máte parádní uživatelský komfort, plnou integraci čipových karet a podporu jejich ovladačů přímo v operačním systému. Přináší nevídanou bezpečnost. Rychle si na ně zvyknete a přihlašování s nimi bude dokonce mnohem pohodlnější.
Karty se dají koupit vcelku levně, za přihlašovací vybavení pro jednoho člověka zaplatíte cca 1000,- Kč. Sice to vypadá na první pohled jako pěkná pálka, ale když si uvědomíte, kolik stojí jeden počítač. Chápu, že najednou to nakoupit není žádná sranda, ale zase ta bezpečnost je neporovnatelná.
Zde se nejprve budeme věnovat jakémusi filosofickému úvodu a pochopení bezpečnostních důvodů pro čipové karty. Následovat budou nějaké screenshoty z uživatelského prostředí, abyste si uvědomili na jednoduchých obrázcích, jak vypadá jejich integrace. Pokračovat budeme přes implementační návody a samozřejmě doplníme i něco o řešení potíží. Přehled všech článků je zde:
- Přihlašování čipovými kartami - úvod do problematiky (tento článek)
- Uživatelské prostředí a práce s čipovými kartami z pohledu uživatele
- Instalace certifikační autority kvůli přihlašování čipovými kartami do Windows
- Kontrola zneplatnění (revocation) certifikátů a zprovoznění optimální CRL distribuce
Už jsem tu dokonce jednou o čipových kartách ve Windows psal, v těchto článcích to zřejmě znovu poněkud zopakuji. Budeme se věnovat českým čipovým kartám MonetPlus ProId, ale vzhledem k obecnosti podpory a technologie budou články platné (a mnohdy to budu porovnávat) i pro jiné karty, jako je například Gemalto IDPrime (dříve se to jmenovalo .NETv2 card).
Co nás bude zajímat technicky, bude technologie smart card logon v prostředí Active Directory domény postavený na Kerberos PKINIT pre-authentication. Bude se tedy jedna o čistě doménové prostředí, přihlašování pouze doménových uživatelů na doménové stanice a přes síť na doménové servery.
Budem se bavit o přihlašování pomocí certifikátů a k nim asociovaným privátním klíčům, které jsou uloženy právě na čipových kartách. Karty neobsahují uživatelská hesla. Tajná informace je reprezentována právě privátním klíčem, který nikdy neopouští kartu a karta je tak nekopírovatelná. Karty také nijak na heslech nezávisí, jak se dozvíte v dolní části.
Uvažovat budeme jak čipové karty, tak i bezpečnostní tokeny. Jaké to má rozdíly hned vysvětlíme, přímo v následující kapitole. Podstatné je, že musí podporovat Kerberos PKINIT, potom je nám to už úplně jedno.
Jaký je rozdíl mezi čipovou kartou a bezpečnostním tokenem?
Prakticky žádný. Tedy alespoň z našeho pohledu. O rozdílech a na jejich obrázky se můžete podívat na můj předchozí článeček. V podstatě jde jen o formu. Z toho důvodu budu nadále pod termínem "čipová karta" uvažovat oboje - tedy jak skutečnou čipovou kartu, tak i token.
PC/SC čipová karta je karta, která vypadá podobně jako bankovní karta - ty jsou taky už dnes obvykle čipové, a také PC/SC :-) Obsahuje hlavně kryptografický čip (CPU), k němu operační systém v nějaké formě ROM a malou, ale zato bezpečnou paměť na privátní klíče. K tomu potřebujete PC/SC čtečku (smart card reader).
Čtečky jsou obvykle krabičky s USB kabelem, mohou být integrovány do klávesnice, nebo se vyskytují ve formě PCIMCI, nebo PCIMCI Express karet. V každém případě jsou to dva samostatné kusy hardware. Každý klidně od jiného výrobce (i když čtečky vyrábí hlavně Gemalto).
Když jsou to dva kusy hardware, budete potřebovat vždy dva ovladače do operačního systému. Detaily jindy.
To stejné vlastně platí pro tak zvané bezpečnostní tokeny (security token). Dělají se ve formě monolitických zalisovaných krabiček ve stylu flash-disků. Nebo právě výměnných tokenů, do kterých se dá jednou, nebo i vícekrát zastrčit a vyměnit SIM formát čipové karty. A z toho je to rovnou patrné. Token není nic jiného, než prostě čtečka a karta integrovaná do jedné krabičky.
Takže se tokeny lépe přenáší. I když k nim stejně potřebujete stále dva ovladače do operačního systému - tedy ovladač čtečky plus ovladač čipu karty. Vzhledem k tomu, že čip čtečky a čip karty bude mnohdy úplně stejný, jako u separátní "velké" čipové karty a oddělené čtečky, je to úplně totéž z pohledu funkce, instalace, řešení potíží apod.
Rozdíl je v možnostech. Kartu si můžete nechat potisknout, můžete si i koupit za pár desítek tisíc :-) tiskárnu a potiskovat si to sami, dát si tam fotku apod. Do karty vám výrobce může taky zalisovat RFID anténku, takže se pak karta dá používat současně pro přístupové systémy, nebo jako placení na veřejnějších tiskárnách ve školách apod.
Tohle s tokenem neuděláte. Má to menší plochu na potisk, vejde se vám tak tak maximálně nějaké identifikační čislo, nebo jméno. RFID anténka se dá dávat jen do speciálních tvarů, které se moc nedělají. Na druhé straně se jednoduše přenáší, mají obvykle očko k přichycení na pásku okolo krku, nebo na klíče. Takže to je na chuti každého soudruha, co si vybere.
Pro nás to znamená, že budeme hovořit o PC/SC kartách a čtečkách, v libovolné formě. Budu tomu říkat vždycky čipová karta, ale myslím, jak jsem už uvedl, i tokeny.
Co rozhodně nemyslím jsou různé jiné druhy tokenů a flash-disků. Existují třeba RSA SecureID. To je taky ve formě tokenu. Ale tyhle tokeny mají vlastní software, který se integruje do přihlašovacího dialogu, nepoužívá k přihlašování certifikáty, ale normální uživatelská hesla a neintegruje s Kerberos PKINIT. Takže nás to nezajímá. Stejně jako nás nezajímají čtečky otisků prstů, jak se vyjádříme v další kapitolce.
Příklady čipových kater, které se integrují s Kerberos PKINIT a jsou tedy nativně podporovány v Active Directory prostředí a ve Windows 7, Windows 8 a se servery Windows 2003, 2008 a 2012 jsou MonetPlus ProID, Gemalto IDPrime (dříve .NET card), nebo třeba Infineon Sicrypt.
I cena bude přibližně stejná v obou případech - čipová karta plus čtečka, nebo bezpčnostní token (plus karta uvnitř). V obou případech zaplatíte za jednoho člověka plus/mínus 1000,- Kč.
Proč karty a jaké to má bezpečnostní vlastnosti?
Karty obsahují kryptografický čip, svůj vlastní operační systém a bezpečnou paměť na privátní klíče. To znamená, že mohou veškeré kryptogradické operace provádět mimo operační systém počítače, ke kterému jsou připojeny. Jestliže je v operačním systému například virus, má jen velmi omezené možnosti, jak se dostat k obsahu karty a jak jej zneužít.
Přístup ke službám operačního systému karty je umožněn pouze při zadáni PIN. Bez jeho znalosti je vám karta na nic. Bez PINu nemůžete ani říct jejímu operačnímu systému, aby vám vydal privátní klíče. Karta tedy nejde kopírovat bez znalosti PINu. Co je ještě lepší, karta nejde obvykle kopírovat ani při znalosti PINu. Operační systém karty prostě privátní klíč nevydá ani pokud zadáte PIN.
Samozřejmě, karty mají obvykle ještě jeden, jakýsi správcovský (administrator, master, super-user) PIN, který je silnější. Správci s jeho znalostí mohou obvykle libovolně modifikovat obsah karty, exportovat ho, případně mazat a zase importovat jiné klíče a certifikáty. Master PIN ale zná jenom správce. To se koncovým uživatelům neříká.
Obyčejný PIN ani není obvykle příliš velký. Stačí čtyři až pět znaků - karty obvykle umožňují alfanumerický PIN, i když lidé mnohdy používají jen čísla, což se pohodlně zadává na numerické klávesnici. Samozřejmě ho může kolega vidět, nebo to jde zachytit nějakým keyloggerem. Ale to útočníkovi nepomůže. Sice možná zná PIN, ale bez karty se stejně nepřihlásí.
I když mu ji necháte chvilku na stole, až tak to nevadí. Možná zná PIN a může se v tu chvilku přihlásit. Ale než přijdete, musí vám kartu vrátit. Okopírovat si ji nemůže. Pokud by vám ji ukradl, poznali byset to vcelku rychle a mohli adekvátně reagovat. To s obyčejným heslem nejde, že? Jestliže někdo zná vaše heslo, může si ho používat, aniž byste to vůběc zaznamenali.
Tímhle spůsobem zajišťují karty multifaktorové ověřování. Musíte MÍT kartu a ZNÁT k ní i PIN. Jedno nejde z druhého získat a bez obou se neobejdete. Takže k tomu, že karta obsahuje super bezpečný privátní klíč, místo slabého lidského hesla je to navíc dvoufaktorové.
Tím se dostáváme k tomu klíči. Ještě i tohle je lepší než heslo. Vaším, byť možná relativně dlouhým 10+ znaků heslem, se šifrují síťové komunikace. Pořád je to slabé. Když používáte kartu k přihlašování, síťové komunikace se šifrují superkomplexním (obvyklý RSA privátní klíč o délce 2048 bitů = 256 bytů), náhodným, priváním klíčem, který určitě nejde najít v žádném slovníku.
K tomu můžete mít v pohodě čtyřmístný PIN. Jenom zastrčíte kartu a naklepnete PIN a jste přihlášeni. A přitom to je nekonečněkrát bezpečnější než to vaše "trapné" čtrnáctiznakové heslo, které zadáváte pokaždé třikrát, než se trefíte. Jednodušší, příjemné a přitom mooc bezpečnější. Proč myslíte, že to všechny banky a vojáci používají?
Jen pro zajímavost, existují jakési náhražky čipových karet, které jsou levnější, ve formě normálních flash disků a obslužného software. Tak tímhle se tu zabývat nebudeme. Na flash-disku jsou privátní klíče (nebo spíše rovnou přihlašovací heslo) zašifrováný PINem. Tohle výrobce vydává za náhradu čipové karty. Nesmysl. Flashka se dá jednoduše zkopírovat. Karta má ochranu na počet špatných pokusů na PIN. Jestli ale tu flashku někde necháte, kdokoliv si ji během pár sekund zkopíruje a může doma v klidu, offline, zkoušet váš PIN. Vzhledem k tomu, že to svádí mít ho krátký, je myslím jasné, jak je to bezpečné.
Ještě poznámka ke té kryptografické paměti, co je na kartách. To taky není jen tak jednoduchá flashka. Je to bezpečnější kryptografická paměť, která neukládá tajné informace jen tak, byte a bytem. Je to v ní chaoticky rozházeno, například. Nejde to jen tak vyloupnout a připojit na kabely a vyčíst si klíče. Musíte tomu rozumět, vědět a umět hardwarově. Základní princip říká - dobře, vykrást hardwarově ano (tomu nelze zabránit), ale musí to znamenat složitou, časově docela náročnou, a hlavně destrukci originální karty. A taková konstrukce je drahá. Takže karty obsahují obvykle bezpečnou pamět na 4, 8 nebo třeba až 16 privátních klíčů (vemte si, kolik to je asi tak kB, žádné MB).
Co takhle čtečky otisků prstů?
Fuj. To je hračka pro domácí uživatele. Nejprve se zamysleme. Otisky prstů necháváte kudy chodíte. Takže se dají duplikovat. Jak asi taková čtečka funguje? To co máte na notebooku, to je jenom trapný scanner obrázku. Možná existují profesionálnější čtečky, ale co ty tak asi dělají? Mohou kontrolovat teplotu (zahřeju silikon), odpor a kapacitu (natřu správným gelem), měřit tep (nasadím na prst) apod. Klidně se podívejte jak MythBusteři testovali opravdu profesionální čtečku, video určitě najdete - je to MythBusters, season 2006, episode 59.
Pro nás je však hlavním problémem jejich technika. Ačkoliv mají čtečky od Windows 7 nativní podporu ovladačů a integrace do přihlašovací obrazovky Windows, nemají nativní Kerberos a Active Directory podporu. To znamená, že čtečka si prostě jenom pamatuje heslo. Přejedete prstem a ona si někde ze souboru vyndá vaše plné!! heslo a hodí ho do Windows, aby vás přihlásila.
Takže čtečky ukládají vaše plná hesla u vás na disku. Na stanici! Jestliže tu stanici nemáte zašifrovánu BitLockerem, stačí vzít bootovací DVD nebo USB s Windows 7 a můžete si běhat po disku jak se vám zlíbí. Takže to je skoro na nic.
Ne úplně. Zase tak to nechci shazovat. Co je pořád trošku lepší i na čtečkách prstů je fakt, že vám to dovoluje mít opravdu solidní heslo a přitom ho nemuset zadávat. Stačí, když přejedete prstem. A přitom alespoň síťové komunikace jsou v bezpečí. Takže horší než slabé heslo to určitě není. Ale není to taky nic, co bych musel prosazovat.
Zase jen pro zajímavost, RSA SecureID to dělá stejně. Pamatuje si uživatelská hesla. Jenže oni je mají na centrálním serveru a ne na stanicích. Synchronizují se automaticky z Active Directory, takže změnit si je můžete normálně. Nebo vám je může správce v pohdoě vyresetovat. Což v případě čtečky otisků prstů neplatí.
V připadě čipových karet nás heslo nezajímá dokonce vůbec.
Jak je to s hesly, pokud se přihlašuji čipovou kartou?
Na čipovou kartu vám vydává certifikát veřejného klíče vaše vnitřní certifikační autorita a karta obsahuje také privátní klíč. Privátním klíčem se ověřujete, podepisujete s ním přihlašovací komunikaci Kerberos PKINIT. Takže to s heslem nemá nic společného.
Hesla si udržuje Active Directory v databázi, úplně nezávisle na vašich certifikátech. Funguje to tak, že certifikáty jsou ve skutečnosti k uživatelským účtům vlastně jaksi z boku připojeny. Důležité je, že hesla jsou v AD vždycky, i když je uživatel ani nezná, protože používá jen kartu. To je dobro si uvědomit, protože ona se ve skutčnosti čas od času použijí - třeba NTLM používá jen heslo. Je to automatické, uživatel ho nemusí vůbec znát, ale je to pořád to heslo, které je uloženo v AD. Když používáte karty, je dobré hesla nějak randomizovat.
Dobře, ale když se přihlašujete kartou (a tedy jejím privátním klíčem), nemusíte znát svoje heslo. Admin vám ho může resetovat každých pět sekund a nic se neděje. Co když vám heslo vyprší? Nic. Co když se vám heslo zamkne po několika špatných pokusech o jeho použití? Taky nic. Dobře, občas byste i tak mohli zažít nějaké problémy s NTLM, které právě to heslo používá. Ale o tom až později.
Samozřejmě jsou stavy účtu, při kterých se nepřihlásíte ani kartou - zakázaný účet, nebo třeba vypršelý účet (upozorňuju na rozdíl dvou termínů - vypršelý účet a vypršelé heslo - to jsou dvě různé věci).
Na druhé straně, certifikační autorita (CA) může certifikát zneplatnit. Potom se jím už nepřihlásíte, samozřejmě. Ale naopak se přihlásíte heslem, pokud byste ho znali.
Je také možné přihlásit se třeba heslem, zamknout plochu a pak ji znovu odemknout čipovou kartou (to na Windows XP a Windows 2003 nešlo). Takže to jde i kombinovat, pokud to ovšem správce sítě povolí. Nejspíš to moc nechceme. Když karty, tak karty!
Samozřejmě to funguje normálně z keše. Jestliže jste se už jednou kartou přihlásili, přihlásíte se i offline, s vytaženým kabelem. Samozřejmě maximálně po dobu platnosti vašeho certifikátu, ale s tím se musí počítat dopředu.
Takže s čím budeme pracovat a co budeme potřebovat?
V dalších článcích budeme pracovat s Active Directory (AD) doménovým prostředím na domain functional level (DFL) alespoň Windows 2000. Budeme používat jen doménové účty, protože pro lokální to nefunguje (zde poznámečka - jedna z metod, jak eliminovat úplně lokální účty). Budeme pracovat se stanicemi, které jsou tedy členem domény a jsou verze alespoň Windows 2000.
No dobrá, většinou budeme řešit Windows 7 a Windows 8 stanice, protože na starších nebylo tak pohodlné a kompletní GUI. Ale občas se zmíníme o možnostech Windows XP.
Co se týče serverového síťového prostředít, tak opět jen doménové servery. V jejich případě ale v pohodě i Windows 2000. To je jedno. Ze sítě žádné GUI nepotřebujete a Kerberos nebo NTLM funguje pořád stejně.
K vydávání certifikátů budeme mít certifikační autoritu (CA) postavenou alespoň na Windows 2008 a jejich AD CS (Active Directory Certificate Services). Bude nám stači úplně jednoduchá, jednoúrovňová hierachie - tedy žádná hierarchie :-) Prostě, budeme vydávat certifikáty přímo z kořenové (root) autority. S Windows 2008 to není ani nebezpečné, ani nijak omezující.
A nakonec karty. Popíšeme to celé na českých Monet+ ProID a porovnáme je s Gemalto IDPrime (dříve .NETv2 card, jenom se to přejmenovalo), pokud tedy bude co porovnávat. Tyto technologie jsou plně podporované a integrované, takže se to liší jen cenou a čas od času v nějakém detailu - jakože Monet se s vámi bude osobně bavit, zatímco Gemalto na vás vrchnostensky kašle :-)