Bei dieser Frage geht es darum, die Sicherheitsrisiken zu verstehen, die mit der Implementierung von oauth auf einer mobilen Plattform wie Android verbunden sind. Hierbei wird davon ausgegangen, dass wir eine Android-Anwendung haben, in die der Consumer-Schlüssel / das Geheimnis im Code eingebettet ist.
Angenommen, ein Verbrauchergeheimnis wurde kompromittiert und ein Hacker hat es in den Griff bekommen. Was sind die Konsequenzen davon?
Annahmen zu
kompromittierten Verbrauchergeheimnissen Stimmt es, dass ein kompromittiertes Verbrauchergeheimnis als solches keine Auswirkungen auf die Sicherheit des Benutzers oder auf Daten hat, die bei dem OAuth-fähigen Anbieter gespeichert sind, mit dem der Benutzer interagiert hat. Die Daten selbst sind nicht gefährdet und können vom Hacker nicht abgerufen werden.
Der Hacker müsste sich ein gültiges Benutzerzugriffstoken besorgen, und das ist viel schwieriger zu bekommen.
Was könnte ein Hacker mit einem kompromittierten Verbrauchergeheimnis anfangen?
Habe ich auch Recht, wenn ich Folgendes sage:
- Der Hacker kann eine Anwendung einrichten / veröffentlichen, die meine App imitiert.
- Der Hacker kann Benutzer anziehen, die den OAuth-Fluss durchlaufen, und ein Zugriffstoken über den OAuth-Tanz des Hackers abrufen (unter Verwendung des kompromittierten Consumer-Schlüssels / Geheimnisses).
- Der Benutzer könnte denken, dass er mit meiner App zu tun hat, da er während des Autorisierungsprozesses einen vertrauten Namen (Verbraucherschlüssel) sieht.
- Wenn ein Verbraucher eine Anfrage über den Hacker ausgibt, kann der Hacker das Zugriffstoken leicht abfangen und in Kombination mit dem Verbrauchergeheimnis jetzt in meinem Namen Anfragen signieren, um Zugriff auf meine Ressourcen zu erhalten.
Auswirkungen auf
den Endbenutzer In der Annahme, dass
- Ein Hacker hat eine Anwendung / Site unter Verwendung meines Verbrauchergeheimnisses eingerichtet
- Einer meiner Benutzer wurde dazu verleitet, den Zugriff auf diese Anwendung / Site zu autorisieren
Folgendes könnte passieren:
- Der Endbenutzer bemerkt möglicherweise, dass etwas faul ist, und informiert den Dienstanbieter (z. B. Google) über die schädliche App
- Der Dienstanbieter kann dann den Verbraucherschlüssel / das Verbrauchergeheimnis widerrufen
Auswirkungen des OAuth-Verbrauchers (meiner Anwendung):
Meine App (die das Verbrauchergeheimnis enthält) müsste aktualisiert werden, da sonst nicht alle meine Kunden meine Anwendung für Anfragen in ihrem Namen autorisieren könnten (da mein Verbrauchergeheimnis dies nicht mehr tun würde) gültig sein).
Delegieren des gesamten OAuth-Verkehrs
Obwohl es möglich wäre, viele der OAuth-Interaktionen über einen Zwischenwebserver zu delegieren (OAuth-Tanz ausführen und das Zugriffstoken an den Benutzer senden), müsste man auch alle Dienstinteraktionen als Consumer-Schlüssel als Proxy verwenden Für die Unterzeichnung jeder Anfrage ist / secret erforderlich. Ist dies die einzige Möglichkeit, den Consumer-Schlüssel / das Consumer-Geheimnis außerhalb der mobilen App geheim zu halten und an einem sichereren Ort auf dem Zwischen-Webserver zu speichern?
Alternativen
Gibt es Alternativen für dieses Proxy? Ist es möglich, das Verbrauchergeheimnis auf dem Zwischenwebserver zu speichern und über einen Mechanismus zu verfügen, mit dem die Android-Anwendung (auf dem Markt veröffentlicht und ordnungsgemäß signiert) eine sichere Anforderung an den Zwischenwebserver senden kann, um das Verbrauchergeheimnis abzurufen und zu speichern intern in der App? Kann ein Mechanismus implementiert werden, der besagt, dass der Zwischenwebserver "weiß", dass dies eine offizielle Android-App ist, die das Abrufen des Verbrauchergeheimnisses anfordert, und dass der Zwischenwebserver das Verbrauchergeheimnis nur an diese bestimmte Android-App weitergibt?
context.getPackageInfo()
Hardcodes"com.your.app_name"
?