MASARYKOVA UNIVERZITA, FAKULTA INFORMATIKY
Přihlášení do Windows pomocí elektronického pasu Bakalářská práce Brno, 2009
Prohlášení Prohlašuji, že tato práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj.
Poděkování Rád bych poděkoval Ing. Mgr. Zdeňku Říhovi, Ph.D. za vedení této práce.
Shrnutí Výsledkem práce je implementovaná autentizační knihovna GINA pro operační systémy Windows, která využívá k přihlášení elektronické pasy podporující aktivní autentizaci. Součástí je i pomocný nástroj pro údržbu uživatelských účtů. V teoretické části jsou vysvětleny základní principy práce s bezkontaktním čipem elektronického pasu a je popsána knihovna GINA.
Klíčová slova autentizace, elektronický pas, GINA, ISO/IEC 7816-4, PC/SC, smart card, WinLogon
Obsah Úvod .............................................................................................................................................. 2 Elektronické pasy .......................................................................................................................... 3 Ochranné mechanismy ............................................................................................................. 3 Obsah bezkontaktního čipu ...................................................................................................... 3 Komunikační protokol ............................................................................................................... 4 BAC ............................................................................................................................................ 5 Secure messaging ...................................................................................................................... 5 Aktivní autentizace .................................................................................................................... 5 Přihlašování do Windows ........................................................................................................... 6 WinLogon .................................................................................................................................. 6 Autentizace pomocí pasu .............................................................................................................. 8 Soubor s uživatelskými účty ...................................................................................................... 8 Správa uživatelských účtů ......................................................................................................... 9 Přihlášení ................................................................................................................................. 10 Implementace ......................................................................................................................... 11 Komunikace s čipem............................................................................................................ 11 Výsledek ...................................................................................................................................... 12 Nasazení .................................................................................................................................. 12 Bezpečnost .............................................................................................................................. 12 Výhody a nevýhody ................................................................................................................. 12 Závěr............................................................................................................................................ 13 Literatura ..................................................................................................................................... 14 Přílohy ......................................................................................................................................... 15
1
Úvod Na konci srpna roku 2006 byla v Evropské unii zavedena povinnost vydávat elektronické pasy podle standardu ICAO (Mezinárodní organizace pro civilní letectví). Bezkontaktní čip v elektronickém pase umožňuje vykonávat složité kryptografické operace a tak se nabízí možnost elektronický pas využít i k jiným účelům, než k jakému je původně určen. Cílem této práce je implementovat jednu z těchto možných aplikací elektronického pasu. Standardní autentizační metoda užívaná většinou uživatelů k přihlašování do operačního systému Windows je použití přihlašovacího jména a hesla. Jiná autentizační metoda, se kterou se dnes může uživatel běžně setkat, je například přihlášení pomocí otisku prstu. Microsoft umožňuje ve Windows standardní autentizační knihovnu GINA nahradit knihovnou třetích stran. Je tedy možné naprogramovat vlastní implementaci knihovny GINA, která bude vedle standardní autentizace pomocí uživatelského jména a hesla umožňovat i autentizaci pomocí elektronického pasu. Cílem mé této bakalářské práce je vytvoření této implementace knihovny GINA. V následujících kapitolách svoji implementaci popíši a vysvětlím princip jejího fungování. Také vysvětlím základní principy autentizace ve Windows a komunikace s bezkontaktním čipem v elektronickém pasu.
2
Elektronické pasy Elektronický pas je cestovní doklad s elektronickým bezkontaktním čipem podle specifikace organizace ICAO. Optická podoba pasu je téměř shodná jako u běžných pasů. Elektronický pas obsahuje stejně jako ten obyčejný i strojově čitelnou zónu, která obsahuje základní údaje o držiteli pasu a je možné ji opticky přečíst a strojově rozpoznat. Stránka s identifikačními údaji je rozšířená o bezkontaktní čip, který splňuje normu ISO 144443 a komunikuje s hostitelskou aplikací protokolem podle ISO 7816-4 [1]. Na tomto čipu jsou uloženy informace jako jméno držitele pasu, datum narození, číslo pasu, fotografie. Volitelně mohou být na čipu uloženy i biometrické údaje, např. otisky prstů. Elektronický pas je na přední straně označen symbolem viz Obrázek 1.
Obrázek 1
Ochranné mechanismy Elektronické pasy mohou využívat několik způsobů zabezpečení. První z nich je BAC (základní řízení přístupu), které brání čtení dat z elektronického pasu nepovolané osobě, která nemá fyzický přístup k údajům vytištěným v elektronickém pase. Pro čtení dat z bezkontaktního čipu je nejprve nutné ustavit zabezpečené spojení za pomocí informací ze strojově čitelné zóny. Dalším ochranným prvkem je aktivní autentizace, která zajišťuje autenticitu pasu pomocí páru asymetrických klíčů.
Obsah bezkontaktního čipu Informace na čipu jsou uloženy v souborech, které se dělí do dvou typů: • •
Dedicated File – definují hierarchii soborů, podobně jako složky Elementary File – obsahují samotná data
Uložené informace na bezkontaktním čipu jsou logicky rozděleny do několika datových skupin podle dokumentu [7], kde každé skupině odpovídá jeden Elementary File. Datová skupina 1 a 2 jsou povinné, ostatní jsou volitelné. Pro účely této práce jsou důležité následující datové skupiny:
3
• • •
Datová skupina 1 – obsahuje údaje ze strojově čitelné zóny se základními údaji o držiteli elektronického pasu Datová skupina 2 - obsahuje portrét držitele elektronického pasu ve formátu JPEG Datová skupina 15 – obsahuje veřejný klíč potřebný k aktivní autentizaci
Komunikační protokol Protokol, kterým bezkontaktní čip komunikuje je na aplikační úrovni založen na posílání takzvaných APDU. APDU je datová jednotka, kterou aplikace posílá bezkontaktnímu čipu instrukce, nebo naopak bezkontaktní čip posílá odpověď hostitelské aplikaci. Obsah APDU příkazu: Kód CLA INS P1 P2 Lc Data Le
Jméno Class Instruction Parameter 1 Parameter 2 Length Data Length
Popis Třída instrukce Kód instrukce 1. parametr instrukce 2. parametr instrukce Počet bytů v poli Data Data poslaná v příkazu Maximální délka v bytech odpovědi
očekávané
CLA, INS, P1 a P2 jsou jednobytové hodnoty a jsou povinné v každém příkazu. Připojení dalších částí příkazu už záleží na kódu instrukce. Obsah APDU odpovědi: Kód Data SW1 SW2
Jméno Data Status byte 1 Status byte 2
Popis Data poslaná v odpovědi Stav výsledku operace Upřesnění stavu výsledku
Byty SW1 a SW2 jsou v odpovědi obsaženy vždy. Pole data je v odpovědi obsaženo jen u určitých instrukcí.
4
BAC BAC, neboli základní řízení přístupu, je volitelný ochranný mechanismus v elektronickém pasu. Díky BAC nelze z elektronického pasu přečíst data bez fyzického přístupu k pasu. Z informací (číslo dokumentu, datum narození a datum platnosti), které jsou vytisknuté v elektronickém pasu ve strojově čitelné zóně, se sestaví prvotní klíč, který je použit k ustavení sdílených 3DES klíčů pro zabezpečenou komunikaci s čipem.
Secure messaging Po ustavení sdílených klíčů je všechna následná komunikace mezi aplikací a bezkontaktním čipem chráněna pomocí Secure Massagingu. V tomto případě se všechny příkazy šifrují za použití algoritmu 3DES a jsou k nim přidávány kontrolní součty MAC. Příchozí odpověď je dešifrována a následně autorizována pomocí MAC.
Aktivní autentizace Na čipu je uložen pár veřejného a soukromého klíče. Veřejný klíč je uložen v datové skupině 15 a je možné ho přečíst z bezkontaktního čipu standardní cestou. Privátní klíč je na bezkontaktním čipu uložen tak, že jej není možné z čipu přečíst běžnými prostředky, ale je možné pouze použít příkaz INTERNAL AUTHENTICATE k podepsání bloku dat privátním klíčem. Aktivní autentizace potom probíhá následovně: 1. Aplikace vygeneruje náhodný řetězec dlouhý 8 bytů a pošle ho čipu pomocí příkazu INTERNAL AUTHENTICATE 2. Bezkontaktní čip přijme tento řetězec a připojí k němu další data. Tento nový řetězec podepíše podle ISO 9796-2 Digital Signature scheme 1 [2] a pošle nově podepsaný řetězec zpět hostitelské aplikaci 3. Aplikace ověří digitální podpis Aktivní autentizace slouží jako ochranný prostředek proti kompletnímu zkopírování elektronického pasu.
5
Přihlašování do Windows O přihlašování uživatelů v systému Windows se stará proces WinLogon. Ten využívá knihovnu GINA, která se stará o interakci systému s uživatelem během přihlašovacího procesu. Jejím úkolem je shromáždit informace nutné k autentizaci uživatele. Standardně je to uživatelské jméno a heslo, v případě mé implementace je to elektronický pas přiložený ke čtečce. Po úspěšném ověření uživatele ustaví knihovna GINA nové sezení.
WinLogon WinLogon zpracovává funkce, které jsou nezávislé na autentizačním postupu. Poskytuje několik funkcí k podpoře knihovny GINA. WinLogon se může nacházet ve třech stavech: •
Odhlášený uživatel – v tomto stavu je uživatel vyzván k zadání autentizačních údajů. Pokud uživatel poskytne správné údaje, je přihlášen do systému
Obrázek 2
•
Přihlášený uživatel – přihlášený uživatel může normálně pracovat se systémem. Uživatel se může ze systému kdykoliv odhlásit a v tomto případě se WinLogon přepne do stavu „Odhlášený uživatel“ a všechny běžící procesy spuštěné uživatelem jsou ukončeny. Uživatel také může stanici uzamknout, a tím se znepřístupní jeho plocha a WinLogon se přepne do stavu „Uzamčená stanice“.
Obrázek 3
•
Uzamčená stanice – uživatel je vyzván k z zadání autentizačních údajů. Do systému se může přihlásit jen uživatel, který stanici uzamknul, tím se WinLogon přepne do stavu „Přihlášený uživatel“. Uživatel s právy administrátora může vynutit odhlášení uživatele 6
poskytnutím svých autentizačních údajů, v tom případě se WinLogon přepne do stavu „Odhlášený uživatel“.
Obrázek 4
Odhlášený uživatel
Uzamčená stanice
Přihlášený uživatel
Obrázek 5
GINA může reagovat na změnu těchto stavů, nebo přecházet mezi těmito stavy.
7
Autentizace pomocí pasu Tato aplikace je navržena pro komunikaci se čtečkou bezkontaktních čipových karet přes rozhraní PC/SC. Protože tato čtečka neumožňuje přečíst informace ze strojově čitelné zóny pasu, které jsou potřeba pro ustavení sdílených klíčů a následnou komunikaci s bezkontaktním čipem zabezpečenou přes secure messaging, je třeba toto omezení obejít. Při párování elektronického pasu s uživatelským účtem je uživatel vyzván, aby ručně zadal informace ze strojově čitelné zóny. Tyto informace jsou potom uloženy společně s uživatelským jménem, zašifrovaným heslem a veřejným klíčem pro aktivní autentizaci v souboru s uživatelskými účty. Tento soubor je pojmenován „ePassLogin.dat“ a je uložen ve složce %WINDIR%\System32.
Soubor s uživatelskými účty Pro každý elektronický pas, který je svázaný s uživatelem je v tomto souboru vytvořen jeden záznam o délce 1024 bytů. Struktura záznamu: Informace Informace ze strojově čitelné zóny Uživatelské jméno Zašifrované heslo Doména Datum vytvoření záznamu Veřejný klíč k aktivní autentizaci
Začátek (byt) 0
Délka (v bytech) 24
24 152 280 536 540
128 128 256 4 484
Informace ze strojově čitelné zóny jsou uloženy jako pole 24 bytů. Uživatelské jméno je uloženo ve znakové sadě Unicode ve formátu dva byty na jeden znak. Za posledním znakem uživatelského jména následuje znak s hodnotou 0 a zbytek bytů do 128 je náhodný. Heslo je uloženo stejně jako uživatelské jméno. Navíc je celých 128 bytů zašifrováno blokovou šifrou 3DES. Jako klíč je použito nejvýznamnějších 16 bytů z SHA-1 hashe bytů 3072 – 3327 z datové skupiny 2 (fotografie držitele) elektronického pasu. Doména je uložena ve stejném formátu jako uživatelské jméno, ale je pro ni vyhrazeno dvakrát více bytů.
8
Datum vytvoření záznamu je uloženo jako celé číslo na 4 bytech. Vyjadřuje počet sekund od 1.1.1970. Na konci dokumentu je uložen veřejný klíč k aktivní autentizaci ve formátu, který popisuje dokument RFC 3280 [4].
Správa uživatelských účtů Správa uživatelských účtů je prováděna pomocí aplikace SetupUtil. Podoba hlavního okna je zobrazena na Obrázku 6.
Obrázek 6
Tato aplikace umožňuje spárovat uživatelský účet na klientské stanici s konkrétním elektronickým pasem. Správu uživatelských účtů může provádět uživatel, který má právo zápisu do souboru s uživatelskými účty, tj. v běžném případě administrátor. Při přidávání nového uživatele se zobrazí dialog viz Obrázek 7.
9
Obrázek 7
Po vyplnění údajů a stisknutí tlačítka Ok je uživatel vyzván k přiložení elektronického pasu ke čtečce. Po zjištění přítomnosti elektronického pasu aplikace zkusí ustavit sdílené klíče na secure messaging a ověří elektronický pas aktivní autentizací. V případě úspěchu přečte aplikace data z bezkontaktního čipu z datové skupiny 2, které použije k zašifrování hesla a informace o novém uživateli zapíše do souboru. V této aplikaci lze také vybrat čtečku, která bude použita pro čtení elektronických pasů při přihlašování. Tato informace se ukládá do registrů Windows do hodnoty „ReaderName“ v klíči „HKEY_LOCAL_MACHINE \SOFTWARE\ePassportLogin“.
Přihlášení Základní myšlenka aplikace je umožnit uživateli přihlášení do Windows pomocí elektronického pasu bez nutnosti jakéhokoliv další interakce uživatele se systémem (zadání uživatelského jména nebo potvrzení nějakého dialogu). Zároveň je zachována možnost přihlásit se standardní cestou pomocí uživatelského jména a hesla. Pří zobrazení dialogu, který nabádá uživatele k přihlášení je zároveň spuštěno paralelní vlákno, které hlídá, zda nebyl ke čtečce přiložen elektronický pas. To detekuje Win32 API funkce SCardGetStatusChange. Tuto funkci je potřeba vykonávat ve zvláštním vlákně, protože funkce čeká na změnu stavu čtečky a blokuje další běh vlákna. V opačném případě by byly blokovány zprávy pro obsluhu zobrazeného dialogu.
10
V momentě, kdy je detekováno, že ke čtečce byl přiložen elektronický pas, aplikace začne procházet soubor s uživatelskými účty a u každého účtu se aplikace pokusí ustavit sdílené klíče pomocí informací ze strojově čitelné zóny (kombinace čísla pasu, data narození a data platnosti), které je uloženy u každého uživatelského účtu. Pokud aplikace uspěje a podaří se jí ustavit sdílené klíče k Secure messagingu, znamená to, že identifikovala uživatele. Následně provede autentizaci uživatele pomocí aktivní autentizace elektronického pasu. Aplikace pošle čipu výzvu k aktivní autentizaci a odpověď ověří vůči veřejnému klíči, který má uložen v souboru s uživatelskými účty. Při dešifrování odpovědi je použita funkce RSA_public_decrypt z knihovny OpenSSL.
Implementace Aplikace je napsána v jazyce C++ a dá se rozdělit na 3 hlavní části. • • •
První část se stará o komunikaci se systémem Windows. Je implementována ve třídě Gina. Tato třída je napsána podle příkladu FULLGINA[3] Druhá čast se stará o komunikaci s bezkontaktním čipem. Ta je implementována ve třídách EPassport a SmartCardManager. Třetí část provádí samotnou identifikaci a autentizaci uživatele.
K vývoji jsem použil Microsoft Visual Studio 2005. K ladění jsem použil Microsoft Virtual PC a v něm spuštěné Windows XP. Komunikace s bezkontaktním čipem Pro komunikaci s bezkontaktním čipem jsou použity funkce pro práci s rozhraním PC/SC z knihovny Win32 API. Metody na komunikaci s bezkontaktním čipem SmartCardManager a EPassport.
jsou
implementovány
v třídách
Nejprve se ustaví kontext správce zdrojů pomocí funkce SCardEstablishContext. Následně se funkcí SCardConnect ustaví spojení mezi aplikací a bezkontaktním čipem elektronického pasu. Funkcí SCardTransmit se posílají bezkontaktnímu čipu jednotlivé instrukce jako “select file”, “read binary”, “get challenge” a pod. Při komunikaci s bezkontaktním čipem je nutné používat spoustu kryptografických algoritmů. Algoritmus hashování SHA-1 použitý ve zdrojovém kódu je implementací od Paul E. Jones, 1998. Algoritmus šifrování 3DES je implementací od Christophe Devine, 2006. Na šifrování RSA je použita knihovna OpenSLL.
11
Výsledek Nasazení 1. DLL knihovnu ePassLogin.dll spolu s knihovnou libeay32.dll zkopírujeme do adresáře System32 v adresáři, kde jsou nainstalovány Windows. 2. V registrech vytvoříme novou hodnotu typu REG_SZ v klíči “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon“. Tu pojmenujeme “GinaDLL” a její hodnotu nastavíme na jméno naší knihovny GINA, v tomto případě na “ePassLogin.dll”. 3. Spustíme aplikaci SetupUtil, která slouží k údržbě uživatelských účtů a svážeme požadované účty s elektronickými pasy. Je také potřeba vybrat čtečku bezkontaktních čipů, která bude používána k autentizaci uživatelů. 4. Restartujeme počítač.
Bezpečnost Přihlašovací jména a hesla uživatelů jsou uloženy v běžném souboru na pevném disku. Pokud má útočník práva ke čtení souboru, může zjistit uživatelská jména, která jsou svázána s elektronickými pasy, avšak hesla těchto uživatelů jsou v souboru zašifrována a klíč k dešifrování každého hesla je uložen v elektronickém pasu. Proto útočník i při přečtení tohoto souboru nezíská přístup k uživatelským účtům. Pokud útočník získá právo zápisu do tohoto souboru, může jej poškodit a tím znemožnit uživatelům přihlašování pomocí elektronického pasu. Využití aktivní autentizace znemožňuje útočníkovi vytvořit kopii elektronického pasu a použít ji k přihlášení.
Výhody a nevýhody Výhoda při přihlašování elektronickým pasem je to, že uživatelé si nemusí pamatovat jejich heslo. To je bezpečně uloženo na disku počítače. Další výhodou je jednoduchost přihlášení, kdy jediné co musí uživatel udělat, je přiložit pas k bezkontaktní čtečce. Nevýhoda této implementace je ta, že při každé změně přihlašovacího hesla je nutné obnovit svázání uživatelského účtu s elektronickým pasem.
12
Závěr Cílem práce bylo implementovat autentizační knihovnu GINA pro operační systém Windows, která bude využívat elektronické pasy podporující aktivní autentizaci. Výsledná implementace je funkční a umožňuje jednoduché přihlášení do Windows stejně jako základní správu uživatelských účtů. Program je odladěn jen pro pasy vydávané Českou republikou a není možné garantovat jeho funkčnost s pasem vydaným jiným státem. Bohužel proces autentizace se v posledním desktopovém operačním systému od Microsoftu Windows Vista změnil tak, že v něm nelze tuto knihovnu využít a tato práce je tedy využitelná jen u starších operačních systémů.
13
Literatura • •
• •
• • •
[1] ISO/IEC 7816-4, Identification cards - Integrated circuit(s) cards with contacts - Part 4: Interindustry commands for interchange, 1994 [2] ISO/IEC 9796-2, Information Technology – Security Techniques – Digital Signature Schemes giving message recovery – Part 2: Integer factorisation based mechanisms, 2002. [3] BROWN, K.: Customizing GINA (Part 2), MSDN Magazine, červen 2005. Dostupné na URL http://msdn.microsoft.com/en-us/magazine/cc163786.aspx (leden 2009) [4] RFC 3280, R. Housley, W. Polk, W. Ford, D. Solo, "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 3280, April 2002 [5] ICAO, MRTD: PKI for Machine Readable Travel Documents offering ICC Read-Only Access [6] ICAO: ICAO 9303 specification. Včetně Supplement – 9303, 2005-4 V3.0 [7] ICAO: Development of a Logical Data Structure – LDS for Optional Capacity Expansion Technologies, V 1.7
14
Přílohy Součástí práce je CD obsahující zdrojové kódy implementované knihovny GINA a pomocného nástroje pro údržbu uživatelských účtů. Zároveň je ke zdrojovým kódům přiložena binární verze knihovny OpenSSL, která je vyžadována pro běh aplikace.
15