https://a.storyblok.com/f/270183/1368x665/72fccf48d3/26mar_dev-blog_sim-swap-burner.jpg

Verhindern Sie Account-Übernahme-Betrug mit Vonage SIM-Swap Insight

Zuletzt aktualisiert am March 17, 2026

Lesedauer: 6 Minuten

Einführung

Wir alle haben geschäftliche und private Accounts auf verschiedenen Online-Websites und -Applikationen registriert. Eine Account-Übernahme findet statt, wenn Angreifer mit gestohlenen Anmeldeinformationen, SIM-Austausch oder Phishing Konten kapern. In diesem Blogbeitrag zeige ich Ihnen, wie Sie Vonage SIM Swap Insight um Telefonnummern während der Anmeldung zu verifizieren. Selbst wenn der Angreifer die korrekte Kombination aus Benutzer- und Passwortdaten hat, haben wir eine zusätzliche SIM-Swap-Prüfung eingerichtet.

Voraussetzungen

  • Node.js 16+ und npm

  • Netzwerk-API-Registrierung.

  • A Vonage Entwickler Account.

    Vonage API-Konto

    Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.

Quellcode

Hinweis: Überprüfen Sie, ob Ihr Kommunikationsdienstleister und Ihr Land in der verfügbaren Liste unterstützt werden.

Was ist SIM-Swap-Betrug?

Vielleicht benutzen Sie Ihr Telefon oder kennen jemanden, der sein Telefon benutzt, um seine Identität bei verschiedenen Konten zu authentifizieren, z. B. bei einer Bank oder in sozialen Medien.

SIM-Swap-Betrug liegt vor, wenn sich ein böswilliger Akteur als ein Opfer ausgibt und einen Mobilfunkbetreiber dazu bringt, die Telefonnummer des Opfers mit einer neuen SIM-Karte zu verknüpfen. Böswillige Akteure überreden Telekommunikationsbetreiber oft durch Social Engineering und nutzen persönliche Informationen, die sie durch Phishing oder Datenschutzverletzungen erhalten haben. Der Angreifer fängt dann die Lieferung der neuen SIM-Karte ab oder aktiviert die eSIM und erlangt so die Kontrolle über die Nummer des Opfers.

Bedenken Sie, was dieser Bösewicht alles tun kann: SMS-Nachrichten abfangen, Passwörter zurücksetzen, Telefonanrufe tätigen und entgegennehmen, auf Konten zugreifen, die durch eine Zwei-Faktor-Authentifizierung geschützt sind, und vieles mehr.

Erstellen einer Vonage-Anwendung

Nachdem wir nun verstanden haben, was SIM Swap ist, wollen wir die Vonage Anwendung erstellen, um die Vonage SIM-Swap-Einblick und unsere Demo-Webapplikation zu nutzen.

  • Um eine Anwendung zu erstellen, gehen Sie auf die Seite Erstellen einer Anwendung auf dem Vonage Dashboard und legen Sie einen Namen für Ihre Anwendung fest.

  • Wenn Sie eine API verwenden möchten, die Webhooks nutzt, benötigen Sie einen privaten Schlüssel. Klicken Sie auf "Generate public and private key", der Download sollte automatisch starten. Bewahren Sie ihn sicher auf; dieser Schlüssel kann bei Verlust nicht erneut heruntergeladen werden. Er folgt der Namenskonvention privat_<Ihre App-ID>.key. Dieser Schlüssel kann nun zur Authentifizierung von API-Aufrufen verwendet werden. Hinweis: Ihr Schlüssel funktioniert erst, wenn Ihre Anwendung gespeichert ist.

  • Wählen Sie die benötigten Funktionen (z. B. Voice, Nachrichten, RTC usw.) und stellen Sie die erforderlichen Webhooks bereit (z. B. Ereignis-URLs, Antwort-URLs oder URLs für eingehende Nachrichten). Diese werden im Lernprogramm beschrieben.

  • Zum Speichern und Bereitstellen klicken Sie auf "Neue Anwendung generieren", um die Einrichtung abzuschließen. Ihre Anwendung ist nun bereit für die Verwendung mit Vonage-APIs.

Wählen Sie die Netzwerkregistrierungsfunktion

Bei der Arbeit mit den netzwerkbasierten Funktionen in den Identity Insights APIs gibt es zwei verschiedene Umgebungen:

  • Die Produktionsumgebung liefert in einigen Ländern Live-Daten von den unterstützten Betreibern. Der Zugriff auf die Produktionsumgebung erfordert die Genehmigung der Mobilfunkbetreiber. Sie erfahren, wie Sie den Zugang beantragen können.

  • Der Playground ist eine sichere, kontrollierte Testumgebung, in der API-Aufrufe Live-Daten nur an eine kleine Gruppe von zugelassenen Telefonnummern zurückgeben. Eine Genehmigung durch die Netzbetreiber ist nicht erforderlich. Außerdem bietet der Playground Zugang zum Virtuellen Betreibereinem simulierten Operator, der gefälschte, aber deterministische Antworten erzeugt.

Schalten Sie im Schritt der Anwendungserstellung die Funktion "Network Registry" ein, wählen Sie "Playground" und klicken Sie unten rechts auf der Seite, um die Anwendung zu erstellen.

Network Registry capability on the dashboard, you can choose two access types: playground or production.Network Registry Capability

Aktualisieren Sie die Umgebungsvariablendatei

Kopieren Sie sie aus der Datei .env.example Dateiund erstellen Sie eine neue .env Datei für Ihr Projekt und fügen Sie die Umgebungsvariablen aus dem folgenden Codeausschnitt hinzu.

# .env

VONAGE_APPLICATION_ID=your_application_id
VONAGE_PRIVATE_KEY=Paste the private key file you just downloaded into your project directory, then provide the path to it in this field (e.g., ./private_your-app-id-here.key)
PERIOD=300

Anmerkung: Siehe Michaels Blogbeitrag für eine Erklärung der Verwendung von Umgebungsvariablen in Node.js.

Installieren Sie die Abhängigkeiten

In der Datei des Projekts package.json-Dateifinden Sie die folgenden Abhängigkeiten: Vonage Identity Insights SDK für Node.js, Vonage Auth SDK für Node.js, Vonage Server SDK für Node.js, dotenv, express, und nodemon. Alle können mit einem Befehl von der Kommandozeile aus installiert werden.

npm install 

Die Datei Server.js

Die Datei server.js-Datei verwaltet die Benutzerregistrierung und -anmeldung und fügt SIM Swap Insight von der Vonage Identity Insights API hinzu, um SIM Swap Betrug zu erkennen. Der Server läuft auf Port 3000.

Wir benötigen die von Ihnen installierten Abhängigkeiten, wie im Abschnitt "Installieren der Abhängigkeiten" in diesem Blogbeitrag beschrieben.

require("dotenv").config();
const path = require("path");
const express = require("express");
const { IdentityInsights } = require("@vonage/identity-insights");
const fs = require("fs");

Wir initialisieren Express und konfigurieren es für die Bereitstellung statischer Dateien aus dem öffentlichen Ordner.

const app = express();
app.use(express.json());
app.use(express.static("public"));

Wir erstellen eine Benutzervariable, die mit einem leeren Wert initialisiert wird, sobald sich der Benutzer auf der Webseite registriert. Diese Benutzerdaten werden nicht beibehalten, d. h. jedes Mal, wenn Sie den Server anhalten, werden die Informationen gelöscht.

const users = {};

Initialisierung und Konfiguration

Wir laden drei Umgebungsvariablen: VONAGE_APPLICATION_ID, VONAGE_PRIVATE_KEYund PERIOD (der die Anzahl der Stunden angibt, in denen nach SIM-Swap-Ereignissen gesucht werden soll). Anschließend führen wir einen Bootstrap-Schritt durch, um zu verifizieren, dass die Anwendungs-ID und der private Schlüssel konfiguriert sind; ist dies nicht der Fall, wird der Server beendet. Andernfalls liest er den privaten Schlüssel aus dem Dateipfad oder der Umgebungsvariablen und initialisiert den identityClient mit beiden Werten.

if (!APPLICATION_ID || !PRIVATE_KEY) {
 console.error('VONAGE_APPLICATION_ID or VONAGE_PRIVATE_KEY not set');
 process.exit(1);
}

const keyContent = fs.existsSync(PRIVATE_KEY)
 ? fs.readFileSync(PRIVATE_KEY, 'utf8')
 : PRIVATE_KEY;

if (!keyContent) {
 console.error('INVALID private key. Check if the file exists or the environment variable is correctly set');
 process.exit(1);
}

const identityClient = new IdentityInsights({
 applicationId: APPLICATION_ID,
 privateKey: keyContent,
});

SIM-Wechsel-Erkennungsfunktion

Die Funktion checkSimSwapWithIdentityInsights() Funktion ist eine asynchrone Funktion, die die Vonage Identity Insights API nach SIM-Swap-Informationen abfragt. Sie akzeptiert eine Telefonnummer und einen Zeitraum (in Stunden) und sendet dann eine Anfrage mit mehreren aktivierten Einblicken: Format, originalCarrier, currentCarrierund simSwap.

Für die Zwecke dieses Blogbeitrags übergeben wir sie alle als leere Objekte und verwenden nur den SIM Swap Insight. Die Zeitraum Wert wird in eine Ganzzahl umgewandelt, bevor er an die API gesendet wird.

Wenn die SIM-Swap-Prüfung den Wert "true" ergibt (was bedeutet, dass innerhalb des angegebenen Zeitraums ein SIM-Swap stattgefunden hat), wird die Anmeldung blockiert. Wenn ein API-Aufruf fehlschlägt, protokolliert die API eine Warnung, erlaubt aber der Anwendung, fortzufahren.

async function checkSimSwapWithIdentityInsights(phoneNumber, period) {
 try {
   const resp = await identityClient.getIdentityInsights({
     phoneNumber: phoneNumber,
     purpose: 'FraudPreventionAndDetection',
     insights: {
       format: {},
       originalCarrier: {},
       currentCarrier: {},
       simSwap: {
         period: parseInt(period)
       }
     }
   });

   return resp.insights?.simSwap?.isSwapped === true;
 } catch (error) {
   console.warn('Identity Insights SDK call failed:', error && error.message);
 }
}

Routen und Endpunkte

Der Server hat vier Hauptwege. Die erste bedient index.htmlwo sich die Benutzer anmelden oder registrieren können, und die zweite Route bedient main.html, die Willkommensseite nach erfolgreicher Authentifizierung.

app.get("/", (_req, res) => {
 res.sendFile(path.join(__dirname, "views/index.html"));
});

app.get("/main", (_req, res) => {
 res.sendFile(path.join(__dirname, "views/main.html"));
});

Die Website /register Endpunkt behandelt die Registrierung neuer Benutzer mit Validierungsprüfungen. Er stellt sicher, dass der Benutzername nicht bereits existiert und verhindert, dass dieselbe Telefonnummer für mehrere Accounts registriert wird. Wenn die Registrierung gültig ist, wird sie in der Datei Benutzer Objekt gespeichert.

app.post("/register", (req, res) => {
 const { username, password, phoneNumber } = req.body;

 if (users[username]) {
   return res
     .status(400)
     .json({ message: "Sorry, this username already exists." });
 }

 const phoneExists = Object.values(users).some(
   (user) => user.phoneNumber === phoneNumber
 );

 if (phoneExists) {
   return res.status(400).json({
     message: "This phone number is associated with another account.",
   });
 }

 users[username] = { username, password, phoneNumber };
 res.json({ message: "Registration success!" });
});

Die Website /login Endpunkt ist asynchron und behandelt die Authentifizierung mit SIM-Swap-Schutz. Er verifiziert zunächst, dass der Benutzername im System vorhanden ist, und prüft, ob das Passwort passt. Erst wenn beide Prüfungen bestanden sind, wird die Funktion zur Erkennung von SIM-Swaps mit dem konfigurierten Zeitraum aufgerufen.

app.post("/login", async (req, res) => {
 try {
   const { username, password } = req.body;
   const user = users[username];

   if (!user) {
     return res.status(404).json({ message: "Not Found" });
   }

   console.log("Attempting SIM swap check on phone number:", user.phoneNumber);

   if (user.password !== password) {
     return res
       .status(401)
       .json({ message: "This is an invalid username or password" });
   }

   const simSwapped = await checkSimSwapWithIdentityInsights(user.phoneNumber, PERIOD);

   if (simSwapped) {
     return res
       .status(401)
       .json({ message: "SIM Swap: true", simSwapped: true });
   }

   res.json({ message: "Success" });
 } catch (err) {
   console.error("Login error:", err);

   if (err.response && err.response.text) {
     const body = await err.response.text();
     console.error("Vonage SIM Swap API response:", body);
   }

   res.status(500).json({ message: "Internal Server Error" });
 }
});

In diesem Tutorial prüfen wir auf potenzielle Burner Accounts. Ich wollte auch erwähnen, dass SIM Swap Insight eine Echtzeit-Überprüfung des Aktivierungsdatums einer SIM-Karte im Mobilfunknetz über EU- und US-Endpunkten.

Sie können auch auf der Identity Insights (SIM Swap) Insight Referenzseiteeinsehen, die die OpenAPI-Spezifikation enthält.

Die Seite index.html

Die Inhaltsseite für index.html können Sie einen neuen Benutzer anlegen und einen Benutzernamen, ein Passwort und eine Telefonnummer eingeben. Wir fügen eine Prüfung hinzu, um sicherzustellen, dass dieselbe Telefonnummer nicht zu zwei verschiedenen Accounts hinzugefügt wird, um das Risiko zu verringern, dass doppelte Accounts mit derselben Telefonnummer erstellt werden. Anschließend können Sie sich mit den von Ihnen erstellten Anmeldedaten anmelden.

Die Datei client.js

Die Informationen, die wir der HTML-Seite hinzugefügt haben, werden an die Datei client.js-Datei übergeben, sobald das Formular abgeschickt wurde. Diese sendet die Daten dann an die Datei server.js Endpunkte, um die Registrierung, die Anmeldung und die SIM-Swap-Prüfung durchzuführen. Wenn die Anmeldung erfolgreich ist, wird der Benutzer zu /main.html.

Sehen Sie es in Aktion

Führen Sie die Server-JavaScript-Datei aus, um die Webanwendung zu initialisieren.

npm run start:dev

Testen Sie es, indem Sie einen neuen Benutzer anlegen und sich anmelden. Sie können den Virtuelle Vermittlungsstelle10 Telefonnummern sind zum Testen verfügbar: +990123400, +990123411, +990123422, +990123433, +990123444, +990123455, +990123466, +990123477, +990123488, und +990123499.

Jede dieser Test Numbers hat einen "latest_sim_swap_at"-Wert. Sie können diese Anzahl von Stunden als Wert der Umgebungsvariablen "period" verwenden, um zu testen, ob ein SIM-Swap-Szenario wahr oder falsch ist.

Wenn Sie über Netzwerk-Registrierung Genehmigung und eine Telefonnummer von einem akzeptierten CSP haben, können Sie die Produktionsoption im Dashboard auswählen und sie mit der echten Telefonnummer testen, indem Sie die Umgebungsvariable Zeitraum setzen, um einen SIM-Wechsel zu erkennen.

Starten Sie mit Identity Insights

Innerhalb des Vonage Dashboards finden Sie den Spielplatz für Identitätseinblickeder es Ihnen ermöglicht, nicht nur mit dem in diesem Blogbeitrag gezeigten SIM-Swap-Insight zu experimentieren, sondern auch mit anderen Insights. Geben Sie eine Telefonnummer ein, wählen Sie die relevanten Datenpunkte aus, und Sie erhalten die gewünschten Einblicke.

Sie können zwei Testmodi finden: "Demo", bei dem Sie aus einer Reihe von vordefinierten Telefonnummern auswählen können, um mit der API anhand von simulierten Beispielen zu experimentieren, und "Live", bei dem Sie Ihre Anwendung und Testtelefonnummern auswählen können, um echte Interaktionen auf der Grundlage der unterstützten Funktionen auszuprobieren.

Schlussfolgerung

Herzlichen Glückwunsch, Sie haben das Ende dieses Lehrgangs erreicht. Wir haben uns auf den SIM-Swap-Insight konzentriert, aber es gibt noch viele andere Insights, die Sie erkunden können. Sehen Sie sich den Spielplatz für Identitätseinblicke und erfahren Sie, wie Sie weitere Informationen sammeln können.

Teilen Sie:

https://a.storyblok.com/f/270183/400x400/3f6b0c045f/amanda-cavallaro.png
Amanda CavallaroAdvokat für Entwickler