Autentifikácia

Z Kiwiki
Verzia z 11:49, 8. apríl 2010, ktorú vytvoril Ian (diskusia | príspevky) ()
Skočit na navigaci Skočit na vyhledávání

Autentifikácia

Autentifikácia predstavuje kľúčovú úlohu pri vytváraní bezpečnej komunikácie medzi klientom a webovou službou. Od identity klienta sa odvíja celý scenár komunikácie, preto sa samotnému overovanie klientov budeme venovať podrobnejšie. Overovanie predstavuje proces, ktorom sa zisťuje identita užívateľa a zabezpečuje sa jej platnosť. V aplikáciách ASP.NET ju môžeme implementovať pomocou jedného z týchto štyroch systémov [1][4]:

1. Formulárová autentifikácia. Tento typ overovania je založený na prihlasovacej stránke a existujúcej databáze užívateľov. Užívateľ dostane lístok, ktorý je kombináciu zakryptovaním hodnôt uložených v cookies. Pre webové služby sa nie je tento typ vhodný. Nakoľko webové služby sú bezstavové, a použitie cookies by ich zbytočne obmedzovalo.

2. Passportová autentifikácia. Využíva infraštruktúru Microsoft Passport. Ten implementuje centrálnu správu identít. Prihlasovacie údaje užívateľov sú spracovávané samostatným passportovým serverom. Tento spôsob overovanie je neflexibilný, a v tejto práci sa mu podrobnejšie nebudeme venovať.

3. Integrovaná autentifikácia Windows.

4. Autentifikácia založená na certifikácii.

5. Vlastný typ autentifikačného procesu.

Posledné tri spôsoby overovania klientskych aplikácii si rozoberieme v samostatných podkapitolách, nakoľko sú vhodné pre autentifikáciu klientov webových služieb. Vysvetlíme si princípy, na ktorých sú založené. Oblasti, v ktorých sú nasadzované. Spomenieme výhody a nevýhody, ktoré so sebou prinášajú. A tak isto uvedieme ich programovú realizáciu v jazyku C .


Windows Autentifikácia

V tejto časťi sa venujeme bezpečnosti webových služieb ASP.NET. Technológia Windows autentifikácie je úzko spojená s firmou Microsoft a tak isto operačnými systémami Windows od tejto spoločnosti. Jednou z najjednoduchších možností autentifikácie klientov webových služieb, je ponechať túto autentifikáciu na webový server, napríklad ISS, respektíve na samotný operačný systém Windows. Princíp tohto typu autentifikácie je nasledovný [1]:

1. Webový server požiada klientsku aplikáciu o autentifikáciu.

2. Tá predloží prihlasovacie údaje.

3. Tie sú následné namapované na užívateľský účet Windows.


Táto metóda overovania užívateľov je vhodná, ak našu webovú službu využíva menší a stabilný počet užívateľov, ktorý majú existujúce užívateľské účty Windows. Tento typ sa využíva pre aplikácie, v ktorých webový server aj užívatelia patria do rovnakej lokálnej siete alebo intranetu. Medzi výhody patrí [1], [4] ,[7]:

  • Využitie existujúcich účtov Windows.
  • Využitie samotného zabezpečenia operačného systému Windows a impersonácie. Môžeme využiť už existujúce oprávnenie užívateľských účtov, napríklad pre prístup k súborom. Programový kód ASP.NET je vykonávaný pod fixným účtom pre službu IIS 5.x je to účet ASP.NET a pre IIS 6.0 je to účet Network Service. Použitie pevného účtu ma veľa dôvodov. Skoro vo všetkých prípadoch sú práva pridelené užívateľom, oveľa menšie ako sú práva potrebné pre aplikáciu. Existuje mechanizmus, pomocou ktorého je možné spúšťať programový kód pod prevzatou identitou. Jedná sa o tzv. impersonáciu. Takýto model je vhodné použiť pre lokálne siete, s malým počtom užívateľov, ktorý majú korektne zadefinované užívateľské oprávanie Windows. Impersonácia bude vysvetlená v podkapitole 5.2.1.
  • Pri tomto type nie je nutné vytvárať prihlasovaciu stránku ani databázu užívateľov, čiže táto metóda nie je z programátorského hľadiska časovo náročná.

Existuje však veľa dôvodov, prečo sa tomuto spôsobu overovania vyhnúť. Napríklad [7] ,[9]:


  • Tento typ autentifikácie nie je veľmi flexibilný, a veľmi zle sa prispôsobuje.
  • Dochádza pri ňom naviazaniu na užívateľské účty.
  • Je nevyhnutné, aby klienti webovej služby mali operačný systém od spoločnosti Microsoft, kvôli korektnej autentifikácii webovým serverom IIS.
  • Táto metóda neumožňuje riadiť autentifikačný proces. A predstavuje veľký problém pokiaľ má byť webová služba verejná.

Pri Windows autentifikácii je overovanie klienta vykonávané webovým serverom IIS. Ten môže overiť a autorizovať klienta ešte skôr, ako webová aplikácia (napr. webová služba) začne obsluhovať jeho požiadavku. IIS má niekoľko bezpečnostných mechanizmov pomocou, ktorých môže overiť, autorizovať klienta, zabezpečiť dôvernosť a integritu komunikácie.


Služba Internet Information Service

Webový server IIS zabezpečuje korektné prostredie pre beh aplikácie typu klient – server.

K autentifikácii klientov má k dispozícii niekoľko stratégii. Môže použiť na overenie klienta [4] :

  • Základná autentifikáciu. Túto metódu vyvinulo konzorcium W3C. Definuje dodatočnú hlavičku HTTP, v ktorej sú prenášané užívateľské mená a heslá. Dáta nie sú kryptované, ale sú kódované vo formáte Base64. Tento typ je nutné používať s SSL.
  • Digestívna autentifikáciu. Je podobná základnej autentifikácii, prihlasovacie údaje nie sú prenášané v kódovaní Base64 ale sú hašované. Tento spôsob nie je veľmi rozšírení, našiel uplatnenie len v intranetoch.
  • Integrovanú autentifikáciu Windows. Pri tomto type autentifikácie, je overovanie užívateľa ponechané na samotný operačný systém. Využíva sa 96 bitové číslo SID (Secure identifier), ktoré slúži na identifikáciu každého prihláseného užívateľa. Identita každého prihláseného užívateľa sa predáva vo forme tokenu. Pretože integrovaná autentifikácia Windows je najvhodnejším overovacím štandardom pre intranetové aplikácie založené na WAN alebo LAN, budeme sa je venovať v nasledujúcej podkapitole.


Integrovaná autentifikácia Windows

Podmienkou korektného fungovania tohto typu overovania užívateľov, je to že klient aj webový server sa musia nachádzať na rovnakej lokálnej sieti. Pri tejto metóde sa neprenášajú mená a heslá užívateľov, ale spolupracuje s doménovým serverom alebo inštanciou Active Directory [1]. Na prenos prihlasovacích údajov sa využíva autentifikačný protokol NTLM (NT LAN Manager) alebo protokol Kerberos 5. Druh overovacieho protokolu závisí od operačného systému klienta a serveru. Pokiaľ sa jedná o operačný systém Windows 2000 a vyšší ako autentifikačný protokol je použitý Kerberos 5, inak bude overovanie realizované prostredníctvom NTLM. [4]

V tejto podkapitole si rozoberieme nasledujúce schémy integrovaného overovania Windows [9]:

  • Integrované overenie systému Windows s impersonáciou
  • Integrované overenie systému Windows bez impersonácie
  • Integrované overenie systému Windows s preddefinovanou identitou

Ale skôr ako sa začneme venovať samotnej integrovanej autentifikácii systémom Windows je vhodné si objasniť proces impersonácie.


Impersonácia

Impersonácia je proces vykonávania programového kódu v kontexte identity iného užívateľa. Ako už bolo spomenuté kód webovej služby ASP.NET beží pod fixným účtom, typ účtu závisí od verzie služby IIS. Dôvody použitia impersonácie sú nasledovné [1],[4]:

  • Zvýšenie flexibility systému. Pre každého užívateľa môžeme prideliť rôzne prístupové práva a vyhneme sa tým použitiu fixného účtu pre všetkých užívateľov.
  • Rozlíšenie práv pre jednotlivé webové aplikácie na rovnakom počítači. V situácii, keď webový server používa veľké množstvo personalizovaných adresárov, môžeme pomocou impersonácie, zabrániť aby aplikácia nesprístupnila užívateľovi iné adresáre, ako tie na ktoré nemá oprávnenie.

ASP.NET podporuje dva typy impersonácie [15]:

  • Konfiguračnú, prostredníctvom konfiguračného súboru web.confing webovej služby.
  • A programovú, ktorá umožňuje prepnutie identity v rámci programu.


Konfiguračná impersonácia

Predstavuje najjednoduchšiu formu impersonácie prostredníctvom nadefinovania v konfiguračnom súbore web.confing pomocou prvku <identity>, ktorého hodnotu nastavíme na true. [1] (pozri Tab. 5.1)


Tab. 5.1 Konfiguračné nastavenie impersonácie v súbore web.config
<configuration>
   <system.web>
      <identity impersonate="true"/>
   </system.web>
</configuration>


ASP.NET umožňuje pevné nastavenie identity, pod ktorou bude spúšťaní kód webovej služby. (pozri Tab. 5.2)


Tab. 5.2 Konfiguračné nastavenie impersonácie s predefinovaným účtom
    <identity impersonate="true" userName="USER" password="PASSWORD" />


Programová impersonácia

V tejto podkapitole si vysvetlíme programovú impersonáciu s využitím platformy .NET Framework. Umožňuje väčšiu kontrolu nad procesom. Pre programovú impersonáciu sa využíva metóda WindowsIdentity.Impersonate(), ktorá je súčasťou menného priestoru System.Security.Principal. [9]

Pomocou tejto metódy môžeme nastaviť impersonáciu pre špecifický účet, ktorý je určený príznakom účtu (account token). Postup pri programovej impersonácii je nasledovný [1] :

1. Najskôr získame príznak účtu Windows, ktorý chceme zosobniť.

2. Pomocou metódy WindowsIdentity.Impersonate(), spustíme proces impersonácie. Návratová hodnota tejto metódy je objekt WindowsImpersonationContext.

3. Návrat k pôvodnej identite dosiahneme zavolaným metódy Undo() objektu WindowsImpersonationContext.

Príznaky užívateľských účtov sú v platforme .NET reprezentované pomocou objektu IntPtr. Tento objekt reprezentuje ukazovatele do oblasti neriadenej pamäte.

Získanie príznaku účtu aktuálneho prihláseného užívateľa je Tab. 5.3.


Tab. 5.3 Získanie príznaku účtu Windows
IntPtr token = ((WindowsIdentity)User.Identity).Token;

Samotná impersonácia pomocou príznaku účtu s využitím metódy Impersonate() je v Tab. 5.4.


Tab. 5.4 Proces impersonácie s využitím metódy Impersonate()
WindowsImpersonationContext impersonationContext;
impersonationContext = WindowsIdentity.Impersonate(token);


Integrované overenie službou Windows s impersonáciou

Spôsoby realizácie impersonácie sme si vysvetlili v kapitole 5.2.1 Pre korektné využitie tohto typu overovania klientskych aplikácii je nutné zadeklarovať ten typ autentifikácie v konfiguračnom súbore webovej služby web.config prostredníctvom prvku <authentication mode>, ktorý nastavíme na typ Windows. Samotnú impersonáciu povolíme prostredníctvom prvku <identity impersonate> , ktorý nastavíme na hodnotu true. (pozri Tab. 5.5) [1][4]


Tab. 5.5 Nastavenie integrovanej autentifikácie Windows s impersonáciou v súbore web.config
<configuration>
   <system.web>
      <authentication mode="Windows"/>
      <identity impersonate="true"/>
   </system.web>
</configuration>


Táto konfigurácia zosobní kód webovej služby ASP.NET užívateľa, ktorý bol overení službou IIS. Pre zosobnenie kódu webovej služby je nutné zakázať anonymný prístup v službe IIS. Ak je v službe IIS povolený anonymný prístup, kód ASP.NET bude spustený pod účtom hosťa v Internetu, implicitne účet IUSER_POČÍTAČ.

Pri tomto spôsobe autentifikácie máme tieto možnosti na autorizáciu klienta [1]:

  • Zoznamy ACL (Access kontrol list) prostredníctvom nich môžeme obmedziť prístup k súborom webovej služby a prostriedkom, ktoré využíva.
  • Autorizácia prostredníctvom adresy URL, ktorá sa realizuje konfiguračne v súbore web.confing webovej služby alebo v súbore machine.confing.

Tento typ integrovaného overovania Windows je vhodné pre webové služby použiť v nasledujúcich situáciách [4]:

  • Pokiaľ majú byť užívatelia webovej služby overovaní na základe existujúcich účtov Windows.
  • Ak má byť kontext zabezpečenia spúšťajúceho užívateľa webovou službou predaní do ďalšej vrstvy.


Integrované overenie systému Windows bez impersonácie

Tento model overovanie je, po stránke konfiguračného zabezpečenia totožný s integrovaním overovaním Windows s impersonáciou. Jediný rozdiel je v tom, že v konfiguračnom súbore webovej služby web.confing je prvok <identity impersonate> nastavení na hodnotu false. (pozri Tab. 5.6) [3]


Tab. 5.6 Nastavenie integrovanej autentifikácie Windows bez impersonácie v súbore web.config
<configuration>
   <system.web>
      <authentication mode="Windows"/>
      <identity impersonate="false"/>
   </system.web>
</configuration>

Možnosti autorizácie a scenáre nasadenia tohto modelu sú rovnaké ako v predchádzajúcej kapitole Integrované overenie službou Windows s impersonáciou, preto ich neuvádzame.


Integrované overenie systému Windows s preddefinovanou identitou

Použitie pevnej identity pre proces ASP.NET nie je veľmi vhodné a zaužívané riešenie. Nakoľko implicitne je proces ASP.NET spúšťaní pod fixným účtom, ktorý dobre zabezpečení, jeho typ záleží od verzie služby IIS. Pokiaľ by sme chceli spúšťať proces ASP.NET pod našim preddefinovaným fixným účtom, museli by sme mu zadefinovať veľmi silné oprávnenia. Pri zlej konfigurácii účtu, to môže predstavovať veľmi silné bezpečnostné riziko.[1], [2]

Takisto ako v predchádzajúcich dvoch schémach integrovaného overovanie Windows, sa aj tento typ overovania sa realizuje konfiguračne v súbore web.confing webovej služby, kde sa hodnota prvku <identity impersonate> nastaví na hodnotu true a v samotnom prvku uvedieme užívateľské meno a heslo účtu. Z dôvodu zvýšenia bezpečnosti môžeme využiť nástroj aspnet_setreg.exe na zakryptovanie prihlasovacích informácii [9], [29].

Samotná konfigurácia integrovaného overovania Windows s preddefinovaným pevným účtom je v Tab. 5.7.


Tab. 5.7 Nastavenie integrovanej autentifikácie Windows s preddefinovanou identitou v súbore web.config
<configuration>
  <system.web>
    <authentication mode="Windows"/>
       <identity impersonate="true"
       userName="registry:HKLM\Software\AspNetIdentity,Name"
       password="registry:HKLM\Software\AspNetIdentity,Pwd"/>
  </system.web>
</configuration>

V tejto kapitole sme sa venovali autentifikácii Windows. Tento model overovania sa využíva pre aplikácie, v ktorých webový server aj užívatelia patria do rovnakej lokálnej siete alebo intranetu. Podrobnejšie sme sa venovali integrovanej autentifikácii Windows, nakoľko predstavuje „štandard" pre intranetové aplikácie založené na WAN alebo LAN sieťach. Z toho dôvodu je využívaná v malých podnikových sieťach. [4]


Autentifikácia založená na certifikátoch

Samotný princíp a fungovanie certifikátov sme si vysvetlili v kapitole Princíp certifikátov a certifikát X.509. Overovanie klientskych certifikátov môžeme vo webovej službe využiť na overovanie:

  • na klientskych a serverových aplikácii volajúcich webovú službu,
  • iných webových služieb.

Existujú niektoré obmedzenia, s ktorými sa môžeme stretnúť pri overovaní klientskych aplikácii prostredníctvom certifikátov, v tejto kapitole sa pokúsime niektoré z nich načrtnúť a tak isto ponúknuť aj riešenie.

Proces autentifikácie klientskych certifikátov

Problém vzniká ak klient komunikuje s webovou službou prostredníctvom webovej aplikácii. Webová aplikácia môže overiť klientsky certifikát, ale ten istý certifikát nie je možné použiť na overenie webovou službou. Webová aplikácia nemôže predať klientsky certifikát spúšťajúceho užívateľa do webovej služby. Dôvod je nasledovný: webová aplikácia nemá prístup k súkromnému kľúču klienta. (pozri Obr. 5.1) [16]


Súbor:TempDp 12.png
Obr. 5.2 Overovanie klientov webovou službou prostredníctvom podsystému



Poces autentifikácie klientského certifikátu prostredníctvom podsystému

V tejto podkapitole sa oboznámime s riešením problému, ktorý sme si načrtli v podkapitole Proces autentifikácie klientskych certifikátov. Riešenie nášho problému môže byť odstránený nasledujúcim komunikačným scenárom [16]:

1. Klient volá webovú službu prostredníctvom webovej aplikácie.

2. Aplikácia plný úlohu autentifikácie a autorizácie klienta a je zodpovedná za svojich klientov.

3. Po úspešnom overení, na základe existencie členstva klienta v nejakej roli webová aplikácia môže volať webovú službu prostredníctvom rôznych certifikátov. Tým je zabezpečená existencia viacerých užívateľských rolí vo webovej službe.

4. Webová služba autorizuje webovú aplikáciu na základe certifikátu, ktorý obdržala od nej.

Dôvernosť a integrita komunikácie medzi serverom webovej aplikácie a webovou službou je zabezpečená použitím protokolu SSL alebo IPSec. Prostredníctvom certifikátov je ošetrený neautorizovaný prístup. Celý komunikačný scenár je znázornený na Obr. 5.2.


Súbor:TempDp 122.png
Obr. 5.2 Overovanie klientov webovou službou prostredníctvom podsystému


Implementácia overovanie klientov webovou službou prostredníctvom podsystému na platforme .NET Framework s využitím serverovej aplikácie

Z dôvodu, že webová aplikácia ASP.NET nemá priamy prístup k certifikátom musíme použiť dodatočný proces, ktorý zabezpečí volanie webovej služby a predávanie samotných certifikátov službe. Proces musí byť nakonfigurovaný tak, aby bol spúšťaní s pridružením užívateľským profilom, pretože ASP.NET aplikácia nemá načítaný príslušný užívateľský proces a k nemu zodpovedajúce úložisko certifikátov. Tento scenár môžeme realizovať prostredníctvom [16]:

  • služby systému Windows,
  • serverovej aplikácie (Model Enterprise Services).

Celý proces overovania s využitím serverovej aplikácie sa skladá z nasledujúcich krokov [15], [16]:

1. ASP.NET aplikácia autentifikuje volajúcich klientov na základe ich certifikátov.

2. Webová aplikácia ASP.NET autorizuje prístup klientov k webovej službe.

3. ASP.NET aplikácia volá príslušnú serverovú komponentu (tá je spúšťaná iba v serverovom procese).

4. Serverová aplikácia je spúšťaná pod konkrétnym účtom. K nemu je pridružení užívateľský profil. Serverový komponent načíta certifikát z úložiska certifikátov. Ten je použitý webovou službou na overenie webovej aplikácie.

5. Serverový komponent volá webovú službu ASP.NET a predáva jej klientsky certifikát.

Celý proces overovanie certifikátov s využitím serverového komponentu je znázornené na Obr. 5.3.


Súbor:TempDp 14.png
Obr. 5.3 Overovanie klientov webovou službou s využitím serverovej aplikácie[16]


Takýto scenár server / server funguje za predpokladu, že webová aplikácie správne autentifikovala a autorizovala klienta. Použitie dodatočného procesu na prístup k certifikátom je nutný z toho dôvodu, že účet ASP.NET nemá prístup k žiadnemu certifikátu na webovom servery. Každý certifikát je spracovávaný v rámci užívateľského profilu s pridružením účtom.


Overovanie desktopových aplikácii prostredníctvom klientskych certifikátov webovou službou

Doteraz sme sa zaoberali prípadom, v ktorom konzumentom XML ASP.NET webovej služby bola webová aplikácia, napríklad ASP.NET stránka. V tejto práci budeme neskôr vyvíjať vlastnú bezpečnostnú platformu pre XML ASP.NET webové služby, ktorej služby bude využívať desktopová aplikáciu typu winforms. Pri overovaný klientskych certifikátov desktopovej aplikácie nie je nutné použitie podsystému. Celý proces overovania klientskeho certifikátu webovou službou spočíva:

1. Desktopová aplikácia načíta príslušný klientsky certifikát z úložiska certifikátov.

2. Aplikácia winforms pripojí klientsky certifikát k vlastnosti ClientCertificates triedy proxy, ktorej význam sme si vysvetlili v kapitole Trieda proxy.

3. Cez HTTPS kanál pošle SOAP požiadavku na XML webovú službu.

4. Klientsky certifikát, na strane webovej služby môže byť overený dvoma spôsobmi [15]:

  • Webovým serverom,
  • Priamo v programovom kóde webovej služby ASP.NET.
Súbor:TempDp 13.png
Obr. 5.2 Overovanie klientov webovou službou prostredníctvom podsystému