https://a.storyblok.com/f/270183/1368x665/359ade8d2c/25sep_dev_blog_sim-swap-id-insight.jpg

Verhinderung von SIM-Swap-Betrug in Python mit der Identity Insights API

Zuletzt aktualisiert am September 23, 2025

Lesedauer: 3 Minuten

SIM-Swap-Betrug ist eine wachsende Bedrohung für die mobile Sicherheit, bei der Angreifer die Telefonnummer eines Opfers kapern, indem sie sie auf eine neue SIM-Karte übertragen. Dadurch können sie Anrufe, SMS und sogar Zwei-Faktor-Authentifizierungscodes abfangen. Beängstigend!

In diesem Tutorial werden wir die Vonage Identity Insights API in Python verwenden, um potenzielle SIM-Tausche zu erkennen und Ihre Benutzer zu schützen.

>> TL;DR: Holen Sie sich den vollständigen funktionierenden Code auf GitHub

Voraussetzungen

Um mitzumachen, brauchen Sie:

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.

Projekt einrichten

Erstellen einer Vonage-Anwendung

  • 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.

Ihr Python-Skript verwendet die Sandbox der Netzwerkregistrierung. Erstellen Sie dazu eine Vonage-Anwendung im Dashboard von Vonage mit:

  1. Netzwerkregistrierungsfunktion aktiviert, und wählen Sie "Playground".

  2. Erzeugen Sie eine private.keymüssen Sie diese im folgenden Abschnitt in das Stammverzeichnis Ihres Verzeichnisses verschieben

Erstellen Sie Ihr Projekt und installieren Sie Abhängigkeiten

  1. Erstellen Sie Ihren Projektordner und die Dateien in Ihrem Terminal.

mkdir sim_swap_checker
cd sim_swap_checker
touch main.py .env

>> Sie können nun Ihre heruntergeladenen private.key in das sim_swap_checker Verzeichnis verschieben.

2. Richten Sie eine virtuelle Umgebung ein.

Dadurch wird sichergestellt, dass Ihre Abhängigkeiten von Ihrem System Python isoliert bleiben.

python3 -m venv venv

source venv/bin/activate

3. Installieren Sie die erforderlichen Pakete.

Wir verwenden requests um HTTP-Anfragen an die Identity Insights API zu stellen, python-dotenv um unsere API-Anmeldeinformationen sicher aus einer Umgebungsdatei zu laden, und vonage-jwt um sichere JWT-Tokens für die Authentifizierung unserer Anfragen zu erzeugen.

pip install requests python-dotenv vonage-jwt

Konfigurieren Sie Ihre ENV-Datei

Fügen Sie die ID Ihrer Vonage-Anwendung und die Standard-Telefonnummer + Zeitraum in Stunden, für den die API die SIM-Swap-Prüfung durchführen wird.

Sie können in der API-Referenz für Identitätseinblicke sehen, dass der Einblick in Sim Swap von einem einzigen Parameter namens periodWir nennen ihn Stunde und setzen den Standardwert auf 240.

VONAGE_APPLICATION_ID=your_application_id
VONAGE_PRIVATE_KEY_PATH=./private.key
PHONE_NUMBER=+990123455
DEFAULT_HOURS=240

Schreiben Sie das Python-Skript, um auf einen Sim-Tausch zu prüfen

Schritt 1: Einrichten der Importe und der Umgebung

In der Datei main.py erstellen wir das Hauptskript, das prüft, ob ein SIM-Tausch innerhalb eines benutzerdefinierten Zeitraums (Standardwert: 240 Stunden oder 10 Tage) stattgefunden hat.

Beginnen Sie mit dem Importieren der erforderlichen Bibliotheken und dem Laden der Umgebungsvariablen aus der .env-Datei. Dadurch wird sichergestellt, dass wir keine sensiblen Werte fest einprogrammieren, und es ist einfacher, die Telefonnummer und den Zeitraum schnell zu aktualisieren, um verschiedene Werte zu testen.

# main.py
import requests
from dotenv import load_dotenv
import os
from vonage_jwt import JwtClient

load_dotenv()

API_URL = "https://api-eu.vonage.com/v0.1/identity-insights"
PHONE_NUMBER = os.getenv("PHONE_NUMBER")
DEFAULT_HOURS = int(os.getenv("DEFAULT_HOURS"))
application_id = os.getenv("VONAGE_APPLICATION_ID")
private_key_path = os.getenv("VONAGE_PRIVATE_KEY_PATH")

Schritt 2: Authentifizierung mit JWT

Bevor wir die Identity Insights API aufrufen können, müssen wir uns mit einem JSON-Web-Token (JWT). Dies ist für alle Vonage Network APIs erforderlich.

Ein JWT identifiziert Ihre Anwendung auf sichere Weise mit Ihrem APPLICATION_ID und des privaten Schlüssels und enthält Metadaten wie den Zeitpunkt der Ausstellung ( iat ) und wann es abläuft ( exp ). Diese Token werden mit dem RS256 Algorithmus signiert und sind in der Regel nur wenige Minuten lang gültig, was sie sicher und kurzlebig macht.

Unterhalb Ihrer Umgebungsvariablen initialisieren Sie Ihren JwtClient. Wir werden diesen Client verwenden, um den eigentlichen JWT zu generieren, wenn wir die API-Anfrage stellen.

with open(private_key_path, "r") as f:
    private_key_str = f.read()

jwt_client = JwtClient(application_id, private_key_str)

Schritt 3: Definieren der Core SIM Swap Check Funktion

Als Nächstes fahren wir unten fort und definieren eine check_sim_swap() Funktion, die eine Telefonnummer und einen Zeitraum in Stunden annimmt. Sie verwendet den JWT-Client zur Authentifizierung und sendet eine POST-Anfrage an die Identity Insights API.

# main.py

def check_sim_swap(phone_number, hours):

    jwt_token = jwt_client.generate_application_jwt()

    headers = {
        "Authorization": f"Bearer {jwt_token}",
        "Content-Type": "application/json"
    }

    payload = {
        "phone_number": phone_number,
        "purpose": "FraudPreventionAndDetection",
        "insights": {
            "format": {},
            "sim_swap": {
                "period": hours
            }
        }
    }

    print(f"\n🔍 Checking SIM swap status for {phone_number}...")
    res = requests.post(API_URL, headers=headers, json=payload)

    if res.status_code != 200:
        print("❌ Error:", res.status_code, res.text)
        return

    data = res.json()

Dieser Code setzt den Zweck auf "FraudPreventionAndDetection" eine Voraussetzung für die Verwendung von SIM-Swap-Einsichten. Wenn die API etwas anderes als ein 200 OKzurückgibt, wird der Fehler auf der Konsole ausgegeben und der Code beendet.

Schritt 4: Analysieren und Anzeigen der SIM-Tauschergebnisse

Als Nächstes extrahieren wir die SIM-Tauschdaten und prüfen den Antwortstatus. Wenn alles in Ordnung ist, zeigen wir an, ob im angegebenen Zeitraum ein SIM-Tausch erkannt wurde und wann der letzte SIM-Tausch stattgefunden hat.

   sim_swap_info = data.get("insights", {}).get("sim_swap", {})
    status_code = sim_swap_info.get("status", {}).get("code")

    if status_code != "OK":
        print(f"\n⚠️ SIM Swap check failed. Status: {status_code}")
        print("   Message:", sim_swap_info.get("status", {}).get("message"))
        return

    swapped = sim_swap_info.get("swapped")
    swap_time = sim_swap_info.get("latest_sim_swap_at")

    print(f"\n🔒 SIM Swap Results:")
    print(f"   SIM Swapped: {'❌ Yes' if swapped else '✅ No'}")
    print(f"   Last SIM Swap: {swap_time if swap_time else 'None detected'}")

Schritt 5: Hinzufügen eines CLI-Wrappers für Interaktivität

Schließlich fügen wir einen main Block hinzu, damit die Benutzer das Skript interaktiv über die Befehlszeile ausführen können. Es fordert zur Eingabe der Telefonnummer und der Anzahl der zu prüfenden Stunden auf und greift auf die Standardeinstellungen zurück, wenn keine eingegeben werden.

Die Virtuelle Vermittlungsstelle verfügt über 9 Telefonnummern für die Identity Insights API, die Sie zu Testzwecken verwenden können. Die API liefert deterministische SIM-Swap-Antworten:

  • Wenn hours > 500gibt er swapped = true

  • Wenn hours < 500gibt er swapped = false

Sie können auch versuchen, mit allowlist numbers auf dem Network Registry Playground testen.

if __name__ == "__main__":
    print("=== Vonage Identity Insights - SIM Swap Checker ===")
    phone = input(f"Enter phone number [Default: {PHONE_NUMBER}]: ").strip() or PHONE_NUMBER
    hours = input(f"How many hours ago to check for? [Default: {DEFAULT_HOURS}]: ").strip() or DEFAULT_HOURS
    hours = int(hours)
    check_sim_swap(phone, hours)

>> Vergewissern Sie sich, dass dieser Code nicht automatisch von Ihrem Linter eingefügt wird, um innerhalb der check_sim_swap Funktion.

Testen Sie das Skript mit dem virtuellen Operator

Jetzt können Sie Ihre kleine App testen!

python3 main.py

Zunächst können Sie die Standardwerte verwenden und feststellen, dass der Sim nicht vertauscht wurde:

(venv)   sim_swap_checker python main.py
=== Vonage Identity Insights - SIM Swap Checker ===
Enter phone number [Default: +990123455]: 
How many hours ago to check for? [Default: 240]: 

🔍 Checking SIM swap status for +990123455...

🔒 SIM Swap Results:
   SIM Swapped: No
   Last SIM Swap: 2025-07-10T08:48:55.143Z

Und dann können Sie einen Wert für Stunden verwenden, der höher als 500 ist, um einen Sim Swap zu sehen:

(venv)   sim_swap_checker python main.py
=== Vonage Identity Insights - SIM Swap Checker ===
Enter phone number [Default: +990123455]: 
How many hours ago to check for? [Default: 240]: 600

🔍 Checking SIM swap status for +990123455...

🔒 SIM Swap Results:
   SIM Swapped: Yes
   Last SIM Swap: 2025-07-10T08:50:16.733Z

Schlussfolgerung

Mit nur wenigen Zeilen Python und der Vonage Identity Insights API können Sie SIM-Swap-Ereignisse identifizieren und proaktiv Hochrisikoszenarien in Ihren Applikationen kennzeichnen. Während diese Demo den Virtual Operator zum Testen verwendet, funktioniert das gleiche Setup in der Produktion, sobald Ihre Anwendung in der Netzwerk-Registrierung.

Haben Sie Fragen oder bauen Sie etwas Cooles? Besuchen Sie uns im Vonage Community Slackoder folgen Sie unserem YouTube-Kanal, oder abonnieren Sie den Entwickler-Newsletter für Updates.

Teilen Sie:

https://a.storyblok.com/f/270183/384x384/e4e7d1452e/benjamin-aronov.png
Benjamin AronovAdvokat für Entwickler

Benjamin Aronov ist ein Entwickler-Befürworter bei Vonage. Er ist ein bewährter Community Builder mit einem Hintergrund in Ruby on Rails. Benjamin genießt die Strände von Tel Aviv, das er sein Zuhause nennt. Von Tel Aviv aus kann er einige der besten Startup-Gründer der Welt treffen und von ihnen lernen. Außerhalb der Tech-Branche reist Benjamin gerne um die Welt auf der Suche nach dem perfekten Pain au Chocolat.