Bloga dönRehberler

DNSSEC Nedir, Nasıl Açılır? Güven Zinciri ve Dikkat Edilecekler

DNSSEC nedir, DNSKEY ve DS kayıtları güven zincirini nasıl kurar, neyi korumaz, DNSSEC nasıl açılır ve kesintiye yol açan hatalardan nasıl kaçınılır?

Yayınlanma: · 6 dk okuma

Klasik DNS'te bir yanıtın gerçek olduğunu kanıtlamanın yolu yoktur. Çözümleyici soruyu UDP üzerinden gönderir ve akla yatkın ilk yanıta inanır. Bu yanıtı araya sokabilen ya da değiştirebilen herkes (önbellek zehirleme, ele geçirilmiş bir ağ ya da kötü niyetli bir çözümleyici yoluyla) kullanıcıları başka bir sunucuya yönlendirebilir. DNSSEC (DNS Security Extensions), DNS verisine dijital imza ekleyerek bu açığı kapatır: çözümleyici, yanıtın gerçekten zone sahibinden geldiğini ve yolda değiştirilmediğini doğrulayabilir.

Çoğu alan adında açmaya değer. Aynı zamanda, özensiz davranıldığında bir alan adını tümüyle çevrimdışı bırakabilen az sayıdaki DNS özelliğinden biridir. Aşağıda işin iki yüzünü de anlatıyoruz.

DNSSEC ne sağlar, ne sağlamaz?

Sağladıkları:

  • Kaynak doğrulama ve bütünlük: kayıtları zone'un anahtarlarını elinde tutan kişi yayınlamıştır ve kayıtlar değiştirilmemiştir.
  • Doğrulanmış yokluk kanıtı: bir adın ya da kayıt türünün var olmadığına dair imzalı kanıt; böylece "böyle bir alan adı yok" yanıtı da sahte olarak üretilemez.

Sağlamadıkları:

  • Şifreleme. Sorgular ve yanıtlar yol üzerindeki herkes tarafından okunabilir olmaya devam eder. Gizlilik, istemci ile çözümleyici arasındaki adımı koruyan DNS over TLS ve DNS over HTTPS'in işidir; bunlar DNSSEC'in yerine geçmez, onu tamamlar.
  • Ele geçirilmiş bir DNS hesabına karşı koruma. Saldırgan zone'unuzu düzenleyebiliyorsa sağlayıcı onun kayıtlarını da seve seve imzalar.
  • Web oturumunun korunması. O TLS'in işidir. DNSSEC doğru adrese ulaşmanızı sağlar; sunucunun iddia ettiği kişi olduğunu sertifika kanıtlar.
  • Çözümleyicisi doğrulama yapmayan kullanıcılar için herhangi bir şey. Büyük açık çözümleyicilerin ve internet sağlayıcılarının birçoğu doğrulama yapar; hepsi değil.

DNSSEC nasıl çalışır?

DNSSEC birkaç yeni kayıt türü ekler:

Kayıt Nerede Amacı
RRSIG her kayıt kümesinin yanında o kümenin imzası (örneğin www adının tüm A kayıtları için)
DNSKEY zone'un kökünde zone'un açık anahtarları
DS üst zone'da alt zone'un anahtarının özeti; zincirin halkası
NSEC / NSEC3 zone'un genelinde hangi adların ve türlerin var olmadığını kanıtlar
CDS / CDNSKEY zone'un kökünde alt zone'un DS değişikliklerini üst zone'a otomatik bildirmesini sağlar

Çoğu zone iki anahtar kullanır. Zone imzalama anahtarı (ZSK) kayıtları imzalar. Anahtar imzalama anahtarı (KSK) yalnızca DNSKEY kümesini imzalar ve üst zone'da DS kaydı olarak özeti yayınlanan anahtar KSK'dır. Bu ayrım, ZSK'nın üst zone'u işe karıştırmadan sık sık değiştirilebilmesini sağlar. Bazı sağlayıcılar tek bir birleşik anahtar (CSK) kullanır; ilke aynıdır.

Güven zinciri

Doğrulama yapan bir çözümleyici baştan yalnızca tek bir şeye güvenir: 2010'dan beri imzalı olan kök zone'un açık anahtarına. Geri kalan her şey buradan türetilir:

kök DNSKEY  (güven çapası, çözümleyicide yerleşik)
   └─ imzalar  "com" için DS          → com'un DNSKEY'i ile eşleşir
         └─ imzalar  "example.com" için DS   → example.com'un DNSKEY'i ile eşleşir
               └─ imzalar  www.example.com A 192.0.2.10

Her düzeyde üst zone, bir DS kaydı yayınlayıp imzalayarak alt zone'un anahtarına kefil olur. Her halka doğrulanırsa yanıt güvenlidir (secure) ve çözümleyici ad (authenticated data) bayrağını koyar. Zone'un üst zone'da DS kaydı yoksa yalnızca güvensizdir (insecure): sıradan, imzasız DNS gibi işlem görür, bir zararı olmaz. Ama DS var ve imzalar doğrulanmıyorsa (yanlış anahtar, süresi dolmuş imza, eksik RRSIG) sonuç geçersizdir (bogus) ve çözümleyici SERVFAIL döndürür. Doğrulama yapan çözümleyicilerin arkasındaki kullanıcılar için alan adı yok olur.

DNSSEC'in operasyonel riskinin tamamı bu son durumdur ve aşağıdaki kuralların nedeni de budur.

Bilinmesi gereken bir ayrıntı: imzaların süresi dolar. Her RRSIG'in bir başlangıç ve bitiş zamanı vardır; imzalayan tarafın düzenli olarak yeniden imzalaması gerekir. Yönetilen DNS sağlayıcıları bunu otomatik yapar; kendi sunucunuzda çalışan imzalayıcı durursa kesinti bir iki hafta sonra gelir.

DNSSEC kontrolü: dig ile sorgulama

Üst zone'da DS kaydı var mı (yani alan adının imzalı olması bekleniyor mu)?

$ dig +short example.com DS
31589 13 2 3490A6806D47F17A34C29E2CE80E8A999FFBE4BE...

Alanlar sırasıyla anahtar etiketi, algoritma (13 = SHA-256 ile ECDSA P-256; günümüzün olağan tercihi), özet türü (2 = SHA-256) ve özettir.

Zone anahtar ve imza yayınlıyor mu?

$ dig +dnssec +multi example.com DNSKEY
$ dig +dnssec www.example.com A
www.example.com.  3600 IN A      192.0.2.10
www.example.com.  3600 IN RRSIG  A 13 3 3600 20261004000000 20260920000000 31589 example.com. oJB1W6WNGv+ldvQ3WDG0MQkg5IEhjRip8WTr...

Doğrulanıyor mu? Doğrulama yapan bir çözümleyiciye sorun ve bayraklara bakın:

$ dig www.example.com A @1.1.1.1 | grep flags
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, ...

ad, çözümleyicinin yanıtı doğruladığı anlamına gelir. Bir DNSSEC hatasını diğer hatalardan ayırmak için başarısız sorguyu denetimi kapatarak tekrarlayın:

$ dig www.example.com A @1.1.1.1          # status: SERVFAIL
$ dig www.example.com A @1.1.1.1 +cd      # status: NOERROR, yanıt var

Normalde SERVFAIL, +cd ile yanıt: bozuk bir DNSSEC kurulumunun imzası budur. BIND ile gelen delv www.example.com komutu doğrulamayı yerelde yapar ve zincirin nerede koptuğunu açıklar.

DNSSEC nasıl açılır?

Üç tarafın desteklemesi gerekir: uzantı (neredeyse hepsi destekler), zone'u imzalayan DNS sağlayıcısı ve DS kaydını kayıt otoritesine ileten kayıt firması. .tr alan adlarında DS kaydının nasıl iletileceğini KK'nıza sorun.

  1. DNS sağlayıcısında imzalamayı açın. Sağlayıcı anahtarları üretir, DNSKEY ve RRSIG kayıtlarını yayınlamaya başlar. Bu noktada hiçbir şey bozulamaz, çünkü DS olmadan zone hâlâ "güvensiz" sayılır.
  2. İmzalı zone'u doğrulayın: sağlayıcının nameserver'larına dig +dnssec ile sorduğunuzda kayıtlarınızın RRSIG'lerini görmelisiniz. Önbelleklerin imzalı veriyi tutması için en az bir TTL bekleyin.
  3. DS kaydını yayınlayın.
    • Kayıt firması ile DNS sağlayıcısı aynı şirketse bu genellikle tek tıktır ya da otomatiktir.
    • Değilse DS değerlerini (anahtar etiketi, algoritma, özet türü, özet) DNS sağlayıcısından alıp kayıt firmasının DNSSEC formuna girin. Bazı firmalar DNSKEY ister ve DS'i kendisi hesaplar. Dikkatle kopyalayın; tek bir yanlış karakter alan adını geçersiz kılar.
    • Bazı kayıt otoriteleri ve firmaları CDS/CDNSKEY kayıtlarını düzenli olarak sorgular ve DS'i kendileri oluşturur ya da günceller. Sizinki böyleyse onu tercih edin.
  4. Zinciri doğrulayın: yukarıdaki komutlarla ve harici bir doğrulayıcıyla, birden fazla çözümleyiciden.
  5. İzleyin. İmza süresinin dolması ve DS uyuşmazlığı, arıza çıkana kadar kendini belli etmez.

Tehlikeli anlar

  • DNS sağlayıcısını ya da nameserver'ları değiştirmek. Üst zone'daki DS, eski sağlayıcının anahtarını gösterir. Bunu ele almadan nameserver değiştirirseniz alan adı geçersiz (bogus) olur. Ya DS'i kaldırın, TTL'inin (çoğu zaman bir gün) dolmasını bekleyin, taşıyın, sonra yeniden açın; ya da eşgüdümlü bir çoklu imzalayıcı (multi-signer) geçişi yapın. Tüm sıra kesintisiz nameserver değişikliği yazısında.
  • DNSSEC'i kapatmak. Sıra, açmanın tersidir: önce DS'i kaldırın, TTL'inin dolmasını bekleyin, imzalamayı ancak ondan sonra durdurun. DS hâlâ yayındayken imzalamayı kapatmak, klasik "kendi kendine kesinti" senaryosudur.
  • Eski kayıt firması DNS'i de barındırıyorken alan adını başka firmaya transfer etmek. Bkz. domain transferi nasıl yapılır.
  • Kendi imzalayıcınızı işletiyorsanız anahtar değişimleri. KSK değişimi üst zone'u da ilgilendirir ve yayınla–bekle–geç–bekle–kaldır düzenini izlemelidir. Yönetilen sağlayıcıda bu onların işidir.

Bozuk bir zincirde kendi TTL'lerinizi düşürmenin faydası olmaz: DS kaydının TTL'ini üst zone belirler.

Sık yapılan hatalar

  • DS'i yanlış algoritma ya da özet türü numarasıyla girmek.
  • DNS sağlayıcısı değiştikten sonra eski DS'i yerinde bırakmak.
  • DS'i kaldırmadan imzalamayı kapatmak.
  • Cron görevi ölmüş bir imzalayıcı; imzaların süresi dolana kadar her şey çalışır.
  • NSEC'i, zone'daki adların sırayla listelenmesine ("zone walking") izin verdiğini bilmeden seçmek. NSEC3 ya da büyük sağlayıcıların kullandığı asgari yanıt teknikleri bunu zorlaştırır.
  • ECDSA P-256 daha küçük yanıtlar üretir ve güncel doğrulayıcıların hepsi desteklerken eskimiş algoritmalar (RSA/SHA-1) kullanmak.
  • Site sizde açılıyor diye DNSSEC'in sağlam olduğunu varsaymak. Çözümleyiciniz doğrulama yapmıyor olabilir.

Değer mi?

Yönetilen bir DNS sağlayıcısındaki çoğu alan adı için: evet. Ücretsizdir, bir iki tıkla açılır ve başka türlü göremeyeceğiniz bir saldırı sınıfını ortadan kaldırır. Bedeli, yukarıda sayılan birkaç anda operasyonel disiplindir. Ekibiniz DNS sağlayıcısını gelişigüzel değiştiriyorsa ve kayıt firması hesabının bir sahibi yoksa önce onu düzeltin.

OrbitProbe ile kontrol edin

OrbitProbe DNS sorgulama aracı, herkese açık çözümleyicilerin alan adınız için döndürdüğü kayıtları TTL değerleriyle gösterir. Sağlayıcınızın paneli normal görünürken imzalı bir alan adının doğrulama yapan çözümleyicilerden birdenbire hiç kayıt döndürmemesi, tanımanız gereken örüntüdür: doğrudan yukarıdaki +cd testine geçin. Delegasyonun kayıt otoritesindeki görünümü, imzalı olarak işaretlenip işaretlenmediği dahil, Whois ve RDAP yazısında anlatıldığı gibi kayıt verisinde yer alır.