---
title: 'Ad Çözümleme Saldırıları'
source: 'https://academia.sh/tr/kurslar/ag-guvenligi/ad-cozumleme-saldirilari'
course: 'Ağ Güvenliği'
language: tr
updated: '2026-08-17T18:08:40+00:00'
license: 'CC BY-SA 4.0'
---

# Ad Çözümleme Saldırıları

Ad çözümleme önbelleğinin doğrulanmayan yanıtla bozulmasının ölçülmesi: 16 adın 7'sinin bozulup 73 bağımlı servisin 38'ini yönlendirmesi, imzalı doğrulamanın 3 kaydı kurtarıp imzasız bölgede 4'ünü bırakması, süresi dolmuş imzanın 2 adı hiç çözümlenemez kılıp 9 servisi durdurması, katı kipin bozuk kaydı sıfırlarken 47 servisi durdurması ve yaşam süresi tavanının bozuk kalma süresini %88,1 düşürüp sorgu sayısını %346,5 artırması.

Önceki ders bir bölütün içinde kaldı: sorulan soru bir ağ adresinin hangi donanım adresine ait
olduğuydu ve yanıt aynı bölütten geldi. Bölütün dışına çıkan her istek ise daha önce bir başka
soru sorar — bir adın hangi adrese karşılık geldiği. Bu sorunun yanıtı da bir önbelleğe
yazılır.

İki önbellek arasında bir ölçek farkı vardır. Bir adres çözümleme kaydı tek bir bölütte tek bir
hedefi yönlendirir; bir ad çözümleme kaydı ise o adı kullanan **bütün** servisleri birden
yönlendirir ve önbellek ağın her katmanında bulunur. Bir ad kaydının doğrulanmayan bir yanıtla
değiştirilmesine **ad çözümleme zehirlenmesi (DNS poisoning)**, bölge kayıtlarının imzalanıp
alıcı tarafından sınanmasına **imzalı ad çözümleme (DNSSEC)** denir. Bu ders o farkı sayar:
doğrulanmayan bir yanıt kaç kaydı ve kaç bağımlı servisi bozuyor, imzalı doğrulama kaçını
kurtarıyor, imzalanmamış bölge kaç kalem bırakıyor.

## İmza Neyi Sınayabilir

**PG10:** ad çözümleme yanıtı bir iddiadır — "şu ad şu adrese karşılık gelir"; imzasız bir
bölgede bu iddianın önbellekte sınanabilecek hiçbir kanıtı yoktur. **PG11:** bir ad kaydının
bozulması o ada bağlı bütün servisleri birden yönlendirir; etkinin ölçüsü kayıt sayısı değil,
**bağımlı servis sayısıdır**. **PG12:** imza yalnız imzalanmış bölgenin yanıtlarını
sınayabilir; imzasız bölgenin yanıtı ne doğrulanabilir ne de yanlışlanabilir.

PG12 bu dersin belirleyici maddesidir. İmzalı ad çözümleme bir yanıtı "doğru" ya da "yanlış"
diye ikiye ayırmaz; **"doğrulandı", "doğrulanamadı" ve "sınanamadı"** diye üçe ayırır. Üçüncü
küme, imzasız bölgelerden gelen her yanıttır ve bu yanıtlar için önbellek ilk derste sayılan
durumda kalır: kanıt yoktur. Kayıt türleri, çözümleme zincirindeki roller ve yaşam süresine
dayalı önbellekleme **Bilgisayar Ağları** müfredatında ölçüldü; burada tekrarlanmaz.

Aşağıdaki ad kümesi bir **modeldir**: adlar ve bölgeler kurgudur, adresler özel ve belgeleme
için ayrılmış bloklardandır. Kümede hiçbir sahte yanıt üretim adımı yoktur; koşan kod
önbelleğin kabul kuralı ile denetimidir. Böyle bir yanıt kümesinin sahibi olmadığın bir
çözümleyiciye gönderilmesi **yazılı yetki ve tanımlı kapsam olmadan hem yasadışı hem meslek
dışıdır**.

```js
// aglar/ad-cozumleme.mjs — kurgu bolgesel olcum aginin ad cozumleme onbellegi (model):
// adlar ve bolgeler kurgudur, gercek bir alan adi yoktur; adresler ozel ve belgeleme icin
// ayrilmis bloklardandir. Rastgelelik yok.

// PG10: ad cozumleme yaniti bir iddiadir: "su ad su adrese karsilik gelir". Imzasiz bir
// bolgede bu iddianin onbellekte sinanabilecek hicbir kaniti yoktur.
// PG11: bir ad kaydinin bozulmasi, o ada bagli butun servisleri birden yonlendirir;
// etkinin olcusu kayit sayisi degil, bagimli servis sayisidir.
// Sutunlar: ad, bolge, yasam suresi (saniye), o ada bagli servis sayisi.
export const AD = `
  toplayici.olcum      olcum      3600  6    dogrulayici.olcum   olcum     3600  5
  depo.olcum           olcum      1800  4    alim.olcum          olcum      300  9
  aktarim.olcum        olcum      3600  2    faturalama.kurumsal kurumsal  3600  7
  isemri.kurumsal      kurumsal   3600  3    rapor.kurumsal      kurumsal  7200  1
  dizin.kurumsal       kurumsal   1800  8    kimlik.kurumsal     kurumsal   900 11
  sube01.saha          saha        600  2    sube02.saha         saha       600  2
  gecit.saha           saha       1800  4    arayuz.dis          dis       3600  3
  durum.dis            dis        7200  1    guncelleme.dis      dis       1800  5`
  .trim().split(/\s+/).reduce((l, _, i, a) => (i % 4 ? l : [...l,
    { ad: a[i], bolge: a[i + 1], ttl: +a[i + 2], bagimli: +a[i + 3] }]), []);

// PG12: imza yalnizca imzalanmis bolgenin yanitlarini sinayabilir; imzasiz bolgenin yaniti
// ne dogrulanabilir ne de yanlislanabilir.
export const IMZALI = ["olcum", "dis"];

// Onbellege ulasan yanitlar. imza: gecerli | gecersiz | dolmus | yok (imzasiz bolge).
// dog sutunu yalnizca puanlama icindir; hicbir savunma onu gormez.
export const YANIT = `
  toplayici.olcum      10.30.0.5     gecerli   e    alim.olcum      10.30.0.8   gecerli e
  depo.olcum           10.30.0.10    dolmus    e    aktarim.olcum   10.30.0.11  gecerli e
  dogrulayici.olcum    10.30.0.6     dolmus    e    rapor.kurumsal  10.30.1.9   yok     e
  faturalama.kurumsal  10.30.1.7     yok       e    dizin.kurumsal  10.30.1.12  yok     e
  isemri.kurumsal      10.30.1.8     yok       e    kimlik.kurumsal 10.30.1.13  yok     e
  sube01.saha          10.30.2.21    yok       e    sube02.saha     10.30.2.22  yok     e
  gecit.saha           10.30.2.1     yok       e    arayuz.dis      198.51.100.4 gecerli e
  durum.dis            198.51.100.5  gecerli   e    guncelleme.dis  198.51.100.6 gecerli e
  toplayici.olcum      10.30.9.90    gecersiz  h    dogrulayici.olcum 10.30.9.90 gecersiz h
  arayuz.dis           10.30.9.90    gecersiz  h    faturalama.kurumsal 10.30.9.90 yok    h
  kimlik.kurumsal      10.30.9.90    yok       h    sube01.saha     10.30.9.90  yok     h
  gecit.saha           10.30.9.90    yok       h`
  .trim().split(/\s+/).reduce((l, _, i, a) => (i % 4 ? l : [...l,
    { ad: a[i], adres: a[i + 1], imza: a[i + 2], dog: a[i + 3] === "e" }]), []);

// kip: "yok" = imza sinanmaz; "imzali" = gecersiz ve dolmus imza reddedilir;
// "kati" = imzasiz bolgenin yaniti da reddedilir.
export function cozumle(kip = "yok") {
  const tablo = new Map(), red = [];
  for (const y of YANIT) {
    const bozuk = y.imza === "gecersiz" || y.imza === "dolmus";
    if (kip !== "yok" && bozuk) { red.push(y); continue; }
    if (kip === "kati" && y.imza === "yok") { red.push(y); continue; }
    tablo.set(y.ad, y.adres);
  }
  const kayit = AD.map((a) => ({ ...a, adres: tablo.get(a.ad) }));
  return {
    kayit,
    bozuk: kayit.filter((a) => a.adres &&
      !YANIT.some((y) => y.ad === a.ad && y.adres === a.adres && y.dog)),
    yok: kayit.filter((a) => !a.adres),
    redMesru: red.filter((y) => y.dog),
  };
}
```

```js
// aglar/ad-denetimi.mjs — dogrulanmayan ad yaniti kac kaydi ve kac bagimli servisi bozuyor,
// imzali dogrulama kacini kurtariyor, imzasiz bolge kac kalem birakiyor, bedeli ne.
import { AD, YANIT, IMZALI, cozumle } from "./ad-cozumleme.mjs";

const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
const taban = cozumle(), TAVAN = 300;
const bagimli = (l) => l.reduce((s, a) => s + a.bagimli, 0);
const sorgu = (t) => AD.reduce((s, a) => s + Math.floor(86400 / Math.min(a.ttl, t)), 0);
const ANAHTAR = 3; // bolge basina: bolge anahtari, imzalama anahtari, ust bolgeye verilen ozet

console.log(`${AD.length} ad, ${YANIT.length} yanit, ${bagimli(AD)} bagimli servis; ` +
  `imzali bolge ${IMZALI.length}/${new Set(AD.map((a) => a.bolge)).size}, ` +
  `bozulan kayit ${taban.bozuk.length}, etkilenen bagimli servis ${bagimli(taban.bozuk)}`);

const A = [-10, 6, 9, 10, 13, 11];
console.log("\n1. bolge basina");
yaz(A, "bolge", "imza", "ad", "bagimli", "bozuk kayit", "etkilenen");
for (const b of [...new Set(AD.map((a) => a.bolge))]) {
  const l = AD.filter((a) => a.bolge === b), z = taban.bozuk.filter((a) => a.bolge === b);
  yaz(A, b, IMZALI.includes(b) ? "var" : "yok", l.length, bagimli(l), z.length, bagimli(z));
}

const B = [-22, -10, 9, 10, 18];
console.log("\n2. taban: bozulan kayitlar ve tasidiklari bagimlilik");
yaz(B, "ad", "bolge", "bagimli", "ttl (sn)", "imzayla kurtulur");
for (const a of taban.bozuk)
  yaz(B, a.ad, a.bolge, a.bagimli, a.ttl, IMZALI.includes(a.bolge) ? "evet" : "hayir");

const C = [-8, 8, 11, 10, 14, 11, 9, 8];
console.log("\n3. kipler: kurtarilan kayit ve bedeli");
yaz(C, "kip", "bozuk", "etkilenen", "kayitsiz", "duran servis", "red mesru", "anahtar", "ek tur");
for (const [k, imzaliBolge] of [["yok", 0], ["imzali", IMZALI.length], ["kati", 4]]) {
  const r = cozumle(k);
  const kapsam = AD.filter((a) => k === "kati" || IMZALI.includes(a.bolge)).length;
  yaz(C, k, r.bozuk.length, bagimli(r.bozuk), r.yok.length, bagimli(r.yok),
    r.redMesru.length, imzaliBolge * ANAHTAR, k === "yok" ? 0 : kapsam);
}

const D = [-16, 10, 12, 13, 12];
console.log(`\n4. yasam suresi tavani ${TAVAN} sn olursa`);
yaz(D, "olcu", "tavansiz", "tavanli", "fark", "fark %");
const olcum = [
  ["gunluk sorgu", sorgu(1e9), sorgu(TAVAN)],
  ["bozuk kayit sn", taban.bozuk.reduce((s, a) => s + a.ttl, 0),
    taban.bozuk.reduce((s, a) => s + Math.min(a.ttl, TAVAN), 0)],
  ["en uzun bozuk sn", Math.max(...taban.bozuk.map((a) => a.ttl)),
    Math.max(...taban.bozuk.map((a) => Math.min(a.ttl, TAVAN)))],
];
for (const [ad, x, y] of olcum)
  yaz(D, ad, x, y, y - x, (((y - x) / x) * 100).toFixed(1));
```

```
16 ad, 23 yanit, 73 bagimli servis; imzali bolge 2/4, bozulan kayit 7, etkilenen bagimli servis 38

1. bolge basina
bolge       imza       ad   bagimli  bozuk kayit  etkilenen
olcum        var        5        26            2         11
kurumsal     yok        5        30            2         18
saha         yok        3         8            2          6
dis          var        3         9            1          3

2. taban: bozulan kayitlar ve tasidiklari bagimlilik
ad                    bolge       bagimli  ttl (sn)  imzayla kurtulur
toplayici.olcum       olcum             6      3600              evet
dogrulayici.olcum     olcum             5      3600              evet
faturalama.kurumsal   kurumsal          7      3600             hayir
kimlik.kurumsal       kurumsal         11       900             hayir
sube01.saha           saha              2       600             hayir
gecit.saha            saha              4      1800             hayir
arayuz.dis            dis               3      3600              evet

3. kipler: kurtarilan kayit ve bedeli
kip        bozuk  etkilenen  kayitsiz  duran servis  red mesru  anahtar  ek tur
yok            7         38         0             0          0        0       0
imzali         4         24         2             9          2        6       8
kati           0          0        10            47         10       12      16

4. yasam suresi tavani 300 sn olursa
olcu              tavansiz     tavanli         fark      fark %
gunluk sorgu          1032        4608         3576       346.5
bozuk kayit sn       17700        2100       -15600       -88.1
en uzun bozuk sn      3600         300        -3300       -91.7
```
Sayılar **ölçüm** sınıfındadır; girdileri PG10–PG12'dir.

## Yedi Kayıt, Otuz Sekiz Servis

On altı ad on altı kayıt üretir ve savunma yokken bunların **yedisi** bozuktur. Kayıt oranı
%43,8'dir, ama asıl sayı ikinci sütundadır: yedi bozuk kayıt yetmiş üç bağımlı servisin **otuz
sekizini** yönlendirir. Bir kayıt bir hedefi değil, o adı kullanan her servisi taşır.

İkinci tablo bu orantısızlığı adım adım gösterir. Saha bölgesindeki `sube01.saha` kaydı yalnız
iki servis taşır; `kimlik.kurumsal` kaydı **on bir** servis taşır. İkisi de tek bir kayıttır ve
ikisi de aynı kuralla bozulur. Bir ad kümesinde bozulma sırasını belirleyen şey kayıt sayısı
değil, kayıt başına bağımlılıktır.

Birinci tablo bölge düzeyinde okur. İmzalı iki bölgede beş ve üç ad vardır; imzasız iki bölgede
beş ve üç. Bozulan yedi kaydın **üçü** imzalı bölgelerdedir ve on dört bağımlı servis taşır;
**dördü** imzasız bölgelerdedir ve yirmi dört bağımlı servis taşır. Kurumsal bölge tek başına
otuz bağımlı servisle en yüklü bölgedir ve imzasızdır.

Bu son cümle imzalama kapsamının bağımlılık ağırlığını izlemediğini gösterir. İmzalı iki bölge
yetmiş üç bağımlı servisin otuz beşini kapsar; imzasız iki bölge otuz sekizini. Kapsam ad
sayısına göre yarı yarıyadır (sekiz ada karşı sekiz), ama taşınan bağımlılığa göre imzalı taraf
azınlıktadır. En çok servis taşıyan tek ad — on bir servisle `kimlik.kurumsal` — imzasız
bölgededir. **İmzalama kararı bölge bölge verilir, oysa etki ad ad dağılır.**

## İmzanın Kurtardığı ve Bırakan

Üçüncü tablonun ikinci satırı imzalı doğrulamayı açar. Bozuk kayıt yediden **dörde**, etkilenen
bağımlı servis otuz sekizden **yirmi dörde** iner. Kurtarılan üç kaydın üçü de imzalı
bölgelerdedir; imzasız bölgelerdeki dördü olduğu gibi kalır. **İmzalı doğrulamanın kapsamı
bölge sınırıdır ve o sınırın dışında hiçbir şey değişmez.**

Aynı satırın dördüncü ve beşinci sütunları savunmanın kendi bedelini yazar. İki ad **hiç
çözümlenemez** hâle gelir ve dokuz bağımlı servis durur. Nedeni bir saldırı değildir: bu iki
adın meşru yanıtlarının imzası süresi dolmuş olarak gelmiştir ve doğrulama onları da reddeder.
İki meşru yanıt kesilir. İmzalı doğrulama açıkken **bir imzanın süresinin dolması, o adın hiç
yanıtı yokmuş gibi davranmasına yol açar**; imzasız bir bölgede aynı durum hiç oluşmaz.

Üçüncü satır katı kipi ölçer: imzasız bölgeden gelen yanıtlar da reddedilir. Bozuk kayıt sıfıra
iner ve etkilenen bağımlı servis sıfır olur. Bedeli, on adın çözümlenememesi ve **kırk yedi
bağımlı servisin durmasıdır** — yetmiş üçün üçte ikisinden fazlası. On meşru yanıt reddedilir,
anahtar kalemi altıdan on ikiye çıkar ve her ad için bir ek tur gerekir.

Katı kip bu kursta savunmanın yetmediği en açık örneklerden biridir. Doğrulanmayan iddiayı
sıfırlar, ama bunu iddiayı doğrulayarak değil, doğrulanamayan her şeyi reddederek yapar. Kalan
dört bozuk kaydın gerçek çözümü katı kip değil, imzasız iki bölgenin imzalanmasıdır; o da bu
tabloda anahtar kalemini on ikiye ve ek turu on altıya çıkaran satırdır.

İmzalı kipin net kazancı, iki bedeli birlikte yazınca daha da daralır. Tabansız durumda otuz
sekiz bağımlı servis yanlış yönlendirilir ve hiçbiri durmaz. İmzalı kipte yirmi dördü yanlış
yönlendirilir ve dokuzu durur; doğru çalışan servis sayısı otuz beşten kırka çıkar. Yetmiş üç
servislik bir kümede net kazanç **beş servistir**. Aynı savunma imzalı bölgelerin içinde tam
etkilidir; toplamı bu kadar küçük yapan şey, imzasız bölgelerin taşıdığı ağırlık ve imzanın
kendi arıza kipidir.

## Yaşam Süresi Tavanı

Dördüncü tablo imzadan bağımsız bir savunmayı ölçer: kayıtların yaşam süresine bir tavan
koymak. Bu, bozulmayı engellemez; bozuk kaydın **ne kadar süre** bozuk kaldığını sınırlar.

Tavansız durumda yedi bozuk kaydın toplam yaşam süresi 17.700 saniyedir ve en uzunu 3.600
saniyedir. Tavan 300 saniyeye çekildiğinde toplam 2.100 saniyeye, en uzunu 300 saniyeye iner —
sırasıyla **%88,1** ve **%91,7** düşüş. Karşılığında günlük sorgu sayısı 1.032'den 4.608'e
çıkar: **%346,5 artış**.

İki oran birlikte okunduğunda tavanın niteliği görünür. Yaşam süresi tavanı doğrulanan iddia
sayısını **hiç değiştirmez**; bu dersin ilk sütununda tek bir sayı bile oynamaz. Değiştirdiği
şey bozuk bir kaydın etkisinin süresidir. Üç sütunlu ölçümde bu, birinci ve ikinci sütunu boş
bırakıp yalnız üçüncüyü dolduran bir savunmadır — ve bedeli sorgu hacminin dört buçuk katına
çıkmasıdır. **Etkiyi kısaltmak, iddiayı doğrulamanın yerine geçmez.**

## Özet

- Ad çözümleme yanıtı imzasız bir bölgede sınanamaz; 16 adın **7'si** bozulur ve bu 7 kayıt 73
  bağımlı servisin **38'ini** yönlendirir.
- Etkinin ölçüsü kayıt sayısı değil bağımlılıktır: bir kayıt 2 servis taşırken bir başkası 11
  servis taşır ve ikisi de aynı kuralla bozulur.
- İmzalı doğrulama bozuk kaydı 7'den 4'e, etkilenen servisi 38'den 24'e indirir; kurtardığı 3
  kaydın üçü de imzalı bölgededir ve imzasız bölgede hiçbir şey değişmez.
- İmzanın kendi bedeli vardır: süresi dolmuş imza 2 adı hiç çözümlenemez kılar ve 9 bağımlı
  servisi durdurur; katı kip bozuk kaydı sıfırlar ama 10 adı çözümlenemez kılıp 47 servisi
  durdurur, anahtar kalemini 12'ye ve ek turu 16'ya çıkarır.
- Yaşam süresi tavanı doğrulanan iddia sayısını hiç değiştirmez; bozuk kaydın süresini %88,1
  kısaltır ve günlük sorgu sayısını %346,5 artırır.

## Sonraki Adım

Bu dersin ve bir öncekinin ortak varsayımı, önbelleğe soru soran ucun **kime soracağını zaten
bildiğiydi**. Ad çözümleyicinin adresi, ağ geçidinin adresi ve ucun kendi adresi verilmiş kabul
edildi. Oysa bir uç ağa bağlandığında bunların hiçbirini bilmez; sorar ve gelen ilk yanıtı
kabul eder. O tek yanıt üç ayrı iddiayı birden taşır: bu senin adresin, geçidin şu, ad
çözümleyicin şu. Sonraki ders adres dağıtımını bir veri yapısı olarak kurar ve sayar: bir
dağıtım yanıtı kaç iddia taşıyor, ilk yanıtın kazanması kaç ucu hangi yapılandırmaya bağlıyor,
bağlantı noktası güveni ve bağlama tablosu kaçını kurtarıyor ve bunun elle yönetim bedeli ne
oluyor.
