Counter-Surveillance & IMSI-Catcher Detection für den WiFi Pineapple Pager.
Umbrella-Repo das Chasing Your Tail NG (WiFi/BT Surveillance Detection) und Raypager (IMSI-Catcher Detection via Mudi V2) unter einem einheitlichen Payload zusammenführt.
Version: v1.3 (payload.sh) / CYT v4.9 / Raypager v1.3
Inspiriert von SRLabs SnoopSnitch wurden fünf neue Baseband-/SMS-Anomaliedetektoren integriert. Alle laufen passiv im Hintergrund — der IMSI-Catcher-Monitor startet in jedem Scan-Modus automatisch auf dem Mudi, sobald dieser erreichbar ist. Die Ergebnisse fließen in den einheitlichen CYT Cross-Report ein.
raypager/python/imsi_monitor.py — Daemon auf dem Mudi, pollt alle 30 s serving
cell + neighbors und schreibt Samples nach rat_history.json. Erkennt:
| Anomalie | Detektion | Severity |
|---|---|---|
| RAT-Downgrade | LTE → WCDMA/GSM (Rangvergleich) | HIGH (GSM) / MEDIUM |
| Cipher plaintext | AT+QNWCFG ciphering_ind = 0 (A5/0, EEA0) | HIGH |
| TA-Anomaly | Timing Advance = 0 bei RSRP < −100 dBm (unmöglich fern) | MEDIUM |
| Neighbors vanished | ≥ 3 Nachbarn → 0 (Zwangs-Lock an Fake-BTS) | HIGH |
| TAC-Change same CID | Gleiche Cell-ID aber neue TAC (Cell Cloning) | HIGH |
| Cell-ID 0 | Gespoofter Identifier | MEDIUM |
State in /root/loot/raypager/imsi_monitor_state.json, Alerts in
imsi_alerts.jsonl, RAT-Historie in rat_history.json (von cross_report gelesen).
raypager/python/silent_sms.py — Daemon pollt alle 60 s AT+CMGL=4 (PDU-Modus)
und dekodiert TP-PID + TP-DCS. Erkennt:
- Silent SMS (TP-PID 0x40) — Ping-SMS die nie im Posteingang erscheint, zur Standortpeilung durch Behörden/Catcher
- SIM Data Download (TP-PID 0x7F) — OTA-Kommando direkt an die SIM (Java Applets)
- ME Data Download (TP-PID 0x3E/0x3F) — OTA-Kommando ans Gerät
- Flash SMS (TP-DCS class 0) — Display-only, kein Storage
- Binary SMS (DCS 8-bit) — Nicht-Text-Payloads
Log: /root/loot/raypager/silent_sms.jsonl. Abschalten via
config.silent_sms.watch_on_start = false.
raypager/python/sms_loopback.py — MO/MT-Loopback-Test: sendet SMS mit Token an
die eigene SIM (AT+CNUM oder test_number aus config) und wartet auf Empfang.
Misst Latency (Warnung > 30 s) und erkennt silent interception
(Token geht verloren oder kommt nie zurück).
Default: OFF. Wird vor Payload-Exit via NUMBER_PICKER abgefragt. Nummer
nur in config.json auf dem Mudi eintragen (gitignored), nie im Repo.
cyt/python/cross_report.py — neue Sektionen:
- 📡 Baseband Anomalies (RAT_DOWNGRADE, CIPHER_PLAINTEXT, TA_ANOMALY, TAC_CHANGE, NEIGHBORS_VANISHED, CELL_ID_ZERO) mit Bewertungs-Text
- 📨 Covert SMS (SILENT_SMS, SIM_DATA_DOWNLOAD, ME_DATA_DOWNLOAD, FLASH_SMS, BINARY_SMS)
Beide Sektionen erscheinen in jedem Scan-Modus 5/6 — unabhängig davon ob WiFi/BT-Verdächtige gefunden wurden.
SnoopSnitch erkennt auch Null-Paging (leere Paging-Requests an den eigenen TMSI, Vorstufe eines Silent-Ping). Dies ist baseband-intern und über AT-Commands nicht zugänglich — weder das EC25 noch das EM050-G exponieren Paging-Frames. Ehrlich nicht implementiert statt mit Fake-Signal vorgetäuscht.
Erkennt ob verdächtige Kameras aktiv aufzeichnen — nicht nur ob sie existieren.
Nach dem Hotel-Scan (Modus 4/6) analysiert camera_activity.py die Data-Frame-Bandbreite
der erkannten Kamera-BSSIDs. Spikes > 200 KB/s deuten auf Video-Stream/Upload hin.
- InternetDB (kostenlos): IP-Lookup für verdächtige Geräte mit öffentlichen IPs (Ports, Tags, CVEs)
- CVEDB (kostenlos): Automatischer CVE-Lookup für erkannte Kamera-Hersteller (Hikvision, Dahua, etc.)
- Shodan Full API (optional, $49): Erweiterte Host-Info (Org, ASN, Banner)
MAC-Adresse + DHCP-Fingerprint → Gerätekategorie via Fingerbank API (kostenlos). Erkennt ob ein Gerät eine IP-Kamera, NVR, IoT-Device etc. ist — unabhängig vom OUI.
Extrahiert MAC→IP-Zuordnungen und DHCP Option 55 Fingerprints direkt aus Data-Frames im PCAP. Ermöglicht InternetDB-Enrichment und Fingerbank-Lookup ohne zusätzliche Captures.
UnwiredLabs als unabhängige zweite Quelle für Cell-Tower-Verifikation neben OpenCelliD. Kostenlos (100 Lookups/Tag). Kombinierter Threat-Level aus OpenCelliD + WiGLE + UnwiredLabs.
Kontinuierliches GPS-Logging als Daemon auf dem Mudi (gps_logger.py).
Zeichnet Position im 60-Sekunden-Intervall auf — unabhängig vom Scan-Zustand.
Ermöglicht nachträgliche GPS-Korrelation mit BT/WiFi-Daten.
Integrierte IMEI-Rotation über Blue Merle auf dem Mudi V2. Schützt vor IMSI-Catcher-basierter Geräte-Identifikation und Bewegungsprofilen.
- Status-Anzeige: Aktuelle IMEI, IMSI, Radio-Status direkt im Payload-Menü
- IMEI-Wechsel: Radio off → IMEI rotieren → Mudi Reboot (automatisiert)
- SIM-Swap-Modus: Radio off → SIM wechseln → Standort wechseln → Mudi neu starten
- Unterstützt GL-E750V2 (Mudi V2) mit Quectel EM050-G Modem
- Config-Loading optimiert (ein Python-Call statt vier)
jget()Input-Injection Fix (stdin statt String-Interpolation)- Doppelter GPS-Aufruf in Modus 5/6 behoben
- Dead Code entfernt (
do_cell_scan,do_opencellid) - SQLite Context Manager + MAC-Case-Fix
- fd-Leak Fix in GPS-Reader
- Shared
utils.pyfür Raypager (Threat-Level-Konstanten, Haversine) cyt_export.pyGPS-Handling Fix (leere Werte crashten Report-Erstellung)- Permissions-Fix für Windows-SCP Deploy (
--w--w--wx→755)
| Modus | Name | Sensoren | Hardware |
|---|---|---|---|
| 0 | WiFi only | Probe-Request-Analyse | Pager |
| 1 | WiFi + GPS | Probe-Analyse + GPS-Track | Pager |
| 2 | WiFi + BT | Probe + Bluetooth (Standard) | Pager |
| 3 | WiFi + BT + GPS | Alle Pager-Sensoren | Pager |
| 4 | Hotel Scan | Spy-Kamera-Erkennung (WiFi+BT) | Pager |
| 5 | Argus Full | WiFi+BT Surveillance + Cell-Threat + GPS | Pager + Mudi |
| 6 | Hotel Scan 2 | Spy-Kameras + IMSI-Catcher | Pager + Mudi |
Modi 5 und 6 benötigen den Mudi V2 (GL-E750V2) mit laufendem raypager.
Neu ab v1.3: IMSI-Catcher-Monitor und Silent-SMS-Watcher laufen in allen Modi automatisch im Hintergrund, sobald der Mudi erreichbar ist. Anomalien erscheinen direkt im Cross-Report.
⚠️ Der Payload muss über das Pager-Dashboard gestartet werden:Payloads → User → Reconnaissance → argus-pagerNicht überbash payload.shin SSH – Pager-APIs funktionieren nur im Dashboard-Kontext.
- Pager via USB-C mit Laptop verbinden
- Pager-GUI öffnen:
http://172.16.52.1:1471 - Payload argus-pager → Start
- Im Startmenü:
1 = Standard(WiFi + BT, 2 Runden) oder2 = Manuellfür Modusauswahl
Nach Wahl 2 = Manuell:
- Modus wählen (0–6, siehe Scan-Modi-Tabelle oben)
- Runden eingeben — wie oft der Scan wiederholt wird
- Dauer (Sekunden) — Länge einer Scan-Runde
- Scan läuft automatisch — LED blinkt blau während Capture
- Nach dem Scan: Ergebnis-Report wird angezeigt
- Watch-List: Verdächtige Geräte können direkt zur Überwachungsliste hinzugefügt werden
- OpenCelliD Upload: Wenn Queue nicht leer → Dialog zum Hochladen der gesammelten Messungen (Modi 5+6)
- IMEI Rotation (OPSEC):
2 = IMEI Changewählen → Mudi rotiert IMEI und bootet neu
Eigene Geräte vor dem ersten Scan eintragen, um Fehlalarme zu vermeiden.
Die Dateien liegen in /root/loot/argus/ignore_lists/ auf dem Pager (gitignored).
mac_list.json — eigene WiFi- und Bluetooth-Geräte:
{
"ignore_macs": ["AA:BB:CC:DD:EE:FF", "11:22:33:44:55:66"],
"comments": {
"AA:BB:CC:DD:EE:FF": "Eigenes Garmin GPS",
"11:22:33:44:55:66": "Eigener JBL Lautsprecher"
}
}ssid_list.json — eigene Heimnetzwerke (unterdrückt Probe-SSID-Fehlalarme):
{
"ignore_ssids": ["MeinHeimnetz", "Buero-WLAN"],
"comments": {
"MeinHeimnetz": "Heimnetz – ignorieren"
}
}Tipp: Führe zuerst einen Scan im Modus 0 zuhause durch. Alle verdächtigen Geräte gehören wahrscheinlich dir selbst. MAC in
mac_list.jsoneintragen, dann erneut scannen.
GPS-Koordinaten werden ausschließlich in config.json auf dem Pager gespeichert — nie im Repository.
"watch_list": {
"default_zone_radius_m": 100,
"known_zones": [
{ "name": "Zuhause", "lat": 0.000000, "lon": 0.000000, "radius_m": 150 },
{ "name": "Büro", "lat": 0.000000, "lon": 0.000000, "radius_m": 100 }
]
}Die config.example.json im Repository enthält nur Platzhalter-Koordinaten (0.000000).
Nach jedem Scan können verdächtige Geräte direkt am Pager-Display zur Watch-List hinzugefügt werden:
| Typ | Anwendungsfall | Alarm wenn… |
|---|---|---|
| Dynamic | Unbekanntes Gerät, mehrfach gesehen | Gerät taucht an einem neuen Ort auf (> 500 m entfernt) |
| Static | Bekanntes Gerät (z.B. Nachbar-Router) | Gerät taucht außerhalb seiner GPS-Zone auf |
- Dynamic ist die richtige Wahl bei Tracking-Verdacht — das Gerät folgt dir über verschiedene Orte.
- Static eignet sich für Geräte, die nur an einem festen Ort sein sollten (Zuhause, Hotel, Büro).
Der Persistence-Score (Erscheinungen ÷ Runden gesamt) ist die zentrale Kennzahl.
Ein Score ≥ 0,6 markiert ein Gerät als verdächtig.
| Anwendungsfall | Runden | Dauer/Runde | Gesamtzeit | Hinweis |
|---|---|---|---|---|
| Schnellcheck | 2 | 120 s | ~ 4 Min. | Geringe Aussagekraft |
| Standard | 3 | 300 s | ~ 15 Min. | Gute Balance |
| Empfohlen (mobil) | 5 | 120 s | **~ 10 Min.** | Beste geografische Diversität |
| Hohe Sicherheit | 5 | 300 s | ~ 25 Min. | Für geplante Stopps |
Grundprinzip: Geografische Diversität schlägt reine Scan-Dauer. Ein Gerät, das an fünf verschiedenen Orten auftaucht, ist wesentlich verdächtiger als eines, das lange an einem einzigen Ort zu sehen ist.
Empfohlen: Modus 5 (Argus Full) · 5 Runden · 120 s/Runde
Start → [Runde 1: 2 Min.] → 3–5 km fahren
→ [Runde 2: 2 Min.] → 3–5 km fahren
→ [Runde 3: 2 Min.] → 3–5 km fahren
→ [Runde 4: 2 Min.] → 3–5 km fahren
→ [Runde 5: 2 Min.] → Analyse + Report
Scan-Zeit: ~12 Min. | Fahrzeit zwischen den Runden: ~33 Min.
So liest du den Report:
| Persistence | Erscheinungen | Bewertung |
|---|---|---|
| 1,00 | 5 / 5 | 🔴 Starker Hinweis — Gerät folgt dir |
| 0,80 | 4 / 5 | 🔴 Sehr verdächtig |
| 0,60 | 3 / 5 | 🟡 An der Schwelle — weiter beobachten |
| 0,40 | 2 / 5 | 🟢 Wahrscheinlich Zufall |
| 0,20 | 1 / 5 | 🟢 Nicht verdächtig |
Praktische Tipps:
- Runde starten, losfahren — die nächste Runde beginnt automatisch, kein Anhalten nötig
- Gerät mit Score 0,6 beim ersten Lauf: Route wiederholen. Ein echter Verfolger erreicht dann 1,0
- Mit WiGLE aktiviert: Probe-SSIDs im Report können das Heimnetzwerk des Verfolgers verraten
- Modus 5 liefert zusätzlich Cell-Threat-Level — ein GHOST oder MISMATCH auf dem gleichen Abschnitt erhöht den Verdacht erheblich
| LED | Bedeutung |
|---|---|
| Cyan blink | Startup / Initialisierung |
| Blau blink | Scan läuft |
| Gelb/Amber | Analyse läuft |
| Grün | Kein Befund |
| Rot blink | Verdacht / Alert |
Wenn der Report einen 🔴 TRACKER meldet (Samsung SmartTag, Apple AirTag, Tile etc.):
Der Report zeigt MAC-Adresse, Hersteller und Company ID:
🔴 AA:BB:CC:DD:EE:FF — Samsung Electronics Co.,Ltd
🔍 TRACKER Company ID 117: Samsung (SmartTag)
Über SSH auf den Pager (während Payload läuft oder danach):
# Letzten BT-Scan laden und RSSI des Trackers prüfen
python3 -c "
import json, glob
mac = 'AA:BB:CC:DD:EE:FF' # Tracker-MAC aus Report
for f in sorted(glob.glob('/root/loot/argus/bt_*.json'))[-4:]:
d = json.load(open(f))
info = d.get('bt_devices', {}).get(mac)
if info:
ts = f.split('bt_')[1].split('_r')[0]
rnd = f.split('_r')[1].replace('.json','')
print(f\"{ts} R{rnd} RSSI={info.get('rssi','?')} dBm\")
"RSSI-Richtwerte:
| RSSI | Entfernung (ca.) | Bedeutung |
|---|---|---|
| > −60 dBm | < 2 m | Sehr nah — im selben Raum / Auto |
| −60 bis −75 dBm | 2–10 m | Nah — gleiche Etage |
| −75 bis −85 dBm | 10–30 m | Mittlere Distanz |
| < −85 dBm | > 30 m | Weit entfernt / gedämpft |
Vorgehen: Auf den Pager achten während du dich im Raum / ums Fahrzeug bewegst. Je stärker das RSSI (näher an 0), desto näher bist du am Tracker.
Alternativ: Für Samsung SmartTag die offizielle SmartThings-App nutzen (erfordert Samsung-Account). Für Apple AirTag die Find My-App auf iPhone (erkennt fremde AirTags automatisch und zeigt Richtung an). Tile und andere Tracker haben keine offizielle Such-App für Fremderkennung.
- Tracker nicht sofort entfernen — zuerst Fotos machen und Fundort dokumentieren
- Tracker aus dem Sichtfeld des Verfolgers entfernen, bevor du ihn abschaltest/versteckst
- MAC zur Watch-List hinzufügen (Typ: Static) — so schlägt Argus sofort an wenn der Tracker wieder auftaucht
- Bei Straftat: lokale Behörden kontaktieren (Tracking ohne Wissen ist in den meisten Ländern strafbar)
Wenn der Tracker als eigenes Gerät bestätigt wurde (z.B. vergessener Koffer-Tracker):
// /root/loot/argus/ignore_lists/mac_list.json
{
"ignore_macs": ["AA:BB:CC:DD:EE:FF"],
"comments": { "AA:BB:CC:DD:EE:FF": "Eigener Samsung SmartTag — Reisekoffer" }
}Argus Pager (Payload auf WiFi Pineapple Pager)
├── payload.sh Haupt-Payload (DuckyScript UI, alle Modi)
├── config.example.json Konfig-Vorlage (API-Keys, GPS-Zonen)
├── cyt/ → submodule: chasing-your-tail-pager
│ └── python/
│ ├── analyze_pcap.py Probe-Request Persistence-Analyse + InternetDB
│ ├── hotel_scan.py Hotel-Scan: Kamera-Erkennung + CVEDB + Fingerbank
│ ├── camera_activity.py Data-Frame Bandbreiten-Analyse (aktive Kameras)
│ ├── pcap_engine.py PCAP-Parser (Probes, Beacons, Data/IPs, DHCP)
│ ├── shodan_lookup.py InternetDB + CVEDB + Shodan + Fingerbank APIs
│ ├── bt_scanner.py BLE/Classic BT Scanner (BlueZ)
│ ├── bt_fingerprint.py BT Device Fingerprinting (Tracker, Kameras)
│ ├── oui_lookup.py IEEE OUI → Hersteller
│ ├── wigle_lookup.py WiGLE SSID/BSSID Abgleich
│ ├── zone_check.py GPS/IP-basierte Standorterkennung
│ ├── surveillance_analyzer.py Korrelationsanalyse
│ ├── suspects_db.py Persistente Verdächtigen-DB
│ └── watch_list.py Überwachungsliste (static/dynamic)
└── raypager/ → submodule: raypager
└── python/ (laufen auf Mudi V2)
├── cell_info.py AT+QENG → LTE Cell-Info
├── gps.py NMEA Reader (/dev/ttyACM0)
├── opencellid.py IMSI-Catcher Check + Upload
├── unwiredlabs.py UnwiredLabs Cell-Tower Lookup (2. Quelle)
├── blue_merle.py IMEI Rotation
├── gps_logger.py Kontinuierliches GPS-Logging (Daemon)
├── cyt_export.py CYT-kompatible Report-Erstellung
├── utils.py Shared Constants + Haversine
└── wigle_cell.py WiGLE Cell-Tower Lookup (deaktiviert)
Pager → wlan1mon → WiFi PCAP → CYT Analyse
├── Probe Persistence (analyze_pcap.py)
├── Beacon/Kamera Scan (hotel_scan.py)
├── Activity Detection (camera_activity.py)
└── IP Enrichment (shodan_lookup.py)
Pager → BlueZ → BT-Scan → BT Fingerprint
Pager → SSH → Mudi V2:
├── gps.py (/dev/ttyACM0, u-blox M8130)
├── gps_logger.py (kontinuierliches GPS-Logging, Daemon)
├── cell_info.py (EM050-G Modem via AT)
├── opencellid.py (IMSI-Catcher-Check, primär)
└── unwiredlabs.py (Cell-Check, 2. Quelle)
| Paket | Zweck | Installation |
|---|---|---|
python3 |
Analyse-Scripts | opkg install -d mmc python3 |
tcpdump |
5/6 GHz PCAP via wlan1mon | meist vorinstalliert |
bluez-utils |
BT-Scanning | opkg install -d mmc bluez-utils |
| Komponente | Details |
|---|---|
| Hardware | GL-E750V2 mit EM050-G LTE-Modem |
| GPS | u-blox M8130 USB-Dongle → /dev/ttyACM0 @ 4800 baud |
| Python | opkg install python3 python3-pyserial |
| Blue Merle | Installiert unter /mnt/disk/upper/lib/blue-merle (overlay FS) |
| raypager Scripts | Deployed nach /root/raypager/python/ |
| SSH-Key | Pager-Key in Mudi /etc/dropbear/authorized_keys eingetragen |
| API-Keys | OpenCelliD-Key + UnwiredLabs-Token + WiGLE-Keys in config.json auf Mudi |
API-Keys (einzutragen in config.json auf dem Pager):
| Key | Dienst | Zweck | Kosten |
|---|---|---|---|
wigle_api_name + wigle_api_token |
WiGLE.net | WiFi-Netz-Abgleich (bekannte SSIDs/BSSIDs) | Kostenlos |
opencellid_key |
OpenCelliD | Cell-Tower-Verifikation, primär (Modi 5+6, auf Mudi) | Kostenlos |
unwiredlabs.token |
UnwiredLabs | Cell-Tower-Verifikation, 2. Quelle (Modi 5+6, auf Mudi) | Kostenlos (100/Tag) |
fingerbank_api_key |
Fingerbank | MAC → Gerätekategorie (IP Camera, NVR, IoT) | Kostenlos |
shodan_api_key |
Shodan | Erweiterte IP-Host-Info (Org, ASN, Banner) | $49 einmalig (optional) |
Ohne API-Keys funktionieren:
- InternetDB (IP → Ports/CVEs) — kostenlos, kein Key nötig
- CVEDB (Hersteller → CVEs) — kostenlos, kein Key nötig
- OUI-Lookup, BT-Fingerprinting, Kamera-OUI-Erkennung — offline/hardcoded
| Datenbank | Quelle | Verhalten |
|---|---|---|
| MAC-Hersteller (OUI) | IEEE (standards-oui.ieee.org) |
Beim ersten Scan heruntergeladen, danach lokal gecacht, wöchentliches Auto-Update |
| WiFi Kamera-SSIDs / Kamera-OUIs | Hardcoded in hotel_scan.py |
Kein Online-Zugriff nötig |
| BT Fingerprints / Tracker | Hardcoded in bt_fingerprint.py |
AirTag, SmartTag, Tile, Chipolo — offline |
| InternetDB (IP → Ports/CVEs) | Shodan (internetdb.shodan.io) |
Online, kostenlos, kein Key |
| CVEDB (Vendor → CVEs) | Shodan (cvedb.shodan.io) |
Online, kostenlos, kein Key |
| OpenCelliD (Cell → Position) | opencellid.org |
Online, Key nötig (kostenlos), 24h Cache, primäre Cell-Quelle |
| UnwiredLabs (Cell → Position) | unwiredlabs.com |
Online, Key nötig (kostenlos, 100/Tag), 24h Cache, 2. Cell-Quelle |
| WiGLE Cell (Cell → Position) | wigle.net |
Deaktiviert — kontaminierte Daten (siehe OPSEC-Abschnitt) |
| Fingerbank (MAC → Gerät) | api.fingerbank.org |
Online, Key nötig (kostenlos) |
| Eigene Ignore-Listen | ignore_lists/*.json auf Pager |
Gitignored — nur *.example.json im Repo |
Der erste Scan benötigt eine Internetverbindung für den OUI-Cache-Download. Kamera-OUI-, BT- und Tracker-Analyse funktionieren vollständig offline. InternetDB/CVEDB/Fingerbank-Enrichment erfordert Internet, ist aber optional.
| Dienst | Upload | Verhalten |
|---|---|---|
| OpenCelliD | ✅ Automatisch | Messungen werden während Modi 5+6 in Queue (/root/loot/raypager/upload_queue/) gespeichert. Am Payload-Ende: Upload-Dialog erscheint wenn Queue nicht leer. |
| UnwiredLabs | ❌ Nur Lookup | Zweite unabhängige Quelle für Cell-Tower-Verifikation. Kein Upload. |
| WiGLE | ❌ Nur WiFi-Lookup | Cell-Tower-Lookup deaktiviert (kontaminierte Daten). WiFi-SSID/BSSID-Abgleich weiterhin aktiv. |
Blue Merle Symlink (einmalig, dann persistent via rc.local):
# Symlink setzen
ln -sf /mnt/disk/upper/lib/blue-merle /lib/blue-merle
# Persistent machen (in /etc/rc.local vor exit 0 eintragen):
ln -sf /mnt/disk/upper/lib/blue-merle /lib/blue-merle 2>/dev/nullSSH vom Pager zum Mudi (Pager wählt Mudi via wlan0cli / 192.168.8.1):
# Key generieren (auf Pager)
ssh-keygen -t rsa -f /root/.ssh/mudi_key -N ""
# Public Key auf Mudi eintragen
cat /root/.ssh/mudi_key.pub | ssh root@192.168.8.1 \
'cat >> /etc/dropbear/authorized_keys'# Repo klonen (mit Submodules)
cd /root/payloads/user/reconnaissance/
git clone --recurse-submodules https://github.com/tschakram/argus-pager
# OPSEC-Hook aktivieren
cd argus-pager
git config core.hooksPath hooks
# Config anlegen (NIEMALS committen!)
cp config.example.json config.json
vi config.json # echte GPS-Zonen, API-Keys, Mudi-Config eintragen
# CRLF-Fix (nach scp von Windows)
sed -i 's/\r//' payload.sh hooks/pre-commit
# Submodule initialisieren (falls nicht via --recurse-submodules)
git submodule update --init --recursive# Auf dem Pager oder lokal:
git submodule update --remote cyt
git submodule update --remote raypager
git add cyt raypager
git commit -m "update submodules"Laptop ──USB-C──► Pager (172.16.52.1)
│
WiFi (wlan0cli)
│
▼
Mudi V2 (192.168.8.1)
│
┌──┴──────────────────┐
│ GPS: /dev/ttyACM0 │ ← u-blox M8130 USB-Dongle
│ LTE: EM050-G Modem │
└─────────────────────┘
SSH-Configs:
~/.ssh/config→Host pager→172.16.52.1, Key~/.ssh/pager_key~/.ssh/config→Host mudi→192.168.8.1, Key~/.ssh/mudi_key
/root/loot/argus/
├── pcap/ WiFi PCAP-Dateien (gitignored)
├── reports/ Analyse-Reports (gitignored)
├── ignore_lists/ mac_list.json, ssid_list.json (gitignored)
├── bt_*.json BT-Scan-Ergebnisse (gitignored)
└── gps_track.csv GPS-Track (gitignored)
config.jsonist gitignored — enthält echte GPS-Koordinaten, API-Keyshooks/pre-commitblockiert versehentliches Committen von Geodaten, MACs, API-Keysignore_lists/*.jsonsind gitignored — nur*.example.jsonim Repo- Alle Geodaten (GPS, Zonen) bleiben ausschließlich auf dem Pager
Der WiFi-Link zwischen Pager (wlan0cli) und Mudi V2 ist standardmäßig anfällig für Deauthentication-Flood-Angriffe (aireplay-ng, MDK3 etc.), die die Verbindung unterbrechen können.
802.11w (PMF) schützt davor: Deauth/Disassoc-Frames werden kryptografisch signiert — unsignierte Flood-Frames werden vom Client ignoriert.
Aktivierung (einmalig, auf beiden Geräten):
# Pager
uci set wireless.wlan0cli.ieee80211w='2'
uci commit wireless
wifi reload
# Mudi V2
uci set wireless.default_radio1.ieee80211w='2'
uci commit wireless
wifi reloadVerifizierung (auf dem Pager):
grep ieee80211w /var/run/wpa_supplicant-wlan0cli.conf
# → ieee80211w=2
ieee80211w=2= Required — Verbindung wird nur noch mit MFP aufgebaut. Flood-Angriffe auf diese Verbindung sind damit wirkungslos.
Der Pineapple-Firmware-Daemon erkennt Deauth/Disassoc-Floods automatisch und triggert den Alert-Payload unter:
/root/payloads/alert/deauth_flood_detected/example/payload.sh
Der Stock-Payload zeigt nur eine Display-Meldung. Für persistentes Logging sollte er wie folgt erweitert werden:
#!/bin/bash
ALERT "$_ALERT_DENIAL_MESSAGE"
LOGFILE="/root/loot/deauth_log.json"
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
ENTRY=$(printf '{"time":"%s","message":"%s","source":"%s","destination":"%s","ap_bssid":"%s","client":"%s"}' \
"$TIMESTAMP" \
"$_ALERT_DENIAL_MESSAGE" \
"$_ALERT_DENIAL_SOURCE_MAC_ADDRESS" \
"$_ALERT_DENIAL_DESTINATION_MAC_ADDRESS" \
"$_ALERT_DENIAL_AP_MAC_ADDRESS" \
"$_ALERT_DENIAL_CLIENT_MAC_ADDRESS")
echo "$ENTRY" >> "$LOGFILE"Jeder erkannte Angriff wird damit mit Timestamp, Source-MAC, AP-BSSID und Client-MAC in /root/loot/deauth_log.json gespeichert (eine JSON-Zeile pro Event).
Verfügbare Variablen:
$_ALERT_DENIAL_SOURCE_MAC_ADDRESS,$_ALERT_DENIAL_DESTINATION_MAC_ADDRESS,$_ALERT_DENIAL_AP_MAC_ADDRESS,$_ALERT_DENIAL_CLIENT_MAC_ADDRESS,$_ALERT_DENIAL_MESSAGE
Die IMEI-Rotation (Blue Merle) ist ein OPSEC-Feature zum Schutz vor IMSI-Catchern und Bewegungsprofilen. Die Rechtslage zum Ändern der IMEI variiert stark je nach Land:
| Land | Rechtslage |
|---|---|
| Deutschland | Nicht explizit verboten, aber Nutzung einer gefälschten IMEI in einem Mobilfunknetz kann unter §§ 263, 269 StGB fallen |
| Österreich | Ähnlich DE — keine explizite Regelung, aber mögliche Relevanz im Telekommunikationsrecht |
| Schweiz | Kein explizites Verbot, aber mögliche Konflikte mit Fernmelderecht |
| UK | Illegal seit 2002 (Mobile Telephones Re-programming Act) |
| USA | Illegal unter FCC-Richtlinien (47 USC § 333) |
| Litauen | Keine explizite Regelung bekannt |
Empfehlung: Vor Nutzung der IMEI-Rotation die Rechtslage im jeweiligen Einsatzland prüfen. Die Verantwortung liegt beim Anwender. Dieses Tool dient der defensiven Sicherheitsforschung — der Einsatz in illegaler Weise ist nicht beabsichtigt.
Bei einem Cross-Check von 51 Zellen gegen die WiGLE-Datenbank wurde festgestellt, dass alle Lookups für einen bestimmten MCC identische, nachweislich falsche GPS-Koordinaten zurücklieferten — mit einem Positionsfehler von über 1.400 km. Die gemeldeten Positionen lagen in einem völlig anderen Land als die tatsächlichen Zellstandorte.
Ursache: WiGLE basiert auf Crowdsourced-Daten (Wardriving-Uploads). Werden Zellen mit falschen GPS-Koordinaten hochgeladen, werden alle Einträge für diesen Netzbereich kontaminiert. Eine Qualitätskontrolle findet nicht statt.
Konsequenz:
- WiGLE Cell-Lookup ist für die Cell-Tower-Verifikation derzeit deaktiviert (
wigle.enabled: false) - OpenCelliD bleibt die primäre Quelle für IMSI-Catcher-Erkennung
- WiGLE wird weiterhin für WiFi SSID/BSSID-Abgleich genutzt (dort sind die Daten zuverlässiger)
- Das
wigle_cell.py-Modul gibt bei deaktiviertem WiGLECLEANzurück (kein Einfluss auf CELL_THREAT)
Blue Merle ermöglicht die IMEI-Rotation auf dem GL-E750V2 Mudi V2. In Argus Pager ist Blue Merle direkt ins Payload-Menü integriert.
| Funktion | Beschreibung |
|---|---|
| Status | Zeigt aktuelle IMEI, IMSI, Netzwerk-Status, Radio-Zustand |
| IMEI Rotate | Generiert neue zufällige IMEI, Mudi bootet automatisch neu |
| SIM Swap | Radio off → SIM wechseln → Standort wechseln → Reboot |
IMSI-Catcher (Stingray, Harris) identifizieren Geräte anhand ihrer IMEI (eindeutige Hardware-ID). Durch regelmäßiges Wechseln der IMEI:
- Werden Bewegungsprofile unterbrochen
- Kann das Gerät nicht über Sessions hinweg getrackt werden
- Wird die Zuordnung IMEI → Person erschwert
Menü → 2 (IMEI Change)
├── Radio abschalten (Netzwerk-Disconnect)
├── Neue IMEI generieren (blue_merle.py rotate)
├── Mudi Reboot
└── Warten auf Reconnect (~60s)
- Blue Merle installiert:
/mnt/disk/upper/lib/blue-merle - Symlink persistent (rc.local):
ln -sf /mnt/disk/upper/lib/blue-merle /lib/blue-merle - Nur GL-E750V2 (Mudi V2) mit Quectel EM050-G Modem
⚠️ Rechtslage: Die IMEI-Änderung ist in einigen Ländern illegal (UK, USA). Siehe OPSEC-Abschnitt für Details.
- chasing-your-tail-pager — WiFi/BT Surveillance Detection
- raypager — IMSI-Catcher Detection & IMEI Rotation
Basiert auf ArgeliusLabs/Chasing-Your-Tail-NG (MIT). Erweiterungen: MIT.