Dieses Beispiel hat verschiedene Aspekte. Ich werde einige Punkte erwähnen, von denen ich glaube, dass sie an keiner anderen Stelle ausdrücklich behandelt wurden.
Das Geheimnis auf der Durchreise schützen
Als Erstes müssen Sie für den Zugriff auf die Dropbox-API mithilfe des App-Authentifizierungsmechanismus Ihren Schlüssel und Ihr Geheimnis übertragen. Die Verbindung ist HTTPS, was bedeutet, dass Sie den Datenverkehr nicht abfangen können, ohne das TLS-Zertifikat zu kennen. Dies soll verhindern, dass eine Person die Pakete auf ihrer Reise vom mobilen Gerät zum Server abfängt und liest. Für normale Benutzer ist dies eine sehr gute Möglichkeit, die Privatsphäre ihres Datenverkehrs zu gewährleisten.
Was es nicht gut kann, ist zu verhindern, dass eine böswillige Person die App herunterlädt und den Datenverkehr überprüft. Es ist wirklich einfach, einen Man-in-the-Middle-Proxy für den gesamten Datenverkehr in und aus einem mobilen Gerät zu verwenden. Aufgrund der Art der Dropbox-API wäre in diesem Fall keine Demontage oder Rückentwicklung des Codes erforderlich, um den App-Schlüssel und das Geheimnis zu extrahieren.
Sie können eine Fixierung durchführen, bei der überprüft wird, ob das vom Server erhaltene TLS-Zertifikat das erwartete ist. Dies fügt dem Client eine Prüfung hinzu und erschwert das Abfangen des Datenverkehrs. Dies würde es schwieriger machen, den Verkehr im Flug zu inspizieren, aber die Pinning-Prüfung findet im Client statt, sodass es wahrscheinlich immer noch möglich wäre, den Pinning-Test zu deaktivieren. Es macht es allerdings schwieriger.
Das Geheimnis in Ruhe schützen
In einem ersten Schritt hilft die Verwendung von Proguard dabei, weniger deutlich zu machen, wo Geheimnisse verborgen sind. Sie können das NDK auch verwenden, um den Schlüssel und das Geheimnis zu speichern und Anfragen direkt zu senden, wodurch die Anzahl der Personen mit den entsprechenden Fähigkeiten zum Extrahieren der Informationen erheblich reduziert wird. Eine weitere Verschleierung kann erreicht werden, indem die Werte nicht für längere Zeit direkt im Speicher gespeichert werden. Sie können sie verschlüsseln und unmittelbar vor der Verwendung entschlüsseln, wie in einer anderen Antwort vorgeschlagen.
Erweiterte Optionen
Wenn Sie jetzt paranoid sind, das Geheimnis irgendwo in Ihrer App zu platzieren, und Zeit und Geld haben, um in umfassendere Lösungen zu investieren, können Sie die Anmeldeinformationen auf Ihren Servern speichern (vorausgesetzt, Sie haben welche). Dies würde die Latenz aller Aufrufe der API erhöhen, da diese über Ihren Server kommunizieren muss, und könnte die Kosten für die Ausführung Ihres Dienstes aufgrund des erhöhten Datendurchsatzes erhöhen.
Sie müssen dann entscheiden, wie Sie am besten mit Ihren Servern kommunizieren, um sicherzustellen, dass diese geschützt sind. Dies ist wichtig, um zu verhindern, dass dieselben Probleme mit Ihrer internen API erneut auftreten. Die beste Faustregel, die ich geben kann, ist, wegen der Bedrohung durch den Mann in der Mitte kein Geheimnis direkt zu übermitteln. Stattdessen können Sie den Datenverkehr mit Ihrem Geheimnis signieren und die Integrität aller an Ihren Server gesendeten Anforderungen überprüfen. Eine Standardmethode hierfür ist die Berechnung eines HMAC der Nachricht, die auf einem Geheimnis verschlüsselt ist. Ich arbeite in einem Unternehmen, das ein Sicherheitsprodukt hat, das auch in diesem Bereich tätig ist, weshalb mich solche Dinge interessieren. In der Tat ist hier ein Blog- Artikel von einem meiner Kollegen, der das meiste davon behandelt.
Wie viel soll ich tun?
Bei solchen Sicherheitsratschlägen müssen Sie eine Kosten-Nutzen-Entscheidung darüber treffen, wie schwer es für jemanden sein soll, einzudringen. Wenn Sie eine Bank sind, die Millionen von Kunden schützt, unterscheidet sich Ihr Budget völlig von dem, der eine App in ihrem Kunden unterstützt Freizeit. Es ist praktisch unmöglich zu verhindern, dass jemand Ihre Sicherheit verletzt, aber in der Praxis benötigen nur wenige Menschen alle Schnickschnack, und mit einigen grundlegenden Vorsichtsmaßnahmen können Sie einen langen Weg zurücklegen.