Kormányablak, Ügyfélkapu, magyarorszag.hu, kormany.hu
KORMÁNYABLAK, ÜGYFÉLKAPU - A ZÁRT AJTÓK MÖGÖTT...
(nem hivatalos e-kormányzati témájú oldal)
  
BEMUTATKOZÁS 
E-KÖZIGAZGATÁS 
IT BIZTONSÁG 
  
































  Mottó:
Ne add fel! A kulcstartón is
általában a legutolsó kulcs az,
amelyik kinyitja az ajtót.
/Paulo Coelho: Az accrai kézirat/
2021. május 31.  
 SSL/TLS: az SSLKEYLOGFILE is egyfajta keylogger 
   
Az SSL/TLS protokollról megtanultuk az iskolában, hogy a "client" (pl. browser) és "server" (pl. web server) között hoz létre rejtjelezett kommunikációs csatornát. Azt is tudjuk, hogy a rejtjelezéshez használ aszimmetrikus algoritmusokat és szimmetrikus algoritmusokat egyaránt ("hybrid"). A rejtjelezésen túlmenően pedig – beállítástól függően – felhasználó-hitelesítést is végre tud hajtani, ami miatt MitM (Man-in-the-Middle) támadás ellen védett VPN (Virtual Private Network) megoldásként is használják.

Az SSL/TLS története 1994-ig nyúlik vissza és az azóta eltelt évek alatt sok tapasztalat gyűlt össze, hogy mire kell figyelni egy protokoll tervezésénél (pl. renegotiation attack) vagy megvalósításánál (pl. padding hibák), illetve az alkalmazott transzformációknál (pl. tömörítések, kriptográfiai algoritmusok). Ezekről már írtam pár sort az SSL/TLS korábbi verziói kapcsán (ld. HTTP/HTTPS Authentication és Harci díszben az Apache). Az SSL/TLS jelenlegi változata, a TLS v1.3 2018-ban jelent meg szabványként (IETF RFC 8446) és a "formal verification" elemzésen kívül is komoly változásokat hozott. Ezek a változások pedig befolyásolják a forgalomelemzésekre vonatkozó lehetőségeket is, legyen szó akár támadásról, akár hibakeresésről (debug).

A TLS v1.3 (IETF RFC 8446) talán legfontosabb újításai "privacy" és "security" szempontból
  • a módosított üzenetsorrendezés révén az SSL/TLS mutual/client authentication esetén a csatlakozó felek már a "handshake" során is rejtjelezett csatornán kommunikálnak;
  • az RSA révén történő kulcsátvitel (keyEncipherment) helyett kizárólagosan a Diffie-Hellman révén történő kulcsegyeztetés (keyAgreement) alkalmazása.
privacy
A TLS v1.3 előtt az SSL/TLS mutual/client authentication esetén a "client" által beküldött tanúsítvány ("Certificate") még nyíltan került elküldésre, így a pl. VPN hálózati forgalmat figyelő esetleges támadók láthatták, hogy kik, mikor csatlakoztak a "server" oldalhoz. Magukhoz az átküldött adatokhoz, a kommunikációhoz nem fértek hozzá, de a kapcsolatfelépítésből ("handshake") kinyert adatok is fontos információként szolgálhattak, amit pl. GDPR (2016/679/EU) miatt is bizalmasan kell már kezelni.

A TLS v1.3 jelentősen módosította a kapcsolatfelépítés ("handshake") folyamatát: nem csak egyszerűbbé és rövidebbé vált, de logikailag is megváltozott, így felelve meg napjaink "privacy" követelményeinek.
All handshake messages after the ServerHello are now encrypted.

/IETF RFC 8446/

security
A TLS v1.3 előtt két lehetőség volt a "client" (pl. browser) és "server" (pl. web server) által – az adatok rejtjelezésére – használandó szimmetrikus kulcs (pl. AES) beállítására:
  • a "client" által létrehozott (pl. random) adat került átküldésre a "server" tanúsítványában szereplő RSA nyilvános kulccsal, vagy
  • a "client" és "server" által létrehozott titkos és az az alapján származtatott (hatványozás, modulo/maradékos osztás) nyilvános adatok közül az utóbbi kicserélésre került és a megismételt műveletvégrehajtás (hatványozás, modulo/maradékos osztás) révén állt elő a közös adat.
The keyEncipherment bit is asserted when the subject public key is used for enciphering private or secret keys, i.e., for key transport. For example, this bit shall be set when an RSA public key is to be used for encrypting a symmetric content-decryption key or an asymmetric private key.

The keyAgreement bit is asserted when the subject public key is used for key agreement. For example, when a Diffie-Hellman key is to be used for key management, then this bit is set.


/IETF RFC 5280/
A TLS v1.3 jelentősen módosította az aszimmetrikus aláíró algoritmusok paramétereit, illetve a szimmetrikus rejtjelező kulcsok beállítására használható algoritmusok körét ("Cipher Suites") azzal, hogy az RSA eltűnt a készletből és csak a Diffie-Hellman maradt, amivel biztosítani lehet a "forward secrecy" követelményt:
  • TLS_AES_128_GCM_SHA256
  • TLS_AES_256_GCM_SHA384
  • TLS_AES_128_CCM_SHA256
  • TLS_AES_128_CCM_8_SHA256
  • TLS_CHACHA20_POLY1305_SHA256
A szimmetrikus rejtjelező algoritmusoknál az AES "block cipher" módjai megváltoztak (GCM vagy CCM engedélyezett), illetve bekerült a ChaCha20 "stream cipher". Az aszimmetrikus aláíró algoritmusoknál megmaradt az RSA, azonban a rögzített RSASSA-PKCS1-v1_5 padding helyett véletlen ("random") padding adatokat használó RSASSA-PSS változatot kell alkalmazni, hogy a Bleichenbacher-féle támadás ellen is védett legyen az adatstruktúra.

A "forward secrecy" követelmény alapján nem lehet hosszú távú titkos adatra alapozni a védelmet (mint egy RSA titkos kulcsnál, vagy statikus Diffie-Hellman paraméternél), helyette rövidebb lejáratú, akár csak adott SSL/TLS handshake tranzakcióra ("ephemeral") alkalmazott titkos adatokat lehet használni (mint egy mindig új paramétereket használó Diffie-Hellman kulcsegyeztetés során). Ez védelmet nyújthat azon támadások ellen, amelyeknél csak megfigyelik és eltárolják a hálózati forgalmakat, hogy aztán idővel a megfejtett – vagy a megszerzett "server" RSA – titkos kulcsok révén utólag visszaalakítsák a rejtjelezett adatokat (és ezáltal pl. WikiLeaks-szerűen feltárják napjaink történelmét). Fontos azonban megjegyezni, hogy a Shor algoritmust futtató kvantumszámítógép ellen a hagyományos Diffie-Hellman sem nyújt elegendő védelmet (esetleg a Supersingular Isogeny Diffie-Hellman lehet "quantum-safe").

A hálózati forgalom megfigyelésére és eltárolására a (portable) WireShark egy megfelelő segédalkalmazás (Cain & Abel mellett). A WireShark az RSA révén történő kulcsátvitelt meg tudja fejteni, ha a "server" RSA titkos kulcsát megkapja (pl. *.p12), de a TLS v1.3 által kizárólagosan engedélyezett Diffie-Hellman révén történő kulcsegyeztetés eredménye alapján is vissza tudja alakítani a rejtjelezett hálózati forgalmat, ha az SSLKEYLOGFILE állományba kiírja a "client" (pl. browser) a titkos adatokat. Az SSLKEYLOGFILE környezeti változó támogatott a Google Chrome és Mozilla Firefox 48 (2016-08-02 – NSS 3.24, 2016-05-17) böngészőben. Az SSLKEYLOGFILE használatához a "server" és a "client" oldalán egyaránt vannak előfeltételek:
  • A "server" oldalán egy SSL/TLS mutual/client authentication vagy SSL/TLS server authentication hozzáférésvédelemmel ellátott "web server" (pl. Apache HTTP Server) beállítása szükséges (azaz HTTPS csatornán keresztül legyen elérhető a webes felület).
  • A "client" oldalán fel kell venni környezeti változóként az SSLKEYLOGFILE bejegyzést, amely egy írható állományra kell, hogy mutasson. Ezen állományba tudja kiírni a "client" (pl. browser) a titkos adatokat, amelyeket a WireShark be is olvas, ha a beállításainál megadásra kerül az állomány elérési útvonala. Ezek alapján a WireShark automatikusan megfejti a hálózati forgalmat.
Apache HTTP Server beállításai

Microsoft Windows környezeti változó beállításai

WireShark SSL/TLS protokoll beállításai

A hálózati forgalom (webes felület megnyitása) Google Chrome böngészőben

A hálózati forgalom (webes felület megnyitása) Mozilla Firefox böngészőben

A hálózati forgalom (webes felület megnyitása) során létrehozott Diffie-Hellman titkos adatok

A hálózati forgalom (webes felület megnyitása) megjelenítése nyílt adatként (böngésző)

A hálózati forgalom (webes felület megnyitása) megjelenítése nyílt adatként (WireShark)



Kapcsolódó anyagok:
 vissza 
   
  info@kormanyablak.org
info@ugyfelkapu.info