Immer mehr Anbieter im Netz sind bemüht, In­ter­net­nut­zern einen sicheren Zugang zu Online-Inhalten zu er­mög­li­chen. Im World Wide Web hat sich dafür das Ver­schlüs­se­lungs­pro­to­koll TLS (Transport Layer Security) etabliert. Große Be­kannt­heit erlangte dieses unter der Vor­gän­ger­be­zeich­nung SSL (Secure Sockets Layer). Während Ver­bin­dun­gen zu Webseiten via HTTP (Hypertext Transfer Protocol) un­ver­schlüs­selt erfolgen, bietet das Netz­werk­pro­to­koll HTTPS („Hypertext Transfer Protocol Secure“ oder „Hypertext Transfer Protocol over SSL/TLS“) dank SSL/TLS-Ver­schlüs­se­lung die Mög­lich­keit, den Da­ten­ver­kehr im Web sicherer zu gestalten.

Auch In­ter­net­gi­gant Google geht mit gutem Beispiel voran und bietet seine viel­be­such­ten Web­ser­vices aus­schließ­lich SSL/TLS-ver­schlüs­selt an. Seit August 2014 fließt HTTPS zudem als Ran­king­fak­tor in den Al­go­rith­mus der or­ga­ni­schen Websuche ein. Damit ist die Relevanz einer SSL/TLS-ge­stütz­ten Trans­port­ver­schlüs­se­lung für Web­sei­ten­be­trei­ber deutlich gestiegen. Einen zu­ver­läs­si­gen Schutz bietet HTTPS in der Stan­dard­kon­fi­gu­ra­ti­on jedoch nicht. Immer wieder decken IT-Experten Si­cher­heits­lü­cken auf. Gefahren sind vor allem Man-in-the-Middle-Attacken, die es Hackern er­mög­li­chen, die SSL/TLS-Ver­schlüs­se­lung aus­zu­he­beln. Erst seit 2012 steht mit HSTS ein Si­cher­heits­me­cha­nis­mus für HTTPS-Ver­bin­dun­gen zur Verfügung, der Angriffe dieser Art un­ter­bin­det.

Mehr zu HTTPS auf dem Google Webmaster Central Blog

Wird eine Website über das Netz­werk­pro­to­koll HTTPS und ein zu­ver­läs­si­ges SSL/TLS-Zer­ti­fi­kat auf­ge­ru­fen, ist diese Art der Trans­port­ver­schlüs­se­lung prin­zi­pi­ell sicher. In der Ver­gan­gen­heit kam es jedoch immer wieder zu Angriffen auf Zer­ti­fi­zie­rungs­stel­len, die zur Folge hatten, dass eine Vielzahl un­si­che­rer Zer­ti­fi­ka­te in Umlauf kam. Zudem bieten ver­brei­te­te Nut­zungs­ge­wohn­hei­ten und die all­ge­mei­ne Un­acht­sam­keit im Umgang mit ver­schlüs­sel­ten Ver­bin­dun­gen zahl­rei­che An­griffs­punk­te für Phishing-Attacken und Man-in-the-Middle-Angriffe.

SSL-Zer­ti­fi­kat kaufen
Sichern Sie sich Ihr SSL-Zer­ti­fi­kat
  • Ver­schlüs­selt die Website-Kom­mu­ni­ka­ti­on
  • Ver­hin­dert Si­cher­heits­war­nun­gen
  • Ver­bes­sert die Google-Plat­zie­rung

Umleitung von HTTP auf HTTPS

In­ter­net­nut­zer geben URLs nur selten voll­stän­dig ein. Statt­des­sen werden In­ter­net­adres­sen auf ihre Domain verkürzt. Das Netz­werk­pro­to­koll HTTPS, das die ver­schlüs­sel­te Ver­bin­dung si­cher­stel­len soll, geht dabei verloren. Tippt ein In­ter­net­nut­zer bei­spiels­wei­se statt https:// example.com lediglich example.com in die Adress­zei­le seines Browsers ein, ergänzt dieser die of­fen­sicht­lich als URL zu in­ter­pre­tie­ren­de Such­an­fra­ge au­to­ma­tisch um das Standard-Netz­werk­pro­to­koll für Web­sei­ten­auf­ru­fe: HTTP.

example.com -> http:// example.com

Handelt es sich bei der Zielseite um eine ver­schlüs­sel­te Website, kommt es erst im Anschluss zur ser­ver­sei­ti­gen Wei­ter­lei­tung von HTTP auf HTTPS.

http:// example.com -> https:// example.com

So wird letzt­end­lich zwar eine ver­schlüs­sel­te Ver­bin­dung her­ge­stellt, der Umweg über die un­ver­schlüs­sel­te URL gibt Hackern jedoch die Mög­lich­keit, sich schon vorher unbemerkt als Man-in-the-Middle zwischen Browser und Server zu po­si­tio­nie­ren. In diesem Fall kann sämt­li­cher Da­ten­ver­kehr im Klartext mit­ge­le­sen werden, ohne dass sich Angreifer die Mühe machen müssen, die SSL/TLS-Ver­schlüs­se­lung zu knacken. Handelt es sich bei der Zielseite um eine Di­rekt­bank oder einen On­line­shop, kann diese Si­cher­heits­lü­cke für Nutzer, die Geld­ge­schäf­te online abwickeln, gra­vie­ren­de Folgen haben.

Ver­an­schau­li­chen lässt sich dies an einem Beispiel: An zahl­rei­chen Orten stehen öf­fent­li­che WLAN-Spots zur Verfügung. Un­vor­sich­ti­ge Nutzer verbinden sich mit diesen oft, ohne zu prüfen, wer den Zugang zum Internet be­reit­stellt. Hacker nutzen diese Un­acht­sam­keit, um den eigenen Rechner als Hotspot aus­zu­ge­ben und sämt­li­chen Da­ten­ver­kehr mit­zu­schnei­den. Ruft einer der Nutzer die Website seiner On­line­bank über einen solchen Pseudo-Hotspot aus Be­quem­lich­keit un­ver­schlüs­selt auf, gibt dies dem Hacker die Mög­lich­keit, einen Redirect zu einer Phishing-Website ein­zu­schleu­sen, bevor der Server der On­line­bank die Chance hat, die HTTP-Ver­bin­dung auf HTTPS um­zu­lei­ten.

SSL-Stripping

Eine Technik, mit der sich ge­wöhn­li­che HTTPS-Ver­bin­dun­gen aushebeln lassen, de­mons­trier­te Moxie Mar­lin­spike, Cy­pher­punk und Gründer von Open Whisper Systems, mit dem selbst­ent­wi­ckel­ten SSL-Stripping bereits 2009 im Rahmen der Si­cher­heits­kon­fe­renz Black Hat. Um die An­greif­bar­keit von HTTPS zu zeigen, ent­wi­ckel­te Mar­lin­spike die Proxy-Software SSLStrip. Diese nutzt die Si­cher­heits­lü­cke, die bei der Wei­ter­lei­tung von HTTP- auf HTTPS-URLs entsteht, und wandelt alle HTTPS-Requests des Browsers in gleich­lau­ten­de HTTP-Requests um. Während SSLStrip zum Browser des Nutzers eine un­ver­schlüs­sel­te HTTP-Ver­bin­dung aufbaut, kom­mu­ni­ziert das Programm mit dem Server auf HTTPS-Ebene. Dem Nutzer wird dabei durch ein Favicon in Form eines Schlosses vor­ge­gau­kelt, er hätte es mit einer sicheren Ver­bin­dung zu tun. Vor­aus­set­zung für einen solchen Angriff ist, dass der Hacker die Kom­mu­ni­ka­ti­on zwischen Browser und Server mitlesen kann.   Eine Lösung für das von Mar­lin­spike dar­ge­leg­te Si­cher­heits­pro­blem prä­sen­tier­te die Internet En­gi­nee­ring Task Force (IETF) erst drei Jahre später: 2012 wurde in RFC 6797 die HTTPS-Er­wei­te­rung HTTP Strict Transport Security (HSTS) spe­zi­fi­ziert.

Was ist HSTS?

Bei HSTS (HTTP Strict Transport Security) handelt es sich um einen Si­cher­heits­me­cha­nis­mus, der ent­wi­ckelt wurde, um HTTPS-Ver­bin­dun­gen gegen Man-in-the-Middle-Angriffe und Session-Hijacking ab­zu­si­chern. Mit der HTTPS-Er­wei­te­rung können Web­sei­ten­be­trei­ber Web­brow­sern durch optionale Angaben im HTTP-Header si­gna­li­sie­ren, dass eine Website für einen de­fi­nier­ten Zeitraum aus­schließ­lich SSL/TLS-ver­schlüs­selt abgerufen werden kann. Ser­ver­sei­tig wird dazu das Header-Feld Strict-Transport-Security verwendet. Dieses be­inhal­tet die ob­li­ga­to­ri­sche Direktive max-age und kann um die op­tio­na­len Di­rek­ti­ven in­clude­Sub­Do­mains und preload erweitert werden:

Strict-Transport-Security: max-age=31536000

Die Direktive max-age gibt an, wie lange eine Website aus­schließ­lich ver­schlüs­selt zur Verfügung stehen soll. Der Zeitraum wird in Sekunden definiert. Ein max-age von 31.536.000 Sekunden ent­spricht einem Zeitraum von einem Jahr.

Besucht ein In­ter­net­nut­zer eine HSTS-ge­si­cher­te Website zum ersten Mal, erhält der Browser über das Header-Feld Strict-Transport-Security folgende An­wei­sun­gen:

  • Alle un­ver­schlüs­sel­ten Links zur je­wei­li­gen Website müssen in ver­schlüs­sel­te Links um­ge­schrie­ben werden (http:// wird zu https://).
  • Kann die Si­cher­heit der Ver­bin­dung (z. B. aufgrund eins un­gül­ti­gen Zer­ti­fi­kats) nicht si­cher­ge­stellt werden, muss diese ab­ge­bro­chen werden. Der Nutzer bekommt eine Feh­ler­mel­dung angezeigt.

Optional besteht die Mög­lich­keit, HSTS-Angaben auf Sub­do­mains aus­zu­wei­ten. In diesem Fall wird das Header-Feld Strict-Transport-Security um die Direktive in­clude­Sub­Do­mains ergänzt. Diese si­gna­li­siert dem Browser, dass der HSTS-Header nicht nur für den aktuellen Host (z. B. www.example.com) gilt, sondern für alle Sub­do­mains unter der je­wei­li­gen Domain (z. B. auch für blog.example.com oder adserver.example.com).

Strict-Transport-Security: max-age=31536000; in­clude­Sub­Do­mains

Die Direktive preload er­mög­licht es, Webseiten für das so­ge­nann­te Prel­oa­ding zu markieren, um das „First-Visit-Problem“ zu umgehen.

Strict-Transport-Security: max-age=31536000; in­clude­Sub­Do­mains; preload

Ohne den preload-Parameter wirkt sich HSTS nur auf zu­künf­ti­ge Web­sei­ten­be­su­che aus: Kennt ein Browser die In­for­ma­tio­nen im HSTS-Header einer Website, werden spätere Aufrufe ent­spre­chend umgesetzt. Beim ersten Aufruf der Website greift dieser Si­cher­heits­me­cha­nis­mus nicht. Brow­ser­her­stel­ler wie Google und Mozilla bieten daher die Mög­lich­keit, Webseiten in so­ge­nann­te Preload-Listen ein­zu­tra­gen. Webseiten, die für ein Prel­oa­ding re­gis­triert wurden, sind aus­schließ­lich über HTTPS abrufbar. Preload-Listen werden von Brow­ser­be­rei­tern zentral geführt und im Rahmen von Updates an die Browser der Nutzer über­mit­telt.

Preload-Listen für HTTPS-Seiten

Da HSTS nur funk­tio­niert, wenn eine Website in der Ver­gan­gen­heit min­des­tens einmal über eine nicht ma­ni­pu­lier­ba­re HTTPS-Ver­bin­dung auf­ge­ru­fen wurde, ist jeder Erst­be­such prin­zi­pi­ell anfällig für SSL-Stripping-Attacken. Um dies zu ver­hin­dern, greifen alle gängigen Browser heut­zu­ta­ge auf Listen zurück, die auf einem HSTS-Preload-Service [HSTS-Preload-Service im Rahmen des Chromium-Projekts] (https://hst­sprel­oad.appspot.com/) basieren, der von Google im Rahmen des Chromium-Projekts zur Verfügung gestellt wird. Prin­zi­pi­ell steht es jedem Web­sei­ten­be­trei­ber frei, die eigene Domain in die HSTS-Preload-Liste ein­zu­tra­gen. Die Aufnahme einer Website ist jedoch an Grund­vor­aus­set­zun­gen gebunden, die die Qualität des Kon­troll­sys­tems si­cher­stel­len sollen:

  • Alle Webseiten müssen ein gültiges SSL-Zer­ti­fi­kat aus­lie­fern.
  • HTTP-URLs müssen auf HTTPS-URLs desselben Hosts wei­ter­ge­lei­tet werden.
  • Alle Sub­do­mains (inclusive der www-Subdomain) müssen über HTTPS abrufbar sein.
  • Der HSTS-Header muss über die Basis-Domain mit folgenden Pa­ra­me­tern aus­ge­lie­fert werden:
    • Der Wert für max-age muss min­des­tens acht Wochen betragen (4.838.400 Sekunden)
    • Der HSTS-Header muss die Direktive in­clude­Sub­Do­mains enthalten.
    • Der HSTS-Header muss die Direktive preload enthalten.
    • Alle zu­sätz­li­chen Redirects von der HTTPS-Website müssen den HSTS-Header be­inhal­ten.

Pro­mi­nen­te Nutzer des HSTS-Preload-Features sind Google, Paypal, Twitter und LastPass. Die komplette Liste ein­ge­tra­ge­ner Domains finden Nutzer auf der Website des Chromium-Projekt.

HSTS ein­rich­ten: Kurz­an­lei­tung für Apache2, Lighttpd und NGINX

Anbieter von Online-Inhalten, die ihr Projekt mittels HSTS gegen SSL-Stripping absichern möchten, müssen ihren Webserver ent­spre­chend ein­rich­ten. Die folgende Kurz­an­lei­tung zeigt die HSTS-Kon­fi­gu­ra­ti­on für Apache, NGINX, Lighttpd und Microsoft IIS.

Apache HTTP Server

Damit HSTS auf dem Apache HTTP Server zum Einsatz kommen kann, muss zunächst das Apache-Header-Modul (mod_headers) aktiviert werden. Web­sei­ten­be­trei­ber schreiben dazu folgenden Befehl ins Terminal:

sudo a2enmod headers

Ist das Apache-Header-Modul aktiviert, sollte der Webserver neu gestartet werden:

sudo service apache restart

Der Apache HTTP Server bietet die Mög­lich­keit, ver­schie­de­ne Domains auf ein und demselben Server zu betreiben. Jede dieser Domains wird in der Apache-Ter­mi­no­lo­gie als Vir­tu­al­Host (vhost) be­zeich­net und un­ab­hän­gig von anderen Domains auf dem Server kon­fi­gu­riert. Da es sich bei HSTS um eine Er­wei­te­rung für HTTPS handelt, steht dieser Si­cher­heits­me­cha­nis­mus lediglich für Vir­tu­al­Hosts mit der Port­num­mer 443 zur Verfügung – dem Standard-Port für HTTPS. Um die ver­schlüs­sel­te Ver­bin­dung zu einer HTTPS-Website für künftige Besuche zu erzwingen, ergänzen Web­sei­ten­be­trei­ber den ge­wünsch­ten Vir­tu­al­Host in der Apache-Kon­fi­gu­ra­ti­ons­da­tei https.conf um folgende Code-Zeile:

Header always set Strict-Transport-Security "max-age=4838400; includeSubdomains;"

Dazu wird das Header-Feld Strict-Transport-Security zusammen mit den anderen Di­rek­ti­ven in den Vir­tu­al­Host-Container ge­schrie­ben:

<VirtualHost *:443>
    ServerAdmin support@example.com
    ServerName www.example.com
    SSLEngine on
    SSLCertificateFile /path/to/www.example.com.cert
    SSLCertificateKeyFile /path/to/www.example.com.key
    […]
    Header always set Strict-Transport-Security "max-age=4838400; includeSubdomains;"
    DocumentRoot /var/www/
</VirtualHost>

Jedes Mal wenn ein Browser die so kon­fi­gu­rier­te Website aufruft, gibt der Apache einen HSTS-Header mit den ge­wünsch­ten Pa­ra­me­tern aus. In diesem Beispiel wird der Browser an­ge­wie­sen, Webseiten unter der Domain example.com inclusive Sub­do­mains für die nächsten acht Wochen aus­schließ­lich SSL/TLS-ver­schlüs­selt abzurufen.

Damit die Kon­fi­gu­ra­ti­on über­nom­men wird, muss Apache neu gestartet werden.

NGINX

Auch unter NGINX lassen sich SSL/TLS-ver­schlüs­sel­te Ver­bin­dun­gen durch eine simple Codezeile erzwingen:

add_header Strict-Transport-Security "max-age=4838400; includeSubDomains";

Die Anpassung wird in der Kon­fi­gu­ra­ti­ons­da­tei /etc/nginx/nginx.conf vor­ge­nom­men. Statt Vir­tu­al­Hosts kommen bei NGINX so­ge­nann­te Server-Blocks zum Einsatz, um Di­rek­ti­ven zu de­fi­nie­ren:

server {
    listen      443 ssl;
    server_name    example.com;
    ssl_certificate  www.example.com.crt;
    ssl_certificate_key  www.example.com.key;
    […]
    add_header Strict-Transport-Security "max-age=4838400; includeSubDomains";
}

Auch NGINX muss nach der Kon­fi­gu­ra­ti­on neu gestartet werden.

Lighttpd

Um HSTS für Lighttpd zu ak­ti­vie­ren, genügt eine Anpassung der Kon­fi­gu­ra­ti­ons­da­tei /etc/lighttpd/lighttpd.conf:

server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
    setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=4838400; includeSubdomains; ")
}

Die Ein­stel­lun­gen werden nach einem Neustart des Web­ser­vers über­nom­men.

Microsoft IIS

Anders als Apache, NGINX und Lighttpd wird Mi­cro­softs Webserver Internet In­for­ma­ti­on Services (IIS) über eine grafische Be­nut­zer­ober­flä­che kon­fi­gu­riert. Um HSTS zu ak­ti­vie­ren, gehen Web­sei­ten­be­trei­ber fol­gen­der­ma­ßen vor:

  • IIS-Manager starten und er­wünsch­te Website auswählen.
  • Menüpunkt „HTTP Response Header“ auswählen und auf „Add“ klicken.
  • Im Dia­log­fens­ter „Add Custom HTTP Response Header“ unter „Name“ Strict-Transport-Security eintragen und unter „Value“ die ge­wünsch­te Zeit­span­ne in Sekunden de­fi­nie­ren.

Im Anschluss muss IIS neu gestartet werden.

Zum Hauptmenü