DHCP, DNS başlıkları ve isteğin tam yolculuğu
- DHCP'nin DORA anlaşmasını, seçeneklerini, DNS başlığını ve dig çıktısını okuyup sahte sunucuyu tanı, bir isteğin tam yolculuğunu birleştir.
- DHCP dört adımlı bir anlaşmadır (DORA); DNS mesajı ise sabit bir başlıkla açılır ve sayaçlarla devam eder.
- Bu derste iki protokolün alanlarını okuyacak, sahte DHCP ve DNS anomalisini yakalayacak, savunmasını kuracaksın.
Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +60 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.
Depoya yeni bir el terminali bağlandığında ne IP adresi ne de DNS sunucusu bilir. DHCP (Dynamic Host Configuration Protocol) bu bilgiyi otomatik dağıtır ve RFC 2131 protokolü tanımlar. Cihaz, DHCP sunucusuyla dört mesajlık bir anlaşma yapar; kısaltması DORA'dır: Discover, Offer, Request, Acknowledge. Önceki derslerde gördüğün Ethernet, IP ve UDP başlıkları bu dört mesajın her birini taşır.
DHCP kendi başına ayrı bir katman değildir; UDP'nin üstünde çalışan bir uygulama protokolüdür. Sunucu tarafı UDP 67, istemci tarafı UDP 68 portunu kullanır. Bu iki port, DHCP trafiğini diğer UDP servislerinden ayırır ve filtrelerken işine yarar.
DORA anlaşması
DORA adımları tek tek şöyle işler. İstemci henüz IP'si olmadığı için 0.0.0.0 kaynağından yayın olarak DHCPDISCOVER yollar. Sunucu boşta bir adres önerip DHCPOFFER döner. İstemci genelde ilk teklifi DHCPREQUEST ile onaylar ve bunu da yayın olarak yollar, çünkü ağda birden fazla sunucu dinliyor olabilir; yayın, reddedilen sunuculara da teklifin kabul edilmediğini duyurur.
Seçilen sunucu DHCPACK ile kirayı (lease) onaylar ve IP adresi, ağ geçidi, DNS sunucusu ve kira süresi bilgisini ekler. Her mesaj bir öncekinin cevabıdır. İşlem kimliği (transaction ID) dört mesajda da aynı kalır, böylece istemci hangi konuşmaya ait olduğunu bilir.
$ tshark -n -r dora.pcap
1 0.000000 0.0.0.0 → 255.255.255.255 DHCP 342 DHCP Discover - Transaction ID 0x3903f326
2 0.002000 192.168.1.1 → 255.255.255.255 DHCP 342 DHCP Offer - Transaction ID 0x3903f326
3 0.004000 0.0.0.0 → 255.255.255.255 DHCP 342 DHCP Request - Transaction ID 0x3903f326
4 0.006000 192.168.1.1 → 255.255.255.255 DHCP 342 DHCP ACK - Transaction ID 0x3903f326Çıktıyı satır satır oku. Birinci satırda terminalin henüz adresi yoktur; kaynak 0.0.0.0, hedef ise bütün segmenttir.
İkinci satırda 192.168.1.1 teklifini döner. İstemci Discover mesajında yayın bayrağını (broadcast flag) set ettiyse sunucu cevabı da yayınla yollar. Üçüncü satırda kaynak yine 0.0.0.0'dır: terminal teklifi seçmiştir ama adresi ACK gelmeden kullanamaz.
Dördüncü satırda sunucu kirayı onaylar. Dört satırın işlem kimliği aynıdır, 0x3903f326. Depoda aynı anda başka terminaller de açılıyorsa konuşmaları bu kimlik ayırır. Kira yenilenirken akış kısalır: istemci adresini zaten bildiği için Request mesajını doğrudan sunucuya tekil yollar.
Etkinlik 1 / 7
DORA adımlarını doğru sırayla diz.
Bir öğeye odaklan, yukarı ve aşağı ok tuşlarıyla taşı. Home tuşu en üste, End tuşu en alta alır.
- 1DHCPOFFER (sunucu teklifi)
- 2DHCPACK (sunucu kirayı onaylar)
- 3DHCPREQUEST (istemci onayı)
- 4DHCPDISCOVER (istemci yayını)
Etkinlik 2 / 7
Doğru mu, yanlış mı?
Ağa ilk katılan istemci, seçtiği teklifi onaylayan DHCPREQUEST mesajını da DHCPDISCOVER gibi yayın olarak yollar.
DHCP seçenekleri ve sahte sunucu
DHCP de ARP gibi kimlik doğrulaması taşımaz. Sahte bir DHCP sunucusu (rogue DHCP) ağa kendi tekliflerini yollayabilir. İstemcilere ağ geçidi ve DNS sunucusu olarak kendi adresini verirse bütün trafik onun üstünden akar. Böylece araya girmenin bir başka yolunu açar.
MITRE ATT&CK bu tekniği T1557.003 kimliğiyle kaydeder. Altay Kargo deposunda böyle bir olay yaşandı: el terminalleri bir gün internete çıkamadı, çünkü kısa kira süreli sahte bir teklif gerçek sunucununkiyle yarışıyordu. Yönetilebilir anahtarlarda DHCP snooping bu saldırıyı keser. Yalnız güvenilir olarak işaretlenen porttan gelen DHCPOFFER ve DHCPACK mesajlarını kabul eder, diğer portlardan geleni düşürür.
DHCP mesajının asıl bilgisi seçenek alanlarında taşınır ve RFC 2132 bunları numaralarla tanımlar. Seçenek 1 alt ağ maskesi, seçenek 3 yönlendirici (ağ geçidi), seçenek 6 DNS sunucusu, seçenek 15 alan adıdır. Seçenek 51 kira süresini, seçenek 53 mesaj türünü (1 Discover, 2 Offer, 3 Request, 5 Ack), seçenek 54 ise teklifi veren sunucunun kimliğini taşır. İki zamanlayıcı kiranın yenilenmesini yönetir.
T1 kira süresinin yarısında dolar; istemci o anda kirayı veren sunucuya yenileme isteği yollar. T2 kira süresinin yüzde 87,5'inde dolar; istemci artık herhangi bir sunucuya başvurur. Sahte sunucuyu yakalarken en çok seçenek 54'e, 3'e ve 6'ya bakarsın.
$ tshark -n -r kira.pcap
1 0.000000 0.0.0.0 → 255.255.255.255 DHCP 342 DHCP Discover - Transaction ID 0x5d1a7c02
2 0.001000 192.168.1.66 → 255.255.255.255 DHCP 342 DHCP Offer - Transaction ID 0x5d1a7c02
3 0.003000 192.168.1.1 → 255.255.255.255 DHCP 342 DHCP Offer - Transaction ID 0x5d1a7c02
$ tshark -n -r kira.pcap -Y "dhcp.option.dhcp == 2" -T fields \
-e eth.src -e dhcp.option.dhcp_server_id -e dhcp.ip.your -e dhcp.option.router -e dhcp.option.domain_name_server -e dhcp.option.ip_address_lease_time
02:5c:aa:10:20:30 192.168.1.66 192.168.1.120 192.168.1.66 192.168.1.66 600
00:11:22:33:44:55 192.168.1.1 192.168.1.36 192.168.1.1 192.168.1.10 86400İlk çıktıda tek bir Discover'a iki ayrı Offer dönmüştür. Bu tek başına anormal değildir; yedekli iki meşru sunucu da aynı anda teklif verebilir.
İkinci çıktı teklifleri alan alan açar. İlk satır 02:5c:aa:10:20:30 adresli bir cihazdan gelir. Sunucu kimliği, ağ geçidi ve DNS olarak aynı adresi, 192.168.1.66'yı verir. Kira süresi yalnız 600 saniyedir.
İkinci satır deponun bilinen sunucusudur: ağ geçidi 192.168.1.1, DNS 192.168.1.10, kira 86400 saniye. Sahteyi üç işaret ele verir. Kaynak MAC yerel yönetilen bir adrestir.
Teklif ağ geçidini ve DNS'i envanterde olmayan tek bir cihaza çevirir. Kira da kasten kısadır; kısa kira, kurbanı sık sık yeniden sahte sunucuya bağlar.
Etkinlik 3 / 7
Bir kira yakalamasında aynı işlem kimliğine iki Offer geldi. Deponun ağ geçidi 192.168.1.1'dir. Hangi teklif sahte DHCP sunucusuna aittir?
Önce kodu oku, sonra çıktıyı seç.
eth.src server_id router dns lease 02:5c:aa:10:20:30 192.168.1.66 192.168.1.66 192.168.1.66 600 00:11:22:33:44:55 192.168.1.1 192.168.1.1 192.168.1.10 86400
DNS mesaj başlığı
IP ve DNS sunucusunu DHCP'den aldın; sıra ismi adrese çevirmede. DNS mesajı sabit 12 baytlık bir başlıkla açılır ve RFC 1035 bu yapıyı tanımlar. ID alanı isteği cevapla eşleştirir; istemci her sorguya rastgele bir ID atar. Bayraklar bölümü QR (sorgu mu cevap mı), Opcode, AA (yetkili cevap), TC (kesildi), RD (özyineleme istendi), RA (özyineleme sunuluyor) ve RCODE bitlerini taşır.
Başlığın ardından dört sayaç gelir: soru, cevap, yetki ve ek kayıt sayısı. Her sunucu, kök, TLD ve yetkili aynı mesaj biçimini kullanır; yalnız içerik değişir. Cevap dönerken QR biti 1 olur, RCODE alanı sonucu söyler: 0 başarı, 3 ise NXDOMAIN, yani kayıt yok.
Cevabın ömrünü TTL belirler. Çözücü olumlu cevabı TTL boyunca önbellekte tutar. RFC 2308 negatif önbelleği de tanımlar: NXDOMAIN gibi olumsuz cevaplar da bir süre saklanır, böylece olmayan bir ad tekrar tekrar sorulmaz. Bu ayrım iki tür sunucuyu da anlamana yardım eder.
Özyinelemeli (recursive) çözücü senin adına zinciri baştan sona takip eder ve cevabı önbelleğe alır; yetkili (authoritative) sunucu ise yalnız kendi bölgesinin kaydını verir. İnternete açık, herkese özyineleme sunan bir çözücü (open resolver) hem zehirlenmeye hem yükseltmeli saldırıya alet olur, bu yüzden kapatılır.
RCODE=3 tek başına şüpheli değildir. Yazım hatası, kaldırılmış bir alan adı ve reklam engelleyici de NXDOMAIN üretir. Şüpheyi doğuran şey orandır: kısa sürede aynı istemciden binlerce farklı NXDOMAIN gelmesi, DNS tüneli ya da kötü amaçlı bir alan üretici algoritmanın (DGA) izidir.
Bakılacak ikinci şey çeşitliliktir: rastgele görünen, uzun ve daha önce hiç görülmemiş adlar. ID alanı da güvenlik taşır. Sabit ya da tahmin edilebilir bir ID, önbellek zehirlenmesini kolaylaştırır; bu yüzden çözücüler ID'yi ve kaynak portu birlikte rastgele seçer.
Derinleş:Kaminsky ve rastgele kaynak port
2008'de Dan Kaminsky, DNS önbellek zehirlenmesini pratikte tehlikeli hâle getiren bir yöntem açıkladı. Eski saldırılarda saldırgan, hedef adın önbellekteki kaydının süresi dolana kadar beklemek zorundaydı. Kaminsky bu beklemeyi kaldırdı. Saldırgan çözücüye her seferinde var olmayan yeni bir alt alan adı sorduruyor, arkasından hızla sahte cevaplar yolluyordu.
Sahte cevap, bütün alanın yetkili sunucusunu saldırganın sunucusu gibi gösteren bir kayıt da taşıyordu. Sahte cevabın önündeki tek engel 16 bitlik ID alanıydı. 65536 olasılık, sınırsız tekrar edilebilen bir deneme için çok azdı. Çözüm ID'yi büyütmek değil, ikinci bir rastgelelik eklemekti.
RFC 5452 kaynak portun da rastgele seçilmesini zorunlu kıldı. Saldırganın tahmin etmesi gereken alan 16 bitten yaklaşık 32 bite çıktı ve saldırı pratikte çalışmaz hâle geldi. Kalıcı çözüm ise DNSSEC'tir: cevabı kriptografik imzayla doğrular.
Etkinlik 4 / 7
DNS başlık alanını anlamıyla eşleştir.
dig çıktısı, kayıt türleri ve dns.log
dig komutu DNS başlığını insan okuyacak biçimde açar. Bir A kaydı sorgusunun cevabını satır satır oku. HEADER satırı opcode, status ve id değerini verir; status NOERROR başarıyı, NXDOMAIN kayıt yokluğunu gösterir. flags satırı hangi bitlerin 1 olduğunu yazar: qr cevap, rd özyineleme istendi, ra sunuldu, ad ise DNSSEC ile doğrulandı demektir.
QUESTION bölümü ne sorulduğunu, ANSWER bölümü cevabı taşır; baştaki sayı kaydın TTL değeridir. Query time çözümün süresini, SERVER hangi çözücünün cevap verdiğini gösterir. Alttaki çıktıda depo terminali altaykargo.example adını sorar ve tek A kaydı alır.
$ dig altaykargo.example A ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4192 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;altaykargo.example. IN A ;; ANSWER SECTION: altaykargo.example. 300 IN A 203.0.113.40 ;; Query time: 12 msec ;; SERVER: 192.168.1.10#53(192.168.1.10) (UDP)
Çıktıda status NOERROR ve ANSWER 1'dir; sorgu bir kayıt döndürmüştür. flags satırında qr rd ra görünür ama ad yoktur, yani bu cevap DNSSEC ile doğrulanmamıştır. TTL 300 saniyedir: çözücü bu kaydı beş dakika önbellekte tutar ve aynı soruyu tekrar sormaz.
Cevaplar farklı kayıt türleri taşır. A ve AAAA adları IPv4 ve IPv6 adresine, CNAME bir adı başka bir ada, MX posta sunucusuna, NS yetkili ad sunucusuna, PTR ise adresi ada (ters çözüm) bağlar. SOA bölgenin yetki bilgisini ve negatif önbellek süresini taşır.
TXT kaydı serbest metin taşır. Güvenlikte iki örüntü öne çıkar. Olağandışı uzun TXT kayıtları ve rastgele alt alan adları çoğu zaman veri sızdıran bir tüneli gösterir. Sık değişen A kayıtları ise hızlı akış (fast flux) ağının işaretidir.
Aynı sorgular pakete bakmadan da okunabilir. Zeek trafikten dns.log adında bir kayıt üretir; her satır bir sorgu-cevap çiftidir. Alanları arasında query (sorulan ad), qtype_name (kayıt türü, A gibi), rcode_name (sonuç, NOERROR ya da NXDOMAIN), answers (dönen kayıtlar) ve TTLs bulunur.
Bir avuç paketi elle okumak yerine, milyonlarca satırı bu alanlarla sorgularsın. Örneğin rcode_name alanı NXDOMAIN olan ve query alanı çok uzun, rastgele görünen satırları saymak, DGA ve tünel avında ilk adımdır. Kurumsal görünürlük burada kritik bir varsayıma dayanır: DNS trafiği düz metin akar ve okunabilir.
Etkinlik 5 / 7
altaykargo.example alanının A kaydını dig ile sorgula ve başlıktaki bayrakları gör.
Etkinlik 6 / 7
Her DNS gözlemini büyük olasılıkla işaret ettiği duruma göre grupla.
Önce bir seçeneğe, sonra aşağıdaki uygun kutuya bas. İstersen seçeneği kutuya sürükleyip bırak. Yerini değiştirmek için aynı işlemi tekrarla.
0/5 seçenek yerleşti.
İsteğin tam yolculuğu ve savunma
Şimdi isteğin tam yolculuğunu birleştir. Kullanıcı tarayıcıya altaykargo.example yazdığında sırasıyla şunlar olur.
Cihaz ağa katılırken DHCP'den IP adresini ve DNS sunucusunu alır. Sonra DNS sunucusuna UDP 53 üzerinden bir sorgu gider. Bu sorgu bir Ethernet çerçevesinin içinde yol alır. IP başlığı istemcinin ve DNS sunucusunun adresini, UDP başlığı rastgele bir kaynak portu ve 53 numaralı hedef portu taşır.
Cevap gelince istemci hedef IP'yi öğrenir, hedefin ya da ağ geçidinin MAC adresini ARP ile bulur. Ardından IP paketi TCP başlığıyla sarılır ve üç yönlü el sıkışma kurulur. Bu modül boyunca gördüğün her başlık bu tek istekte üst üste biner: DHCP adresi verir, DNS ismi çözer, ARP MAC'i bulur, TCP bağlantıyı kurar.
Savunma katmanlıdır. DHCP snooping yalnız güvenilir porttan gelen teklifi kabul eder ve sahte sunucuyu keser; MITRE ATT&CK, T1557.003 için bu süzmeyi M1037 başlığında önerir. IPv6 tarafında cihaz adresini çoğu zaman SLAAC ile kendisi üretir. Orada sahte bir yönlendirici duyurusu (Router Advertisement) sahte DHCP teklifinin işini görür.
Anahtardaki RA Guard bu duyuruları süzer; IPv6 kullanmayan ağda DHCPv6 trafiğini ve gelen duyuruları engellersin. DNS tarafında en etkili önlem, cihazların yalnız kurum çözücüsünü kullanmasını zorlamaktır. Çıkış kuralı doğrudan dışarıya 53 ve 853 trafiğini kısıtlar. HTTPS içinde DNS taşıyan (DoH) dış çözücüleri de engellersin.
Çözücüde DNSSEC doğrulaması sahte cevabı eler. Kaynak portun rastgele seçilmesi (RFC 5452) önbellek zehirlenmesini zorlaştırır. Zeek dns.log ve pasif DNS kayıtları da tünel ve DGA avının temel verisidir.
Derinleş:Şifreli DNS: kurumun kör noktası
Klasik DNS düz metin akar, bu yüzden hem izlenebilir hem değiştirilebilir. Son yıllarda üç şifreli taşıma yaygınlaştı. DoT (DNS over TLS, RFC 7858) sorguları TLS içinde 853 portundan taşır.
DoH (DNS over HTTPS, RFC 8484) sorguları normal HTTPS trafiğine, 443 portuna gömer; bu yüzden ağdan sıradan web trafiğinden ayırmak zordur. DoQ (DNS over QUIC, RFC 9250) ise QUIC üstünde çalışır. Gizlilik açısından bu iyi bir gelişmedir.
Kurumsal güvenlik açısından ise bir kör nokta doğurur: tarayıcı kendi DoH çözücüsüne çıkarsa, kurumun DNS tabanlı denetimleri ve kayıtları devre dışı kalır. Kurumlar bu yüzden çoğu zaman dış DoH'u engeller ve tüm cihazları kendi çözücüsüne yönlendirir. DNSSEC ayrı bir sorunu çözer: şifreleme değil, doğrulama getirir. dig çıktısındaki ad biti, cevabın DNSSEC ile doğrulandığını gösterir.
Etkinlik 7 / 7
Bir cihaz yeni ağa katılıp altaykargo.example adresine ilk kez bağlanıyor. Hangi adım DNS sorgusundan önce gelmek zorundadır?
Okumayı istediğin sırayla sürdürebilirsin. Ders, bütün etkinlikleri cevapladığında tamamlanır.