Security Professionals - ipfw add deny all from eindgebruikers to any

Steekproef: overheid + HSTS

06-07-2023, 00:25 door Erik van Straten, 4 reacties
Laatst bijgewerkt: 06-07-2023, 01:21
Inleiding
Sinds 1 juli zijn overheden verplicht om ervoor te zorgen dat hun publieke websites https en HSTS (HTTP Strict Transport Security) ondersteunen (zie https://security.nl/posting/801781/HTTPS+en+HSTS+voortaan+verplicht+voor+alle+overheidswebsites+en+webapps). Helaas lijken maar weinigen te beseffen hoe je HSTS correct configureert, zodanig dan bezoekers van een website daar optimaal van profiteren.

Al in 2018 wees Bitwiper hierop in https://security.nl/posting/566101/NL:+veel+brakke+https+sites. Zelf heb ik hier ook meermaals aandacht aan besteed, o.a. in https://security.nl/posting/797052: sites zoals https://gemeente.amsterdam/ en https://www.werkenbij.amsterdam/ zijn alleen bereikbaar als je https vervangt door http; het ontbreken van ondersteuning voor https door deze (doorsturende) websites lijkt mij een overtreding van de nieuwe wet.

In april constateerde ik dat ook uwv.nl (zonder www. ervoor) geen https ondersteunde: zie https://security.nl/posting/793201. Dat is ondertussen gefixed. Opmerkelijk is dat ik uit https://crt.sh/?Identity=uwv.nl&match=single opmaak dat er voortdurend een geldig certificaat voor uwv.nl heeft bestaan (gepruts dus). De HSTS-ondersteuning van uwv.nl is echter nog steeds waardeloos: https://uwv.nl/ verstuurt geen HSTS kopregel (waarom dat een probleem is leg ik verderop uit).

Om het verhaal compleet te maken leg ik eerst uit hoe https en HSTS werken, waarom je ze wilt gebruiken en hoe je HSTS correct configureert.

Gebruikte terminologie
Met een server en een browser bedoel ik respectievelijk een webserver en een webbrowser. Een site (of website) wordt gekenmerkt door de domeinnaam (feitelijk de FQDN, Full Qualified Domain Name), zoals www.security.nl.

Effectief is security.nl (zonder "www." ervoor) een andere website, die op dezelfde server kan "draaien" of ergens anders. Het is gebruikelijk dat één van de twee de echte website is, en het de taak van de andere website is om uw browser door te sturen naar de echte website. Dat kan overigens beide kanten op: bijvoorbeeld security.nl stuurt uw browser door naar www.security.nl, terwijl www.nos.nl uw browser doorstuurt naar nos.nl.

Verschil tussen https en http
Eerst de overeenkomsten tussen http en https:
• Het (DNS-) antwoord op de vraag wat het IP-adres van een domeinnaam (zoals van almere.nl) is, kan vervalst zijn (waardoor uw browser verbinding maakt met een nepserver - ondanks een correct getoonde domeinnaam in de adresbalk van uw browser);

• Overal "onderweg" (de normale route) tussen uw browser en de echte server kan een nepserver zich voordoen als de echte server;

• De route voor netwerkverkeer vanaf uw browser kan door criminelen zijn "omgeleid" naar een nepserver.

Het belangrijkste verschil tussen http en https is:
• Bij een https-verbinding, bijvoorbeeld met almere.nl, moet uw browser eerst een versleutelde verbinding hebben gemaakt met de server genaamd almere.nl, vóórdat die server (en alleen die server) uw browser naar een andere website kan sturen (hier bestaan wel enkele uitzonderingen voor, waarbij het grootste risico voor de meeste mensen is dat hun browser of toestel gecompromitteerd is; dan is niets meer te vertrouwen. Andere uitzonderingen komen in de praktijk nauwelijks voor).

Werking van https
Bij https ontvangt uw browser een certificaat van de server, vergelijkbaar met een kopietje-paspoort - waarbij een certificaat extreem lastig te manipuleren echtheidskenmerken bevat. Zowel paspoorten als certificaten worden uitgegeven door instanties die je erop zult moeten vertrouwen dat zij geen valste identiteitsbewijzen uitgeven, maar in de praktijk gaat dit bij certificaten zelden fout [#].

Tevens moet de server aantonen te beschikken over "het originele paspoort" (feitelijk een unieke private key passend bij de public key in het certificaat). Zolang die private key (of een kopie daarvan) niet in verkeerde handen valt, weet u behoorlijk zeker dat uw browser verbinding heeft met de bedoelde server.

[#] Wat wél absurd vaak gebeurt is dat certificaatuitgevers certificaten aan cybercriminelen verstrekken voor domeinnamen die overduidelijk misleidend zijn (sterk lijkt op een domeinnaam van een legitieme organisatie, bijv. met veelgemaakte tikfouten).

In dat certificaat staan alle domeinnamen die de server mag gebruiken, zoals almere.nl, www.almere.nl en belastingen.almere.nl. Uw browser controleert of de door u gevraagde domeinnaam (te zien in de adresbalk) vóórkomt in het ontvangen certificaat (en dat dit certificaat geldig en niet gemanipuleerd is), en dat de server over de juiste private key beschikt; als er iets niet klopt toont de browser een foutmelding (vaak kunt u die afwijzen en toch doorgaan).

Belangrijk: die foutmelding krijgt u nádat de verbinding versleuteld is, doch vóórdat er inhoudelijke informatie tussen de server en uw browser wordt uitgewisseld. Hierdoor kan uw browser niet éérder naar een andere server worden doorgestuurd dan nadat is vastgesteld dat de browser een versleutelde verbinding heeft met een geauthenticeerde (door u vertrouwde) server, nl. met de door u opgegeven domeinnaam.

Voorbeeld: de beheerder van https://almere.nl kan uw browser laten doorsturen naar www.almere.nl of zelfs naar zwolle.nl, maar om dat te kunnen moet https://almere.nl over een geldig certificaat en bijpassende private key beschikken.

Hopelijk ten overvloede: een https certificaat zegt niets over de veiligheid of betrouwbaarheid van een server.

Risico http
Probleem: nog steeds beginnen veel te veel verbindingen tussen browsers en webservers met het risicovolle "kaapbare" http protocol (in plaats van met https).

Risico: bij http kan uw browser vaak heel simpel naar een nepserver worden (door-) gestuurd - die óók een geldig certificaat kan hebben, namelijk indien deze een (iets) afwijkende domeinnaam heeft. De meeste mensen verwachten niet, na een domeinnaam te hebben ingevoerd (en wellicht op typfouten te hebben gecontroleerd voordat zij op de Enter-knop drukten), dat die domeinnaam vervolgens substantieel verandert - en als dat gebeurt, denken velen dat dit wel zo zal horen. En als men dat ziet, moet men maar net weten dat de nu getoonde domeinnaam niet van de door hen bedoelde organisatie is.

Risico nepservers
Sommige reageerders op security.nl menen dat nepservers geen probleem zijn als je alleen maar leest. Dat is natuurlijk onzin, weinigen willen fake news lezen of op andere wijze op het verkeerde been worden gezet. Daarnaast kan een nepserver een nepwaarschuwing geven dat uw computer een virus heeft (en u prijzige ondersteuning bieden) of liegen dat een software en/of een update moet installeren om die website goed te kunnen bekijken. Ook bestaat het risico dat u wordt overgehaald om in te loggen (met "Google" of met inloggegevens die voor de echte site bedoeld zijn), of om persoonsgegevens prijs te geven.

Oorzaken onbedoeld http i.p.v. https
1) Veel mensen tikken bijvoorbeeld almere.nl of www.zwolle.nl in de adresbalk van hun browser als zij een website willen openen, dus zónder https:// ervoor. In de papieren media en op TV zie je zelden dat je https:// vóór de domeinnaam zou moeten invoeren, en bijna niemand legt uit waarom. Het standaardprotocol in alle browsers is echter nog steeds http; als u niet expliciet https opgeeft, gebruikt uw browser http [*].

2) Er zijn nog steeds veel webpagina's en QR-codes met daarin opgenomen links die expliciet met http:// beginnen.

[*] In sommige browsers kunt u de standaard wijzigen in iets als "https-only"; dit is m.i. zeer verstandig, maar leidt tot waarschuwingen bij netwerk- en andere IoT-apparaten, alsmede bij intranetsites, indien zij geen https ondersteunen.

Gebruikelijke "oplossing"
De meeste webservers waar uw browser via http verbinding mee maakt, sturen uw browser dóór naar een https variant van die webserver. Dat is natuurlijk prima, tenzij de verbinding met de server "onderweg" wordt gekaapt!

Als u in de adresbalk van uw browser bijvoorbeeld security.nl invoert, wordt uw browser (als er geen kapers op de kust zijn) dóórgestuurd naar https://www.security.nl/ (die server kan overigens een ander IP-adres hebben en zelfs in een heel ander land staan).

Het volgende gebeurt dus (als alles goed gaat):
http://security.nl/
v
https://www.security.nl/
(met die 'v' bedoel ik doorsturen).

Maar die verbinding kan ook (zonder foutmeldingen) gekaapt worden:
http://security.nl/
v
https://security.nu/
Die site bestaat overigens echt, heeft momenteel een geldig Let's Encrypt certificaat en vermeldt:
Sorry, wij sleutelen aan de site

Onze website ondergaat momenteel gepland onderhoud. Excuses voor het ongemak. Bedankt voor uw begrip.
Nb. dit kan anders zijn afhankelijk van de door u gebruikte browsers, instellingen en besturingssysteem. Bezoeken geheel op eigen risico (ik heb geen idee wie de eigenaar is van die domeinnaam).

Doel van HSTS
HSTS leidt ertoe dat de meeste browsers, voor een webserver (met een specifieke domeinnaam) die daar eerder om gevraagd heeft, twee dingen doen:

1) https gebruiken om met die website communiceren, zelfs als u expliciet om http vraagt;

2) Bij certificaatfoutmeldingen u niet te vragen of u desondanks toch door wilt gaan (dat kunt u dus niet met de door u gebruikte browser).

Merk op dat punt 2 anders is dan bij de instelling "https-only" die sommige browsers ondersteunen (tenzij de browser tevens een HSTS record heeft voor de domeinnaam): in dat geval kunt u (soms met veel waarschuwingen en meerdere keren bevestigen) wél informatie uitwiselselen met de webserver.

Het doel van HSTS is dus het beschermen van bezoekers, door zoveel mogelijk te voorkómen dat zij via het "kaapbare" http protocol verbinding maken met "jouw" website, maar ook dat een eventuele AitM-server (Attacker in the Middle, of MitM met de M van Miscreant) met een ongeldig (bijvoorbeeld "self-signed") certificaat een internetter weet over te halen om de foutmelding te negeren en die foute website toch te bezoeken.

Werking van HSTS
HSTS is een protocol waarmee een https website (onzichtbaar voor de gebruiker) een bezoekende browser kan "vragen" om die website "voortaan" via https te bezoeken (ongeacht of de gebruiker daar via http is terechtgekomen).

Met "voortaan" bedoel ik de komende n seconden, waarbij n vaak 31.536.000 is (365 dagen).

Dat "vragen" gebeurt als de webserver een "http kopregel" (http header) meestuurt, die eruit kan zien als volgt:
Strict-transport-security: max-age=31536000
In zo'n regel zijn meer (optionele) parameters mogelijk (op internet is hier voldoende informatie over te vinden).

In een browser zie je kopregels normaal gesproken niet, maar op desktop-browsers kun je die vaak wel zichtbaar maken door op F12 te drukken, de pagina te verversen en een logregel te selecteren.

De meeste browsers berekenen (uitgaande van het bezoekmoment) de einddatum en tijd dat het verzoek vervalt, en slaan dat samen met de actuele domeinnaam op in een database. Als zo'n record al bestaat voor de gegeven domeinnaam, wordt het oude record overschreven met de nieuwe gegevens.

Merk op dat er twee legitieme redenen bestaan om uw browser "door te sturen", die beide van belang zijn voor de goede werking van HSTS:

1) van http naar https;

2) van security.nl naar www.security.nl (of van www.nos.nl naar nos.nl).

Deze website doet het bijna perfect:
http://security.nl/
v
https://security.nl/
Strict-transport-security: max-age=31536000
v
https://www.security.nl/
Strict-transport-security: max-age=31536000
Met een regel die begint met "Strict-" onder een URL bedoel ik dat de server uit die URL deze kopregel meestuurt.

Toelichting bij het bovenstaande diagram: als u in de adresbalk van uw browser security.nl heeft ingevoerd en uw browser nog géén geldig HSTS record heeft voor security.nl (en uw browser niet op https-only is ingesteld), maakt uw browser daadwerkelijk een http-verbinding met security.nl.

Die site (http://security.nl/) geeft uw browser opdracht om naar https://security.nl/ te gaan, wat uw browser normaal gesproken zal doen. Die site stuurt een HSTS kopregel mee - voor de domeinnaam security.nl dus.

Daarna zal die site uw browser doorsturen naar https://www.security.nl/, die een HSTS kopregel meestuurt maar nu voor www.security.nl.

Als ik vervolgens mijn browser (Firefox ESR onder Windows) sluit, zie ik in de HSTS database (het bestand c:\Users\Erik\AppData\Roaming\Mozilla\Firefox\Profiles\pk55p0v1.default\SiteSecurityServiceState.txt) de volgende twee regels bevat (voor de leesbaarheid heb ik 1 lege regel tussengevoegd):
www.security.nl^partitionKey=%28http%2Csecurity.nl%29:HSTS 0 19543 1720124150759,1,0,2

security.nl^partitionKey=%28http%2Csecurity.nl%29:HSTS 0 19543 1720124149887,1,0,2
Van belang hier zijn de domeinnamen www.security.nl en security.nl helemaal links, en de lange getallen die beginnen met 1720124: dat zijn de eindtijden in milliseconden sinds 1 januari 1980 (volgens https://unixtime.org/ zijn dat resp. Thu Jul 04 2024 22:15:50 GMT+0200 en Thu Jul 04 2024 22:15:49 GMT+0200).

Perfecte HSTS-configuratie
De configuratie van security.nl is niet perfect, want stel dat ik meestal een snelkoppeling gebruik die (nog) naar http://www.security.nl/ verwijst, dan gebeurt het volgende:
http://www.security.nl/
v
https://www.security.nl/
strict-transport-security: max-age=31536000
Daarna heb ik alleen de eerste regel in de HSTS database. Dat leidt ertoe dat als ik een keer niet mijn snelkoppeling gebruik, maar security.nl invoer in de adresbalk, er alsnog (een tweede) http-verbinding nodig is om het tweede record aan de HSTS database toegevoegd te krijgen.

Dat zou Security.nl kunnen oplossen door https://www.security.nl/ altijd bijv. een 1x1 pixel van https://security.nl/ te laten ophalen. De perfecte volgorde is dus:
http://security.nl/
v
https://security.nl/
Strict-transport-security: max-age=31536000
v
https://www.security.nl/
Strict-transport-security: max-age=31536000
v
https://security.nl/dummy_1x1_pixel.gif
Strict-transport-security: max-age=31536000

Als je begint met http://www.security.nl zou dat moeten gaan als volgt:
http://www.security.nl/
v
https://www.security.nl/
Strict-transport-security: max-age=31536000
v
https://security.nl/dummy_1x1_pixel.gif
Strict-transport-security: max-age=31536000

Een nadeel hiervan is dat je dan altijd meteen twee HSTS records toevoegt, maar aangezien de meeste mensen die ik ken "www." weglaten, krijg je die sowieso op deze site.

Onbetrouwbaarheid van HSTS
De eerste keer dat uw browser verbinding maakt met een webserver, heeft u sowieso niets aan HSTS. Bovendien negeren browsers een HSTS kopregel indien deze hen via http bereikt. En aan een https-server heeft u ook niets als deze geen (geldige) HSTS kopregel verstuurt.

Een onjuiste serverconfiguratie kan ook roet in het eten gooien: browsers kunnen HSTS informatie negeren als een webserver meer dan één "Strict-transport-security" kopregel meestuurt (ook als ze identiek zijn).

Als u langer dan de in uw browser ingestelde tijd een website niet heeft bezocht, vervalt de informatie (en werkt HSTS niet meer). Bovendien verwijderen de meeste browsers hun HSTS database als u alle browser-geschiedenis wist.

En als u een andere browser of een browser op een ander apparaat (nieuwe smartphone bijvoorbeeld) gebruikt, kan een HSTS record ontbreken.

Ten slotte zijn er bugmeldingen die beschrijven dat HSTS niet werkt voor nieuw bezochte domeinnamen omdat "de database vol is" (voorbeeld: https://insinuator.net/2021/05/analysis-of-hsts-caches-of-different-browsers/). Ook corruptie van zo'n database kan niet worden uitgesloten, en indien het database-schema wijzigt bij een browser-update, zou de database stilletjes gewist kunnen worden.

Dit lijken wellicht een boel nadelen, maar in de praktijk valt dat reuze mee. HSTS is niet perfect, maar sowieso maakt HSTS het leven van "jagers op onversleutelde verbindingen" minder interessant naarmate er minder onversleutelde verbindingen zijn - terwijl internetters websites bezoeken zonder daarbij expliciet om https te vragen.

Ondoordachte HSTS configuratie
Zoals ik in de inleiding schreef, komt dit veel voor. Tijdens de internetconsultatie voor het verplichten van ondersteuning van HSTS op overheidswebsites, heb ik een PDF van 3 kantjes met implementatieadviezen geschreven en dat (bijtijds, 5 sept. 2019) ingediend. Daar heb ik vervolgens nooit meer wat van gehoord.

Sterker, in het "Verslag over de resultaten van de consultatie" met in de bestandsnaam "versie 20210211" (https://www.internetconsultatie.nl/overheidswebsites/document/6655 - PDF) is niets van mijn aanbevelingen terug te vinden, en ook niet in de gepubliceerde regels.

Ook voor een webex-meeting vandaag (https://forumstandaardisatie.nl/nieuws/open-spreekuur-wdo-en-amvb-https-hsts) ben ik niet uitgenodigd. Dit bevestigt voor mij wat een farce die internetconsultaties zijn; ik doe daar niet meer aan mee.

Steekproef gemeenten: https en HSTS (plus privacy)
Afgelopen dinsdag heb ik, met een steekproef, gekeken hoe het gesteld is met https en HSTS op websites van Nederlandse gemeenten - waarbij ik ook naar privacy heb gekeken. Hiervoor heb ik de websites van de eerste 10 (alfabetische volgorde) uit https://nl.wikipedia.org/wiki/Lijst_van_Nederlandse_gemeenten gekozen.

Resultaten in het kort:
• Alle 10 websites ondersteunen https;

• Drie van de tien hebben waardeloze HSTS-ondersteuning: als u in de adresbalk van uw browser aaenhunze.nl, almere.nl of alphenaandenrijn.nl invoert en op de Enter-knop drukt, ontvangt uw browser voor die domeinnamen géén HSTS header. Elk volgend bezoek (op dezelfde manier) vindt dan weer plaats via http;

• Van de 10 heeft alleen aalsmeer.nl HSTS perfect voor elkaar;

• De privacy van bezoekers wordt op alle sites met voeten getreden (vermoedelijk overtreden zij allemaal de AVG). Het gaat niet alleen om cookies: met allerlei "analytics" websites van derde partijen wordt (deels) identificerende informatie van bezoekers gedeeld. Op de sites waar je "cookies kunt weigeren" leek dit geen effect te hebben; sowieso werden soms al cookies gezet voordat ik de kans kreeg om ze te weigeren.

De details (kort en bondig opgeschreven) vindt u in de eerstvolgende posting hieronder. Ook als er meerdere connecties zijn naar websites van derden, noem ik ze maar één keer.

Disclaimer
Ik kan fouten hebben gemaakt of zaken over het hoofd hebben gezien. Eén uur na plaatsing op deze site kan ik mijn posts echter niet meer wijzigen; kijkt u a.u.b. verderop op deze pagina of ik aanvullingen/correcties beschrijf.
Reacties (4)
06-07-2023, 00:27 door Erik van Straten - Bijgewerkt: 06-07-2023, 01:26
Voor het testen heb ik de volgende default home pagina ingesteld als Firefox start:
about:preferences#privacy
Daarmee kan ik snel alle opgeslagen gegevens en geschiedenis wissen, om telkens met een "schone lei" te beginnen (lege cache, geen cookies en een lege HSTS database). Deze aanpak laat toe dat ik de HSTS database kan kopiëren na het sluiten van Firefox. Voordat ik een domeinnaam invoer, druk ik op F12 om netwerklogs bij te houden (die sla ik vervolgens op door op het tandwieltje rechtsboven te klikken).
Ik heb redelijk normale Firefox instelingen gebruikt en alle plug-ins (waaronder NoScript) uitgezet.

1) aaenhunze.nl
Beginnen zonder "www.":
http://aaenhunze.nl/
v
http://www.aaenhunze.nl/
v
https://www.aaenhunze.nl/
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload;

HSTS BROKEN! (Uw browser maakt geen HSTS record aan voor aaenhunze.nl).

Privacy:
POST https://www.google-analytics.com/ met lange URL met ID's van mij
GET    https://6005037.global.siteimproveanalytics.io/ MET COOKIES (ook indien uitgezet bovenaan webpagina)
POST https://region1.google-analytics.com/ met o.a. in URL "sr=1920x1080&cid=" etc.

Cert: EV

2) aalsmeer.nl
Beginnen zonder "www.":
http://aalsmeer.nl/
v
https://aalsmeer.nl/
strict-transport-security: max-age=31536000
v
https://www.aalsmeer.nl/
strict-transport-security: max-age=31536000

Beginnen met "www.":
https://www.aalsmeer.nl/
strict-transport-security: max-age=31536000
v
https://aalsmeer.nl/
strict-transport-security: max-age=31536000
v
Gaat verder op https://www.aalsmeer.nl/ - OK

HSTS Perfect!

Privacy:
GET    https://siteimproveanalytics.com/
GET    https://ssl.google-analytics.com/ga.js (GEBLOKKEERD ik weet niet waardoor)
GET    https://6005943.global.siteimproveanalytics.io/ met allemaal identificerende parameters

Cert: DV

3) aalten.nl
Beginnen zonder "www.":
http://aalten.nl/
v
https://aalten.nl/
Strict-Transport-Security: max-age=31536000
v
https://www.aalten.nl/
strict-transport-security: max-age=31536000; includeSubDomains

Beginnen met "www.":
http://www.aalten.nl/
v
https://www.aalten.nl/
strict-transport-security: max-age=31536000; includeSubDomains

HSTS: eenmalig extra risico als je begint met www.aalten.nl:
1e sessie: www.aalten.nl in adresbalk gaat eerst via http
2e sessie: aalten.nl in adresbalk gaat ook eerst via http

Privacy:
GET    https://logging.simanalytics.nl/piwik.js
GET    https://cuatro.sim-cdn.nl/assets/1.93.0/iconFonts/opengemeenten/css/opengemeenten.css
POST https://www.aalten.nl/graphql
GET    https://cdn-eu.readspeaker.com/script/6151/webReader/webReader.js?pids=wr&notools=1
GET    https://app-script.monsido.com/v2/monsido-script.js
POST https://logging.simanalytics.nl/piwik.php? met o.a. "res=1920x1080"
GET    https://fonts.bunny.net/open-sans/files/open-sans-vietnamese-400-normal.woff2
GET    https://heatmaps.monsido.com/v1/heatmaps.js

Cert: DV

4) achtkarspelen.nl
Beginnen zonder "www.":
http://achtkarspelen.nl/
v
https://achtkarspelen.nl/
Strict-Transport-Security: max-age=31536000
v
https://www.achtkarspelen.nl/
Strict-transport-security: max-age=31536000; includeSubDomains

Beginnen met "www.":
http://www.achtkarspelen.nl/
v
https://www.achtkarspelen.nl/
Strict-transport-security: max-age=31536000; includeSubDomains

HSTS: eenmalig extra risico als je begint met www.achtkarspelen.nl:
1e sessie: www.achtkarspelen.nl in adresbalk gaat eerst via http
2e sessie: achtkarspelen.nl in adresbalk gaat ook eerst via http

Privacy:
GET    https://cuatro.sim-cdn.nl/assets/1.93.0/iconFonts/fontawesome6/css/fontawesome.6.4.0.css
GET    https://logging.simanalytics.nl/piwik.js
POST https://www.achtkarspelen.nl/graphql
GET    https://siteimproveanalytics.com/js/siteanalyze_6005986.js
GET    https://www.googletagmanager.com/gtag/js?id=G-0BBXKKN48X
GET    https://cdn-eu.readspeaker.com/script/4433/webReader/webReader.js?pids=wr&notools=1
GET    https://www.google-analytics.com/analytics.js
POST https://logging.simanalytics.nl/piwik.php? o.a. cookie=1&res=1920x1080
GET    https://6005986.global.siteimproveanalytics.io/image.aspx? o.a res=1920x1080 ... &luid=<GUID>
GET    https://fonts.bunny.net/roboto/files/roboto-vietnamese-400-normal.woff2
POST https://region1.google-analytics.com/g/collect? o.a. r=1920x1080 en ID's
POST https://www.google-analytics.com/j/collect? o.a. sr=1920x1080 en ID's

Opvallend: inloggen op digid.nl gaat via https://www.8ktd.nl/
(kennelijk staat 8ktd voor Achtkarspelen en Tytstjerksteradiel)
Als je DigD annuleert kom je uit op https://www.8ktd.nl/home

Certs: DV

5) alblasserdam.nl
Beginnen zonder "www.":
http://alblasserdam.nl/
v
https://alblasserdam.nl/
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload;

Beginnen met "www.":
http://www.alblasserdam.nl/
v
https://www.alblasserdam.nl/
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload;

HSTS: eenmalig extra risico ongeacht weermee je begint:
1e sessie: www.alblasserdam.nl in adresbalk gaat eerst via http
2e sessie: alblasserdam.nl in adresbalk gaat ook eerst via http
en vice versa

Merk op: deze site blijft www. gebruiken als je daarmee begonnen bent, maar blijft ook de domeinnaam zonder www. gebruiken als je dáármee begonnen bent.

Privacy:
GET    https://virtuele-gemeente-assistent.nl/static/css/widget-v0.11.7.css
GET    https://cloudstatic.obi4wan.com/chat/obi-launcher.js
GET    https://www.browsealoud.com/plus/scripts/3.1.0/ba.js
OPTIONS https://virtuele-gemeente-assistent.nl/domain-metadata-api?domain=alblasserdam.nl
GET    https://siteimproveanalytics.com/js/siteanalyze_6006006.js
GET    https://plus.browsealoud.com/js/urlinfo/alblasserdam.nl.js
GET    https://6006006.global.siteimproveanalytics.io/image.aspx? o.a. res=1920x1080 &luid=<GUID>

Cert: DV

6) albrandswaard.nl
Beginnen zonder "www.":
http://albrandswaard.nl/
v
https://albrandswaard.nl/
Strict-transport-security: max-age=31536000; includeSubDomains
v
https://www.albrandswaard.nl/
Strict-transport-security: max-age=31536000; includeSubDomains; preload

Beginnen met "www.":
http://www.albrandswaard.nl/
v
https://www.albrandswaard.nl/
strict-transport-security: max-age=31536000; includeSubDomains; preload

HSTS: eenmalig extra risico als je begint met www.albrandswaard.nl:
1e sessie: www.albrandswaard.nl in adresbalk gaat eerst via http
2e sessie: albrandswaard.nl in adresbalk gaat ook eerst via http

Privacy:
GET    https://kit.fontawesome.com/8442ade4bd.js
GET    https://kit.fontawesome.com/8442ade4bd.js
GET    https://fonts.googleapis.com/css2?family=Ubuntu:wght@400;700&display=swap
GET    https://cdn1.readspeaker.com/script/6005/webReader/webReader.js?
GET    https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit
GET    https://siteimproveanalytics.com/js/siteanalyze_6005954.js
GET    https://fonts.gstatic.com/s/ubuntu/v20/4iCs6KVjbNBYlgoKfw72.woff2
GET    https://translate.googleapis.com/_/translate_http/_/js/k= ...
GET    https://6005954.global.siteimproveanalytics.io/image.aspx? o.a. res=1920x1080 &luid=<GUID>

Cert: DV (Let's Encrypt)

7) alkmaar.nl
Beginnen zonder "www.":
http://alkmaar.nl/
v
https://alkmaar.nl/
Strict-transport-security: max-age=31536000; includeSubDomains
v
https://www.alkmaar.nl/
Strict-transport-security: max-age=31536000; includeSubDomains; preload

Beginnen met "www.":
http://www.alkmaar.nl/
v
https://www.alkmaar.nl/
Strict-transport-security: max-age=31536000; includeSubDomains; preload

HSTS: eenmalig extra risico als je begint met www.alkmaar.nl:
1e sessie: www.alkmaar.nl in adresbalk gaat eerst via http
2e sessie: alkmaar.nl in adresbalk gaat ook eerst via http

Privacy:
GET    https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap
GET    https://kit.fontawesome.com/8442ade4bd.js
GET    https://cdn1.readspeaker.com/script/5131/webReader/webReader.js? ...
GET    https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Mu4mxK.woff2
GET    https://siteimproveanalytics.com/js/siteanalyze_6005938.js
GET    https://ka-p.fontawesome.com/releases/v6.4.0/css/pro.min.css?token=8442ade4bd
GET    https://6005938.global.siteimproveanalytics.io/image.aspx? o.a. res=1920x1080 en div. ID's

Naar https://www.alkmaar.nl/mijnalkmaar/
https://mijn.alkmaar.nl/pip/login
Strict-transport-security: max-age=31536000; includeSubDomains; preload

Certs: OV

8) almelo.nl
Beginnen zonder "www.":
http://almelo.nl/
v
https://almelo.nl/
strict-transport-security: max-age=31536000
v
https://www.almelo.nl/
strict-transport-security: max-age=31536000

Beginnen met "www.":
http://www.almelo.nl/
v
https://www.almelo.nl/
Strict-transport-security: max-age=31536000

HSTS: eenmalig extra risico als je begint met www.almelo.nl:
1e sessie: www.almelo.nl in adresbalk gaat eerst via http
2e sessie: almelo.nl in adresbalk gaat ook eerst via http

Privacy:
GET    https://enquete.agconsult.com/agsurvey/js/almelo-svhw
GET    https://www.google-analytics.com/analytics.js
GET    https://siteimproveanalytics.com/js/siteanalyze_6005570.js
GET    https://6005570.global.siteimproveanalytics.io/image.aspx? o.a. &res=1920x1080 &luid=<GUID>
POST https://www.google-analytics.com/j/collect? o.a. sr=1920x1080&vp=1173x725 en div. ID's
GET    https://www.googletagmanager.com/gtag/js?id=G-9G9SSY8REV&cx=c&_slc=1
POST https://region1.google-analytics.com/g/collect? o.a. sr=1920x1080 en div. ID's
GET    https://6005570.global.siteimproveanalytics.io/image.aspx? o.a. res=1920x1080, div. ID's met cookies
GET    https://websurveys2.servmetric.com/js/client/gm_sidebar.js met cookies
GET    https://hitcounter.servmetric.com/1679
GET    https://wsstatic.servmetric.com//css/modal2/modal.css?v=202011112031 met cookies

Cert: OV (QuoVadis Trustlink B.V.)

9) almere.nl
Beginnen zonder "www.":
http://almere.nl/
v
https://almere.nl/
GEEN HSTS! (Geen "Strict-Transport-Security" header)
v
https://www.almere.nl/
Strict-Transport-Security: max-age=31536000

HSTS BROKEN! (Uw browser maakt geen HSTS record aan voor almere.nl).

Op de meeste (alle?) pagina's zijn 3 links te vinden die met http:// beginnen:
<a href="http://parkeren.almere.nl/">Parkeren</a>
<a href="http://sportbedrijf.almere.nl/">Sport en bewegen</a>
<a href="http://english.almere.nl"><span class="icon-globe"></span>English</a>

Alle drie sturen door naar https en zetten HSTS (dus elk éénmalig via http).

Via https://belastingen.almere.nl/ naar https://digid.nl/ en geannuleerd:
dan kom je op https://services.almere.nl/DigiD/cancellogonpage
met een ongeldig PKI-Overheid certificaat.

Privacy:
GET    https://www.youtube.com/iframe_api (met cookies)
POST https://almere.piwik.pro/ppms.php (zeer frequent)
GET    https://websurveys2.govmetric.com/ (met cookies)
GET    https://hitcounter.govmetric.com/ (met cookies)
GET    https://gemeentealmere.bbvms.com/
GET    https://cdn.bluebillywig.com/
GET    https://dmko47n8f6r60.cloudfront.net/

Certs:
- almere.nl en www.almere.nl: DV (Let's Encrypt)
- sportbedrijf.almere.nl: *.almere.nl DV (Let's Encrypt)
- belastingen.almere.nl: EV (Sectigo)
- services.almere.nl: OV (ongeldige root) KPN PKIoverheid

10) alphenaandenrijn.nl
Beginnen zonder "www.":
http://alphenaandenrijn.nl/
v
https://www.alphenaandenrijn.nl/
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload;

HSTS BROKEN! (Uw browser maakt geen HSTS record aan voor alphenaandenrijn.nl).

https://digitaalgemeenteloket.alphenaandenrijn.nl/view/LOGIN
"Meer informatie leest u op digid.nl" -> http://digid.nl/ (geen https link)

Na annuleren op digid.nl kom je terug in:
https://digitaalgemeenteloket.alphenaandenrijn.nl/view/LOGIN
In deze pagina zie ik geen link om terug te gaan naar https://www.alphenaandenrijn.nl/.

Privacy:
GET    https://www.googletagmanager.com/gtag/js?id=G-22K5JDJCQ3
POST https://region1.google-analytics.com/g/collect? div. ID's
GET    https://siteimproveanalytics.com/js/siteanalyze_6005940.js
GET    https://6005940.global.siteimproveanalytics.io/image.aspx? o.a. res=1920x1080 en div. ID's; met cookies

Certs:
- alphenaandenrijn.nl en www.alphenaandenrijn.nl: OV (Sectigo)
- digitaalgemeenteloket.alphenaandenrijn.nl: OV (Sectigo)
06-07-2023, 08:07 door Anoniem
Erik,

Leuk dat je hier onderzoek naar doet. Echter, het alleen hier posten van je resultaten zal er niet voor zorgen dat de geteste domeinen hun policies gaan aanpassen.
Ik hoop dan ook dat je deze resultaten ook deelt met de beheerders van deze domeinen.

Groeten
06-07-2023, 11:16 door Anoniem
Ik denk dat dit komt omdat dit zich afspeelt in een zwart gat binnen het webgebeuren. Ik zie dit op het werk ook fout gaan.
Vroeger hadden we de website op een eigen server staan en had ik dit goed ingeregeld, maar op een gegeven moment moest er "een nieuwe site" komen, die taak werd neergelegd bij een webbouwer, en na enig gedoe werd de hosting taak ook bij die partij neergelegd.
Dwz zij zouden de hosting regelen, maar brachten dat weer onder bij een webhostingpartij (prutsers).
Nu is er een "gap" tussen de hosting en de content, precies op de plek waar je dit soort dingen regelt. De webbouwer snapt niks van de techniek, die kan nog niet eens een certificaat op de juiste wijze installeren (dwz inclusief intermediates), de hostingpartij is uiteraard niet bezig met dit soort dingen, die zijn net druk doende om IPv6 te gaan aanbieden.

Afijn nu gebeurt er dus niks meer op dit gebied. En is er niemand die je kunt aanspreken die er wat van weet.
Ik denk dat het bij de overheid niet veel anders gaat. Er zijn mensen die sites maken, die houden zich niet met dit soort dingen bezig, en er is ergens een hoster die het allemaal niet interesseert.
06-07-2023, 18:21 door Anoniem
Dank voor deze inzichten Erik;

Ik ben een paar illusies armer, maar heb aan inzicht gewonnen.

Noob.
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.