Eine mobile App bringt Ihr Produkt und oft die persönlichsten Daten Ihrer Kunden in Millionen von Haushalte, die Sie nicht kontrollieren. Smartphones gehen verloren, werden gestohlen, gerootet, infiziert und in öffentlichen Netzwerken zurückgelassen. Angreifer können Ihre App herunterladen, sie analysieren und untersuchen, wie sie mit Ihren Servern kommuniziert. Sicherheit in diesem Umfeld ist keine Funktion, die man nachträglich hinzufügt. Sie erfordert Entscheidungen, die während des gesamten Projekts getroffen werden.
Die gute Nachricht ist: Die meisten Sicherheitslücken bei mobilen Apps sind nicht ungewöhnlich. Sie beruhen auf wenigen häufigen Fehlern: sorglose Speicherung sensibler Daten, zu großes Vertrauen in die App, ungeschützte Backend-APIs und fehlende Tests. Diese Checkliste enthält zwanzig Punkte, die vor dem Launch unbedingt beachtet werden sollten. Sie soll Gründern und Produktverantwortlichen helfen, die richtigen Fragen zu stellen, und Entwicklern als Leitfaden dienen. Für eine umfassendere Planung Ihres App-Projekts lesen Sie bitte unseren Leitfaden zu den Entwicklungskosten mobiler Apps und unsere Seite zur Entwicklung mobiler Apps.
Zunächst zur Denkweise
Drei Prinzipien bilden die Grundlage für alles Folgende.
- Vertrauen Sie niemals dem Client. Alles, was auf dem Smartphone eines Nutzers läuft, kann überprüft und verändert werden. Wichtige Entscheidungen wie Preise, Berechtigungen und Zahlungen müssen serverseitig getroffen werden.
- Erfassen und speichern Sie weniger Daten. Daten, die Sie nicht speichern, können nicht gestohlen werden. Jedes erfasste Feld stellt ein Haftungsrisiko dar.
- Gehen Sie von einem Sicherheitsverstoß aus, begrenzen Sie den Schaden. Gestalten Sie Ihr System so, dass der Schaden im Falle eines Fehlers begrenzt bleibt: kurzlebige Token, eingeschränkte Berechtigungen, verschlüsselte Daten.
Datenspeicherung auf dem Gerät
1. Speichern Sie sensible Daten nur, wenn es unbedingt notwendig ist.
Passwörter, vollständige Kartennummern und persönliche Kennungen sollten nicht auf dem Gerät gespeichert werden. Rufen Sie Daten bei Bedarf vom Server ab, anstatt sie lokal zu speichern.
2. Verwenden Sie sichere Speichermedien für Ihre Daten.
Sowohl iOS als auch Android bieten geschützte Speicher für Geheimnisse wie Token und Schlüssel: den Keychain unter iOS und den Keystore unter Android. Verwenden Sie diese Speichermedien und nicht einfache Einstellungsdateien, lokale Datenbanken oder ungeschützte Textdateien. Plattformübergreifende Frameworks wie Flutter und React Native bieten sichere Speicherpakete, die diese Funktionen kapseln und standardmäßig für Tokens und Anmeldeinformationen verwendet werden sollten.
3. Lokale Datenbanken und Dateien mit personenbezogenen Daten verschlüsseln
Wenn die App Benutzerinformationen offline zwischenspeichert, verschlüsseln Sie diese. Denken Sie daran, dass auch Backups, Screenshots und Protokolle Daten preisgeben können. Überprüfen Sie daher, wo Informationen gespeichert werden könnten.
4. Sensible Daten beim Abmelden löschen
Wenn sich ein Benutzer abmeldet, entfernen Sie Tokens, zwischengespeicherte Datensätze und alle sensiblen Dateien. Gemeinsam genutzte und weiterverkaufte Geräte sind weit verbreitet.
Authentifizierung und Sitzungen
5. Bewährte Authentifizierung verwenden, keine Eigenentwicklung
Die Entwicklung eines eigenen Anmeldesystems ist riskant. Verwenden Sie etablierte Standards und Bibliotheken wie OAuth 2.0 und OpenID Connect oder einen seriösen Identitätsdienst. Setzen Sie angemessene Passwortregeln durch und schützen Sie sich durch Ratenbegrenzungen und Sperrungen vor wiederholten Versuchen.
6. Bieten Sie sichere Anmeldeoptionen an.
Unterstützen Sie Multi-Faktor-Authentifizierung, wo die Daten dies rechtfertigen, und nutzen Sie Gerätebiometrie wie Fingerabdruck- und Gesichtserkennung als zusätzliche Sicherheitsebene. Biometrie sollte sicher gespeicherte Anmeldeinformationen entsperren und nicht serverseitige Prüfungen ersetzen.
7. Halten Sie Sitzungen kurz und widerrufbar.
Verwenden Sie kurzlebige Zugriffstoken mit Aktualisierungstoken und ermöglichen Sie den Entzug des Zugriffs bei Geräteverlust. Unachtsam gespeicherte, langlebige Token stellen eine häufige Schwachstelle dar.
Netzwerkkommunikation
8. Verwenden Sie überall verschlüsselte Verbindungen.
Der gesamte Datenverkehr zwischen der App und Ihren Servern sollte über modernes TLS erfolgen. Senden Sie niemals Anmeldeinformationen oder personenbezogene Daten über unverschlüsselte Verbindungen und ignorieren Sie Zertifikatfehler während der Entwicklung nicht. Vergessen Sie nicht, die Prüfungen in der Release-Version wieder zu aktivieren.
9. Erwägen Sie Certificate Pinning für risikoreiche Apps.
Durch das Pinning akzeptiert die App ausschließlich das Zertifikat Ihres Servers, wodurch einige Abfangangriffe verhindert werden. Der Wartungsaufwand bei Zertifikatsänderungen ist jedoch höher. Daher eignet sich Certificate Pinning eher für Apps, die Zahlungen, Gesundheitsdaten oder andere hochsensible Daten verarbeiten, als für einfache Content-Apps.
10. Speichern Sie keine Geheimnisse in der App.
API-Schlüssel, Passwörter und private Schlüssel, die in der App eingebettet sind, können von jedem, der sie herunterlädt, extrahiert werden. Alles, was geheim bleiben muss, gehört auf Ihren Server. Schlüssel, die in der App benötigt werden, z. B. für Karten, sollten durch die App-Identität und Nutzungsbeschränkungen des Anbieters eingeschränkt werden.
Backend und APIs
Die App ist nur so sicher wie der Server, mit dem sie kommuniziert. Angreifer umgehen die App oft komplett und rufen Ihre API direkt auf.
11. Autorisieren Sie jede Anfrage auf dem Server
Prüfen Sie, ob der angemeldete Benutzer auf jeden angeforderten Datensatz zugreifen darf. Ein häufiger Fehler ist ein Endpunkt, der bei Angabe einer beliebigen Bestellnummer eine beliebige Bestellung zurückgibt. So kann ein Benutzer die Daten eines anderen lesen, indem er einfach eine Zahl in der Anfrage ändert.
12. Validieren Sie alle Eingaben auf dem Server
Verlassen Sie sich niemals darauf, dass die App Daten validiert. Prüfen Sie Typen, Längen und Formate auf dem Server und verwenden Sie sichere Datenbankabfragen, um Injection zu verhindern. Backends, die mit ausgereiften Frameworks wie Laravel erstellt wurden, bieten viele dieser Schutzmechanismen standardmäßig, wenn sie bestimmungsgemäß verwendet werden. Wir vergleichen Backend-Optionen in Laravel vs Node.js.
13. Ratenbegrenzung und Überwachung
Begrenzen Sie, wie oft ein Client sensible Endpunkte wie Login, Passwortzurücksetzung und Zahlungen aufrufen kann. Protokollieren Sie ungewöhnliche Aktivitäten und geben Sie eine Warnung aus.
14. Zahlungen angemessen schützen
Verwenden Sie einen seriösen Zahlungsanbieter, damit Kartendaten direkt an diesen gesendet werden und niemals über Ihre Server laufen oder dort gespeichert werden. Bestätigen Sie Zahlungen auf dem Server und vertrauen Sie niemals der Behauptung der App, dass ein Kauf erfolgreich war.
Die App selbst
15. Code angemessen schützen
Release-Builds sollten kompiliert und minimiert werden, wobei Debugging-Funktionen und ausführliche Protokolle entfernt werden. Verschleierung erschwert Reverse Engineering, macht es aber niemals unmöglich. Betrachten Sie sie daher als Hindernis, nicht als Schutzmechanismus, und verlassen Sie sich niemals darauf, Geheimnisse damit zu schützen.
16. Risikoreiche Umgebungen erkennen, wo es darauf ankommt
Bei Banking-, Gesundheits- oder anderen risikoreichen Apps sollten Sie gerootete oder gejailbreakte Geräte, Debugger und Manipulationen überprüfen. Diese Maßnahmen erhöhen den Aufwand und können zu Fehlalarmen führen. Wenden Sie sie daher nur entsprechend dem tatsächlichen Risiko an.
17. Nur die minimal erforderlichen Berechtigungen anfordern
Fragen Sie nur dann nach Zugriff auf Kamera, Standort, Kontakte oder Speicher, wenn dies unbedingt notwendig ist, und begründen Sie Ihre Berechtigung. Weniger Berechtigungen bedeuten geringeres Risiko im Falle einer Kompromittierung der App und mehr Vertrauen der Nutzer.
18. Drittanbietercode prüfen
Bibliotheken und SDKs verwenden die Berechtigungen Ihrer App. Jede einzelne stellt eine potenzielle Schwachstelle und ein Datenschutzrisiko dar. Halten Sie die Liste kurz, verwenden Sie gut gepflegte Pakete, aktualisieren Sie diese regelmäßig und überprüfen Sie, welche Daten jedes Analyse- oder Werbe-SDK erfasst.
Prozess und Vorbereitung
19. Sicherheit vor der Veröffentlichung testen
Beziehen Sie die Sicherheit in die Tests ein, nicht nur die Funktionalität.
- Automatisierte Scans von Code und Abhängigkeiten auf bekannte Schwachstellen.
- Manuelle Überprüfung von Authentifizierung, Speicherung und API-Zugriff.
- Penetrationstests durch einen unabhängigen Spezialisten für Apps, die sensible Daten verarbeiten.
- Abgleich mit einer anerkannten Liste. Das OWASP Mobile Application Security Project veröffentlicht weit verbreitete Leitlinien und Teststandards, einen guten Maßstab für Überprüfungen.
20. Auf Vorfälle und Updates vorbereiten
Legen Sie im Voraus fest, was Sie tun, wenn etwas schiefgeht.
- Eine Möglichkeit, Benutzer zum Update zu zwingen, wenn eine schwerwiegende Sicherheitslücke gefunden wird.
- Überwachung und Fehlerberichterstattung, damit Probleme schnell erkannt werden.
- Ein Ansprechpartner für Sicherheitsberichte und ein Prozess für die Reaktion darauf.
- Ein Plan zur Benachrichtigung der Nutzer und, falls erforderlich, der Aufsichtsbehörden.
- Regelmäßige Updates für Betriebssysteme, Bibliotheken und das Backend. Die Sicherheit wird kontinuierlich verbessert, wie in Softwarewartungskosten erläutert.
Datenschutz und Compliance
Sicherheit und Datenschutz überschneiden sich, sind aber nicht dasselbe. Datenschutz betrifft die Art und Weise, wie und warum Daten erhoben werden, und die Zustimmung der Nutzer.
- Erheben Sie nur die notwendigen Daten und informieren Sie die Nutzer klar darüber.
- **Stellen Sie eine Datenschutzerklärung bereit, die dem tatsächlichen Funktionsumfang der App entspricht.
- Respektieren Sie die Wünsche der Nutzer, z. B. Löschanträge und Marketingpräferenzen.
- Halten Sie sich an die Richtlinien der App-Stores. Apple und Google verlangen Datenschutzhinweise und haben Richtlinien zur Datennutzung.
- Kennen Sie Ihre Pflichten. Gesetze unterscheiden sich je nach Land und Branche, z. B. im Bereich Gesundheit oder Kinderdaten. Wir empfehlen, diese mit einem qualifizierten Berater abzuklären und die App entsprechend zu gestalten.
Sensible Branchen erfordern besondere Sorgfalt. Unsere Seite zur Softwareentwicklung im Gesundheitswesen beschreibt die Designüberlegungen für Produkte im Gesundheitswesen.
Kurzübersicht
| Bereich | Kernfrage |
|---|---|
| Speicherung | Werden sensible Daten gespeichert und befinden sie sich in einem sicheren Speicher? |
| Authentifizierung | Verwenden wir bewährte Standards mit kurzlebigen, widerrufbaren Sitzungen? |
| Netzwerk | Ist der gesamte Datenverkehr verschlüsselt und enthält die Anwendung keine Geheimnisse? |
| API | Autorisiert und validiert der Server jede Anfrage? |
| Zahlungen | Werden Kartendaten direkt an den Anbieter gesendet? |
| Code | Sind Release-Versionen von Debug-Funktionen befreit? |
| Berechtigungen | Fragen wir nur nach den benötigten Berechtigungen? |
| Abhängigkeiten | Sind die verwendeten Drittanbieterbibliotheken wenige, aktuell und geprüft? |
| Tests | Wurde die Sicherheit unabhängig getestet? |
| Reaktion | Können wir Updates erzwingen und auf Vorfälle reagieren? |
Häufige Fehler
- Geheimnisse fest im Code verankern.
- Dem Client bei Entscheidungen über Preise, Rollen oder Zugriffe vertrauen.
- Tokens in unverschlüsselten Einstellungen speichern.
- Testeinstellungen oder Debug-Protokollierung in der Release-Version belassen.
- Serverseitige Autorisierungsprüfungen überspringen.
- Viele SDKs hinzufügen, ohne zu prüfen, welche Daten sie erfassen.
- Sicherheit als letzten Schritt statt als durchgängigen Bestandteil des Projekts behandeln.
- Kein Update-Mechanismus für dringende Fehlerbehebungen.
- Nicht mit realistischen Angriffen testen.
- Das Backend vergessen, wo die meisten schwerwiegenden Sicherheitslücken auftreten.
Wer trägt die Verantwortung?
Alle. Produktverantwortliche entscheiden, welche Daten erfasst werden und welches Risiko akzeptabel ist. Designer gestalten Abläufe, die unnötige Offenlegung vermeiden. Entwickler implementieren Schutzmechanismen. Tester versuchen, diese zu umgehen. Ein guter Entwicklungspartner stellt diese Fragen frühzeitig, nicht erst nach dem Launch. Bei der Auswahl eines Softwareentwicklungsunternehmens sollten Sie nach dessen Sicherheitsansatz fragen. Unser Leitfaden zur Auswahl eines Softwareentwicklungsunternehmens enthält Fragen, die Ihnen dabei helfen.
Abschließende Gedanken
Eine mobile App lässt sich nicht perfekt absichern, aber Sie können sie zu einem schwer zu erreichenden und wenig lohnenden Ziel machen und die häufigsten Fehler vermeiden, die zu Sicherheitslücken führen. Speichern Sie weniger Daten, vertrauen Sie dem Server statt dem Smartphone, verwenden Sie bewährte Authentifizierungsmethoden, verschlüsseln Sie den Datenverkehr, testen Sie gründlich und planen Sie für den Fall, dass etwas schiefgeht.
Wenn Sie eine App planen und von Anfang an Sicherheit integrieren möchten, sprechen Sie uns an. Wir analysieren Ihre Anforderungen, zeigen Ihnen die relevanten Risiken für Ihr Produkt auf und integrieren die Schutzmaßnahmen von vornherein in die Planung – anstatt sie nachträglich hinzuzufügen.