Dieses Beispiel hat eine Reihe von Aspekten. Ich möchte ein paar Punkte erwähnen, die meiner Meinung nach an anderer Stelle nicht explizit behandelt wurden.
Schutz des Geheimnisses bei der Übermittlung
Zunächst einmal ist zu beachten, dass der Zugriff auf die Dropbox-API über deren App-Authentifizierung Mechanismus müssen Sie Ihren Schlüssel und Ihr Geheimnis übermitteln. Die Verbindung ist HTTPS, was bedeutet, dass Sie den Datenverkehr nicht abfangen können, ohne das TLS-Zertifikat zu kennen. Damit soll verhindert werden, dass eine Person die Pakete auf ihrem Weg vom Mobilgerät zum Server abfängt und mitliest. Für normale Nutzer ist dies eine wirklich gute Möglichkeit, die Privatsphäre ihres Datenverkehrs zu gewährleisten.
Was sie nicht kann, ist zu verhindern, dass eine böswillige Person die App herunterlädt und den Datenverkehr inspiziert. 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 Beschaffenheit der Dropbox-API wäre in diesem Fall keine Disassemblierung oder Reverse Engineering des Codes erforderlich, um den Schlüssel und das Geheimnis der App zu extrahieren.
Sie könnten Folgendes tun Anheften das prüft, ob das vom Server erhaltene TLS-Zertifikat das erwartete ist. Dadurch wird der Client zusätzlich überprüft und es wird schwieriger, den Datenverkehr abzufangen. Dadurch wird es schwieriger, den Datenverkehr während des Fluges zu überprüfen, aber die Pinning-Prüfung findet im Client statt, so dass es wahrscheinlich immer noch möglich wäre, den Pinning-Test zu deaktivieren. Allerdings wird es dadurch schwieriger.
Schutz des Geheimnisses in der Ruhephase
Als ersten Schritt sollten Sie etwas wie proguard wird dazu beitragen, dass es weniger offensichtlich ist, wo Geheimnisse gehütet werden. Sie könnten auch das NDK verwenden, um den Schlüssel und das Geheimnis zu speichern und Anfragen direkt zu senden, was die Zahl der Personen, die über die entsprechenden Kenntnisse verfügen, um die Informationen zu extrahieren, erheblich reduzieren würde. Eine weitere Verschleierung kann dadurch erreicht werden, dass die Werte nicht für längere Zeit direkt im Speicher gespeichert werden, sondern, wie in einer anderen Antwort vorgeschlagen, verschlüsselt und erst kurz vor der Verwendung entschlüsselt werden.
Erweiterte Optionen
Wenn Sie jetzt paranoid sind, weil Sie das Geheimnis irgendwo in Ihrer Anwendung platzieren wollen, und Sie Zeit und Geld haben, um in umfassendere Lösungen zu investieren, dann könnten Sie in Erwägung ziehen, die Anmeldedaten auf Ihren Servern zu speichern (vorausgesetzt, Sie haben welche). Dies würde die Latenzzeit bei Aufrufen der API erhöhen, da diese über Ihren Server kommunizieren muss, und könnte die Kosten für den Betrieb 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 sie geschützt sind. Dies ist wichtig, um zu verhindern, dass die gleichen Probleme mit Ihrer internen API erneut auftreten. Die beste Faustregel, die ich geben kann, ist, wegen der Man-in-the-Middle-Bedrohung keine Geheimnisse direkt zu übertragen. Stattdessen können Sie den Datenverkehr mit Ihrem Geheimnis signieren und die Integrität aller an Ihren Server gerichteten Anfragen überprüfen. Eine Standardmethode hierfür ist die Berechnung eines HMAC der Nachricht, die mit einem Geheimnis verschlüsselt ist. Ich arbeite in einem Unternehmen, das ein Sicherheitsprodukt anbietet, das auch in diesem Bereich tätig ist, weshalb mich diese Art von Dingen interessiert. In der Tat, hier ist ein Blog Artikel von einem meiner Kollegen, in dem das meiste davon behandelt wird.
Wie viel sollte ich tun?
Bei allen Sicherheitsratschlägen dieser Art müssen Sie eine Kosten-Nutzen-Entscheidung darüber treffen, wie schwer Sie es jemandem machen wollen, einzubrechen. Wenn Sie eine Bank sind, die Millionen von Kunden schützt, haben Sie ein ganz anderes Budget zur Verfügung als jemand, der in seiner Freizeit eine App unterstützt. Es ist praktisch unmöglich, jemanden daran zu hindern, Ihre Sicherheitsvorkehrungen zu knacken, aber in der Praxis brauchen nur wenige Menschen all den Schnickschnack, und mit einigen grundlegenden Vorsichtsmaßnahmen kommen Sie schon sehr weit.