it-swarm.com.de

Wie sicher sind ablaufende Token und aktualisierte Token?

In den Kommentaren einer Frage zu StackOverflow, OAuth2 Warum verfallen Zugriffstoken? , stellen die Leute die Frage, wie sicher Aktualisierungstoken sind.

Mit diesem Kommentar fühle ich mich:

Es bietet also einen gewissen Schutz vor Paket-Sniffing, solange der Intercept nur normale Datenanforderungen abfängt (Chuck erhält nur das Zugriffstoken)? Das klingt etwas schwach; Der schwarze Hut muss nur ein wenig warten, bis der Benutzer ein neues Zugriffstoken anfordert, und dann erhält er die Client-ID, das Geheimnis und das Aktualisierungstoken.

Vermissen wir alle etwas oder stützen wir unsere Ängste auf ein falsches Verständnis?

Oder ist es richtig, dass die Sicherheit von kurzlebigen Zugriffstoken und Aktualisierungstoken auf der angenommenen Wahrscheinlichkeit basiert, dass der Sniffer ausgeführt wird, wenn eine Aktualisierung "unwahrscheinlich" ist?.

28
Luke Puplett

Es kann sein, dass das Zugriffstoken über einfache HTTP-Verbindungen in der gesamten Anwendung verwendet wird. Wenn ein Angreifer daran schnüffelte, hatte er nur kurzfristigen Zugriff. Dies geschah früher standardmäßig im Web. Wenn Sie Glück hatten, erfolgte die Anmeldung über HTTPS, und der Rest Ihrer Sitzung erfolgte über einfaches HTTP, wobei die Sitzungs-ID im Klartext übertragen wurde.

Das Aktualisierungstoken wird nur an den Autorisierungsserver übertragen, sodass es einfacher ist, nur HTTPS zu erzwingen. Dies bedeutet, dass ein Angreifer diese Verbindung nicht belauschen konnte.

Weitere Informationen finden Sie hier :

Es gibt einen Sicherheitsgrund: Das refresh_token wird immer nur mit dem Autorisierungsserver ausgetauscht, während das access_token mit den Ressourcenservern ausgetauscht wird. Dies verringert das Risiko eines langlebigen Verlusts von access_token (Abfrageparameter in einer Protokolldatei auf einem unsicheren Ressourcenserver, einer Beta-App oder einer schlecht codierten Ressourcenserver-App, einem JS SDK-Client auf einer Nicht-https-Site, die das access_token in ein Cookie setzt usw.) im "ein Zugriffstoken, der eine Stunde lang gültig ist, mit einem Aktualisierungstoken, das ein Jahr lang gültig ist oder bis zum Widerruf gültig ist" im Vergleich zu "einem Zugriffstoken, der ohne Aktualisierungstoken bis zum Widerruf gültig ist".

18
SilverlightFox

Angenommen, es gibt einen Server, der Token validiert und an einen Client ausgibt.

Client (sendet Benutzername und Passwort) -> Server

Server (überprüft die Anmeldeinformationen und gibt Zugriffs- und Aktualisierungstoken zurück) -> Client

Der Client speichert die Token sicher und verwendet das Zugriffstoken für die weiteren API-Aufrufe an den Server (bis das Zugriffstoken abläuft). Sobald das Zugriffstoken abläuft, erhält der Client möglicherweise einen 401 (nicht autorisierten) HTTP-Code vom Server und stellt fest, dass das Zugriffstoken nicht mehr gültig ist.

Der Client verwendet dann sein Aktualisierungstoken und erhält die neuen Zugriffs- und Aktualisierungstoken vom Server.

Auswirkungen eines kompromittierten Zugriffstokens - Der Angreifer kann auf die Daten zugreifen, bis das Zugriffstoken abläuft.

Auswirkungen eines kompromittierten Aktualisierungstoken - Der Angreifer kann möglicherweise einen neuen Zugriff und ein Aktualisierungstoken erhalten, wodurch auch der Zugriff des Opfers ungültig wird. Wenn das Opfer versucht, mit seinem Aktualisierungstoken ein neues Zugriffstoken zu erhalten, schlägt dies fehl, da das Aktualisierungstoken bereits verwendet wurde. Das Opfer müsste sich erneut mit seinen Anmeldeinformationen anmelden, um die Token erneut auszustellen und die gestohlenen Token des Angreifers ungültig zu machen.

11
Pavan Vamsi

Ich beantwortete eine ähnliche Frage, die als Duplikat zu dieser Frage markiert wurde. Ich bin jedoch der Meinung, dass meine Antwort auf diese Frage ein stärkeres Argument dafür liefert, wie Aktualisierungstoken zusätzliche Sicherheit bieten. Kurz gesagt, wenn das Aktualisierungstoken kompromittiert ist, ist es viel einfacher, es zu erkennen und geeignete Maßnahmen zu ergreifen, z. B. die Authentifizierungstoken und Aktualisierungstoken zu deaktivieren und den Benutzer zu zwingen, sich erneut mit seinen Anmeldeinformationen anzumelden. Mit anderen Worten, gefährdete Anmeldeinformationen können viel schneller heruntergefahren werden, wenn Aktualisierungstoken verwendet werden.

8
TTT

Zusätzlich zu der akzeptierten Antwort, dass der Authentifizierungsanbieter häufig ein anderer Server als der Ressourcenanbieter ist (daher muss HTTPS über den Ressourcenanbieter erforderlich sein, was möglicherweise nicht der Fall ist), ist es auch dann besser, wenn beide derselbe Server mit HTTPS sind über ein kurzlebiges Zugriffstoken und ein langlebiges Aktualisierungstoken verfügen.

Denken Sie darüber nach: Wie viele Stellen verarbeiten das Aktualisierungstoken? Auf dem Client oder Browser sollte es sich an einer zentralen Stelle befinden, an der das aktuelle Zugriffstoken nachgeschlagen wird. Wenn dieses abgelaufen ist oder die Anforderung fehlschlägt, wird stattdessen das Aktualisierungstoken verwendet (normalerweise ist dies eine kleine Teilmenge von, wenn Ihr Dienst ein SDK bereitstellt das SDK, das stark auf potenzielle Sicherheitslücken überprüft werden kann). Auf dem Authentifizierungsanbieter wird es immer nur im Codepfad behandelt, der den Grant-Typ refresh_token verarbeitet. Wenn Sie beweisen möchten, dass das Aktualisierungstoken niemals an eine Protokolldatei oder an ein externes Repo gesendet wird, handelt es sich um eine recht kleine und überschaubare Sammlung von Code, die Sie durchsuchen müssen, um dies zu überprüfen.

Umgekehrt wird das Zugriffstoken hoffentlich nur an einer Stelle auf dem Client (wieder) verwendet, aber überall auf dem Ressourcenanbieter. Jede HTTP-Anforderung, die in Ihre App eingeht, hat den Header im Authorization-Header. Wenn Sie beweisen möchten, dass das Zugriffstoken niemals in eine Protokolldatei eingefügt wird und dass niemand bösartigen Code eingegeben hat, um Ihre Zugriffstoken nach https://myaccesstokenfarm.example.com zu exportieren, == Das ist eine sehr große Aufgabe (die in einigen Codebasen fast unmöglich ist).

Das allgemeine Sicherheitsprinzip ist hier Reduzierung der Angriffsfläche . Aktualisierungstoken können wie ein Zugriffstoken aus einem Man-in-the-Middle-Angriff abgerufen werden. Wenn Sie jedoch die Angriffsfläche auf nur eine URL auf einem Server beschränken und nur einen Codepfad ausführen, ist dies viel einfacher alles in Ihrer Macht stehende, um diese bestimmte Ressource sicher zu machen.

Wenn Sie beispielsweise die HTTPS-Komprimierung aktiviert haben, sind Sie möglicherweise für BREACH-Angriffe in Ihrer gesamten API anfällig. Sie möchten jedoch die Komprimierung aus Effizienzgründen aktivieren, damit Sie mit dieser Möglichkeit leben können. Auf Ihrem Autorisierungsendpunkt deaktivieren Sie jedoch die Komprimierung und führen die zusätzlichen Schritte aus, um sicherzustellen, dass mehrere Verteidigungsebenen gegen bekannte Angriffe vorhanden sind.

2
Tom Dibble