Frage:
Was ist der Unterschied zwischen der Verwendung von HSTS und einer 301-Umleitung?
Franzech Domâs
2016-07-06 03:12:36 UTC
view on stackexchange narkive permalink

Wenn ich bereits eine 301-Umleitung von allen inneren HTTP-Seiten zu HTTPS durchgeführt habe, warum sollte ich dann auch HSTS verwenden?

Sechs antworten:
Anders
2016-07-06 03:43:06 UTC
view on stackexchange narkive permalink

Schauen wir uns zuerst das Szenario mit einer 301-Umleitung an. Das Opfer sendet eine Anfrage an http://example.com (wie in den Kommentaren angegeben, kann dies an SSLStrip liegen oder daran, dass der Benutzer gerade example.com in das Feld eingegeben hat URL-Leiste und Browser standardmäßig HTTP). Wenn es keinen MitM-Angriff gibt, erhalten sie eine 301-Antwort zurück und werden zu https://example.com umgeleitet. Wenn es jedoch ein MitM gibt, kann der Angreifer einfach festlegen, dass das 301 nicht gesendet wird, sondern stattdessen eine (möglicherweise geänderte) Kopie der Site über HTTP bereitgestellt wird.

Der Schwachpunkt hierbei ist eine anfängliche HTTP-Verbindung (ohne TLS) wird erstellt, und der Angreifer kann diesen Datenverkehr ändern. Wenn Sie jedoch HSTS verwendet hätten, würde der Browser wissen (vorausgesetzt, das Opfer hat die Site zuvor besucht), dass die Seite immer über HTTPS bereitgestellt werden sollte - es wäre niemals eine HTTP-Anfrage gesendet worden, und der Browser würde lediglich eine Anfrage an senden https://example.com . Der Angreifer kann die TLS-Verbindung nicht mitm, daher wird der Angriff verhindert.

(Die Tatsache, dass Browser 301 Antworten zwischenspeichern, macht dies in der Praxis etwas komplizierter. Weitere Informationen hierzu finden Sie unter bonsaiviking's great Beantworten Sie oder diese Frage. Die Kurzgeschichte besagt, dass der zwischengespeicherte 301 möglicherweise etwas hilft, Sie aber nicht so weit bringt wie HSTS.)

Es wäre erwähnenswert, dass `sslstrip` dabei hilft, genau diese Art von Angriffen auszunutzen.
Beliebte Browser (mindestens [Firefox] (https://blog.mozilla.org/security/2012/11/01/preloading-hsts/) und Chrome) laden seit mindestens 2012 Listen von HSTS-Hosts vorDer erste Besuch der Seite sollte nur auf neuen Websites erforderlich sein (und auf der einen Website, die die gesamte Indizierung blockiert).
@l0b0 Sie werden nur vorgeladen, wenn Sie (a) das Preload-Flag setzen und (b) es beantragen.Eine Minderheit der HSTS-Sites ist vorinstalliert, daher müssen Sie sie für die meisten Sites besuchen.
Was 301 am meisten von HSTS unterscheidet, ist genau das Vorspannen.Damit ist keine unsichere Erstverbindung erforderlich.Ohne sie sind beide gleichermaßen anfällig für sslstrip (HSTS benötigt einen "angepassten" sslstrip, aber es ist trotzdem möglich).Das Löschen des Caches kann jedoch auch ein Faktor sein (vielleicht wird 301 vergessen, HSTS jedoch nicht?).
@ValmikyArquissandas Ich bin anderer Meinung.Ein Großteil der HSTS-Sites verwendet kein Preloading und bietet trotzdem einen erheblichen Vorteil.Im Gegensatz zu HSTS-Posts kann nicht garantiert werden, dass ein 301 für längere Zeit zwischengespeichert wird. Er deckt nur eine bestimmte Seite und keine vollständige Domain ab und geht verloren, wenn der Benutzer den Cache löscht.
Um @SandeepY: neu zu formulieren, ist der einfachste MitM-Angriff, der ausgeführt werden kann, so zu tun, als würde die Website HTTPS nicht unterstützen, und die unverschlüsselte Sitzung beizubehalten
@Anders: Sie haben offensichtlich Recht, und meine Antwort ist falsch.Ich weiß nicht, wie ich vergessen habe, dass 301 nur auf einer einzelnen Seite und nicht über die Domain wirkt - ich muss sie verwechselt haben.
Das Vorladen ist eine primitive Operation.Sie müssen ein Jahr oder länger vorladen und laut Registrierungs-Tool "beachten, dass die Aufnahme in die Vorladeliste nicht einfach rückgängig gemacht werden kann".Wenn daher die Möglichkeit eines Fehlers besteht, ist es ratsam, zumindest für eine Weile NICHT vorzuladen.Während dieser Zeit ist Ihre Website für MiTM-Angriffe bei jeder ersten Anfrage jedes Besuchers (um den HSTS-Header zu finden) weit offen.Das Problem ist, dass die Umleitung einen neuen vollständigen Zugriff auslöst.Da es kein DNS-Zonenflag gibt, das angibt, dass https unterstützt wird, gibt es keine gute Lösung.HSTS schlägt fehl.
@DavidSpector Sie liegen falsch, wie Sie sowohl in Ihrer (falschen) Antwort auf diese Frage als auch in Ihrer anderen Frage darauf hingewiesen haben.
bonsaiviking
2016-07-06 05:05:30 UTC
view on stackexchange narkive permalink

HTTP Strict Transport Security (HSTS) dient der Sicherheit. HTTP 301 Permanent verschoben wird für die URL-Umleitung verwendet.

Die 301-Umleitung ist ein wichtiger Bestandteil der Bereitstellung einer HTTPS-Website. Als Teil des HTTP-Protokolls wird es von mehr Browsern als HSTS unterstützt. Es dient als primäres Mittel zum Aktualisieren einer Klartextverbindung zu HTTPS, zum Aktualisieren von Suchindizes und zum Vermeiden von Link Rot.

In vielen Fällen weisen diese beiden Methoden dieselbe Schwachstelle auf: die Erstanforderung wenn der Benutzer "example.com" in seinem Browser eingibt, wird Klartext gesendet. Wenn diese erste Anforderung in einem feindlichen Netzwerk mit einem aktiven Man-in-the-Middle (MITM) gestellt wird, kann die Antwort abgefangen werden und die Verbindung wird nicht auf eine sichere aktualisiert.

Es gibt viele Gründe, warum HSTS wichtig ist und eine große Sicherheitsverbesserung gegenüber einer Standard-301-Umleitung darstellt:

  • HSTS deckt die gesamte Domäne ab. Eine 301-Umleitung deckt nur einen bestimmten URI ab Pfad. Wenn ein Benutzer für example.com/ umgeleitet wird, verwendet eine spätere Anforderung an example.com/somepage zunächst weiterhin HTTP und muss erneut umgeleitet werden. Für eine Site, die HSTS verwendet, ist nur eine Anforderung erforderlich, um die gesamte Site abzudecken.
  • HSTS funktioniert auch mit einer anfänglichen HTTPS-Verbindung. Eine 301-Umleitung ordnet einen Klartext-URI nur einem HTTPS-URI zu. Wenn Sie also das HTTPS besuchen, erhalten Sie keinen Schutz für nachfolgende Besuche.
  • HSTS verwendet einen separaten Cache mit einem separaten Timeout. Der 301-Cache ist häufig an den Anforderungscache des Browsers gebunden, der auf Leistung ausgelegt ist. Wenn Sie eine Seite längere Zeit nicht besuchen, wird sie wahrscheinlich aus dem Cache gelöscht, um häufig besuchte Websites zu bevorzugen. Es kann sogar ein Höchstalter für diesen Cache geben, das einige Wochen oder Monate beträgt. Eine häufige Korrektur für "Site funktioniert nicht" besteht darin, dem Benutzer mitzuteilen, dass der Cache geleert werden soll. All dies würde den Benutzer erneut der MITM-Bedrohung aussetzen. HSTS-Zeitüberschreitungen liegen normalerweise in der Größenordnung von Monaten bis Jahren, und der Cache ist normalerweise getrennt, sodass er nicht einfach oder versehentlich gelöscht werden kann.
  • HSTS kann vorinstalliert sein ein Browser des Herstellers. Google tut dies mit seinem Chrome-Browser, der auf Headern basiert, die beim Crawlen des Webs entdeckt und direkt an das Programm gesendet wurden. Bei vorinstallierten Websites muss der Browser niemals in erster Linie über Klartext aufrufen. Es kann immer davon ausgegangen werden, dass es sich nur um HTTPS handelt.
  • Ein "separater Cache", der noch gelöscht werden muss, wenn der Benutzer Anonymität anfordert, also immer noch eine halb abgesicherte Lösung
    CBHacking
    2016-07-06 09:29:10 UTC
    view on stackexchange narkive permalink

    Erstens unterstützen einige alte Browser HSTS nicht. Sie müssen daher weiterhin HTTP zu HTTPS umleiten, das Flag sicher für alle Cookies setzen usw. Nun, nachdem dies gesagt wurde. .

    Zusätzlich zu den oben aufgeführten guten Gründen gibt es einen weiteren Angriff, vor dem HSTS schützt, da das Weiterleiten von SSLStrip-Angriffen einer der Hauptzwecke von HSTS ist, einfache Weiterleitungen jedoch nicht.

    Nehmen wir an, eine Site wird vollständig über HTTPS besucht. Der Benutzer ist sehr vorsichtig und fordert diese Site immer nur über HTTPS an. Keine Weiterleitung erforderlich. Es gibt kein HSTS, aber es gibt auch keine Links zur Site über ungesichertes HTTP, sodass der gesamte Datenverkehr mit der Site verschlüsselt ist.

    Angenommen, die Site weist eine Sicherheitslücke auf, in der ein bestimmtes Cookie angezeigt wird (falls vorhanden) in die Seite ohne ordnungsgemäßes Entkommen (Cookie-basiertes XSS, selten, aber kaum unbekannt). Der Angreifer kann den HTTPS-Verkehr nicht lesen (geschweige denn ändern), möchte jedoch wirklich auf die Sitzung des Benutzers auf dieser HTTPS-Site zugreifen. Sie warten also darauf, dass der Benutzer eine andere Site über HTTP besucht, und ändern die Antwort von dieser Site so, dass sie eine unsichtbare Anforderung (möglicherweise ein Skript src) an http: // securesite enthält. com / (Ihre reine HTTPS-Site, aber stattdessen über HTTP). Was passiert als Nächstes:

    • Wenn die Site eine aktive HSTS-Richtlinie im Browser hat, schreibt der Browser die Anforderung automatisch als https://securesite.com/ und der Angreifer kann keinen Datenverkehr lesen oder ändern.
    • Wenn der Angreifer nicht manipuliert, die Site jedoch kein HSTS hat, wird die Anforderung gelöscht und erhält eine 301 an https: / /securesite.com/ , und die Anforderung wird erneut über HTTPS gesendet
    • Alle Cookies für securesite.com, jedoch ohne das sichere -Flag, sind in dieser anfänglichen unsicheren Anforderung enthalten. Der Angreifer kann sie an diesem Punkt sogar nur durch passives Abhören lesen. Das ist schlecht (und dies ist ein Grund, warum sensible Cookies immer das sichere -Flag haben müssen, auch wenn über eine unsichere Verbindung niemals auf die Site zugegriffen werden sollte).
  • Wenn jedoch alle Cookies sicher sind, ist dieser Angriff sinnlos. Der Angreifer muss erneut manipulieren. Sie können die Antwort auf die unsichere Anforderung fälschen oder ändern. In diesem speziellen Fall würde der Angreifer der Antwort einen Set-Cookie -Header hinzufügen und ein Cookie in den Browser des Benutzers einfügen, das bei zukünftigen Anforderungen an securesite.com entweder über HTTP oder HTTPS gesendet wird.
  • Mit dem hypothetischen XSS-Vektor auf Cookie-Basis (oder irgendetwas anderem, bei dem ein Cookie-Planting-Angriff Schaden anrichten kann) hat der Angreifer erfolgreich eine Site angegriffen, die der Benutzer sehr vorsichtig war Zugriff nur über HTTPS , nur weil es kein HSTS verwendet und eine Sicherheitsanfälligkeit aufweist, die ohne eine ungesicherte Verbindung nicht ausgenutzt werden kann.

    In Bezug auf alte Browser.Es ist umstritten, ob eine * Site * eine 301 benötigt oder nicht. Ich denke, das sind eher letztendlich * Benutzer *, die dafür verantwortlich sind, das Präfix "https:" einzugeben, wenn sie darauf bestehen, einen nicht unterstützten Browser zu verwenden.Es ist eine geschäftliche Entscheidung, wenn Sie die Sicherheit und den Komfort dieser Benutzerbasis opfern möchten.
    Warten Sie, wie und wo ist das umstritten?** Wenn Sie HSTS verwenden, müssen Sie * unbedingt * auch die 3xx-Umleitung einschließen! ** Sie können nicht einmal einen HSTS-Header über HTTP senden (zumindest wird dies von keinem konformen Client aus gutem Grund respektiert)Können Sie HSTS vorab laden, wenn Sie über HTTP mit etwas anderem als einer Umleitung antworten?Überall dort, wo diese gesamte Frage nur geringfügig relevant ist, ist die Verwendung der Weiterleitung obligatorisch.
    Die Umleitung wird für neue Browser nicht wirklich benötigt, wird jedoch der Einfachheit halber und für Browser empfohlen, die HSTS nicht unterstützen.Alles, was zum Aktivieren von HSTS benötigt wird, ist eine einzelne Ressource, die über HTTPS geladen wird und den Header enthält.Dies kann so einfach wie eine absolute URL-Referenz sein (z. B. ).
    @SilverlightFox: Wenn Sie dies tun, wird die Stammseite bei dieser ersten Anforderung weiterhin über HTTP geladen. Dies kann einige Benutzerinhalte anzeigen und auch eine schlechte Benutzererfahrung verursachen (möglicherweise lässt der Benutzer glauben, dass die Site vollständig über HTTP funktioniert).Dadurch wird Ihre Site auch nicht für die HSTS-Preload-Liste zugelassen (Anforderung Nr. 2 unter https://hstspreload.appspot.com/).
    SilverlightFox
    2016-07-06 21:10:52 UTC
    view on stackexchange narkive permalink

    Das Wichtigste ist, dass die Richtlinie für Cookies mit gleichem Ursprung laxer ist als die Richtlinie mit gleichem Ursprung an anderer Stelle. Das heißt, es gibt keinen einzigen sicheren Kanal für Cookies, sie haben denselben Ursprung:

      Client ---- Normales HTTP ---- > ServerClient -------- -HTTPS ---- > Server  

    Natürlich kann das sichere Flag gesetzt werden, sodass ein Cookie-Wert so festgelegt werden kann, dass nur über HTTPS übertragen wird.

    zB

    Set-Cookie: foo = bar; sicherer

      Client --> HTTP (keine Cookies) --> ServerClient --> HTTPS (Cookie: foo = bar) --> Server  

    Der Server kann jedoch nicht wissen, ob ein Cookie mit dem Secure Flag gesetzt wurde.

    z über normales HTTP

    Set-Cookie: foo = bar

      Client --> HTTPS (Cookie: foo = bar) --> Server  

    Der Server befindet sich in dieser Situation:

    Fry

    Obwohl vom Server gesetzte Cookies über HTTPS sind nicht zu schnüffeln, ein MITM kann seine eigenen Werte in eine "sichere" Sitzung einfügen. Dies gilt auch dann, wenn Sie keinen einfachen HTTP-Dienst haben:

      Client ---- Einfaches HTTP ---- > Kein serviceClient --------- HTTPS ---- > Server  

    ... da ein MITM weiterhin eine einfache HTTP-Anforderung an Ihre Domain generieren und das Cookie einfügen kann:

      Client ---- Plain HTTP ---- > MITM --> Kein ServiceClient --------- HTTPS ------------- > Server  

    Dies kann führen zu einigen Angriffen, wenn Ihre Site einige Schwachstellen aufweist, die ansonsten möglicherweise nicht ausgenutzt werden können:

    Wie oben beschrieben, können Angriffe im ssltrip -Stil ohne HSTS ausgeführt werden. sslstrip ist bis zu einem gewissen Grad darauf angewiesen, dass der Benutzer nicht bemerkt, dass es sich nicht um HTTPS handelt.

    Siehe auch diese Antwort.

    dhaupin
    2016-07-06 20:04:02 UTC
    view on stackexchange narkive permalink

    HSTS verwendet eine sandboxed clientseitige 307-Umleitung, sodass es den Server erst im expliziten https-Modus erreicht. Eine 301-Weiterleitung ist andererseits serverseitig, benötigt Ressourcen, Zeit zum Abschließen usw. Außerdem stapelt eine 301 Ihre [verkettete] Umleitungsanzahl, die im Allgemeinen der SEO-Verwässerung zugeschrieben wird ist im Allgemeinen die bessere Wahl aufgrund seiner clientseitigen + Sandbox-Natur. Bei einer sehr langen TTL im Cache besteht jedoch eine "Gefahr". Wenn ein SSL abläuft oder Sie in den http-Modus zurückkehren möchten, werden Benutzer gesperrt. Dies liegt daran, dass die zwischengespeicherte HSTS-TTL nur nach https sucht, Browser jedoch keine Websites mit einem abgelaufenen Zertifikat verwenden. Lassen Sie es also niemals ablaufen oder den Modus wechseln, ohne die HSTS-Cache-Zeit in den Wochen (oder Monaten) vor der Änderung auf 0 zu setzen :) Mit 301 müssen Sie sich darüber keine Sorgen machen, da dies nicht der Browser ist, der die Entscheidung trifft Weiterleiten oder nicht - Personen werden nicht gesperrt, wenn Sie den Server ändern.

    Browser zwischenspeichern 301 Antworten, sodass Sie möglicherweise Benutzer mit diesen Antworten suchen können, wenn Sie HTTPS deaktivieren:
    Es ist wahr, dass HSTS selbst sicher ist.Wenn der Benutzer jedoch mit http zugreift und die Site nicht vorinstalliert ist, kann der HSTS-Header nicht ohne Umleitung von http zu https erkannt werden.Mit anderen Worten, sobald eine http-Anfrage gestellt wurde, ist MiTM möglich.Der Trick besteht darin, keine http-Anfragen zu stellen, es sei denn, der Link in einem alten Link, die Website ist für ein Haushaltsgerät usw. Eine Lösung besteht darin, DNS-Zoneneinträgen eine neue Funktion hinzuzufügen, die besagt: "Diese Domain unterstützt https".
    @DavidSpector Zum x-ten Mal "und die Site ist nicht vorinstalliert" Also dann vorladen.
    @DavidSpector HSTS ist ein clientseitiger Backup-Durchsetzungsmechanismus.Es ist kein Ersatz für Mechanismen auf Serverebene ... es ist eine Ergänzung.Wenn Ihr Server / Ihre App / Ihre Site so eingestellt ist, dass der "https" -Modus immer und überall erzwungen wird, wird zunächst nie eine "http" -Anforderung zurückgeschickt.Sie können dies direkt auf Nginx / Apache-Ebene tun.Ein Besucher könnte niemals zu einer "http" -Seite gelangen, eine unsichere Sitzung würde niemals generiert, unsichere Cookies würden nicht verwendet usw. Es wäre egal, wann er den HSTS-Header sieht, da man sich nicht darauf verlassen würdees, per say.
    @JosephSible-ReinstateMonica Es hilft, dieses Flag sicher hinzuzufügen, aber die Preload-Liste in Browsern wird weiterhin verwendet.Wenn Sie also die Flagge haben, Ihre Domain jedoch nicht auf dieser Liste steht, wird sie nicht vorab geladen.Sie können Ihre Domain hier einreichen: https://hstspreload.org/.Ich weiß nicht, ob oder wie lange es dauert, um hinzugefügt zu werden :)
    @dhaupin Nein, HSTS ist der primäre Mechanismus.Nichts, was der Server tut, kann HTTPS tatsächlich erzwingen, da sslstrip alles rückgängig machen kann, es sei denn, der Client weiß von Anfang an, dass er HTTPS verwendet (was genau der Punkt von HSTS ist).Und nichts in meinem Kommentar deutete darauf hin, dass der Header ausreichte;Ich wollte es auch zur Liste hinzufügen.
    @JosephSible-ReinstateMonica https: // github.com / LeonardoNve / sslstrip2 - anscheinend ist kein "https" sicher, also was bringt es, irgendetwas davon zu verwenden;) Nur ein Scherz.Die Anwendungsfälle sind begrenzt und 99,9999% der Benutzer profitieren von beiden Modi.
    @dhaupin [Dieses Tool funktioniert nicht wirklich] (https://security.stackexchange.com/a/91096/127145).
    @JosephSible-ReinstateMonica Haha, ich höre dich.Ein paar andere auch nicht, aber der Punkt ist, dass HSTS irgendwann manipuliert und injiziert wird.Ich bin alles darüber, aber HSTS ist ein schwaches Proto, das von Anwendungsmodi (IMO) unterstützt wird. Header können ignoriert / entfernt werden. Es gibt jetzt zusätzlich eine Milliarde Vektoren.Ich stimme den obigen Threads für ein Zonenflag zu, aber das könnte auch ignoriert / abgefangen / entfernt werden.Frohes neues Jahr Mann, wir könnten ewig so weitermachen.
    Der Punkt beim Vorladen ist, dass Sie dadurch immun gegen all diese Manipulationen werden.
    @JosephSible-ReinstateMonica ...... Sie haben vergessen zu erwähnen, all diese Manipulationen des * Browser * -Verkehrs.Das geht aber auf meinen Kommentar zurück, wie Sie in die Preload-Liste aufgenommen werden müssen.Glaubst du, sie werden jede winzige Stelle in den Netzen hinzufügen?Sie müssen eine ziemlich große Sache sein, um in diese Liste zu gelangen, sonst verteilen sie eine 5 + GB-Textdatei voller BS.Ich habe ein paar Mal versucht, für einige ziemlich große Domains auf diese Liste zu kommen ... Jahre später immer noch nicht da.`Preload` wirkt sich nicht wie 99,9999% der Websites aus.Sie bringen jedoch gute Punkte vor.
    @dhaupin Ich vermute, dass damals etwas mit Ihrer TLS-Konfiguration nicht stimmte.Sie werden jede winzige Stelle hereinlassen.
    Lassen Sie uns [diese Diskussion im Chat fortsetzen] (https://chat.stackexchange.com/rooms/102751/discussion-between-dhaupin-and-joseph-sible-reinstate-monica).
    David Spector
    2019-12-28 01:36:28 UTC
    view on stackexchange narkive permalink

    Da HSTS beim ersten Besuch Ihrer Website immer noch eine Umleitung erfordert (es sei denn, wir sind uns so sicher, dass keine Fehler vorliegen, dass ein irreversibles Vorladen über die Registrierung gewagt werden kann), ist dies eine Trickfrage. Es gibt im Wesentlichen keinen Unterschied zwischen der Verwendung des HSTS-Headers und der Verwendung eines Umleitungsheaders.

    Die einzige gute Lösung, die ich mir vorstellen kann, besteht darin, jedem DNS-Zonendatensatz einen Datensatztyp oder ein Flag hinzuzufügen, um anzugeben, dass diese Domäne HTTPS unterstützt ". Dann besteht keine Notwendigkeit für HSTS oder Umleitung. Der Browser weiß bereits, dass https unterstützt wird (von seiner DNS-Suche), sodass er (sofern nicht vom Benutzer außer Kraft gesetzt) ​​die http des Benutzers in https umschreiben kann, bevor er überhaupt die erste Anforderung an den Remote-Server sendet.

    Das ist falsch.Eine 301-Umleitung wirkt sich nur auf die spezifische URL aus, auf die Sie sie getroffen haben, HSTS wirkt sich jedoch auf die gesamte Domain aus.Und Sie machen das Vorladen viel schlimmer als es tatsächlich ist.
    Dies ist keine "Trickfrage".Sie haben nicht richtig dargestellt, was in HSTS passiert.Die Frage ist auch von der Serverseite.Sie schlagen ein völlig neues Protokoll vor.
    HTTPS Everywhere (https://www.eff.org/https-everywhere) macht clientseitig das, was Sie wollen.


    Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
    Loading...