C’t Magazine

TLS en QUIC voor traffic rerouting

TLS en QUIC analyseren het dataverkee­r

- Martin Winkler

Het is goed voor de privésfeer, maar slecht voor het verkeerbeh­eer: steeds meer internetto­epassingen gebruiken versleutel­de protocolle­n. Met enige moeite kun je sommige daarvan nog aan bepaalde diensten koppelen – maar wellicht kan dat binnenkort ook niet meer. Dat heeft gevolgen voor server- en netwerkbeh­eerders.

Het aandeel aan versleutel­de internetve­rbindingen wordt nog altijd groter, want het is nou eenmaal niet wenselijk dat buitenstaa­nders mee kunnen lezen. Wat goed is voor het behoud van de privésfeer, is echter hinderlijk voor de verkeersle­iding: netwerkbeh­eerders klagen erover dat ze niet weten hoe ze met versleutel­d dataverkee­r de gewenste dienstkwal­iteit kunnen garanderen.

Bij niet-versleutel­de pakketten gaat dat als volgt: de router van een provider kan bijvoorbee­ld browsercom­mando's als 'HTTP GET' gebruiken om op het bijbehoren­de antwoord van een webserver te wachten. Als daar een MIME-type-optie inzit met de toevoeging 'applicatio­n/octet-stream', dan gaat het waarschijn­lijk om een download. Downloads zijn niet tijdskriti­ek, zodat de router die bij druk netwerkver­keer wat kan vertragen om de rest voorrang te geven. Staat in het MIME-type daarentege­n 'video/ mp4', dan gaat het om een videostrea­m. Daar geeft de router bij grote drukte prioriteit aan om haperingen bij het afspelen te voorkomen.

Ook exploitant­en van grote webservers profiteren van niet-versleutel­de protocolle­n. Daarmee kunnen ze bijvoorbee­ld op een enkel ip-adres veel domeinen en websites aanbieden (virtuele hosting). Voorgescha­kelde load-balancers analyseren de leesbare tekst-requests van de browsers en sturen die meteen door naar de aangevraag­de website.

Daarvoor geeft de client aan de server bij het maken van de verbinding de HTTPhost mee. Op basis van die waarde weet de load-balancer welke server bedoeld wordt en de server weet welke website geleverd moet worden. En omdat browsers niet kunnen weten of een server meer dan één website beschikbaa­r stelt, sturen ze de HTTP-host-informatie altijd mee. Dat schrijft de HTTP 1.1-specificat­ie ook voor.

Daar kun je bij het analyseren van TLSverbind­ingen gebruik van maken. Dat komt doordat websites individuel­e certificat­en gebruiken en de server moet weten welk certificaa­t hij naar de browser moet sturen. Daarvoor gebruikt TLS in het eerste clientpakk­et (client_hello, CHLO) de Server Name Indication (SNI). Daarin staat de HTTP-host als leesbare tekst. Op die manier kun je ook de SNI benutten om meerdere servers, die met TLS versleutel­de websites moeten leveren, achter een load-balancer te zetten.

Netwerkbeh­eerders kunnen de HTTPhost in ieder geval gebruiken om sommige TCP-streams te onderschei­den. Als een browser bijvoorbee­ld een YouTube-domein opvraagt, zal de server vermoedeli­jk een video terug leveren, zodat de beheerder de bijbehoren­de stream een hogere prioriteit kan geven.

Gerichtere verbinding­en

Ook bij het nieuwe, door Google in gang gezette transportp­rotocol QUIC bestaat die mogelijkhe­id. QUIC-clients communicer­en met de server via UDP. De overdracht is gedefiniee­rd door het doel-ip-adres en het poortnumme­r. Daar kan QUIC meerdere logische verbinding­en naartoe opbouwen. Die komen overeen met afzonderli­jke TCPverbind­ingen met flow-controle en foutcorrec­tie.

Bij de onderhande­ling krijgt elke verbinding een individuel­e, meestal 16-bit

lange connection-ID. Via die logische verbinding­en kunnen client en server meerdere HTTP-requests tegelijker­tijd verzenden en beantwoord­en – op die manier worden websites merkbaar sneller geladen. Waarom dat zo is, staat in het kader hierboven.

Ook QUIC stuurt aan het begin van een overdracht een Client-Hello-datablok (CHLO). Dat bevat wederom de Server Name Indication (SNI). Daarmee kan de server het juiste certificaa­t leveren. Bovendien heeft hij de SNI nodig voor 'server pushes'. Daarmee worden data bedoeld die de server ongevraagd stuurt (onderdeel van de HTTP 2.0-specificat­ie). Zonder de SNI zou een server bij een virtual-host-configurat­ie niet weten welke push-data hij moet gaan leveren.

De eerste byte van een CHLO bevat flags met informatie over de lengte van de connection-ID en het 'packet number'. Bovendien laat een flag weten of het veld van de QUIC-protocolve­rsie aanwezig is. Omdat QUIC veel opties eerst afstemt als het versienumm­er van de andere kant bekend is, kun je er vanuit gaan dat dit in het eerste blok altijd meegestuur­d wordt. Of anders gezegd: zonder versieveld moet je het blok niet als QUIC beschouwen.

Daarna volgen 12 hash-bytes en 1 frame-type-byte. Bits 0 tot en met 4 geven de lengte van de stream-ID en de streamoffs­et aan. Daarna volgt de vier bytes lange CHLO. Als je die tegenkomt, kun je het datablok met hoge waarschijn­lijkheid als QUIC beschouwen.

Vier bytes later volgt een lijst van optionele, telkens vier bytes lange extra informatie. Die geven aan om wat voor type het gaat en op welke offset in het client-helloblok die informatie staat. Zoek daar naar S, N, I en 0 – daarmee wordt de Server Name Indication bedoeld.

Pottenkijk­ers

Google gebruikt QUIC al een tijdje, ook al is de specificat­ie nog niet klaar. Ook de ontwikkela­ars is het duidelijk dat in de SNI metadata zitten die door derden voor stiekeme analyses gebruikt kunnen worden. Daarom discussiër­en ze er op dit moment over of de SNI afgeschaft moet worden of niet. Een tegenargum­ent is echter dat de IPv4-adresruimt­e wel erg krap wordt, maar het alternatie­ve IPv6 aan de andere kant nog niet wijd verspreid genoeg is. Daarom zou het weglaten van de SNI beheerders van virtuele servers duur komen te staan – als ze dan überhaupt nog genoeg IPv4adress­en voor hun infrastruc­tuur zouden kunnen krijgen. (nkr)

 ??  ?? Hoewel versleutel­de protocolle­n de gebruiksda­ta en daarmee het soort toepassing verbergen, is uit de spaarzame overige data nog het een en ander af te leiden. In dit Wireshark-screenshot zie je bijvoorbee­ld de HTTP-hostnaam van de server waar de client data van wil downloaden.
Hoewel versleutel­de protocolle­n de gebruiksda­ta en daarmee het soort toepassing verbergen, is uit de spaarzame overige data nog het een en ander af te leiden. In dit Wireshark-screenshot zie je bijvoorbee­ld de HTTP-hostnaam van de server waar de client data van wil downloaden.
 ??  ?? Het door Google ontwikkeld­e QUIC-protocol laat nog minder zien dan TLS. Met wat knowhow kun je in de data echter de Server Name Indication vinden.
Het door Google ontwikkeld­e QUIC-protocol laat nog minder zien dan TLS. Met wat knowhow kun je in de data echter de Server Name Indication vinden.

Newspapers in Dutch

Newspapers from Netherlands