2014-03-05 13 views
7

Diese Frage ist viel aufgekommen, aber ich habe die Antwort nicht gefunden. Ich habe die OAUTH 2-Spezifikation gelesen und das separate "Sicherheitsüberlegungen" -Dokument, aber ich bin immer noch unscharf auf etwas.Wie verhindert Oauth 2 Replay-Angriffe in mobilen Anwendungen?

Der Umstand ist: RESTful basierte Webdienste, auf die mobile Anwendungen zugreifen. Ich bin sowohl die Server-Ressource (Ersteller und Host der RESTful-Dienste) als auch die Autorisierungsautorität (ich speichere die IDs und Passwörter des Benutzers und bestätige die Identität). Drittanbieter erstellen die mobilen Anwendungen, die meine Dienste nutzen. Ich verwende OAuth 2.0, um die Benutzer-ID und das Kennwort des Benutzers zu überprüfen und ein Token auszustellen. TLS über https wird verwendet.

Ein Nonce mit einer gesengten Nachricht wird normalerweise verwendet, um Replay-Attacken zu verhindern, aber wie ich es verstehe, funktioniert das in einer mobilen Anwendung nicht, denn um eine Nachricht zu signieren, benötigen Sie ein gemeinsames Geheimnis. Jedes in einer mobilen App gespeicherte Geheimnis (mit dem Sie Nachrichten signieren können) ist kein Geheimnis mehr. Ein Nonce kann also nicht verwendet werden.

So haben wir Sitzungstoken, die nach einer konfigurierbaren Zeitspanne ablaufen und mit einem "Refresh-Token" aufgefrischt werden können.

Meine Frage ist: Wenn TLS besiegt ist (Beispiel: Benutzer ist dumm genug, um sein Mobiltelefon mit einem Proxy-Server zu verbinden und ein Zertifikat des Proxy zu installieren, das dem Proxy-Server-Besitzer dann ermöglicht, den unverschlüsselten Datenverkehr zu lesen) , was verhindert, dass ein Hacker eine Anfrage mit einem gültigen Sitzungstoken erneut abspielt (solange es noch am Leben ist) oder schlimmer noch, die Sitzung stundenlang mit dem Aktualisierungstoken fortsetzt, um kontinuierlich neue Sitzungstoken zu erhalten?

+0

Basierend auf dem, was ich bei OAuth gelesen habe, hängt es wirklich davon ab, welche Art von Token Sie ausgeben und die damit verbundenen Parameter. Es ist offensichtlich die erste Verteidigung, die Zeit zu begrenzen, in der ein Token aktiv ist. Aber es gibt auch den MAC-Typ von Token, der die Verwendung eines Nonce- und MAC-Schlüssels für die Integrität innerhalb von Anforderungen beinhaltet. Ich denke, es ist wichtig, nicht auf OAuth für die Sicherheit zu vertrauen, und sicherzustellen, dass Sie es in SSL/TLS mit starken kryptografischen Parametern umschließen. –

Antwort

2

Die Situation, die Sie vorschlagen, ist eine, wo die Sicherheit besiegt ist und es keine Sicherheit gibt. Der Proxy kann beispielsweise das Kennwort des Benutzers während der Authentifizierung stehlen oder das Zugriffstoken an eine andere Anwendung (lokal oder remote) umleiten. Sie müssen dieses Szenario einfach als Verlust akzeptieren.

Es ist auch typisch für mobile Apps, ein gemeinsames Geheimnis zu haben. Wie Sie bemerken, verliert das Geheimnis etwas Sicherheit auf dem Client, aber es ist immer noch besser als nichts. Das Geheimnis wird typischerweise während der Ruhe verschlüsselt, um zu verhindern, dass es leicht gestohlen wird. Natürlich kann der Entschlüsselungsschlüssel auch dann aus der App gestohlen werden, wenn Verschleierungstechniken angewendet werden, aber er bietet einige Sicherheit.

Achten Sie darauf, die Zugriffsrechte des Geheimnisses auf dem Client einzuschränken. Stellen Sie sicher, dass es nicht für 2-legged auth konfiguriert ist. Das sollte für Server und nur bei Bedarf gespeichert werden.

Verwandte Themen