Sorry voor de late reactie! Ik reageer eerst op de vragen/stellingen van de bovenste Anonieme reageerder in deze pagina. Vervolgens probeer ik de problematiek en mogelijke oplossingen uit te leggen aan
elke geïnteresseerde lezer. Alle inhoudelijke reacties stel ik op prijs!
Door Anoniem: Ik vind het prettig dat mijn Fritz!box geen HTTPS gebruikt. Met Firefox levert dat geen problemen op. Je krijg natuurlijk geen hangslotje in de browser.
Dat ben ik niet met je eens. De basis van goed systeembeheer is dat je het juiste apparaat benadert in plaats van (potentieel) jouw beheerwachtwoord in verkeerde handen te laten vallen. Kost dat meer moeite? Ja. Gaat het anders altijd fout? Nee. Maar je doet dit om de risico's zo klein mogelijk te houden.
Door Anoniem: Het kan ook nauwelijks anders omdat je zit met het probleem wie het certificaat van de Fritz!box moet ondertekenen. Kan je er een Let's Encrypt certificaat voor aanvragen?
In principe wel, maar dan op basis van het publieke IP-adres van de router, of voor een unieke publieke domeinnaam die daarnaar verwijst, of wat ik helemaal onderaan deze (lange) reactie schrijf.
Door Anoniem: Wat voor die miljoenen andere modems die ook op het Fritz.box domein zitten?
Dat kan niet, alhoewel er altijd gekken zijn die zulke schijnveiligheid inzetten of hebben ingezet (voorbeeld:
https://security.nl/posting/646927).
Door Anoniem: Het enige risico dat ik kan bedenken [...]
Laat dat nou net een slechte raadgever zijn. Aanvankelijk dachten experts ook dat SSL, DNS en WEP/WPA veiliger waren dan later bleek.
Fritz!Box beheerinterface
Alle AVM Fritz!Box routers die ik heb gehad ondersteunden en ondersteunen, voor het beheer van het apparaat, zowel
http (waarbij de router verbindingen op TCP poort 80 accepteert) als
https (TCP poort 443) aan de LAN-zijde (LAN = Local Area Network).
Eerder schreef ik overigens hierover in
https://security.nl/posting/833744.
Wat doet zo'n router
Hopelijk verduidelijkt het volgende "plaatje" van een typische thuissituatie het een en ander, o.a. waarom een FritzBox geen "geldig" certificaat heeft. De reden daarvoor is dat je voor een "geldig" https servercertificaat een wereldwijd unieke domeinnaam moet hebben (of een wereldwijd uniek IP-adres), en af-fabriek heeft een Fritz!Box geen van beide.
Nb. in onderstaand plaatje heb ik, als voorbeeld, 82.94.191.109 als publiek internet adres gekozen (niet van mij maar van www.security.nl). In de notatie x.x.x.x:p is 'p' het poortnummer. Zowel afzenders als ontvangers gebruiken poortnummers, waarbij het poortnummer aan de serverzijde meestal vastligt (zoals 443/TCP voor https) en het poortnummer aan de clientzijde min of meer random gekozen wordt (maar meestal in de reeks 1025..65535 ligt, boven de 1024 dus).
Laptop: IP = 192.168.178.21
___ (21 = voorbeeld)
|___|
'==='———.
. | LAN-zijde: op devices
. | waarop de DNS-server (via
. | DHCP) is ingesteld op
. | 192.168.178.1, geeft een
. | DNS-lookup van
. | "fritz.box" als antwoord:
. | 192.168.178.1
. |
Wi-Fi of Ethernet
. |
((o)) | AVM
| | Fritz!Box
.————————_————_————_————_——————————.
| WLAN LAN1 LAN2 LAN3 LAN4 |
| |
| "Luistert" (aan LAN-zijde) |
| by default op: |
| DHCP: 192.168.178.1:67 UDP |
| DNS: 192.168.178.1:53 UDP+TCP |
| http: 192.168.178.1:80 TCP |
| https: 192.168.178.1:443 TCP |
| |
| en: *.*.*.*:* alles |
| doch niet: 192.168.178.*:* (LAN) |
| |
| 192.168.178.*:*=p0 |
| ^ LAN-zijde ^ |
| · · PNAT · · · · · · · · · ·| · |
| v WAN-zijde v |
| 82.94.191.109:*=p1 |
| |
| Luistert *optioneel* op: |
| https: 82.94.191.109:443 TCP |
| |
| _ WAN |
'——— ——————————————————————————————'
|
## Internet (WAN-zijde)
##### <— stelt cloud voor ;-)
## DNS-lookup van "fritz.box"
| geeft 45.76.93.104
|
[Server "fritz.box", 45.76.93.104]
IP-adressen
Internet vereist dat daarop gebruikte IP-adressen wereldwijd uniek zijn, d.w.z. dat 1 IP-adres aan maximaal 1 apparaat is gekoppeld (een netwerkaansluiting van een apparaat kan wél meer dan 1 IP-adres hebben, maar het omgekeerde mag niet - vergelijkbaar met dat 1 telefoonnummer aan hooguit 1 telefoon gekoppeld mag zijn, terwijl 1 telefoon bijv. 2 SIM-kaarten kan herbergen en zo twee verschillende telefoonnummers kan hebben).
Af fabriek heeft elke Fritz!Box, aan de LAN-zijde (LAN = Local Area Network), als IP-adres
192.168.178.1. Dat is dus géén wereldwijd uniek IP-adres.
O.a. voor thuisgebruik zijn reeksen "private range" IP-adressen afgesproken in RFC 1918 (
https://datatracker.ietf.org/doc/html/rfc1918). Die IP-adressen horen
niet op internet te worden gebruikt (routers op internet horen netwerkpakketjes met als ontvanger een private range IP-adres
nergens naartoe door te sturen, dus te te "droppen").
Welk IP-adres een thuisrouter aan de WAN-zijde (W = Wide, internet dus) krijgt, wordt bepaald door de ISP (Internet Service Provider). Meestal krijgt een thuisrouter, na aanzetten, automatisch een wereldwijd uniek WAN IP-adres van de ISP (dit kunnen ook twee IP-adressen zijn, een IPv4 en een IPv6 adres).
NAT en PNAT
Thuisrouters
wijzigen, "on the fly", IP-adressen in netwerkpakketjes die van de LAN- naar de WAN-zijde gaan (en vice versa, antwoorden op die pakketjes). Dit wordt NAT (Network Address Translation) genoemd (als ook poortnummers worden gewijzigd noemen we dat PNAT). Meer info over (P)NAT lees je bijv. in
https://security.nl/posting/834127.
DHCP (Dynamic Host Configuration Protocol)
Als de router aan staat (ook als deze geen internetverbinding heeft) en je sluit er bijv. een PC op aan met een ethernetkabel (of als je WiFi inschakelt op de PC), dan zal die PC een "broadcast" netwerkpakketje versturen met de vraag of er een DHCP-server beschikbaar is op het LAN (de PC heeft op dat moment nog geen geldig IP-adres).
De Fritz!box beantwoordt dat met configuratiegegevens voor de PC, waaronder:
a) Een -op het LAN- uniek IP-adres voor de PC (plus het "net mask", op basis waarvan de PC weet wat het laagste en hoogste IP-adres van op het LAN aangesloten apparaten is, en dus wat via de router gestuurd moet worden - omdat het buiten die reeks valt);
b) Het (door de PC) te gebruiken IP-adres van de "default gateway" (de route naar
alle IP-adressen
buiten de adresreeks van het LAN, dus alles dat
niet 192.168.178.* is);
c) Het (door de PC) te gebruiken IP-adres van de "DNS-server", d.w.z. waar de PC DNS-requests naar toe kan sturen.
Standaard zijn b) en c) het LAN IP-adres van de Fritz!Box
zelf (af fabriek ingesteld op 192.168.178.1, desgewenst te wijzigen).
Fritz!Box services voor LAN
In de Fritz!Box "draaien" meerdere servers (of services) die vanaf het LAN bereikbaar zijn:
• DHCP;
• DNS;
• Webserver, bereikbaar via zowel
http als
https;
• Er draaien er nog meer maar die zijn niet relevant voor deze uitleg.
Fritz!Box services voor WAN (Internet-zijde)
Optioneel kan de Fritz!Box ook zo worden geconfigureerd dat deze via internet beheerd worden. Dan luistert de Fritz!Box ook aan WAN-zijde op TCP poort 443 (https).
HTTPS servercertificaat
Sterk vereenvoudigd (ik laat geldigheidsduur, serienummer e.d. weg) is een https servercertificaat een bestandje met de volgende inhoud:
• Eigenaar (Subject)
• Eigenaar alternatieve namen (SAN's)
• Public key
• Ondertekenaar
Digitale handtekening over het "blok" hierboven
Eén van de voorwaarden voor
echte betrouwbaarheid is dat "Eigenaar" (en/of SAN-lijst) één of meer wereldwijd unieke identificatoren moet bevatten. Het certificaat dat mijn Fritz!Box vandaag naar mijn browsers stuurde, bevat (vereenvoudigd) de volgende gegevens:
Eigenaar: mijn publieke IPv4 adres
SAN's (Subject Alternative Names):
1) mijn publieke IPv4 adres
2) mijn publieke IPv6 adres
3) "fritz.box"
4) "www.fritz.box"
5) "www.myfritz.box"
6) "fritz.nas"
7) "www.fritz.nas"
Ondertekenaar: mijn publieke IPv4 adres
Public key: 256 schijnbaar willekeurige bytes
Digitale handtekening: 32 schijnbaar willekeurige bytes
Van de SAN's zijn alleen 1) en 2) wereldwijd uniek. Dat het om een
self-signed certificaat gaat, blijkt uit het feit dat de ondertekenaar dezelfde is als de eigenaar.
Opmerkelijk
1) Hoewel mijn Fritz!Box
niet vanaf internet beheerbaar is, heeft deze
toch (zelf) een certificaat gegenereerd met daarin het publieke IPv4 (en het publieke IPv6) adres dat ik van mijn ISP toegewezen kreeg.
2) Vermoedelijk genereert mijn Fritz!Box, elke keer dat mijn ISP mijn (of één van beide) WAN-IP-adres wijzigt, een nieuw certificaat (ik sluit niet uit dat de Fritz!Box, elke keer na een firmware-update, of zelfs elke keer bij het opnieuw opstarten, een nieuw certificaat genereert). Het heeft dus weinig zin om dit certificaat in een PC als "trusted" te laten onthouden.
3) De public key in het certificaat verandert echter nooit (dus ook de bijpassende private key niet). Als ik een browser gebruik waarmee ik certificaten uitgebreid genoeg kan inspecteren, kan ik checken of het nog om dezelfde public key gaat (en dus een AitM is uitgesloten - want tijdens het opzetten van de https = TLS-verbinding stelt mijn browser vast dat het andere eindpunt over de bijpassende private key beschikt). Nb. een eventuele AitM kan
alle andere gegevens naar een nepcertificaat kopiëren (alle SAN's, serienummer, geldigheidsdatums etc.) maar beschikt zelden over de private key passend bij de public key in het echte certificaat (als zij of hij dat wél doet, is ook jouw Fritz!Box gecompromitteerd).
4) Helaas ontbreekt
192.168.178.1 in het lijstje met SAN's. Helaas, want door
https://192.168.178.1 te openen zou ik de risicovolle DNS-stap overslaan. Dat kan ook nu, maar dat leidt effectief tot twee foutmeldingen:
• Niet vertrouwd certificaat (niet ondertekend door een vertrouwde certificaatuitgever);
• De gevraagde "hostnaam" (
192.168.178.1) komt niet vóór als SAN.
Firefox (Android) voegt beide fouten echter samen (ook als ik
https://fritz.box open) door onder meer te melden:
Iemand kan proberen de website na te doen en u moet niet verdergaan.
Websites tonen hun identiteit aan middels certificaten. Firefox vertrouwt https://192.168.178.1/ niet, omdat de certificaatuitgever onbekend is, het certificaat zelfondertekend is, of de server niet de juiste intermediaire certificaten verzendt.
Ook Chrome (Android) doet zoiets, door alleen het eerste probleem te melden:
Je verbinding is niet privé
Cybercriminelen proberen mogelijk je gegevens van 192.168.178.1 te stelen (bijvoorbeeld wachtwoorden, berichten of creditcardgegevens). Meer informatie
NET::ERR_CERT_AUTHORITY_INVALID
5) Als ik de beheerinterface van mijn Fritz!Box open in Firefox (Android) door in de adresbalk te tikken en enter te drukken,
terwijl "Alleen-https-modus" aan staat:
a)
fritz.boxb)
http://fritz.boxc)
https://fritz.boxDan ziet alles er hetzelfde uit (schuine rode streep door hangslotje) maar is er, onverwacht door mij,
uitsluitend bij c) sprake van een https-verbinding, wat te zien is door
in de adresbalk te drukken, of door op het hangslotje te drukken en daarna op "Verbinding is niet beveiligd >". Het resultaat:
a), b):
http://fritz. box/
Verbinding is niet beveiligd
c):
https://fritz. box/
Verbinding is niet beveiligd
Geverifieerd door: CN=<mijn publieke IPv4 adres>
(De tekst is onjuist: de verbinding is in elk geval
wél versleuteld, je weet alleen veel minder zeker dat jouw browser met het juiste apparaat communiceert).
6) Als ik hetgene genoemd onder 5) herhaal met Chrome (onder Android, eveneens met "Altijd beveiligde verbindingen gebruiken") dan is het resultaat:
b):
De verbinding met fritz. box is niet beveiligd
Je ziet deze waarschuwing omdat deze site geen HTTPS ondersteunt.
(Ook die tekst is onjuist: het apparaat ondersteunt
wel https, maar met een self-signed certificaat).
a), c): in de adresbalk staat "https://fritz.box/" met "https" doorgestreept met twee horizontale rode strepen, en daaronder:
Je verbinding is niet privé
Cybercriminelen proberen mogelijk je gegevens van fritz.box te stelen (bijvoorbeeld wachtwoorden, berichten of creditcardgegevens). Meer informatie NET:ERR_CERT_AUTHORITY_INVALID
Conclusie
• Het gebruiken van
https://192.168.178.1 i.p.v.
https://fritz.box is waarschijnlijk veiliger, omdat genoemd IP-adres
niet routeerbaar hoort te zijn op internet (terwijl die
fritz.box domeinnaam
wél resolvt als je "buiten jouw LAN zit").
• Browser-meldingen bij ongeauthenticeerde servers en/of http i.p.v. https zijn onduidelijk en verwarrend (Nederlandse vertalingen verergeren dit meestal).
• Firefox lijkt bij "private range" IP-adressen, als je alleen domeinnaam (zoals fritz.box) intikt zonder voorvoegsel (protocolaanduiding,
http:// of
https) een voorkeur te hebben voor
http://. Dat lijkt mij iets om rekening mee te houden (denk aan de potentiële situatie dat een lokale aanvaller een RFC 1918 adres retourneert op een DNS-vraag van jouw toestel). Stop altijd, of check wat er exact aan de hand is bij een schuine streep door het hangslotje!
• De Fritz!Box genereert op mogelijk onverwachte momenten een nieuw https servercertificaat met daarin wel steeds dezelfde public key. Als je die tijdens de eerste verbinding noteert, en bij volgende verbindingen checkt of het om dezelfde public key gaat, heb je in elk geval TOFU (Trust On First Use).
• Het aanzetten van de "Alleen-HTTPS-modus" in browsers is m.i. nog steeds het verstandigst, en
verhindert niet dat je IoT apparaten kunt beheren (je kunt altijd voor "toch doorgaan" o.i.d. kiezen). De extra meldingen die je krijgt
zou je moeten willen krijgen: zelfs als uitsluitend door jou
gelezen informatie
niet vertrouwelijk is, is het in bijna alle gevallen relevant dat je "weet wie het zegt" en die informatie "onderweg" niet is gewijzigd (m.a.w. dat je weet dat alle informatie afkomstig van de server
authentiek is). Om dat zeker te weten, moet je weten of de server (waar jouw browser verbinding mee heeft) daadwerkelijk van de kennelijke of geclaimde eigenaar is,
én dat die verbinding zodanig is versleuteld dat je
óók wordt gewaarschuwd bij ongeautoriseerde wijzigingen "onderweg" (TLS, waar https op gebaseerd is, zorgt daar standaard voor bij versleutelde verbindingen).
• Ten slotte: als er belangstelling voor bestaat wil ik wel uitzoeken (specifiek voor deze situatie, Fritz!Box), en beschrijven hoe je zelf veilige cerificaten kunt maken en installeren. Ik zou een rootcertificaat maken en de bijbehorende private key gebruiken om een tweede (een "leaf") certificaat voor de Fritz!box mee te ondertekenen. In dat leaf-certificaat zou ik een domeinnaam opnemen waar je géén publiek certificaat voor kunt verkrijgen (zoals
fritz.local). Daarna zou ik de private key van het rootcertificaat grondig wissen. Vervolgens zou ik dat rootcertificaat op de gewenste apparaten installeren, en het leaf-certificaat (met de daarbij passende private key) op mijn Fritz!box.