Ist google-services.json vor Hackern sicher?

Lesezeit: 7 Minuten

Wenn ein Hacker mein APK dekompiliert, kann er dann meine API-Schlüssel aus dieser Datei sehen? Ich mache mir keine Sorgen um mein Quellcode-Repository. Ich mache mir nur Sorgen, dass ein Hacker diesen API-Schlüssel irgendwie von meiner APK aus sehen könnte. Ich versuche, diese Datei zu verschlüsseln und zur Laufzeit zu entschlüsseln, habe aber einige Probleme

  • Es wird nicht immer sehr schwierig sein, etwas von der App zu bekommen. Schließlich geben Sie Ihren gesamten Code (in Form von APK) an eine unbekannte Person weiter. Man kann den Code jederzeit dekompilieren, verstehen, wie er funktioniert, einige Skripte erstellen, um die API-Aufrufe nachzuahmen, und alles zum Laufen bringen. Du kannst es nur etwas hinauszögern. Eine bessere Frage wäre nach dem Problem, mit dem Sie beim Verschlüsseln und Entschlüsseln konfrontiert sind, und da die Firebase-Abhängigkeit automatisch von der google-services.json Datei, müssen Sie das irgendwie ändern.

    – zeekhuge

    4. August 2017 um 13:52 Uhr


  • Da es sich um eine clientseitige API handelt, ist sie tatsächlich in Ihrem APK sichtbar. Wenn dies ein vernünftiger Wert ist, kann dies ein Problem sein, da APK nur eine ZIP-Datei ist. Sie sollten hier nur öffentliche Schlüssel aufbewahren. Die einzige Lösung, die ich kenne, besteht darin, beim ersten Start der App eine Installationsroutine zu implementieren, damit sie den Schlüssel zu diesem Zeitpunkt dynamisch von Ihrem Server lädt. BEARBEITEN Das Verschlüsseln auf der Clientseite ist schlechter, da Sie Ihre Verschlüsselungsmethode offenlegen

    – Kaddath

    4. August 2017 um 13:52 Uhr


  • Welchen Nutzen würde ein Hacker aus Ihren API-Schlüsseln ziehen? Beachten Sie, dass sehr bekannte Apps wie Telegram auch fest codierte API-Schlüssel in der App haben, die leicht zu entdecken sind.

    – Präsident James K. Polk

    4. August 2017 um 14:55 Uhr


  • @JamesKPolk Es wurde als Sicherheitsrisiko angesehen, da ein Hacker theoretisch Firebase-Ereignisse mit Zugriff auf diese Schlüssel posten könnte. Was wäre, wenn sie sie auch aus unserem System ziehen könnten? Diese Firebase-Ereignisse können vertrauliche Daten enthalten, daher möchten wir nicht, dass dieser Schlüssel in google-services.json offengelegt wird, wenn das APK dekompiliert wird

    – stephaaw

    4. August 2017 um 15:24 Uhr

  • Nebenbemerkung zu meinem Kommentar: Wenn Sie bei der Installation nach dem Schlüssel fragen, müssen Sie natürlich überprüfen, ob die Frage tatsächlich von Ihrer App stammt, was ein kleines rekursives Problem ist, da Sie einen Schlüssel hinzufügen müssen für die Frage, nun, Sie sehen, was ich meine! Ich kenne keine richtige Lösung dafür, ich weiß nicht, warum sie einfaches ZIP verwendet haben.. Wie auch immer, willkommen bei den Leuten, die wissen, dass es keine wirkliche Sicherheit im Internet gibt.. alles ist Verschleierung und Maschinenleistung, um Primzahlen zu faktorisieren;

    – Kaddath

    4. August 2017 um 16:22 Uhr


Die Art und Weise, wie das Google-Plug-in eingerichtet ist, wird es Ihnen wirklich schwer machen, den Inhalt des zu verbergen google-services.json Datei. Der einzig praktikable Weg wäre, selbst neu zu implementieren, was das Plugin bereits für Sie tut, was ich nicht empfehlen würde. Wenn Sie das Plugin so verwenden, wie Google es beabsichtigt, wird es für jeden, der Ihr APK entpackt, leider einfach sein, an Ihren Firebase/Google-API-Schlüssel zu gelangen.

Sie können jedoch jede missbräuchliche Verwendung dieses API-Schlüssels verhindern, indem Sie konfigurieren, wer ihn verwenden darf. Für eine Android-App können Sie angeben, dass Ihr API-Schlüssel nur von einer Android-Anwendung verwendet werden kann, die von einem bestimmten Schlüsselspeicher signiert wurde und einen bestimmten Paketnamen verwendet.

Um diese Einschränkungen zu konfigurieren, folgen Sie der Dokumentation hier: https://cloud.google.com/docs/authentication/api-keys#api_key_restrictions

Wenn Sie Firebase RTD/Firestore verwenden, sollten Sie nicht nur den API-Schlüssel einschränken, sondern auch sicherstellen, dass Sie Sicherheitsregeln für den Datenspeicher konfigurieren. Abhängig von Ihrem Anwendungsfall können Sie verhindern, dass anonyme Benutzer in Abschnitten Ihrer Datenbank lesen oder schreiben.

Wenn Sie weitere Details wünschen, finden Sie hier einen guten Artikel zum Sichern Ihrer API-Schlüssel in einer Android-Anwendung:
https://proandroiddev.com/developing-secure-android-apps-8edad978d8ba

  • Firebase-Sicherheitsregeln sind der richtige Weg. Wenn jemand versuchen möchte, meinen API-Schlüssel auszunutzen, ist das in Ordnung, da die vorhandenen Sicherheitsregeln den Lese-/Schreibzugriff verhindern

    – stephaaw

    27. September 2019 um 3:33 Uhr

Benutzer-Avatar
fhsilva

Laut Firebase-Dokumentation hier:

Wenn Sie eine App mit Ihrem Firebase-Projekt verbinden, stellt die Firebase-Konsole eine Firebase-Konfigurationsdatei (Android/iOS) oder ein Konfigurationsobjekt (Web) bereit, das Sie direkt zu Ihrem lokalen Projekt hinzufügen.

  • Für iOS fügen Sie eine Konfigurationsdatei GoogleService-Info.plist hinzu

  • Für Android fügen Sie eine Konfigurationsdatei google-services.json hinzu

Eine Firebase-Konfigurationsdatei oder ein Konfigurationsobjekt verknüpft Ihre App mit Ihrem Firebase-Projekt und seinen Ressourcen (Datenbanken, Speicher-Buckets usw.).

Und dann identifiziert es den Inhalt als öffentlich:

Der Inhalt wird als öffentlich betrachtet, einschließlich Ihrer plattformspezifischen ID (eingegeben im Einrichtungsworkflow der Firebase-Konsole) und Werten, die spezifisch für Ihr Firebase-Projekt sind, wie Ihr API-Schlüssel, die URL der Echtzeitdatenbank und der Name des Storage-Buckets.

Denken Sie daran, dass Sie auch bei Verwendung von Realtime Database, Cloud Firestore oder Cloud Storage die von Firebase beschriebenen Sicherheitsrichtlinien befolgen müssen.

Beachten Sie auch, dass diese Dateien, obwohl sie für Ihre Anwendung öffentlich sind, nicht in öffentlichen Repositorys von Open-Source-Projekten verfügbar gemacht werden sollten.

  • Es trägt zur Diskussion bei, da ich die Informationen von Google hinzugefügt habe, dass “der Inhalt als öffentlich gilt”. Da der Dateiinhalt als öffentlich betrachtet wird, beantwortet es die Frage, ob diese Datei zugänglich gemacht werden kann. Warum es sich nicht in einem öffentlichen Repository befinden sollte, ist eine andere Frage. Jeder, der Ihr Repository klont, sollte eine eigene Datei erstellen, um auf sein Firebase-Konto zuzugreifen. Daher ist das Hinzufügen dieser Datei zu einem öffentlichen Repository nicht sinnvoll und sollte vermieden werden.

    – fhsilva

    27. September 2019 um 7:39 Uhr

  • Gibt es irgendetwas, was ich neben dem Hochladen von Code in das private Repo tun könnte? Ich verwende React-Native für iOS und Android.

    – Abisch

    26. Oktober 2021 um 9:36 Uhr

Alles in der App kann auf sehr einfache Weise gelesen werden, so dass Sie, wie Google vorschlägt, vermeiden müssen, Informationen in die APK einzugeben, insbesondere den Serverschlüssel im Falle von Firebase/Google Cloud Messaging oder Diensten dieser Art.

  • Ich stimme zu, aber das ist verwirrend für mich … Gibt es eine Möglichkeit, die Schlüssel in der google-services.json zu maskieren? Und sie zur Laufzeit durch einen anderen Wert ersetzen? Oder wird diese Datei während der Erstellungszeit verwendet?/

    – stephaaw

    4. August 2017 um 13:59 Uhr

  • @stepheaw Haben Sie ein Update gefunden, wie Sie google-services.json-Schlüssel schützen können?

    – Amit

    20. September 2018 um 10:50 Uhr

  • Unsere Lösung war eine Buildtime-Routine, die die Schlüssel austauscht. Obwohl … unsere Methode zur Verschlüsselung in die App eingebettet war. Unabhängig davon machte es es nicht vollständig sicher. Es fügte nur eine weitere Ebene hinzu, die ein Hacker durchgehen müsste. Obwohl ich seit dieser Zeit in einigen anderen Projektteams bin – und die sich nicht so sehr um diese Schlüssel kümmern. Einige Unternehmen haben sehr strenge Richtlinien und Sicherheitsüberprüfungen, und die Leute, die diese Dinge oft überprüfen, haben kein Verständnis dafür, wofür sie verwendet werden – sie wissen nur, dass sie nicht im Klartext sein sollten.

    – stephaaw

    12. Oktober 2018 um 13:33 Uhr


Benutzer-Avatar
Maneki Neko

Es ist eindeutig nicht sicher, aber Sie haben keine Wahl, daher ist es wichtig, Ihre Lizenzschlüssel einzuschränken.

Entpacken Sie Ihre apk (benennen Sie sie entweder in .zip um und öffnen Sie sie oder von bash unzip [your apk path])

Jetzt – le coup the Grace: Suchen Sie eine Datei (im Stammverzeichnis der ZIP-Datei) mit dem Namen resources.arsc und öffnen Sie es mit jedem Editor, der bereit ist, es zu öffnen. Auch TextEdit oder Atom reichen aus. Suchen nach AIza und hier ist es. Mit Ihren Benutzer-IDs.

… oder die weniger Hacker-artige Methode: Ziehen Sie Ihre APK einfach per Drag-and-Drop in Android Studio. Sie können alles darin sehen: In resources.arsc finden Sie alle Schlüssel und Werte, alle Ihre Zeichenfolgen, alle Ihre Ganzzahlen … alles in einer einfachen, schönen GUI.

Die größere Frage: Gibt es eine Möglichkeit, ProGuard anzuweisen, es effizient zu verschleiern? Oder gibt es eine Möglichkeit, es mit einem geheimen Schlüssel zu verschlüsseln, der mit einem Server geteilt wird.

1013900cookie-checkIst google-services.json vor Hackern sicher?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy