Een veilige website: voorkom sessie-kaping

Hoe houd je een website veilig?

Door Bobo Boom op 22 maart 2016  |  blog

Als je nadenkt over een nieuwe website of online applicatie, denk je in de eerste plaats aan functionaliteit, inhoud en uitstraling. Wat er achter de schermen gebeurt om de website robuust en veilig te maken is vaak minder duidelijk. Bij Tremani houden we deze 'onzichtbare' kwaliteiten graag voor onze klanten in het oog. Om je een kleine blik in de keuken te geven, schrijven we een aantal blogs over de verschillende soorten aanvallen waar een website tegen bestand moet zijn. Deze keer gaat het over de gevaren van 'gekaapte sessies'.

Het kapen van sessies is in principe een risico bij iedere website waar een gebruiker in moet loggen. Bij het inloggen wordt voor de gebruiker een sessie gestart en daarbij wordt een unieke sessie-sleutel aangemaakt. Bij iedere pagina die de gebruiker vervolgens tijdens die sessie op de website opvraagt, wordt de sessie-sleutel meegestuurd. Daarmee kan de server de gebruiker herkennen en bepalen of die gebruiker geautoriseerd is om de opgevraagde pagina (en de opgevraagde informatie) op te vragen. 

De essentie van een sessie is dat deze sleutel de gebruiker identificeert, doordat hij alleen bij de gebruiker en de server bekend is. Als een hacker deze sleutel in handen krijgt, kan hij de sessie 'kapen'. De server kan dan geen verschil zien tussen verzoeken van de gebruiker en verzoeken van de hacker, en de hacker krijgt dus alle rechten die de gebruiker ook heeft. Het is daarom belangrijk dat deze sessie-sleutel geheim blijft. 

Hoe kan dat fout gaan?
Het uitlekken van een sessie-sleutel kan op een aantal manieren gebeuren. De eenvoudigste manier is als websites de geheime sleutel gewoon in het adres zetten waarmee de website wordt aangeroepen. Dat is altijd gevaarlijk, omdat de code heel makkelijk kan uitlekken als de gebruiker bijvoorbeeld een link aan een ander doorstuurt, zonder te beseffen dat daar een persoonlijke sleutel in staat. Als er verder geen maatregelen zijn getroffen, zou de persoon die op die link klikt meteen als de oorspronkelijke gebruiker ingelogd zijn. Om dit te voorkomen, slaan we bij de websites die we ontwikkelen de sessie-sleutel daarom altijd op in een browser-cookie op de computer van de gebruiker. 

Een sessie kan ook gekaapt worden door onachtzaamheid van de gebruiker. Gebruikers loggen na het gebruik van de website meestal niet uit, maar sluiten gewoon de browser of zelfs alleen het tabblad. Dat is vooral gevaarlijk als dat op een publieke computer gebeurt, bijvoorbeeld op een school, maar ook in een kantooromgeving waar men gemakkelijk van elkaars computer gebruik kan maken. Als een gebruiker zijn computer achterlaat zonder uit te loggen, kan iemand anders op die computer naar dezelfde website gaan. Doordat de aangemaakte sessie nog steeds actief is, is de tweede persoon daar nog ingelogd met het account van de oorspronkelijke gebruiker. Om dit risico zo klein mogelijk te maken, maken we onze websites zo dat het cookie met de sessie-sleutel automatisch ongeldig wordt als het enige tijd niet gebruikt is. Als je je computer onbeheerd achterlaat, wordt je dus na verloop van tijd automatisch uitgelogd. De sessie kan niet té snel verlopen, want dan bestaat weer de kans dat een gebruiker telkens uitgelogd wordt terwijl hij nog rustig bezig is op de website.

Een derde manier van lekken is via een gerichte aanval. Een hacker kan meeluisteren naar het verkeer dat tussen een gebruiker en de website op en neer gaat, bijvoorbeeld op een publiek wifi-netwerk in een café of op school. Als een sessie-sleutel daar ongecodeerd meegestuurd wordt (in het webadres of een onbeveiligde cookie), is het voor de hacker heel eenvoudig om die sleutel te achterhalen. Vanaf dat moment kan hij meeliften op die sessie en heeft hij alle rechten die de gebruiker ook heeft. Zelfs bij sites die met https beveiligd zijn, wordt de sessie vaak al gestart voordat het systeem overstapt op de veilige, versleutelde communicatie. Tremani zorgt er daarom voor dat de geheime sleutel altijd veranderd wordt op het moment dat de gebruiker inlogt en overstapt op een beveiligde verbinding, zodat de mogelijk uitgelekte sleutel niet meer bruikbaar is.

Met deze maatregelen zorgt Tremani ervoor dat de kans op het kapen van een sessie bij onze websites zo klein mogelijk is. Als je zelf netjes uitlogt na het gebruik van de website dan wordt die kans nóg kleiner.

Vragen?
Heb je vragen over dit onderwerp? Neem dan gerust contact met ons op.

Dit artikel is onderdeel van een serie waar we de grootste gevaren die websites bedreigen in begrijpelijke taal uitleggen. Hiervoor volgen we de top-10 van OWASP. Meer technische informatie over dit specifieke risico is te vinden op de pagina OWASP A2.

Meld u aan voor onze nieuwsbrief