Ist es möglich, oauth unter iOS sicher zu machen?

8

Ist es möglich, oauth unter iOS sicher zu machen?

Ich untersuche OAuth 2.0 als Mittel zur Implementierung von Single Sign- + Autorisierung für eine "Suite" von iOS-Apps. Um meine Bedenken zu erklären, werde ich Facebook + eine 3rd-Party-App vereinfachen und verwenden, die Facebook zur Authentifizierung verwendet (sagen wir Worte / "Words with Friends").

Zum Beispiel nehme ich an, dass Facebook sich registriert, um das Schema / Protokoll "facebook: //" zu unterstützen, und dass Words sich registriert, um "words: //"

zu unterstützen

Ich nehme auch an, dass es nicht möglich ist, das "Client-Secret" oder das Protokoll in einer iOS-Anwendung zu sichern, weil Sie die Anwendung dekompilieren können. Alle Möglichkeiten, die ich gefunden habe, um dies zu sichern, resultieren in Sicherheit durch Dunkelheit .

Eine weitere Annahme ist, dass es keine Möglichkeit gibt, zu verhindern, dass sich zwei Anwendungen registrieren, um dasselbe Protokoll zu behandeln. Das Verhalten, wenn zwei Apps für dasselbe Protokoll registriert sind, ist unbestimmt. (Obwohl anscheinend die erste auf dem Gerät zu startende Anwendung registriert wird, während die zweite Registrierung ignoriert wird)

Wenn ich den Workflow zwischen Facebook (User-Agent) und Words (Client) auf dem iOS-Gerät verstehe:

  • Der Benutzer startet Wörter
  • Der Benutzer wählt sich über die Facebook-Anmeldeinformationen an
  • Words ruft openUrl ("facebook: //") auf, das unter anderem einen Bezeichner für Wörter als eine Anwendung und eine Weiterleitungsuri (d. h. "words: //")
  • enthält
  • iOS startet Facebook-Anwendung
  • Der Benutzer gibt Anmeldedaten ein, deren Facebook-Anwendung gegen den Facebook-Autorisierungsserver validiert wird.
  • Der Benutzer wurde aufgefordert, Wörter zu autorisieren, um auf Facebook-Daten zuzugreifen (d. h. Wörter können auf meine Freundesliste zugreifen)
  • Facebook ruft Callback-URI auf, das von Words zusammen mit dem Zugriffstoken (d. h. words: // access_token? token_here)
  • bereitgestellt wird
  • Words verwendet dieses Token, um auf meine Freundesliste (d. h. geschützte Ressourcendaten) zuzugreifen

Wenn das oben Gesagte korrekt ist, wenn ich böswillig sein und auf die Freundesliste von zufälligen Personen zugreifen möchte, könnte ich eine Anwendung erstellen, die sich ebenfalls registriert, um das Protokoll "words: //" zu handhaben und es im App Store abzurufen. Wenn jemand meine App und meine Wörter installiert hat und meine App erfolgreich registriert wurde (d. H. Auf dem Gerät vor Word gestartet wurde), dann:

  • Start Wörter, wählen Sie, um sich anzumelden, startet Facebook
  • Benutzer authentifiziert / autorisiert
  • Facebook versucht, zu Words umzuleiten, indem openUrl in der Weiterleitungs-URL aufgerufen wird
  • Meine App (nicht Wörter) wird gestartet
  • Meine App hat nun Zugriff auf den Auth-Code, der (mit dem durch das Dekompilieren erlernten Geheimnis) gegen ein access_token mit Rechten zum Zugriff auf Ihre Freundesliste
  • ausgetauscht werden kann

Ich hoffe, dass meine Argumentation oben fehlerhaft ist oder dass ich (speziell) feststellen müsste, dass die Facebook iOS-Authentifizierung für Apps von Drittanbietern unsicher ist.

Allgemeiner ist es möglich, OAuth 2.0 (Workflows zur Autorisierung / impliziten Vergabe) sicher in iOS-Anwendungen zu implementieren?

    
jayraynet 30.11.2011, 18:44
quelle

1 Antwort

1

Google hat eine experimentelle Lösung für dieses Problem gefunden, die OAuth 2.0 für installierte Anwendungen .

  

Der Google OAuth 2.0-Endpunkt unterstützt Anwendungen, die auf einem Gerät installiert sind ... Es wird davon ausgegangen, dass diese Anwendungen keine Geheimnisse aufbewahren können.

Im Wesentlichen wird das gemeinsame Geheimnis als nicht geheim behandelt.

Zum Zeitpunkt dieses Artikels scheinen die meisten OAuth 2.0-Server dieses experimentelle Design nicht zu unterstützen.

Dieses Design stellt das Risiko dar, dass ein Angreifer einen neuen Client erstellen kann, der sich als Ihre Anwendung für den Autorisierungsserver darstellt (der Angreifer muss die Client-ID wie in Ihrer Frage beschrieben anfordern oder einer der Techniken folgen) vorgeschlagen hier ).

Dieses Risiko scheint jedoch durch die Tatsache gemildert zu werden, dass es unwahrscheinlich ist, dass der Ressourcenbesitzer (der Benutzer) die bösartige Anwendung autorisiert, irgendwelche Maßnahmen bezüglich geschützter Ressourcen zu ergreifen, da er weiß, dass die Anwendung dies nicht ist. in der Tat, Ihre Anwendung.

    
benvolioT 26.01.2012 05:02
quelle

Tags und Links