Unsere Security Analyst*innen im usd HeroLab decken während ihrer Penetrationstests (Pentests) immer wieder Einfallstore auf, die erhebliche Risiken für die Unternehmenssicherheit darstellen. Dabei begegnen ihnen vermehrt die gleichen Schwachstellen. Unsere Blogserie „Top 3 Schwachstellen“ stellt diese dar und gibt Ihnen Tipps für die Vermeidung – für #moresecurity über alle IT-Assets.
Heute betrachten wir die drei häufigsten sicherheitskritischen Schwachstellen, auf die unsere Analyst*innen bei Pentests von mobilen Anwendungen (Mobile Apps) immer wieder stoßen.
Warum Pentests von Mobile Apps?
Mobile Apps speichern häufig sensible persönliche und geschäftliche Informationen. Der Schutz dieser Informationen ist von höchster Wichtigkeit - nicht nur für den Nutzer selbst, sondern auch für den Betreiber der App. Denn sollten Angreifer Zugang zu diesen Informationen gelangen, kann dies zu finanziellen Auswirkungen und einem ggf. einhergehenden Imageschaden für das Unternehmen führen. Durch Pentests von Mobile Apps können Sicherheitslücken proaktiv identifiziert und behoben werden, noch bevor Angreifer diese ausnutzen.
Zugriff auf sensible Daten
Zu den sensiblen Daten, die von Mobile Apps gespeichert werden, zählen Benutzerdaten, Session-Informationen und Anwendungsdaten. In ihren Pentests von mobilen Anwendungen finden unsere Analyst*innen allerdings häufig genau diese Informationen an Stellen, die nicht ausreichend geschützt sind.
Beispielsweise konnte in nachfolgendem Beispiel ein hartkodierter API-Key, der für kritische Funktionen in der entfernten Anwendungs-API benötigt wird, aus dem dekompilierten Code extrahiert werden:
Sicherheits-Tipp:
Wir empfehlen den Zugriff auf solche sensiblen Daten, wie API-Keys, zu beschränken und nicht hartkodiert im Code der App zu speichern. Dies kann im Fall der API durch den Einsatz eines geeigneten Authentifizierungsmechanismus geschehen. Ein Token zur Authentifizierung der Mobile App kann bei Bedarf nach einem Login von einem Server angefragt werden, der dann fortan für bestimmte Zeit genutzt werden kann.
Allerdings zeigen dynamische Analysen, dass sensible Daten oft unsicher auf den Geräten gespeichert werden. Obwohl die mobilen Betriebssysteme Anwendungsdaten durch verschiedene Sicherheitsvorkehrungen von anderen Apps abschirmen, kann dies ein falsches Sicherheitsgefühl vermitteln. In manchen Fällen stoßen unsere Analyst*innen darüber, dass beispielsweise ein Token zur Laufzeit der Mobile Apps in den Shared Preferences gespeichert wird.
Die Shared Preferences sind eine Möglichkeit, um einfache Daten in Android-Anwendungen dauerhaft zu speichern. Sie bieten eine Key-Value-Speicherung für kleine Mengen von Daten wie Benutzereinstellungen, Zustände von Funktionen, Benutzerpräferenzen und Ähnliches. In nachfolgendem Beispiel befindet sich nun auch der Authentifizierungstoken unter diesen Daten:
Es ist aus mehreren Gründen nicht empfehlenswert, sensible Daten unter Android in den Shared Preferences zu speichern. Zum einen könnten durch Backups der Mobile App-Dateien sensible Daten offengelegt werden. Wenn eine Benutzerin oder ein Benutzer ein Backup der Anwendungsdaten erstellt, kann dies potenziell dazu führen, dass die in den Shared Preferences gespeicherten sensiblen Informationen dort im Klartext auftauchen. Ein weiterer Grund ist, dass unsichere Geräte, wie etwa solche, die gerootet wurden, ein erhebliches Sicherheitsrisiko darstellen können. Durch das Umgehen der Schutzmechanismen des mobilen Betriebssystems können Angreifer leichter auf die App-Daten zugreifen, einschließlich der Shared Preferences. Dies könnte zu einem unautorisierten Zugriff auf sensible Informationen führen und die Sicherheit der Mobile App sowie die Privatsphäre der Benutzer gefährden.
Sicherheits-Tipp:
Aus diesem Grund ist es ratsam, alternative, sicherere Speicheroptionen wie den Android KeyStore für die Speicherung von Authentifizierungstoken oder kryptografischer Schlüssel zu verwenden. Unter iOS gilt dies ebenfalls für Geräte, die mit einem Jailbreak versehen sind. Deshalb ist es hier ratsam , sensible Daten wie Passwörter und kryptografische Schlüssel in der iOS Keychain zu speichern.
Fehlende Zugriffskontrolle
Bei unseren Pentests von Mobile Apps verfolgen wir einen ganzheitlichen Ansatz, der über die bloße Prüfung der mobilen Anwendung hinausgeht. Unsere Analyst*innen untersuchen nicht nur die App selbst, sondern auch alle damit verbundenen Systeme. Dies umfasst Aspekte wie fehlende Zugriffskontrollen, bei denen es möglicherweise Schwachstellen gibt, die es einem Angreifer ermöglichen, nicht autorisierte Aktionen auszuführen.
Ein API-Server ist oftmals ein integraler Bestandteil einer Mobile App. Ein Angreifer wird die einzelnen Endpunkte der verwendeten API nach einer eingehenden Analyse der App betrachten. Manchmal erfolgt die Zugriffskontrolle lediglich auf der Ebene der mobilen Anwendung, während der API-Server diese Trennung nicht vollständig implementiert oder beachtet.
In folgendem Beispiel wurde eine Anfrage, welche die Mobile App an den Server schickt, leicht abgeändert. Sie sorgt dafür, dass der API-Server die Daten des Nutzers entsprechend ändert. Jedoch akzeptiert und verarbeitet der Server Anfragen im JSON-Format mit mehr Attributen, als die ursprüngliche Anwendung sendet.
In diesem Fall wurde das JSON-Attribut "isAdmin" hinzugefügt.
Wenn diese modifizierte Anfrage an den Server gesendet wird, ändert der Server nicht nur die entsprechenden Nutzerinformationen, sondern gewährt dem Benutzer auch Admin-Rechte.
Mit diesen Zugriffsrechten konnten nun Anfragen an den Server gesendet werden, die ursprünglich nur für Administratoren gedacht waren. Dies ermöglichte beispielsweise das Einsehen und Ändern persönlicher Nutzerdaten anderer Nutzer.
Sicherheits-Tipp:
Der API-Server sollte sicherstellen, dass jede Anfrage von einem authentifizierten User stammt und dass dieser über die erforderlichen Berechtigungen verfügt, um die angeforderten Aktionen auszuführen. In diesem Fall sollte die Änderung von Benutzerinformationen und insbesondere das Gewähren von Admin-Rechten nur von autorisierten Administratoren durchgeführt werden können.
Sicherheitsfehlkonfiguration
Unter Sicherheitsfehlkonfiguration in mobilen Anwendungen versteht man die unsachgemäße Konfiguration von Sicherheitseinstellungen, Berechtigungen und Kontrollen, die zu Schwachstellen und unbefugtem Zugriff führen können.
Im nachfolgenden Beispiel entstand eine Schwachstelle durch die Verwendung von WebViews und Deeplinks. Deeplinks in Android und iOS sind URLs, die auf bestimmte Inhalte oder Funktionen in einer App verweisen. Sie ermöglichen es Benutzer*innen, direkt von einer Webseite oder einer anderen App auf eine spezifische Ansicht oder Aktion in einer anderen App zu gelangen, ohne dass sie die App manuell öffnen und durch die Menüs navigieren müssen. Obwohl Deeplinks die Benutzererfahrung verbessern können, sind sie potenziell gefährlich, da sie von Angreifern missbraucht werden können, um Benutzer*innen auf schädliche Inhalte umzuleiten oder um Sicherheitslücken auszunutzen.
Der folgende Deeplink beispielsweise könnte einer Benutzerin oder einem Benutzer über einen Phishing-Versuch zugesandt werden, um Schwachstellen in der App auszunutzen und Zugang zu Benutzerdaten zu erlangen:
paymentapp://startpayment?url=https://www.attackerserver.de
Die Schwachstelle besteht darin, dass die App den Deeplink verarbeitet und dessen Inhalt in einer WebView, also einem eingebetteten Browser, öffnet. Dies ermöglicht es einem Angreifer, eine gefälschte Webseite im Design der legitimen App anzuzeigen. Dadurch wird es für unwissende Nutzer*innen schwierig, den Angriff zu erkennen, da die gefälschte Webseite den Eindruck erweckt, Teil der App zu sein.
Sicherheits-Tipp:
Um den beschriebenen Angriff zu verhindern, sollten Entwickler Deeplinks validieren, nur von vertrauenswürdigen Quellen akzeptieren und sicher verarbeiten. Wenn die App Webinhalte in einer WebView anzeigt, sollte sie sicher konfiguriert werden, um zu verhindern, dass gefälschte Webseiten im Design der App angezeigt werden.
Es ist wichtig zu beachten, dass neben den genannten Schwachstellen noch viele weitere existieren können. Da jede mobile Anwendung unterschiedliche Funktionen aufweist, können auch neue Gefahren auftreten. Ein Pentest kann Klarheit schaffen und Ihnen dabei helfen, die Daten Ihres Unternehmens, Ihrer Kunden und Ihrer Mitarbeiter*innen effektiv zu schützen.
Sie möchten Ihre Mobile App einer Prüfung unterziehen? Kontaktieren Sie uns, wir helfen Ihnen gern.