Moderne Telefonbetrüger: Wie Betrüger Geld mit nur einem Telefonanruf stehlen

research vulnerability

In der heutigen vernetzten Welt spielen mobile Anwendungen eine wichtige Rolle in unserem täglichen Leben.

[Translate to German:] person typing on laptop holding phone

Sie verarbeiten sensible Daten und erleichtern verschiedene Funktionen, darunter sichere Transaktionen und Authentifizierungsprozesse. Mit der zunehmenden Abhängigkeit von mobilen Anwendungen ist die Gewährleistung ihrer Sicherheit zu einem vorrangigen Anliegen geworden. In diesem Blogbeitrag wird eine Schwachstelle in einer Bankanwendung beschrieben, die es Angreifern ermöglicht, unbemerkt Geldtransaktionen von bis zu 5.000 € im Namen anderer Benutzer durchzuführen. Darüber hinaus werden weitere mögliche Angriffsszenarien beschrieben, mit denen persönliche Informationen abgegriffen werden können.

Mit dieser Veröffentlichung möchten wir Entwickler, Sicherheitsexperten und Endbenutzer für die Bedeutung sicherer Praktiken und die Gefahr der Installation von Anwendungen aus nicht vertrauenswürdigen Quellen sensibilisieren.

Telefon Banking

SEC Consult hat kürzlich eine mobile Banking-Anwendung geprüft, die den Nutzern die Möglichkeit bietet, Telebanking-Funktionen über Telefonanrufe zu nutzen. Auf Seiten der Bank muss jedoch keine reale Person den Hörer abnehmen - der gesamte Prozess wird von einem Computersystem durchgeführt und der Nutzer kann eine Geldüberweisung per Spracheingabe oder durch Drücken der Wähltasten auf dem Telefon auslösen. Um den Anruf aus der Anwendung heraus einzuleiten, müssen sich die Nutzer zunächst mit ihrem App-Passwort oder ihrem Fingerabdruck authentifizieren. Nach der Authentifizierung generiert die App ein Einmalpasswort (OTP), das für eine kurze Zeit gültig ist. Anschließend wählt die App automatisch die Bank-Hotline und überträgt die erforderlichen Informationen, einschließlich des OTP, indem sie es an die Telefonnummer anhängt. Die Bank-Hotline prüft anschließend automatisiert die empfangenen Informationen auf ihre Gültigkeit. Von diesem Zeitpunkt an gilt der Nutzer als authentifiziert und kann Überweisungen von bis zu 5.000 € ausführen.

Geld mit einem Telefonanruf stehlen

Die Art und Weise, wie die Anwendung den Telefonanruf einleitet, ist angreifbar und kann von jeder anderen installierten Anwendung abgefangen und verändert werden. Die Telefon-Anwendung wird nicht explizit zum Starten des Anrufs angegeben, sondern jede böswillige Anwendung, die auf dem Gerät installiert ist und angibt, ausgehende Anrufe zu bearbeiten, kann die Aktion zum Auslösen des Anrufs abfangen. Die Telefonnummer einschließlich des geheimen OTP, das den Benutzer authentifiziert, kann von der bösartigen App abgefangen und und an den Angreifer gesendet werden. Die Bankanwendung bleibt dabei ohne Fehlermeldung geöffnet. Das abgefangene OTP kann dann vom Angreifer verwendet werden, um sich bei der Bank-Hotline als sein Opfer auszugeben. Da das OTP den Benutzer authentifiziert und während des Telefongesprächs keine weiteren Prüfungen vorgenommen werden, kann ein Angreifer damit bis zu 5.000 € auf sein Bankkonto überweisen.

Wenn Sie mehr über die technischen Details dieser Sicherheitslücke erfahren möchten, lesen Sie den folgenden Abschnitt "Technische Details". 

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

  1. 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.
  2. 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:

  1. 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.
  2. 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.
  3. Ü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.

Permission request einer bösartigen Anwendung

Abfangen von Intents

Ein Angreifer kann eine bösartige Anwendung erstellen, die alle ausgehenden Anrufe über einen Broadcast-Empfänger beobachtet. Dazu benötigt die Anwendung des Angreifers die Berechtigung android.permission.PROCESS_OUTGOING_CALLS. Diese Berechtigung wird von Android als "gefährlich" eingestuft und muss vom Benutzer explizit an die Anwendung vergeben werden. Da diese Berechtigung jedoch auch von vielen beliebten Messenger-Apps benötigt wird, ist die Wahrscheinlichkeit, dass ein Benutzer der Anwendung diese Berechtigung erteilt, entsprechend hoch.

Der folgende Screenshot zeigt diese Erlaubnisanfrage einer bösartigen Anwendung.

In der AndroidManifest.xml-Datei der App wird ein Broadcast-Empfänger definiert, der über einen Intent-Filter über ausgehende Anrufe informiert wird.

Broadcast Receiver

<receiver

    android:name=".CallReceiver"

    android:enabled="true"

    android:exported="true">

    <intent-filter>

        <category android:name="android.intent.category.DEFAULT"/>

        <action android:name="android.intent.action.NEW_OUTGOING_CALL" />

    </intent-filter>

</receiver>

Der Empfänger kann die gewählte Telefonnummer, einschließlich des DTMF-Signals, aus dem Intent extrahieren, wenn ein ausgehender Anruf getätigt wird. Außerdem kann der Empfänger die gewählte Rufnummer aus dem Anruf-Intent entfernen. Dadurch wird der abgehende Anruf unterdrückt, und das OTP behält seine Gültigkeit.

CallReceiver

public class CallReceiver extends BroadcastReceiver {

    @Override

    public void onReceive(Context context, Intent intent) {

        Log.d("CallReceiver""Initiated call detected");

 

        // extract the dialed phone number from the call intent

        String phoneNumber = getResultData();

        if (phoneNumber == null) {

            phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

        }

        Log.d("CallReceiver", phoneNumber);

        // set the dialed phone number to null to prevent the outgoing call

        setResultData(null);

    }

}

Ein Angreifer kann nun die extrahierten Daten nutzen, um sich am Telefon gegenüber der Bank als sein Opfer auszugeben.

Diebstahl der Intent-Daten

Die bösartige Anwendung kann sich als harmlose Anwendung ausgeben und neben der anfälligen Banking-Anwendung des Benutzers auf dessen Gerät installiert werden. Wenn der Benutzer die Telefon-Banking-Funktion der Banking-App nutzen möchte, wird er aufgefordert, sich mit seinem festgelegten Passwort oder seinem Fingerabdruck zu authentifizieren. Nach der Authentifizierung wird die Telefonanwendung des Geräts kurz geöffnet und sofort wieder geschlossen, da die empfangene Anfrage keine Telefonnummer mehr enthält. Die Banking-App wird nahtlos und ohne Fehlermeldung wieder angezeigt. Der Benutzer weiß nicht, dass eine andere auf dem Gerät installierte Anwendung den Anruf, einschließlich des OTPs, abgefangen hat.

Technische Fehlerbehebung

Um sich vor einem solchen Angriff zu schützen, sollten Intents, die sensible Informationen enthalten, immer explizit an eine bestimmte Zielanwendung gesendet werden. Im vorliegenden Fall wäre dies die Telefonanwendung. Da jedoch verschiedene OEMs und Benutzer ihre eigenen Telefonanwendungen verwenden können, ist es nicht möglich, den Paketnamen der Zielanwendung im Voraus festzulegen, da die standardmäßige Android-Telefonanrufanwendung möglicherweise nicht installiert ist und verschiedene Hersteller unterschiedliche Telefonanwendungen verwenden können. In dieser Situation besteht die bevorzugte Lösung darin, VoIP (Voice of Internet Protocol) in die Anwendung zu implementieren, so dass überhaupt keine impliziten Intents gesendet werden müssen. Dies verbessert zusätzlich die Benutzererfahrung mit der Anwendung, da der Benutzer die Anwendung nicht verlassen muss, um die Telefonbanking-Funktion zu nutzen.

Technische Schlussfolgerung

Implizite Intents in Android-Anwendungen werden seit langem für ihre Bequemlichkeit und Flexibilität geschätzt. Ihre inhärenten Sicherheitsrisiken können jedoch nicht ignoriert werden. In diesem Blogbeitrag haben wir die mit impliziten Intents verbundenen Gefahren untersucht und uns dabei auf ein spezifisches Szenario konzentriert, bei dem eine bösartige App sensible Daten abfängt, die während eines Telefonanrufs über DTMF-Signale übertragen werden.

Die Folgen eines solchen Angriffs können schwerwiegend sein und von Identitätsdiebstahl bis zu finanziellen Schäden reichen. Um sich gegen diese Bedrohungen zu schützen, müssen Entwickler sichere Implementierungspraktiken anwenden, die die Verwendung expliziter Intents bevorzugen, um sicherzustellen, dass sensible Daten nur an den beabsichtigten Empfänger übertragen werden.

Da sich das Android-Ökosystem ständig weiterentwickelt, ist es für Entwickler, Sicherheitsexperten und Benutzer unerlässlich, zusammenzuarbeiten und Sicherheitsmaßnahmen zu priorisieren. Durch die Förderung des Bewusstseins und die Implementierung robuster Sicherheitspraktiken können wir den allgemeinen Schutz sensibler Daten verbessern und die Integrität von Android-Anwendungen stärken.

Dieser Blog-Beitrag soll als Aufruf zum Handeln dienen und zu einer gemeinsamen Anstrengung anregen, unsere digitalen Erfahrungen zu sichern und ein sichereres Android-Ökosystem für alle zu schaffen.

Mann der auf sein Mobiltelefon blickt

Social Engineering Angriffe

Mit dieser Schwachstelle ist es nicht nur möglich, die Telefonnummer des eingeleiteten Anrufs auszulesen, die Telefonnummer kann darüber hinaus auch verändert werden. Dies erlaubt einem Angreifer, die Anrufe der Banking-Anwendung auf eine beliebige Nummer umzuleiten. Ein Angreifer könnte dies ausnutzen, um Anrufe auf seine eigene Telefonnummer umzuleiten und sich vor dem Kunden als Bank auszugeben, um weitere private Informationen vom Benutzer zu erhalten (ein so genannter Social Engineering-Angriff). Da der Anruf aus der legitimen Bankanwendung heraus initiiert wurde, ist dieser Angriff selbst für erfahrene Benutzer schwer zu erkennen.

Wie kann ich mich schützen?

Um sich als Endnutzer vor einem solchen Angriff zu schützen, ist es wichtig, keine Anwendungen aus nicht vertrauenswürdigen Quellen zu installieren. Es wird immer empfohlen, Apps nur aus den bekannten Stores herunterzuladen, da dort eine Vorabprüfung der Apps stattfindet. Wenn eine bösartige Anwendung die Sicherheitsprüfungen der Stores durchläuft, kann sie auch im Nachhinein noch als bösartig eingestuft werden, und die Benutzer, die die Anwendung heruntergeladen haben, werden darüber benachrichtigt.

Schlussfolgerung

Die Folgen eines solchen Angriffs können schwerwiegend sein und von Identitätsdiebstahl bis zu finanziellen Schäden reichen. 

Indem sie wachsam bleiben und bei der Vergabe von Berechtigungen für Anwendungen Vorsicht walten lassen, können Endnutzer die Risiken mindern. Darüber hinaus können die Information über potenzielle Sicherheitsschwachstellen und die regelmäßige Aktualisierung von Geräten und Anwendungen dazu beitragen, die digitale Umgebung sicherer zu machen.

Dieser Blog-Beitrag soll als Aufruf zum Handeln dienen und zu kollektiven Bemühungen anregen, unsere digitalen Erfahrungen zu sichern und ein sichereres Android-Ökosystem für alle zu schaffen.

 

Dieser Blog Post wurde von Fabian Densborn und Leonard Eschenbaum im Auftrag des SEC Consult Vulnerability Labs verfasst.

Interessieren Sie sich für eine Karriere bei SEC Consult?

SEC Consult ist immer auf der Suche nach talentierten Sicherheitsexpert:innen, die unser Team verstärken möchten.