Leitfaden · App-Sicherheit
Welche Zugangsdaten gehören nicht in eine App?
Eine mobile App läuft auf einem Gerät, das du nicht kontrollierst. Ihr Paket lässt sich entpacken, ihr Netzwerkverkehr beobachten und ihr Verhalten verändern. Deshalb ist nicht jeder Wert in der App automatisch eine Sicherheitslücke. Ein echtes Servergeheimnis darf dort trotzdem nicht liegen. Dieser Leitfaden erklärt die Grenze am Beispiel Firebase, bei dem es besonders oft Missverständnisse gibt.
Die kurze Antwort: Geh davon aus, dass der Client einsehbar ist
Mit der Veröffentlichung einer Android- oder iOS-App erhält jeder Nutzer eine Kopie des ausführbaren Codes und der Ressourcen. Den ursprünglichen Quellcode bekommt er nicht sauber sortiert, doch gängige Werkzeuge finden Zeichenketten, Konfigurationsdateien, Endpunkte und eine brauchbare Annäherung an die Programmstruktur. Um nach einem Token zu suchen oder eine Anfrage nachzubauen, muss niemand die gesamte App rekonstruieren.
Obfuskation erschwert die Analyse, indem sie etwa aussagekräftige Namen aus dem Code entfernt. Sie kann Werte, die eine App lesen muss, aber nicht zuverlässig vor jemandem verbergen, der das Gerät kontrolliert. Gehe deshalb davon aus, dass der Client untersucht werden kann, und prüfe Berechtigungen auf dem Server.
| Kann in die App | Gehört auf den Server | |
|---|---|---|
| Konfiguration | API-Basis-URL, Projekt-ID, verfügbare Funktionen | Private Netzwerkadressen und administrative Konfiguration |
| Identität | Ein kurzlebiges Token des angemeldeten Nutzers | Service-Account-Schlüssel und Signaturgeheimnisse |
| Fremddienste | Ein bewusst öffentlicher, eng beschränkter Client-Key | Keys für Zahlungen, E-Mail, KI-Modelle und unbeschränkte APIs |
| Geschäftsregeln | Validierung für eine bessere Bedienung | Berechtigungen, Preise, Ansprüche und Betrugsentscheidungen |
Was eine dekompilierte App tatsächlich verrät
Bei einer Untersuchung werden häufig zunächst das App-Paket entpackt, seine Ressourcen aufgelistet und enthaltene Texte durchsucht. Dabei lassen sich beispielsweise Serveradressen, Analyse-IDs, Firebase-Konfiguration, Funktionsschalter und versehentlich eingebettete Zugangsdaten finden. Auch die Anfragen der App können untersucht werden. Eine privilegierte Aktion darf deshalb nicht allein von einem Wert abhängen, der in jeder App-Kopie enthalten ist.
Zur Laufzeit gespeicherte Daten brauchen dieselbe Sorgfalt. Ein Token für den angemeldeten Nutzer muss das Gerät erreichen; es für immer unsichtbar zu machen, ist nicht das Ziel. Es sollte eng begrenzt und kurzlebig sein, im geschützten Speicher der Plattform liegen, über TLS übertragen werden und auf dem Server bei jeder Anfrage nur die Rechte dieses Nutzers gewähren.
Aufwand ist nicht dasselbe wie Schutz. Einen Key auf mehrere Zeichenketten zu verteilen, zu kodieren oder erst nach dem Start zu laden, kann eine einfache Suche erschweren. Bei seiner Verwendung muss der vollständige Wert dennoch vorhanden sein. Solche Techniken bremsen massenhaftes Auslesen, verwandeln aber kein geteiltes Geheimnis in ein privates.
Warum ein Firebase-API-Key öffentlich sein kann
Wer eine Android-App mit Firebase öffnet, findet in google-services.json meist einen API-Key; eine Apple-App enthält die entsprechende Konfiguration. Viele Prüfberichte markieren ihn als Fund. Firebase beschreibt diese Keys jedoch als bewusst öffentlich, solange sie auf Firebase-APIs beschränkt sind. Sie identifizieren das Projekt. Sie berechtigen einen Nutzer nicht dazu, Firestore, Realtime Database oder Cloud Storage zu lesen.
Den Datenzugriff regeln Firebase Security Rules anhand des Anmeldestatus und der Berechtigungen. App Check liefert ein zusätzliches Signal: Unterstützte Dienste können damit Anfragen ablehnen, die nicht von einer bestätigten App-Instanz stammen. Diese Kontrollen bleiben auch bei einem versteckten Firebase-Key nötig.
Die Unterscheidung ist wichtig. Im selben Google-Cloud-Projekt können andere Keys liegen, bei denen Nutzung oder Kosten tatsächlich am Schlüssel hängen. Ein Key für Karten, Zahlungen, E-Mail oder eine generative KI-API kann für einen Angreifer wertvoll sein. Trenne die Keys, beschränke jeden auf die vorgesehene API und Anwendung, setze sinnvolle Kontingente und führe jeden Dienst, der ein echtes Geheimnis verlangt, über deinen Server.
Gemini hat das greifbar gemacht. Im Februar 2026 berichtete Truffle Security: Wurde in einem Google-Cloud-Projekt die Gemini-API aktiviert, konnten die unbeschränkten Keys dieses Projekts, auch solche, die längst für Maps oder Firebase veröffentlicht waren, Gemini aufrufen, auf hochgeladene Dateien zugreifen und Kosten verursachen. Laut Gemini-Dokumentation lehnt die API unbeschränkte Standard-Keys inzwischen ab, und Firebase warnt davor, die Gemini Developer API jemals in die Liste erlaubter APIs eines öffentlich zugänglichen Keys aufzunehmen. Beschränke jeden öffentlichen Key auf die APIs, die er tatsächlich nutzt, und rufe Gemini über deinen Server oder über Firebase AI Logic mit App Check auf.
- Firebase: API-Keys kennenlernen und verwalten
- Truffle Security: Google-API-Keys und Gemini
- Google AI: Gemini-API-Keys verwenden
- Firebase AI Logic
- Der Key ist auf Firebase-Dienste beschränkt
- Security Rules, Authentication und App Check prüfen.
- Der Key aktiviert auch eine andere Google-API
- Trennen und API- sowie Anwendungseinschränkungen setzen.
- Die App enthält einen Service Account oder privaten Schlüssel
- Widerrufen, Nutzung untersuchen und Vorgang auf den Server verlagern.
- Daten sind ohne die vorgesehenen Rechte lesbar
- Die Lücke liegt in den Regeln oder der Backend-Autorisierung.
Die Sicherheitsentscheidung gehört auf den Server
Stell dir eine fiktive Buchungs-App vor, die freie Termine zeigt und Kunden einen davon reservieren lässt. Die App darf die öffentliche API-Adresse kennen und ein Token des angemeldeten Kunden besitzen. Sie darf nicht selbst entscheiden, ob der Termin noch frei ist, ihren eigenen Preis setzen oder den Zahlungsdienst mit deinem privaten Key aufrufen.
Stattdessen nimmt der Server die Anfrage an, prüft Nutzer, Verfügbarkeit und aktuellen Preis, führt die privilegierte Aktion mit einem serverseitigen Zugang aus und gibt nur das Ergebnis zurück. Das Beispiel ist erfunden, die Grenze bleibt aber dieselbe – im Kundenportal, in der Lager-App oder im Abo-Produkt.
Prüfungen im Client verbessern weiterhin die Bedienung: einen ungültigen Button sperren, ein falsches Datum erkennen oder erklären, warum etwas nicht verfügbar ist. Jede sicherheitsrelevante Prüfung wird auf dem Server wiederholt, wo eine veränderte App sie nicht einfach überspringen kann.
- 01 App fragt an Nutzerabsicht und ein kurzlebiges Identitätstoken
- 02 Server prüft Identität, Rechte, aktuellen Zustand und Grenzen
- 03 Dienst handelt Der private Zugang erreicht das Telefon nie
- 04 Ergebnis kommt zurück Nur die Daten, die dieser Nutzer sehen darf
Wenn das Backend mit Firmensystemen verbunden ist, hilft zusätzlich der Leitfaden zur Netzwerksegmentierung und Begrenzung von Gerätezugriffen.
Was App Check, Play Integrity und App Attest beitragen
Autorisierung beantwortet, ob dieser Nutzer diese Aktion ausführen darf. App-Integrität beantwortet eine andere Frage: Scheint die Anfrage von einer echten, unveränderten Instanz der App zu kommen? Firebase App Check kann dazu unter Android Play Integrity und auf Apple-Plattformen App Attest oder DeviceCheck einsetzen und das Signal an Firebase-Dienste oder dein eigenes Backend weitergeben.
Das hilft gegen automatisierten Missbrauch, kopierte Clients und einen Teil der Anfragen veränderter Apps. Die Prüfung ist jedoch nicht unfehlbar: Geräte können die Technik nicht unterstützen oder kompromittiert sein, der Attestierungsdienst kann ausfallen und ein Angreifer kann eine echte App bedienen. Aktiviere die verpflichtende Prüfung schrittweise und beobachte die Auswirkungen. Lege das Verhalten bei Ausfällen fest und behalte Authentifizierung, Autorisierung, Ratenbegrenzung und Protokollierung bei.
Priorisiere Aktionen mit erhöhtem Risiko oder Kosten: etwa das Einlösen eines Angebots, teure KI-Anfragen, bezahlte Inhalte oder Änderungen an einem Zahlungskonto. Für einen öffentlichen Katalog können andere Anforderungen gelten.
Eine praktische Prüfung vor der Veröffentlichung
Untersuche vor dem Release dasselbe Artefakt, das Nutzer installieren – nicht nur das Quellcode-Repository. Suche im fertigen Paket nach Zugangsdaten und privatem Material; liste jeden angesprochenen Dienst auf; bestätige, dass jeder Key bewusst öffentlich oder auf das Minimum beschränkt ist; und teste wichtige Anfragen außerhalb der vorgesehenen App-Oberfläche.
Prüfe die Autorisierung anschließend mit zwei normalen Konten. Kann eines durch Ändern einer ID Datensätze des anderen lesen oder bearbeiten? Kann eines einen administrativen Endpunkt aufrufen? Werden bei Firebase Rules abgelehnte Fälle ebenso getestet wie der Normalfall? Prüfe zuletzt Protokolle, Kontingente und Warnungen: Eine Kontrolle, die du in Produktion nicht beobachten kannst, ist schwer zu beurteilen.
- Keine Service-Account-Dateien, Signaturgeheimnisse, Zahlungs-Secrets oder privaten Schlüssel im Paket.
- Jeder Client-Key hat einen Verantwortlichen, einen Zweck, Einschränkungen und einen Rotationsplan.
- Der Server prüft Identität, Besitz, Rollen, Preise und Ansprüche erneut.
- Firebase Rules sperren standardmäßig und haben Emulator-Tests für erlaubte und abgelehnte Anfragen.
- App-Attestierung ergänzt Authentifizierung und Autorisierung, ersetzt sie aber nie.
- Ratenlimits, Budgets und Warnungen machen Missbrauch sichtbar, bevor die Rechnung eintrifft.
Wenn du in einer veröffentlichten App ein echtes Geheimnis findest
Behandle den Wert als offengelegt. Widerrufe oder rotiere ihn zuerst; nutze das sichere Übergabeverfahren des Anbieters, falls ein sofortiger Wechsel die Produktion unterbrechen würde. Prüfe Zugriffsprotokolle, Abrechnung und Änderungen mit diesen Zugangsdaten, bewahre die nötigen Spuren zur zeitlichen Einordnung auf und informiere die zuständigen Personen, falls Daten oder Konten betroffen sein könnten.
Verlagere den privilegierten Aufruf auf einen Server oder eine verwaltete Funktion. Prüfe dort die Rechte des Nutzers und gib dem Dienst nur die nötigen Berechtigungen. Das Geheimnis in einer neuen App-Version lediglich stärker zu verschleiern, behebt das Architekturproblem nicht.
Wie leistungsfähigere Modelle diese Arbeit verändern, erklärt KI-Hacking-Agenten: belegte Fortschritte und Grenzen.
Quellen und weiterführende Hinweise
- Firebase: API-Keys kennenlernen und verwaltenWarum Firebase-Client-Keys das Projekt identifizieren und wie sie beschränkt werden.↗
- Firebase-SicherheitschecklisteSecurity Rules, App Check, Zugangsdaten und Kontrollen vor dem Start.↗
- Android: Hardcoded cryptographic secretsAndroids Hinweise zu Geheimnissen, die sich per Reverse Engineering auslesen lassen.↗
- Android: Play Integrity APISignale zur installierten App und zum Gerät.↗
- Apple: Establishing your app's integrityApp Attest und serverseitig geprüfte Nachweise.↗
- Truffle Security: Google-API-Keys und GeminiUntersuchung vom Februar 2026 zu bestehenden Keys, die Zugriff auf Gemini erhielten (auf Englisch).↗
- Google AI: Gemini-API-Keys verwendenKey-Typen, Einschränkungen und die Ablehnung unbeschränkter Standard-Keys.↗
- Firebase AI LogicClient-SDKs, die Gemini über einen Proxy aufrufen, ohne Gemini-Key in der App.↗
Fragen vor dem Start
Kann man eine Android- oder iOS-App wirklich dekompilieren?
Das Paket lässt sich untersuchen, Ressourcen und Texte können wiedergewonnen, Teile des Codes angenähert und das Laufzeitverhalten beobachtet werden. Obfuskation erhöht den Aufwand, hält einen von der App genutzten Wert aber nicht dauerhaft geheim.
Ist ein sichtbarer Firebase-API-Key eine Sicherheitslücke?
Für sich genommen meist nicht. Firebase-Client-Keys identifizieren das Projekt. Prüfe, ob der Key auf die vorgesehenen APIs beschränkt ist, und teste Security Rules, Authentication und App Check – diese Kontrollen schützen Daten und Backend.
Kann man mit einem öffentlichen Firebase-API-Key Gemini aufrufen?
Nur wenn der Key die Gemini-API erlaubt. Öffne in Google Cloud „APIs & Dienste“ → „Anmeldedaten“, prüfe die API-Einschränkungen jedes Keys, der in einer App oder Website steckt: Die Generative Language API (Gemini) darf nicht auf der Liste stehen. Hat ein öffentlicher Key sie erlaubt, tausche ihn aus und prüfe Nutzung und Abrechnung.
Sollte ich einen API-Key durch Obfuskation oder Verschlüsselung verstecken?
Nur als zusätzliche Hürde für einen Key, der ohnehin verteilt werden darf. Wenn jede App-Kopie einen gemeinsamen Zugang entschlüsseln kann, kann ein entschlossener Analyst ihn wiederherstellen. Ein echtes Servergeheimnis gehört nicht in die App.
Stoppt App Check jeden kopierten oder veränderten Client?
Nein. Es liefert ein hilfreiches Integritätssignal und reduziert mehrere Formen des Missbrauchs, braucht aber Beobachtung und Ausweichpfade. Nutzeranmeldung, serverseitige Autorisierung, Kontingente und Protokolle ersetzt es nicht.