Technische Details
Um zu verstehen, wie die Telefonnummer einschließlich des geheimen OTP, das den Benutzer authentifiziert, von einer böswillig installierten Anwendung gestohlen werden kann, müssen wir zunächst klären, was "Intents" in Android sind.
Was sind Intents in Android?
Intents sind ein grundlegender Bestandteil in Android, die den Nachrichtenaustausch zwischen verschiedenen Komponenten einer Anwendung oder sogar zwischen verschiedenen Applikationen ermöglicht. Sie dienen als grundlegender Baustein des Android-Betriebssystems und spielen eine entscheidende Rolle bei der Ermöglichung verschiedener Funktionalitäten und Interaktionen.
Ein Intent kann als abstrakte Beschreibung eines auszuführenden Vorgangs betrachtet werden und besteht in der Regel aus zwei wesentlichen Komponenten: der Aktion und den Daten. Die Aktion steht für die Art des auszuführenden Vorgangs, z. B. "Anzeigen", "Bearbeiten" oder "Senden". Die Daten hingegen geben den Inhalt oder das Ziel des Vorgangs an, z. B. eine bestimmte URL, eine Datei oder ein Datenelement.
Arten von Intents in Android
- Explizite Intents: Ein expliziter Intent wird verwendet, wenn der Entwickler die spezifische Zielkomponente (z. B. eine Aktivität, einen Dienst oder einen Broadcast-Empfänger) kennt, die den Intent verarbeiten soll. Er gibt explizit den Klassennamen oder den Paketnamen der Zielkomponente an und gewährleistet so eine direkte und spezifische Zustellung.
- Implizite Intents: Ein impliziter Intent ist flexibler und ermöglicht es dem System, die geeignete Komponente für die Verarbeitung des Intents auf der Grundlage seiner Aktion und Daten zu bestimmen. Implizite Intents sind nützlich, wenn Entwickler eine Aufgabe an eine andere Komponente delegieren möchten, ohne die genaue Zielkomponente zu spezifizieren. Wenn eine Anwendung beispielsweise ein Bild freigeben möchte, kann sie einen impliziten Intent mit der Aktion ACTION_SEND und den Daten des Bildes erstellen, so dass der Benutzer aus einer Liste verfügbarer Anwendungen auswählen kann, die den Freigabevorgang durchführen sollen. Wenn auf dem Gerät nur eine Anwendung installiert ist, die die spezifische Absichtsaktion ausführen kann, wählt das Betriebssystem diese automatisch aus, ohne dass der Benutzer eingreifen muss.
Intents werden nicht nur zum Starten von Aktivitäten oder Diensten innerhalb einer Anwendung verwendet, sondern auch für die Kommunikation zwischen Anwendungen. Sie ermöglichen es Entwicklern, die von anderen Anwendungen bereitgestellten Funktionen zu nutzen, indem sie Intents mit entsprechenden Aktionen und Daten senden. Diese Inter-App-Integration ermöglicht es Entwicklern, umfassende und vernetzte Benutzererfahrungen zu schaffen.
Insgesamt dienen Intents in Android als vielseitiger Mechanismus für die Kommunikation und Koordination zwischen verschiedenen Anwendungskomponenten und ermöglichen nahtlose Interaktionen, die gemeinsame Nutzung von Daten und die Integration zwischen verschiedenen Anwendungen.
Anwendungsfälle
Intents in Android haben verschiedene Anwendungsfälle und sind ein grundlegender Bestandteil der Kommunikation zwischen Komponenten. Sie spielen beispielsweise in folgenden Aktivitäten eine wichtige Rolle:
- Starten von Aktivitäten: Intents werden häufig verwendet, um Aktivitäten in Android zu starten. Durch das Erstellen eines expliziten oder impliziten Intents mit der entsprechenden Aktion und den entsprechenden Daten können Entwickler Aktivitäten innerhalb ihrer eigenen Anwendung oder in anderen Applikationen starten. Zum Beispiel das Klicken auf eine Schaltfläche, um einen neuen Bildschirm zu öffnen oder das Starten der Kamera-App, um ein Foto aufzunehmen.
- Dienstaufruf: Intents können verwendet werden, um Hintergrunddienste in Android zu starten oder mit ihnen zu interagieren. Entwickler können Intents zum Starten eines Dienstes erstellen und die erforderlichen Daten oder Befehle für die Ausführung des Dienstes bereitstellen. Dies ist nützlich für lang laufende Hintergrundaufgaben, wie z. B. das Herunterladen von Dateien, das Abspielen von Musik oder das Ausführen rechenintensiver Aufgaben, ohne dass die Benutzeroberfläche einfriert.
- Übertragung von Ereignissen: Intents werden für die Übertragung von Ereignissen oder Nachrichten zwischen verschiedenen Komponenten oder Anwendungen verwendet. Durch das Versenden einer Absicht können Entwickler interessierte Empfänger über bestimmte Ereignisse informieren oder Aktionen auslösen. Beispielsweise kann ein Broadcast-Intent gesendet werden, um andere Anwendungen über die Änderung der Netzwerkverbindung oder den Akkustand des Geräts zu informieren.
Intent Broadcasts
Wie bereits erwähnt, können Intents per Broadcast übertragen werden. Um mit einem solchen Intent zu interagieren, kann ein BroadcastReceiver auf entsprechende Signale hören und reagieren. Das Broadcasten eines Intents ist wie das Rufen einer Nachricht, die jeder hören kann, der daran interessiert ist. Jede Komponente, die am Empfang dieser Nachricht interessiert ist, kann einen BroadcastReceiver im System registrieren, um auf diese bestimmte Nachricht zu warten.
Intent-Broadcasts werden in der Android-Entwicklung häufig für verschiedene Zwecke verwendet, z. B. für Systemereignisse (z. B. Abschluss des Bootvorgangs eines Geräts), zur Benachrichtigung von Komponenten über Änderungen (z. B. Netzwerkverbindung, Akkustatus), zum Senden von Benachrichtigungen an mehrere Empfänger oder zum Auslösen benutzerdefinierter Ereignisse innerhalb einer Anwendung.
Sicherheitsbedenken
Implizite Broadcast Intents in Android sind von besonderem Interesse, wenn sie für den Transport von (sensiblen) Daten an andere App-Komponenten oder Apps verwendet werden sollen, da sie von unbeabsichtigten oder bösartigen Anwendungen abgefangen werden können. Wenn ein impliziter Broadcast Intent gesendet wird, ist er nicht explizit an eine bestimmte Anwendung gerichtet, sondern wird an alle Anwendungen gesendet, die sich für den Empfang dieser bestimmten Art von Intent registriert haben. Dies kann zu einer unbeabsichtigten Offenlegung sensibler Informationen oder einem unbefugten Zugriff auf bestimmte Funktionen führen.
Wenn beispielsweise ein impliziter Broadcast Intent mit sensiblen Daten wie Benutzeranmeldeinformationen oder personenbezogenen Daten gesendet wird, kann jede Anwendung mit der entsprechenden Berechtigung diese Informationen abfangen und darauf zugreifen. Bösartige Anwendungen können dies ausnutzen, indem sie sich für den Empfang derselben Absicht registrieren und sensible Daten ohne das Wissen oder die Zustimmung des Benutzers abrufen.
Darüber hinaus können implizite Broadcast-Intents verwendet werden, um unbeabsichtigte Aktionen auszulösen oder das normale Verhalten von Anwendungen zu stören. Böswillige Apps können sich registrieren, um bestimmte Broadcast-Intents abzufangen und sogar die Weiterverteilung zu beenden, was zu unerwarteten Konsequenzen oder Denial-of-Service-Angriffen führen kann.
Dual-Tone Multi-Frequency (DTMF) Signaling
In der nicht-technischen Beschreibung der Schwachstelle haben wir erwähnt, dass das generierte OTP an die Telefonnummer angehängt wird. Dies ist jedoch nicht ganz richtig. Es wird nicht einfach an die Telefonnummer angehängt, sondern mittels DTMF-Signalisierung an das Banksystem übertragen.
Mit DTMF können Benutzer numerische oder alphanumerische Zeichen über die Tastatur ihres Telefons eingeben, während sie ein Telefongespräch führen. Wenn ein Benutzer eine Ziffer auf der Tastatur seines Telefons drückt, wird eine einzigartige Kombination aus zwei spezifischen Frequenzen erzeugt, die als dual-tone multi-frequency Signal bekannt sind. Jede Ziffer entspricht einem bestimmten Frequenzpaar. Diese Signale werden über den Sprachkanal des Telefongesprächs übertragen und am Empfangsort dekodiert. DTMF-Signale werden für verschiedene Zwecke verwendet, z. B. für automatische Telefonsysteme, interaktive Sprachdialogsysteme (IVR), Telefonbanking, die Eingabe von Passwörtern oder PINs, Zugangscodes für Telefonkonferenzen und die Menüführung in sprachbasierten Systemen. Die Empfangsseite, in der Regel eine Telefonzentrale oder ein Computersystem, dekodiert die DTMF-Signale und verarbeitet die eingegebenen Ziffern entsprechend. Auf diese Weise können Benutzer während eines Telefongesprächs mit automatischen Systemen interagieren, numerische Eingaben tätigen oder durch Menüoptionen navigieren. DTMF-Signale sind zu einer Standardmethode für die Eingabe von Ziffern bei Telefongesprächen geworden und werden von den meisten modernen Telekommunikationssystemen unterstützt, einschließlich Festnetztelefonen, Mobiltelefonen und Voice-over-IP-Diensten (VoIP).
Der Anruf-Intent, mit der der Anruf bei der Banken-Hotline eingeleitet wird, enthält bereits das OTP, das den Benutzer über DTMF-Signalisierung authentifiziert.