HSTS für PCI-DSS Compliance

18.04.2018
extendedLogo

Onlineshops, die Kreditkartentransaktionen speichern, übermitteln oder abwickeln, müssen PCI-DSS-konform aufgestellt sein. Viele PCI-DSS-Audits prüfen dabei auch ein aktiviertes HSTS (HTTP Strict Transport Security) ab.

Wollen Sie die PCI-DSS-Compliance nicht verlieren, sollte Ihre Website nicht nur auf HTTPS basieren, sondern auch den HSTS Header ausliefern. Ein SSL-Zertifikat allein reicht nämlich nicht aus.

Die Integration von HSTS ist allerdings nicht frei von Tücken. Wir beschreiben, wie Sie vorgehen sollten.

Was ist HSTS und welche Vorteile liefert diese Sicherheitsmaßnahme?

HTTP Strict Transport Security wurde bereits 2012 eingeführt und hat sich seitdem als Best-Practice-Standard etabliert. Es handelt sich hierbei um eine Regel, die bei Browser und App-Verbindungen die Nutzung von HTTPS für Ihre gesamte Web-Infrastruktur durchsetzt.

Mittels HSTS teilt der Webserver den Nutzern Ihrer Website mit, dass alle Inhalte Ihrer Seite nur via verschlüsselter HTTPS-Verbindung erreichbar sind. Bei aktiviertem HSTS Header wird ein Browser keine Verbindung zu nicht verschlüsselten Inhalten aufbauen. Der Browser wird darüber hinaus angewiesen, diese Einstellung für einen längeren Zeitraum zu speichern.

HSTS schützt vor:

  • Man-in-the-middle-Angriffe durch SSL Stripping – Session Hijacking
  • Fehlerhaften Einstellungen, die unbeabsichtigt sensiblen Datenverkehr über HTTP lenken

Auslieferung Domain über HSTS

Der primäre Weg, den Sicherheitsstandard HSTS umzusetzen, besteht darin, einen Strict-Transport-Security Header in Ihren Webserver mit zu setzen. Danach können Sie Ihre Domain in die HSTS Preloading Liste des Chrome Projects aufnehmen lassen.Ihre Domain wird dann erfolgreich über HSTS ausgeliefert.

Installation des HSTS-Headers

Eine Integration von HSTS wird in der Regel recht zeitaufwändig sein, da mehrere Schritte notwendig sind, um Risiken zu vermeiden. Es lohnt sich, wenn man sich vor dem Start mit der Funktionsweise von HSTS gut bekannt macht. Wir empfehlen nachdrücklich, die Einführung des Headers schrittweise und unbedingt zuerst in einer Entwicklungsumgebung vorzunehmen. Werden Parameter falsch gesetzt, kann es zu diffizilen und schlecht überprüfbaren Fehlern kommen. Weil ein Rollback nicht so einfach möglich ist, würden sich diese Fehler in einer Liveumgebung umso schwerwiegender auswirken. Erst nach einer längeren Erprobung in der Entwicklungsumgebung sollte die Integration des Headers in den Livebetrieb erfolgen – und zwar wiederum in mehreren Schritten ausgiebiger Testphasen.

Unsere Empfehlung

Am besten kontaktieren Sie unseren Service. Wir unterstützen Sie sowohl bei der Integration als auch bei der Überprüfung. Mit wenigen Schritten können wir den Header direkt in der Konfiguration des Webservers setzen.

  • Stellen Sie zuerst sicher, dass Ihre Domain und alle Subdomains über HTTPS laufen, da es notwendig ist, um später in die „Preload Liste“ rein zu kommen.
  • Fügen Sie den „Strict-Transport-Security“-Header hinzu und erhöhen Sie langsam, in separaten Schritten den max-age:
  • 5 Minuten: max-age=300; includeSubDomains
  • 1 Woche: max-age=604800; includeSubDomains
  • 1 Monat: max-age=2592000; includeSubDomains

Überprüfen Sie nach jedem Schritt, ob es beschädigte Seiten gibt und ob Ihr Monitoring oder Google Analytics Fehler melden. Führen Sie alle notwendigen Korrekturen durch und erhöhen Sie anschließend den „max-age“. Warten Sie in der letzten Phase mindestens einen Monat ab, um sicherstellen zu können, dass sämtliche Fehler behoben wurden. Beschädigte Seiten können Sie erkennen, indem nicht alle Inhalte über HTTPS geladen werden und dadurch Fehler ausliefern.

Im letzten Schritt können Sie dann Ihre Domain in die Preload-List aufnehmen lassen.

Die Preload-List

Inzwischen führen Browser wie Chrome, Internet Explorer, Firefox und Safari eine integrierte Preload-List, um Browser zur Verwendung von HTTPS zu zwingen. Entwickler von Google Chrome pflegen diese Liste. Ihre Domain wird mithilfe des HSTS Headers und dem Preload Parameter unmittelbar in die Preload-List eingetragen.

Durch die Preload-List wird sichergestellt, dass die Webseite direkt bei der ersten Eingabe im Browser per HTTPS aufgerufen wird und nicht erst der Webserver nach dem HSTS Header gefragt wird. So lassen sich die Man-in-the-middle-Angriffe verhindern.

Die erfolgreiche Aufnahme in die Preload-List hängt wesentlich von einer korrekten Vorgehensweise ab. Trotzdem kann ein Eintrag in die Preload-List nicht garantiert werden. Die Betreiber der Liste weisen außerdem darauf hin, dass ein einmal erfolgter Eintrag nicht unbedingt wieder gelöscht werden kann, da auch Dritthersteller, die außerhalb ihres Einflussbereichs agieren, diese Liste nutzen.

Wir empfehlen deshalb, eingehend zu prüfen, ob auch langfristig sichergestellt werden kann, dass sämtlicher Traffic Ihrer Domain – alle Subdomains eingeschlossen – vollständig via HTTPS übertragen wird.

Vorraussetzungen für den Eintrag

  • Vorhandensein eines gültigen SSL-Zertifikats, das nicht SHA-1 signiert ist.
  • Der gesamte Traffic muss über HTTPS laufen.
  • Alle Subdomains müssen über HTTPS ausgeliefert werden.
  • Die Domain benötigt folgenden HSTS-Header: - Der max-age muss 31536000 Sekunden (1 Jahr) betragen.
  • Der includeSubDomains-Token muss definiert sein.
  • Der Preload-Token muss definiert sein.
  • Sofern für die Webseite eine Weiterleitung besteht, muss die Ursprungsadresse den HSTS-Header besitzen.

Eine detailliertere Beschreibung der Anforderungen liefert Ihnen folgender RFC: RFC 6797

Wie funktioniert der Eintrag?

Der Eintrag in die Preload Liste erfolgt durch das Setzen von „preload“ in den Header. Folgender vollständiger HSTS-Header ist notwendig, um in die Liste aufgenommen zu werden:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Alternativ können Sie den Header auch direkt in der htaccess vom Apache setzen.

Beispiel für eine htaccess Datei:

Header set Strict-Transport-Security „max-age=31536000; includeSubDomains; preload“

Gehen Sie überlegt vor: Einmal eingetragene Domain aus der Preload-List zu entfernen ist sehr zeitaufwändig ist.

Wir empfehlen, den Eintrag in die Preload-List erst nach längerer Erprobungszeit vorzunehmen, da die Beseitigung einer eingetragenen Domain, samt allen Subdomains, äußerst zeitintensiv ist. Es kann bis zu 12 Wochen dauern, bis der Eintrag aus den Listen aller Chrome-Benutzer eliminiert ist.

Sollten Sie trotzdem Ihre Domain aus der Preload-List entfernen müssen, finden Sie eine Anleitung hier zum Entfernen Ihrer Domain aus der Preload-List.

Immer mehr PCI-DSS Audits scannen HSTS

Alert Logic erklärt in einem interessanten Artikel, warum manche PCI Scans auf HSTS fehlschlagen und wie dem abgeholfen werden kann.

Wichtig: Sobald Sie sich für diesen Schritt entscheiden, muss die gesamte Entwicklerumgebung auf HTTPS umgestellt werden. Sofern Sie mit Subdomains innerhalb Ihrer Domain in Ihrer Entwicklungsumgebung arbeiten und keinen anderen Browser zum Entwickeln verwenden, wirkt sich der HSTS Header auch auf Ihren Entwicklungs Prozess aus.

Der Browser speichert, dass alle Subdomains auch über HTTPS laufen müssen. Jeder Entwickler muss seine Umgebung komplett auf HTTPS umstellen und gültige SSL-Zertifikate verwenden. Bei Problemen gibt es im Internet Anleitungen wie man den Header aus dem Browser entfernen kann.

Fazit

Die Forderungen, HSTS als Stand der Technik für eine erfolgreiche PCI-DSS-Compliance einzuführen, werden immer nachdrücklicher. Verarbeiten Sie als Onlineshop-Betreiber Kreditkartentransaktionen, sollten Sie nicht zögern, diesen Sicherheitsstandard jetzt umzusetzen. Testen Sie jedoch die Integration des HSTS-Headers zunächst eingehend in einer Entwicklungsumgebung. Sollte dies nicht möglich sein, empfehlen wir, im Livebetrieb mindestens eine schrittweise Integration über einen längeren Zeitraum durchzuführen. Erst zum Schluss sollte die Preload-List aktiviert werden.

Bild: ©A. and I. Kruk, Depositphotos, 2018