it-swarm.com.de

Wie verhindern Sie das erstmalige Senden von Cookie-Daten über HTTP?

Sie können HSTS verwenden, um den Browser anzuweisen, in zukünftigen Anforderungen immer HTTPS zu verwenden.

Sie können das Cookie Secure-Flag verwenden, das von nun an nur noch Cookies über HTTPS sendet.

Sie können eine DNS-basierte Umleitung verwenden, jedoch erst, nachdem die HTTP-Anforderung dort eingegangen ist.

Meine Frage ist, wie Sie sicherstellen können, dass Benutzer die Site immer als HTTPS besuchen und auch beim ersten Mal keine Daten über HTTP senden.

Edit :

Angesichts der fehlenden Lösung hierfür denke ich, dass Browser standardmäßig zuerst automatisch eine https-Anfrage senden sollten und diese dann nicht funktioniert und dann ein Downgrade durchführt.

12
Muhammad Umer

Zusammenfassend zu den Kommentaren (und durch Ersetzen meiner vorherigen Antwort): Solange sslstrip möglich ist, kann sich der Angreifer als Benutzer ausgeben und die Sitzung steuern, während der Browser glaubt, dass der Benutzer die Sitzung steuert. Nur HSTS kann sslstrip verhindern, und nur HSTS-Preload kann sslstrip bei der ersten Anforderung verhindern (bevor ein HSTS-Header abgerufen wird).

Daher sollte die HSTS-Vorlast der richtige Weg sein, wie in die Antwort von Benoit Esnard dargelegt.

Das Problem ist, dass es Monate dauern kann, bis das HSTS-Preload für eine neue Domain verfügbar ist, da eine aktualisierte Liste nur mit einer neuen Version des Browsers geliefert wird (zumindest bei Google Chrome).

Mit anderen Worten: Es gibt keine Lösung, die innerhalb kurzer Zeit implementiert werden kann.

17
Steffen Ullrich

Senden Sie Ihre Website an die HSTS Preload List .

Die HSTS-Preload-Liste ist eine Liste von Hostnamen, die in Browsern eingebettet sind, damit diese wissen, welche Websites nur als HTTPS gecrawlt werden dürfen, wodurch jede Nicht-HTTPS-Anforderung verhindert wird.

14
Benoit Esnard

Was Sie beschreiben, heißt Session Fixation Attack (Wikipedia-Link) .

Kurz gesagt, das Problem ist, dass der Angreifer Ihnen ein Session Identifier-Cookie geben kann. Sie melden sich mit diesem Cookie an und der Server verknüpft Ihre Identität mit diesem Cookie.

Der Angreifer kennt immer noch Ihr Sitzungs-ID-Cookie und kann sich als Server ausgeben. Angriff abgeschlossen.

Um sich dagegen zu verteidigen, muss der Server das Sitzungs-ID-Cookie ändern, wenn sich jemand anmeldet. Der Angreifer hat ein veraltetes wertloses Cookie und kann nichts tun.

Nicht bei allen Webframeworks können Sie das Sitzungscookie ändern. Wenn dies ein Problem ist, können Sie zu diesem Zweck ein anderes Cookie verwenden, ein separates "authentifiziertes Cookie", von dem das Framework nichts weiß. Auch dieses Cookie muss bei jedem Login geändert werden.

6
Stig Hemmer

Angesichts der Tatsache, dass es keine vollständige Möglichkeit gibt, Clients davon abzuhalten, eine Verbindung zu HTTP herzustellen, möglicherweise mit Cookies, besteht unsere Herausforderung darin, Möglichkeiten zu finden, um die Häufigkeit zu verringern.

Ein Ansatz besteht darin, HTTP überhaupt nicht zu unterstützen. Lassen Sie alle HTTP-Anforderungen eine Zeitüberschreitung (keine Umleitung, nichts). Dies verringert die Wahrscheinlichkeit, dass andere Websites auf Ihre HTTP-Adresse verlinken, da solche Links nicht funktionieren. Im Laufe der Zeit wird hoffentlich jeder, der auf Ihre Website verlinkt, direkt auf HTTPS verlinken.

1
Krubo

Sie können nicht verhindern, dass die Cookies beim ersten Mal über HTTP gesendet werden. Sie können jedoch Maßnahmen ergreifen, um den dadurch verursachten Schaden zu minimieren. Das Grundprinzip ist, dass Sie niemals etwas ehren, das über HTTP übermittelt wurde, und wenn Sie vertrauliche Informationen im Klartext erhalten, behandeln Sie diese Informationen als kompromittiert.

Richten Sie Ihre Site so ein, dass sie von HTTP zu HTTPS umleitet, und senden Sie Strict-Transport-Security-Header. (Sie müssen nicht vorladen, bis Sie gut und bereit sind; was ich sagen werde, wird trotzdem funktionieren.)

Wenn Sie dann Cookies sehen, die über Klartext-HTTP gesendet wurden, machen Sie alle diese Cookies auf der Serverseite ungültig. Versuchen Sie an dieser Stelle nicht, sie aus dem Cookie-Glas des Browsers zu entfernen, da dies aus mehreren Gründen nicht garantiert funktioniert (eine Klartext-HTTP-Antwort kann Cookies mit dem Tag "Sicher" nicht manipulieren, ältere Browser ignorieren möglicherweise max-age = 0 Der Mann in der Mitte könnte Set-Cookie vollständig entfernen, um das Opfer mit dem kompromittierten Cookie zu halten. Aber ehren Sie sie nicht, wenn sie in einer nachfolgenden HTTPS-Anfrage erscheinen. Stellen Sie zu diesem Zeitpunkt (d. H. Nur wenn Sie einen sicheren Kanal eingerichtet haben) ein neues Sitzungstoken aus und fordern Sie den Benutzer auf, sich erneut anzumelden.

Wenn Sie sehen, dass Ihr Anmeldeformular im Klartext gesendet wird, machen Sie das Sitzungscookie nicht einfach ungültig das Konto . Leiten Sie das Kontowiederherstellungs-, Anmelde- oder Registrierungsformular nicht von HTTP zu HTTPS um. Geben Sie stattdessen eine Fehlermeldung aus und weisen Sie den Menschen an, die URL von Hand zu korrigieren (es ist wie ein Captcha, dient jedoch dazu, das Umschreiben von URLs in sslstrip zu umgehen ;-). Und jede Seite, auf die nur angemeldete Benutzer zugreifen sollten, sollte beim Zugriff über Klartext zur Startseite und nicht zu HTTPS selbst umleiten.

Stellen Sie außerdem sicher, dass Ihre Sitzungscookies sowohl nicht fälschbar als auch bedeutungslos sind. . Die meisten Web-Frameworks erledigen dies heutzutage automatisch für Sie. Wenn Sie jedoch keine haben, funktioniert am einfachsten Folgendes: Jedes Sitzungscookie ist eine große Zufallszahl (64 Bit könnten ausreichen, 128 sind definitiv genug), die generiert wird durch ein kryptografisch sicheres RNG plus ein Nachrichtenauthentifizierungscode Signieren dieser Nummer. Sie können hierfür einen symmetrischen MAC verwenden, da das Cookie nur von der Site authentifiziert werden muss, die dieselbe Entität ist, die den MAC ausgestellt hat, sodass es beide Male dasselbe Geheimnis kennt. Wenn ein Cookie mit einem ungültigen MAC eingeht, ignorieren Sie es , unabhängig davon, wie Sie es erhalten haben - tun Sie so, als hätten Sie es überhaupt nicht erhalten. (Dies ersetzt sogar die Regel zum Ungültigmachen von Cookies, die über HTTP eingehen. Sie möchten nicht, dass der Angreifer das Abmelden von Personen durch Fälschen von Anforderungen erzwingen kann.) Wenn der MAC jedoch gültig ist, verwenden Sie die Zufallszahl als Schlüssel zu einer Datenbanktabelle, in der alle tatsächlichen Informationen aufgezeichnet werden, die einer Benutzersitzung zugeordnet sind.

Es wird auch empfohlen, erst dann Cookies auszugeben, wenn jemand versucht, sich anzumelden. Dies erschwert es einem MITM erheblich, ein gültiges Cookie in die Hände zu bekommen, und erleichtert Ihnen die Einhaltung der DSGVO.


Nachdem ich die Diskussion über die anderen Antworten gelesen habe, stelle ich jetzt fest, dass OP sich mit einem ganz bestimmten Szenario befasst: Ein neuer Benutzer auf der Site greift genau darauf zu Zum ersten Mal durch einen Mann in der Mitte, der HTTPS beendet, HSTS entfernt, alle Links neu schreibt und die Site unverschlüsselt an den hypothetischen neuen Benutzer weiterleitet. In der Tat ist das einzige, was möglicherweise helfen kann, die HSTS-Vorlast. Ohne HSTS-Vorladung wird das Konto des neuen Benutzers sozusagen "kompromittiert geboren", und der Angreifer weiß alles darüber: nicht Nur das Sitzungscookie, aber der Benutzername und das Passwort sowie die E-Mail-Adresse, die für die Wiederherstellung des Kontos verwendet wird, und alle persönlichen Informationen, die das Opfer eingegeben hat. Das ist böse und leider plausibler als Sie vielleicht denken.

Wenn Sie jedoch nur eine Chance haben, über einen Kanal, der nicht aktiv manipuliert wird, mit dem Benutzer zu interagieren, können Sie HSTS pushen und Sitzungscookies sichern. Alle oben genannten Ratschläge sind hilfreich.

0
zwol