03. Januar 2023
Sicherheit von mobilen Anwendungen: Wie kann sie gewährleistet werden?
Vor ein paar Jahren hatten unsere Mobiltelefone eine physische Tastatur, hatten keine Internetverbindung und wir wussten nicht einmal, was Apps waren. Grundsätzlich haben wir sie benutzt, um Anrufe zu tätigen und SMS zu senden.
Heutzutage vertrauen wir ihnen einen Teil unseres Lebens an, nutzen sie als Kommunikationskanal, suchen nach Informationen, erledigen Bankgeschäfte und überprüfen sogar unsere Gesundheitsdaten. Und all diese so wichtigen Informationen werden in unseren Smartphones über die mobilen Apps gespeichert, die wir in unserem täglichen Leben verwenden. Deshalb werden sie zu einem wesentlichen Angriffsziel für Angreifer.
Was suchen Angreifer auf unseren mobilen Geräten?
- Zugriff auf Credentials
- Personenbezogene Daten (Adressen, Kreditkartendaten, Standort…)
- Zugriff auf den Datenspeicher der Anwendung
- Rückwärtsingenieurwesen durchführen, um Vulnerabilitäten zu lokalisieren, eingebettete Anmeldeinformationen oder Algorithmen, die Schlüssel generieren
- Malware-Installation oder Blockierung vorhandener Funktionen
- Zugriff auf das Gerät und Steuerung der Verbindungen
- usw.
Wie wir sehen können, ist es unerlässlich, unserer Anwendung Sicherheitsmechanismen hinzuzufügen, die die oben genannten Aktionen verhindern.
Abschirmung in mobilen Anwendungen: Warum ist das nicht üblich?
Der Hauptgrund ist, dass sich die Entwickler darauf konzentrieren, dass diese ordnungsgemäß funktionieren und auf einer breiten Palette von Geräten laufen, die alle definierten Anforderungen erfüllen... und sich hauptsächlich auf Aspekte konzentrieren, die für den Benutzer attraktiver sind, wie Benutzerfreundlichkeit, Benutzererfahrung und grafische Benutzeroberfläche.
Dennoch ist es wesentlich, sich bewusst zu sein, dass das Implementieren von Sicherheitsmechanismen in einer mobilen Anwendung genauso wichtig ist, insbesondere angesichts der großen Anzahl von Benutzern, die diese nutzen können.
Tatsächlich müssen immer mehr Unternehmen ihre Anwendungen einem Prozess des ethischen Hackings unterziehen, bei dem versucht wird, in ein System einzudringen, mögliche Schwachstellen zu identifizieren und zu beheben, was die Ausnutzung durch bösartige Hacker effektiv verhindert.
Grundlegende Sicherheitsmaßnahmen für mobile Anwendungen
Bei der Entwicklung unserer mobilen Anwendung müssen wir uns auf verschiedene Bereiche konzentrieren und bestimmte Anforderungen in jedem von ihnen erfüllen. Dafür können wir uns am OWASP-Standard für die Sicherheit mobiler Anwendungen orientieren, der Anforderungen für Architekten und Softwareentwickler bereitstellt, die sichere mobile Anwendungen entwickeln möchten.
Diese Anleitung definiert 2 Sicherheitsüberprüfungsebenen sowie eine Reihe von Anforderungen an die Reverse-Engineering-Beständigkeit.
Die Wahl des Levels hängt vom Kontext unserer Anwendung ab. Level L1 enthält empfohlene generische Sicherheitsanforderungen für alle mobilen Anwendungen. Das nächste Level, L2, richtet sich an Apps, die hochsensible Daten verarbeiten (Finanzsektor, Gesundheitswesen).
Im Folgenden spezifizieren wir die herausragenden Sicherheitsanforderungen, die wir bei der Entwicklung unserer Anwendung berücksichtigen sollten, kategorisiert in sieben Bereiche. Eine vollständige Liste finden Sie jedoch im OWASP-Leitfaden:
Speicherung von Daten und Datenschutz
Der Schutz sensibler Daten wie Anmeldedaten und privater Informationen ist nicht nur eine gesetzliche Verpflichtung, sondern auch ein kritischer Aspekt der mobilen Sicherheit.
Einige der Anforderungen, die den Zugriff auf diese Informationen verhindern, sind wie folgt:
- Keine sensiblen Informationen im lokalen Speichergerät speichern, und falls erforderlich, müssen diese mit einem Schlüssel verschlüsselt werden, der aus der sicheren Speicherhardware abgeleitet ist und eine vorherige Authentifizierung erfordert.
- Keine sensiblen Informationen in Systemprotokollen oder Backups speichern.
- Keine sensiblen Informationen wie Passwörter oder Kreditkartennummern über die Benutzeroberfläche (interfaz de usuario) oder Bildschirmfotos offenlegen und den Tastaturcache in Textfeldern mit solchen Informationen deaktivieren.
Verwendung von kryptografischen Schlüsseln
Bei der Sicherung sensibler Informationen auf unserem Gerät ist die Kryptografie ein wesentlicher Bestandteil. Bei der Verwendung kryptografischer Schlüssel müssen wir die folgenden Anforderungen beachten:
- Nicht nur von symmetrischer Verschlüsselung abhängig sein, deren Schlüssel direkt im Quellcode der App enthalten sind.
- Nicht dieselbe kryptografische Schlüssel für verschiedene Zwecke wiederverwenden.
- Die Zufallswerte werden mithilfe eines sicher genug sicheren Zufallszahlengenerators generiert.
Authentifizierung und Sitzungskontrolle
Um eine Anwendung sicher zu machen, muss sie über einen Mechanismus zur Authentifizierung und Kontrolle der Benutzersitzung verfügen. Obwohl es wahr ist, dass der Großteil dieser Logik auf der Serverseite liegt, sind hier einige Anforderungen aufgeführt, die wir berücksichtigen müssen:
- Die biometrische Authentifizierung, falls vorhanden, ist nicht mit Ereignissen verbunden (z. B. durch Verwendung einer API, die einfach "true" oder "false" zurückgibt), sondern basiert auf dem Entsperren des Schlüsselbunds/Keystores (sicherer Speicher).
- Para aplicaciones que gestionan información muy sensible, aplicar mecanismos de doble factor de autenticación.
- Sitzungen und Tokens sollten nach einer festgelegten Zeit der Inaktivität des Benutzers ablaufen.
Kommunikation mit Diensten
Ein wichtiger Aspekt in Apps ist die Sicherstellung der Kommunikation mit dem Server, um die Vertraulichkeit und Integrität der ausgetauschten Daten zu gewährleisten. Dafür sind einige Anforderungen:
- Die Informationen werden verschlüsselt über das TLS-Protokoll gesendet.
- Die Anwendung überprüft das X.509-Zertifikat des Remote-Systems beim Aufbau des sicheren Kanals und akzeptiert nur Zertifikate, die von einer vertrauenswürdigen CA signiert wurden.
- Die Anwendung verwendet ihr eigenes Zertifikatspeichersystem oder führt ein Pinning des Serverzertifikats oder des öffentlichen Schlüssels durch.
Interaktion mit der mobilen Plattform
Die Interaktion zwischen Anwendungen und Betriebssystemen muss unter Berücksichtigung der folgenden Aspekte erfolgen:
- Die App erfordert die mindestens erforderliche Anzahl von Berechtigungen.
- Die Anwendung stellt keine sensiblen Funktionen über IPC-Mechanismen bereit, es sei denn, dass diese Mechanismen angemessen geschützt sind
- Deaktivieren Sie JavaScript in den Webansichten, es sei denn, es ist erforderlich.
- Die WebViews sind so konfiguriert, dass nur das Minimum an Schemas erlaubt ist (idealerweise nur https). Gefährliche Schemas wie file, tel und app-id sind deaktiviert.
Code quality
Trotzdem Apps nicht so anfällig für Cross-Site-Scripting-Angriffe sind, sollten Entwickler weiterhin bewährte Praktiken befolgen, um den Code sicher zu machen:
- Die Anwendung muss signiert und mit einem gültigen Zertifikat versehen sein, sowie im Release-Modus veröffentlicht werden.
- Die Anwendung erfasst und verwaltet ordnungsgemäß mögliche Ausnahmen.
- Die kostenlosen Sicherheitsfunktionen der Tools wie Bytecode-Minimierung, Stackschutz, PIE-Unterstützung und automatische Referenzzählung sind aktiviert.
- Verwenden Sie Tools, um den Quellcode auf mögliche Sicherheitslücken zu analysieren, wie zum Beispiel SonarQube.
Mechanismen gegen Manipulation und Reverse Engineering
Wir müssen verhindern, dass ein Angreifer unsere Anwendung manipulieren oder den Code umkehren kann. Dafür gibt es verschiedene Mechanismen, die implementiert werden müssen:
- Firmado de la aplicación: Eine der wichtigsten Sicherheitstechniken in Android ist das Signieren von Anwendungen mit öffentlichen und privaten Schlüsseln.
Beim Kompilieren einer Anwendung mit allen Bestandteilen (Texte, Grafiken, Code...) muss jeder Entwickler diese mit seinem Zertifikat sichern, damit die Signatur die Anwendung identifiziert und es möglich ist festzustellen, ob sie geändert wurde oder unverändert bleibt. Dies ist der einzige Weg zu wissen, ob eine App gefälscht oder authentisch ist: Wenn die Signatur geändert wurde, stimmt sie, falls vorhanden, nicht mit dem ursprünglichen Entwickler überein.
- Anti-Tamper: Die Anti-Tamper-Techniken erschweren es einem Angreifer, Software zu ändern, indem sie Reverse Engineering betreiben und deren Integrität überprüfen, um sie anschließend modifiziert zu verwenden. Dafür wird überprüft, ob die Anwendungssignatur original ist, und es werden Prüfmechanismen für die Prüfsumme angewendet.
- Code Obfuscation: Die Code-Obfuskation ermöglicht es, den Code zu komprimieren, zu optimieren und unleserlich zu machen, indem Klassen, Felder, Methoden und Namen semantisch umbenannt werden. Das Ergebnis ist eine kleinere Anwendung, die schwieriger zu reverse-engineeren ist und die Verständlichkeit für böswillige Betrachter erschwert.
- Überprüfung der Herkunft des Installationsprogramms: Mit dieser Technik wird überprüft, ob die Anwendung aus einer vertrauenswürdigen Quelle verteilt wurde, um zu verhindern, dass wir eine Kopie der APK auf unserem Gerät haben, die mit Malware infiziert sein könnte.
- Anti-Debug: Anti-Debug-Techniken erschweren oder erkennen das Debuggen einer Anwendung, um bestimmte Maßnahmen anwenden zu können, die verhindern, dass ein Angreifer den Prozess fortsetzt. Der einfachste Mechanismus erfolgt über eine Eigenschaft im App-Manifest selbst, obwohl empfohlen wird, dynamisch und an verschiedenen Stellen zu überprüfen, ob das Debuggen stattfindet oder nicht.
- Anti-Emulator: Wenn unsere Anwendung auf einem Emulator außerhalb des Entwicklungsprozesses ausgeführt wird, deutet dies darauf hin, dass jemand anderes als wir versucht, die Anwendung zu analysieren. Daher ist es eine bewährte Praxis zu überprüfen, dass in einer Release-Version nicht auf die Anwendung über einen Emulator zugegriffen wird, der die Sicherheit der Anwendung gefährden könnte.
- Anti-Root: Es sollte immer vermieden werden, dass eine Anwendung auf gerooteten Geräten ausgeführt wird, da diese Geräte viel anfälliger sind und den Zugriff auf den reservierten Speicher des Systems und der Anwendung ermöglichen, was die Beständigkeit und damit die Privatsphäre der verwalteten Daten gefährdet.
- Anti-Clone: Mechanismus zur Verhinderung des Klonens der Anwendung, in diesem Zusammenhang werden geeignete Eigenschaften definiert, um das Kopieren der installierten Anwendung zu verhindern und den Binärdatei zu erhalten, die ein potenzieller Angreifer für Reverse-Engineering-Techniken verwenden könnte.
- Zuverlässiges Gerät: Google verfügt über eine Anti-Missbrauchs-API (SafetyNet Attestation API), die es ermöglicht zu überprüfen, ob das Android-Gerät, auf dem eine App ausgeführt wird, vertrauenswürdig ist.
Schlussfolgerung
Jeden Tag nutzen wir mehr mobile Anwendungen und sie speichern immer mehr sensible Benutzerinformationen. Daher ist es sehr wichtig, über neue Sicherheitsmaßnahmen auf dem Laufenden zu bleiben und sie proaktiv auf unsere Entwicklungen anzuwenden. Das Ziel sollte nicht nur sein, dass der Benutzer mit einer guten UX interagiert, sondern auch, dass er dies in voller Sicherheit tut.
"Bewusstsein für Schwachstellen ist bereits die halbe Miete in Bezug auf Sicherheit".
Share