| ID-kaardiga autentimise ja SSL ühenduse stabiliseerimine |
|
|
|
|
Esmaspäev, 10 Jaanuar 2011 13:02
|
|
Möödunud aasta mais, kirjutas Jaanus Kõiva MicroFonis SSL-kihis avastatud veast ja selle mõjust ID-kaardiga autentimisele. Paraku – nagu paljude asjadega, mis ennast otseselt ei puuduta – siis suure hooga tegelema ei tormanud. Nii sujus kõik ilusti selle hetkeni, kui möödunud aasta talve alguses avastasime üllatusega, et osa kasutajatest ei saa meie keskkondades end ID-kaardiga autentida. Probleemi analüüsides selgus, et see ilmneb väga erinevatel brauseritel ja platvormidel ning lisaks kõigele, n.ö magustoiduks, esines muid SSL-kihist tulenevaid vigu täiesti suvalistes kohtades. Näiteks nägid väga paljud kasutajad aeg-ajalt oma ekraanidel veateateid kujul: Veel teravamaks tegi probleemi see, et veateated tekkisid suvalistes kohtades ning kadusid ära refreshiga. Logide järgi oleksid kasutajad nagu käepigistuse erinevatel hetkedel vastamata jätnud. Ka Google ei olnud eriti sõnarohke, sealt võis leida vaid paar sama teemaga vaevleva kolleegi postitust, mis paraku olid ka vastuseta. Seega olime olukorras, kus pidime midagi ise välja mõtlema ning oma ideid ja eksperimenteerimise tulemusi jagangi siin artiklis. Miks üldse hakata midagi välja mõtlema?Viidatud artiklist loeb välja nii probleemi püstituse kui ka selle lahenduse. Vastus on lihtne: kuna algse probleemi juurtest lugedes, ei taibanud ma esimese hooga ära, kuidas SSL hosti ID-kaardi jaoks eraldi tõstmine probleemi lahendab, otsustasin teema endale selgeks teha ning protsessi käigus tulin veidi teistsugusele lahendusele. Lisaks sellele pakutakse ühe kõige levinuma lahendusvariandina SSL-sessiooni taasjätkamise (renegotiation) ärakeelamist, mis minu vaatenurgast ei ole väga korrektne, ning näiteks uusima põlvkonna Firefox 4 (hetkel beta siiski) brauseritega selline lähenemisviis ei tööta. Muidugi on esialgse artikli avaldamise ajast ka omajagu aega möödas, ning mõningad asjad on nüüdseks juba muutunud. Aga alustan algusest – probleem (nagu me saame vastavast RFC-st välja lugeda) seisneb selles, et SSL-sessiooni taasjätkamise (renegotiation) protseduuris peitub kolmanda osapoole jaoks võimalus märkamatult süstida suvalisi andmeid. Taasjätkamise keelamineOK, mis siin ikka, keelame sessiooni taasjätkamise ja asi töötab? Sellise sisuga OpenSSL patch tuli välja peagi pärast esialgse probleemi avastamist ja paljud seda ka rakendasid. Iseenesest üsna loogiline, kuid sessiooni taasjätkamine (renegotiation) on oma loomult täiesti legaalne ja vajalik protsess. Iseasi, et selle implementatsioon oli veidi ebaturvaline (tunnistame ausalt, et nagu enamiku MiTM rünnakute puhul, on see pimesi mängimine ja selle vea edukas ärakasutamine reaalsetes tingimustes kuulub väga suure vedamise ja müstilise intuitsiooni rubriiki). Siiski on SSL-sessiooni taasjätkamine vajalik protsess, ja näiteks ülalpool mainitud Firefox 4 beta sertifikaadiga autentimist ilma selleta eriti teha ei taha, vähemalt mitte vaikimisi konfiguratsioonis. Diskussioon teemal kummal poolel on õigus ja kas sessiooni taasjätkamine on õige tegu, on siinkohal skoobist väljas. Kuidas eraldi SSL hosti tõstmine probleemiga haakub?Sama küsimus vaevas ka mind. Aluseks on võetud fakt, et SSL-sessiooni taasjätkamine toimub enamasti juhtudel, kus kasutaja liigub sertifikaadiga autentimist nõudva tsooni ja muu veebi ressursside vahel. Sellest ka loogiline järeldus: tõstame kasutaja sertifikaadiga autentimise eraldi SSL hosti ja taasjätkamist ei toimu. Üsna loogiline lähenemine, kuid sõltuvalt serveri konfiguratsioonist võib sessiooni taasjätkamine toimuda ka real muudel juhtudel ja tingimustel, ning toimubki. Seega kogu probleemi see lähenemine ei lahenda, ning kui brauseri ja serveri vahel sessiooni taasjätkamisel tekkivad möödarääkimised – seisame taas silmitsi sama probleemiga. Nii juhtus ka meil. LahendusNatuke mõeldes ja debuggeriga mängides jõudsin aga ka lahenduseni. 1) Samm 1: Uuendada OpenSSL. 2) Samm 2: Apache konfiguratsiooni muudatused. Konfiguratsiooni muudatused: 1) Keelame ära SSLv2 protokolli. Näiteks niimoodi: Ja neid kasutajaid, kes siiani kasutavad SSL v. 2, saab lihtsalt ümber seadistada. Ma usun, et tänapäeval pole kliente, kes ei toeta SSL v.3 või TLS v.1. 2) Keelame ajutiste Diffie-Hellmann võtmetega sessioone. SSLCipherSuite !DH:HIGH 3) Lubame (eba-)turvalist SSL sessiooni taasjätkamist. 4) Vähendame sessioonide taasjätkamiste arvu. <Location /eid.jsp*> Seejärel, taaskäivitame Apache’i, ning meie ID-kaardiga autentimine töötab kõikides brauserites ja vanu probleeme ei paista olevat. Lisa IP aadress, SSL host vms ei ole vajalikud. |
| Viimati uuendatud Esmaspäev, 10 Jaanuar 2011 14:42 |