Door Named: Als ik bijvoorbeeld "https://example.com/" intyp in de adresbar, dan weet ik dat zelfs via onversleutelde WiFi bijna niemand met de data kan knoeien. Hier zitten nog een aantal haken en ogen aan, zoals dat HTTPS-only aan moet staan [...]
Dat laatste is onjuist (met de rest van wat je schreef ben ik het grotendeels eens).
De THEORIE
Als je
zelf "
https://example.com" (met of zonder / daarachter), intikt, ben je safe. Dan gebeurt namelijk het volgende:
1) De browser vraagt via DNS het IP-adres op van
example.com. Aan mij gaf
https://mxtoolbox.com/SuperTool.aspx?action=dns%3aexample.com als antwoord:
199.43.135.532) Alle actuele browsers proberen dan verbinding te maken met
199.43.135.53 op
TCP poort 443 en een TLS-verbinding op te zetten. Ik ken geen enkele browser die, als TLS
niet foutloos lukt, als alternatief
http://example.com gaat proberen - ongeacht de browser-instellingen.
3) Er zijn nu twee mogelijkheden:
I - Wél een foutmelding uit de browserTijdens het opzetten van de
https-verbinding gaat er iets fout. Denk hierbij bijv. aan een verlopen of "self-signed" certificaat. Of aan de situatie dat het certificaat
ongeldig is voor de in de adresbalk van jouw browser zichtbare domeinnaam.
Voorbeeld: met
https://wrong.host.badssl.com krijgt jouw browser een versleutelde TLS-verbinding, met die server, maar het door de server gestuurde certificaat (te zien in
https://crt.sh/?id=21066306113) is ongeldig voor
wrong.host.badssl.com en idem voor
*.host.badssl.com (het is wél geldig voor
badssl.com en
*.badssl.com, maar daar "matcht"
wrong.host.badssl.com niet op).
II - Géén foutmelding uit de browserHet opzetten van de
https-verbinding lukt zonder fouten. Daarvoor moet het certificaat geldig zijn, het moet geldig zijn voor de in de URL-balk getoonde domeinnaam én de server moet hebben bewezen te beschikken over de private key die past bij de public key die is opgenomen in het certificaat.
BELANGRIJK: pas als met de server (met de gegeven domeinnaam) een TLS-verbinding met succes is opgezet (situatie
II), kan
uitsluitend die server de browser redirecten (doorsturen) naar een andere webserver of content (zoals plaatjes of Javascript) laten ophalen van andere servers. Nb. in beide gevallen zijn dat vaak verzoeken die met
https:// beginnen, maar er zijn nog steeds absurd veel servers die automatisch doorsturen met
http-links - of die pagina's bevatten met daarin
http-links. Ook veel QR-codes bevatten expliciet
http-links of
helemaal geen protocol-aanduiding, hetgeen de meeste (zo niet alle) browsers interpreteren als een
http-link.
Dus zélfs als je
https:// tikt vóór elke link die je
zelf invoert: op een deel van de links waar je mee te maken krijgt heb je geheel géén invloed (denk bijv. aan een link naar een URL-verkorter die doorstuurt met een link die met
http:// begint).
De PRAKTIJK
Naast het probleem dat ik direct hierboven beschreef: ik ken
NIEMAND die begint met
https:// te tikken - want kaal
example.com werkt ook. Bijna altijd.
Bij expliciete
http-links (of impliciete, als het voorvoegsel
http:// ontbreekt), gebeurt het volgende:
a) De browser vraagt via DNS het IP-adres op (zie punt
1 hierboven).
b) De
meeste (zo niet alle) actuele browsers proberen dan (ongevraagd) verbinding te maken met
199.43.135.53 op
TCP poort 443 en een TLS-verbinding op te zetten. N.b. de meeste browsers proberen
zelfs eerst
https als de internetter
expliciet http://example.com intikte of op een link klikte die zo luidde (of met
http://example.com/ begon).
b]c)[/b] Als
https niet lukt proberen alle browsers, zonder dat te melden - laat staan om toestemming te vragen, verbinding te maken met
199.43.135.53 op
TCP poort 80 en zo een
http-verbinding op te zetten -
TENZIJ de standaard-browser-instelling "waarschuwen voor onveilige verbindingen" (of een vergelijkbare tekst) is
aangezet. Dat is trouwens een instelling die in veel browsers
überhaupt niet beschikbaar is (voorbeelden: Edge onder Windows, Firefox onder iOS/iPadOS, en Safari op oudere versies van iOS/iPadOS).
Waarom https niet altijd lukt
Dat
https niet lukt kan allerlei redenen hebben, bijvoorbeeld:
• De server is
echt offline;
• De server ondersteunt wél
http maar
niet https. Voorbeelden:
http://gemeente.amsterdam en
http://http.badssl.com (als je die URL's opent ben je kwetsbaar als jouw browser je niet waarschuwt);
• Een AitM (Attacker in the Middle) kan toegang hebben tot een netwerkapparaat tussen jouw browser en de bedoelde webserver (door zo'n netwerkapparaat te "hacken" of door een vals draadloos/WiFi access point op te zetten - waar je -onbedoeld- verbinding mee maakt). Zo'n AitM kan één (of meer) netwerkpakketjes tussen jouw browser en de bedoelde webserver blokkeren, denk aan
https netwerkpakketjes (eenvoudig te herkennen aan het TCP-poortnummer 443). Jouw browser neemt dan aan dat die server
https niet ondersteunt. Doordat de standaardinstelling van
alle browsers "ongevraagd
http proberen" is, kan de AitM zich voordoen als de
http-variant van de bedoelde server - en jouw browser doorsturen naar een
andere webserver (in bezit van de aanvaller) - meestal eentje die
wel https ondersteunt. Dat gaat zó snel dat je niets ziet van de kortstondige terugval naar
http -
precies hetzelfde effect als je
http://gemeente.amsterdam opent - met een
niet waarschuwende browser.
• Er kan ook sprake zijn van een aanvaller
op DNS-niveau. Dat kan een AitM zijn, maar dat hoeft niet: als een aanvaller een DNS-record kan wijzigen, kan deze (in het DNS-record) het IP-adres wijzigen in dat van een server in hun beheer - waarbij die server
geen https-verbindingen aanneemt met de door jouw browser meegegeven domeinnaam. Zodra de browser stilletjes terugvalt naar
http kan die server je naar elke gewenste website
doorsturen. Een andere, waarschijnlijk vooral theoretische, mogelijkheid is dat een aanvaller-op-afstand jouw MODEM bombardeert met ongevraagde DNS-antwoorden (dit is
relatief eenvoudig bij standaard DNS - omdat UDP daar veel kwetsbaarder voor is dan TCP). Een échte AitM (zoals beschreven bij het vorige punt) kan veel eenvoudiger DNS-antwoorden wijzigen, of sneller een vals antwoord sturen dan de echte DNS-server. Een bekende truc van cybercriminelen is het op afstand hacken van MODEMs en de instellingen voor de DNS-server(s) veranderen.
CONCLUSIE
Zet "waarschuwen bij onveilige verbindingen" (ook bekend als "HTTPS-only mode" - een bar slechte omschrijving) aan in jouw browser(s) en neem
elke waarschuwing serieus, vooral als je van een openbaar WiFi access point gebruikmaakt. N.b. helaas zijn er browsers (met name Chrome) die toestemmingen voor bezochte
http-only-websites heel lang bewaren (ook na afsluiten en weer opstarten van de browser). In Chrome lijkt de instelling uit- en weer aanzetten die "cache" te legen, maar transparant is dit allesbehalve en je vergeet dat uit/aanzetten waarschijnlijk snel (zeker als je vaak gebruik maakt van public WiFi).
Configureer thuis een lang wachtwoord op je WiFi MODEM zodat dit lastig te achterhalen valt. Wijzig dat wachtwoord regelmatig als je wat oudere kinderen hebt die veel vriendjes/vriendinnetjes thuis ontvangen, en toegang geven tot jouw algemene netwerk (een aanvaller die zo'n wachtwoord bemachtigt kan voor jouw deur een "evil twin", een nep WiFi access point, optuigen - en sowieso rondneuzen op jouw interne netwerk, en daar méér mee kunnen dan je dacht).