|
Az SSL (újabb nevén TLS) protokoll segítségével két fél - egy kliens és egy szerver - nyilvános kulcsú kriptográfiai algoritmusok segítségével meggyőződhetnek egymás kilétéről, majd közös szimmetrikus kulcsokban állapodhatnak meg, és e szimmetrikus kulcsok segítségével biztonságos - titkosított és hitelesített - csatornát hozhatnak létre, majd e csatornán titkosan és hitelesen kommunikálhatnak egymással. A protokoll egyik gyakran használt változata, amikor csak a szerver rendelkezik tanúsítvánnyal, így csak a kliens győződik meg a szerver kilétéről, de a protokoll úgy is működhet, hogy mind a kliens, mind a szerver bemutatja tanúsítványát, és kölcsönösen authentikálják egymást.
Az SSL kapcsolat felépítésekor lefolytatott kulcsegyeztetést (itt nemcsak kulcsokat, de pl. kriptográfiai algoritmuskészleteket is egyeztetnek egymással) később is megismételhetik résztvevők, ez az ún. renegotiation. Ez történhet azért, hogy lecseréljék a régen használt kulcsokat, azért, hogy erősebb kriptográfiai algoritmusokra térjenek át, vagy azért, hogy anonim SSL kapcsolatról (amikor csak a szerver mutatja be a tanúsítványát) kétirányú authentikációra váltsanak (amikor mindkét félnek van tanúsítványa), vagy vissza.
A probléma ezen regnegotiation lehetőséggel kapcsolatos. Az SSL protokoll nem biztosítja, hogy renegotiation előtt és után ugyanazon felek vesznek részt a kommunikációban. Így például előfordulhat a következő támadás:
A támadó anonim SSL kapcsolatot létesít egy webszerverrel, majd elküld neki egy kérést, amihez már authentikációra van szükség. A szerver ezért renegotiation-t kezedményez, és elkéri a kliens tanúsítványát. A támadó ekkor egy olyan legális klienssl köti össze a webszervert (ún. man-in-the-middle támadással), aki rendelkezik megfelelő authentikációs tanúsítvánnyal, és épp hozzá akarna kapcsolódni a webszerverhez. A szerver és a legális kliens elvégzik a renegotiationt, kulcsot cserélnek egymás tanúsítványai alapján, és innentől kezdve a támadó már nem lát bele a köztük lévő kapcsolatba. A problémát az jelenti, hogy a szerver az egészből annyit lát, hogy küldtek neki egy kérést, ő authentikációt kért, és az authentikáció sikeres volt, így végrehajthatja a kérést. Ez annyit jelent, hogy a támadó - aki nem rendelkezik megfelelő authentikációs tanúsítvánnyal - be tud szúrni egy legális kliens authentikált SSL kapcsolata elejére valahány byte-ot.
A fenti egy webes támadás, amely kliens oldali authentikációs tanúsítványokra épül. A probléma ennél tágabb, nemcsak a kliens oldali authentikációs tanúsítványok esetén, és nemcsak webes környezetben merül fel. A hiba magában az SSL protokollban van, nem pedig valamelyik implementációban, így elvileg minden SSL-t használó szerver érintett lehet. A megjelenő patch-ek úgy orvosolják a problémát, hogy megszüntetik a renegotiation lehetőséget az adott alkalmazásban. (Ez persze jelentheti azt, hogy a patch-elt webszerverekkel egyes weboldalak már nem működhetnek ugyanúgy, mint korábban.)
A probléma állítólag augusztus óta ismert, csendben dolgoztak a kijavításán, de novemberben nyilvánosságra került az ügy.
A hibát igazán az fogja megoldani, ha az SSL (TLS) protokollt javítják ki. Az IETF megjelentetett már egy Internet-Draftot, ami szerint kriptográfiailag hozzá lehetne kapcsolni a renegotiation-t az adott SSL (TLS) kapcsolathoz.