Wie Google und Firefox Antiviren unterstützen

Beim Kunden gab es eine Fehlermeldung, die besagt, dass Google einen Fehler gemacht hat und deswegen die Webseite https://www.google.de/ nicht aufgerufen werden kann. Als Begründung wird HSTS angegeben.

google-hsts

Die erste Vermutung war, dass der Kunden http://www.google.de eingeben hat (oder nur google, und der Browser hat den Rest ergänzt).

Dank HSTS müsste der Browser dann wissen, dass er eigentlich auf die https-Seite wechseln muss. Er dürfte die HTTP-Anfrage also gar nicht stellen. Vielleicht ging der HTTPS Request aber schief und der Browser hat dann doch HTTP probiert?

Was passiert denn, wenn man über HTTP mit Google spricht? Leitet der einen sofort zurück auf HTTPS?

$ telnet www.google.com 80
Trying 2a00:1450:4005:803::2004...
Connected to www.google.com.
Escape character is '^]'.
HEAD / HTTP/1.0
Host: www.google.com

HTTP/1.0 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Referrer-Policy: no-referrer
Location: http://www.google.de/?gfe_rd=cr&ei=ZFYUWaDyJuuA8QeYv7XQCg
Content-Length: 258
Date: Thu, 11 May 2017 12:17:40 GMT

Connection closed by foreign host.

Ok, kein HTTPS, sondern nur eine Weiterleitung auf google.de:

$ telnet www.google.de 80
Trying 2a00:1450:4005:803::2003...
Connected to www.google.de.
Escape character is '^]'.
HEAD /?gfe_rd=cr&ei=ZFYUWaDyJuuA8QeYv7XQCg HTTP/1.0
Host: www.google.com

HTTP/1.0 302 Found
Location: http://www.google.de/?gfe_rd=cr&ei=ZFYUWaDyJuuA8QeYv7XQCg&gws_rd=cr
Cache-Control: private
Content-Type: text/html; charset=UTF-8
P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."
Date: Thu, 11 May 2017 12:18:57 GMT
Server: gws
Content-Length: 272
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Set-Cookie: NID=103=... expires=Fri, 10-Nov-2017 12:18:57 GMT; path=/; domain=.google.com; HttpOnly

Connection closed by foreign host.

Also auch hier keine Weiterleitungen nach HTTPS.

Nungut, HSTS wird ja nur über HTTPS gesetzt. Also prüfen wir das:

$ openssl s_client -connect www.google.de:443
CONNECTED(00000003)
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=google.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
... 174 lines of base64 - are you serious, Google?
... 510 DNS entries in SubjectAltName - are you kidding?
... 262 wildcard DNS entries - are you dumb?
... 8342 bytes raw data, that are 6 IP packets - Hello, McGoogle?
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=google.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2
---
No client certificate CA names sent
---
SSL handshake has read 10426 bytes and written 453 bytes
---
New, TLSv1/SSLv3, Cipher is AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
---
HEAD / HTTP/1.0
Host: www.google.de

HTTP/1.0 200 OK
Date: Thu, 11 May 2017 13:18:36 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Set-Cookie: NID=103=G0eBNw3q5-lpQWdYv8tsf0HpTpAyPeQ1THNMYhN0FOl7Jm2WP0au1U2jRj0a1P9TxLVMCTq4vrqM-GKRrcBy94zj4nk--kO9NCstSjynErLMBzZRBf_mytJ8HOJm_uSp; expires=Fri, 10-Nov-2017 13:18:36 GMT; path=/; domain=.google.de; HttpOnly
Alt-Svc: quic=":443"; ma=2592000; v="37,36,35"
Accept-Ranges: none
Vary: Accept-Encoding

Bitte? Da wird ja gar kein HSTS-Header gesetzt!

Dann muss Google irgendwann früher man einen HSTS-Header gesetzt haben und dieser gilt auf dem Kundensystem noch bis zum Erreichen seines Ablaufdatums. Und tatsächlich Google hat letzten August mit HSTS experimentiert!

Inzwischen sind die Header aber weg, denn Google hat die HSTS-Regeln in Chrome hart einprogrammiert. Alle anderen Browser fallen dabei hinten runter.

Der HSTS Header, der hier noch zum Tragen kommt, ist offenbar der, der im Client gecached wurde, denn HSTS Header sollen mindestens ein halbes Jahr gültig sein.

All das erklärt nicht die Fehlermeldung, denn HTTP ist gar nicht im Spiel. Auch in der Adressleiste des Browsers findet sich die korrekte https-URL. Dann bleibt nur noch anzunehmen, dass im HTTPS etwas schief gelaufen ist.

Leider hat der Kunde keine weiteren Informationen geliefert, insbesondere hat er nicht auf Erweitert geklickt.

Aber das hätte er tun sollen, denn erst dann erscheint die korrekte Fehlermeldung, die besagt, das das Zertifikat nicht passt. Und damit findet man schnell den eigentlichen Verursacher des Problems. Denn der Fall ist mehrfach bekannt.

Grund ist ein Amok laufender Antivirus, der versucht HTTPS Verbindungen aufzubrechen. Das Feature ist zwar abgeschaltet, aber alle paar Monate schaltet es ein Update der Software von selbst wieder an.

Zusammenfassung

Das Weglassen von HSTS durch Google ermöglicht es der Antiviren-Software, unbemerkt HTTPS-Verbindungen aufzubrechen. Diese Eingriffe der Antivirensoftware wird bei Webseiten, die HSTS einsetzen, von Firefox erkannt und gemeldet. Allerdings ist die Fehlermeldung derartig irreführend, dass die Antivirus-Software nicht in Verdacht geraten kann.

Google und Firefox helfen so den Antivirus-Herstellern, mit ihrer Software HTTPS zu belauschen.

Post a comment

Related content