İçeriğe geç
academia.sh

Ders 03 / 20

Adres Çözümleme Saldırıları

Adres çözümleme önbelleğinin doğrulanmayan yanıtla bozulmasının ölçülmesi: 26 yanıtlık kümede 18 kaydın 6'sının bozulması, sabit kaydın 4'ünü kurtarıp 2'sini bırakması, tutarlılık denetiminin 5'ini kurtarıp en değerli kaydı bırakması, yalnız istenen yanıtı kabul etmenin altısını da kurtarıp 3 meşru duyuruyu kesmesi ve üç savunmanın birlikte 4 meşru yanıt reddedip 2 kaydı hiç oluşturmaması.

İçindekiler

Önceki ders bir servise erişilebildiğini varsaydı: envanterdeki her satır, bir bölgeden bir konağa paketin ulaşabildiğini kabul ederek yazıldı. Oysa aynı bölütteki iki makinenin birbirine ulaşması bile bir iddiaya dayanır. Bir uç hedefin ağ adresini bilir, ama çerçeveyi hangi donanım adresine göndereceğini bilmez. Bunu sorar ve gelen yanıtı önbelleğine yazar.

Yazma kuralı bu dersin çıkış noktasıdır. Önbellek gelen yanıtın doğru olup olmadığını sınamaz; yanıtın istenmiş olup olmadığını bile sormaz. Bu kabulün yanlış bir eşleme üretmesine adres çözümleme zehirlenmesi (ARP poisoning), gönderenin kendini başka bir adresin sahibi olarak sunmasına adres çözümleme sahteciliği (ARP spoofing) denir. Birinci dersteki on sekiz iddiadan üçü bağlantı katmanındaydı ve üçü de bu tek kurala bağlıdır. Bu ders o kuralı bir veri yapısı üzerinde koşturur ve doğrulanmayan bir yanıtın kaç kaydı bozduğunu sayar.

Önbellek Neyi Sınayabilir

PG7: adres çözümleme önbelleğinin kabul kuralı “son yanıt kazanır”dır; yanıtın istenmiş olması ve doğru olması kurala girmez. PG8: bir kaydın bozulması, o ağ adresinin gerçekte ait olmadığı bir donanım adresine bağlanmasıdır; bozulan her kayıt o adrese giden bütün çerçeveleri yönlendirir. PG9: bir savunma yanıtı yalnız önbelleğin kendi verisinden sınayabilir; yanıtın doğru olup olmadığını bilmez.

PG9 bu dersin sınırıdır ve üç savunmanın üçünü birden belirler. Önbellekte “doğru eşleme” diye bir kaynak yoktur; sınanabilecek tek şey, gelen yanıtın önbellekteki verilerle tutarlı olup olmadığıdır. Protokol mekaniği — istek ve yanıtın taşınması, önbellek yaşam süresi, vekil ve istenmeden gönderilen kullanım biçimleri — Ağ Modelleri ve Protokoller kursunda ölçüldü; burada tekrarlanmaz.

Aşağıdaki yanıt kümesi bir modeldir: kurgu bölgesel ölçüm ağının bir bölütünde önbelleğe ulaşan yanıtlar veri olarak yazılır, gerçek bir ağ ya da gerçek bir donanım adresi yoktur. Kümede hiçbir sahte yanıt üretim adımı yer almaz; yalnız önbelleğin kabul kuralı ve denetimi koşar. Böyle bir yanıt kümesinin gerçek bir ağa gönderilmesi yazılı yetki ve tanımlı kapsam olmadan hem yasadışı hem meslek dışıdır.

// aglar/cozumleme.mjs — kurgu bolgesel olcum agindaki bir bolutun adres cozumleme
// onbellegi (model): gercek bir ag, gercek bir donanim adresi yok. Donanim adresleri
// d01..d17 diye etiketlenmistir. Rastgelelik yok.

// PG7: adres cozumleme onbelleginin kabul kurali "son yanit kazanir"dir; yanitin
// istenmis olmasi ve dogru olmasi kurala girmez.
// PG8: bir kaydin bozulmasi, o ag adresinin gercekte ait olmadigi bir donanim adresine
// baglanmasidir; bozulan her kayit o adrese giden butun cerceveleri yonlendirir.
// Sutunlar: ag adresi, iddia eden donanim adresi, bekleyen bir istege yanit mi (e/h),
// iddia dogru mu (e/h). Son sutun yalnizca puanlama icindir; hicbir savunma onu gormez.
export const YANIT = `
  10.20.0.1   d01  e e     10.20.0.5   d02  e e     10.20.0.6   d03  e e
  10.20.0.7   d04  e e     10.20.0.8   d05  e e     10.20.0.9   d06  e e
  10.20.0.10  d07  e e     10.20.1.11  d08  e e     10.20.1.12  d09  e e
  10.20.1.13  d10  e e     10.20.2.21  d11  e e     10.20.2.22  d12  e e
  10.20.0.11  d13  e e     10.20.0.12  d14  e e     10.20.0.30  d17  e e
  10.20.0.31  d17  e e     10.20.0.2   d01  h e     10.20.0.32  d17  e e
  10.20.0.7   d15  h e     10.20.2.22  d16  h e     10.20.0.1   d09  h h
  10.20.0.5   d09  h h     10.20.0.6   d09  h h     10.20.0.8   d09  h h
  10.20.0.10  d09  h h     10.20.0.9   d09  h h`
  .trim().split(/\s+/).reduce((l, _, i, a) => (i % 4 ? l : [...l,
    { ag: a[i], don: a[i + 1], ist: a[i + 2] === "e", dog: a[i + 3] === "e" }]), []);

// PG9: bir savunma yaniti yalnizca onbellegin kendi verisinden sinayabilir; dogrulugu
// bilmez. Uc savunma da bu sinirla calisir.
export const SABIT = ["10.20.0.1", "10.20.0.5", "10.20.0.6", "10.20.0.7", "10.20.0.10"];
export const ESIK = 2;

// Onbellek, yanitlari sirayla isler; secilen savunmalar her yaniti kabul etmeden once sinar.
export function onbellek(savunma = []) {
  const tablo = new Map(), red = [];
  for (const y of YANIT) {
    if (savunma.includes("sabit") && SABIT.includes(y.ag) && tablo.has(y.ag)) {
      red.push(y); continue;
    }
    if (savunma.includes("istendi") && !y.ist) { red.push(y); continue; }
    if (savunma.includes("tutarlilik")) {
      const sonra = [...tablo].filter(([a, d]) => d === y.don && a !== y.ag).length + 1;
      if (sonra > ESIK) { red.push(y); continue; }
    }
    tablo.set(y.ag, y.don);
  }
  const bozuk = [...tablo].filter(([a, d]) =>
    !YANIT.some((y) => y.ag === a && y.don === d && y.dog));
  return { tablo, bozuk, redMesru: red.filter((y) => y.dog), redYanlis: red.filter((y) => !y.dog) };
}
// aglar/onbellek-denetimi.mjs — dogrulanmayan yanit kac kaydi bozuyor, hangi savunma
// kacini kurtariyor, kaci kaliyor ve bedeli ne.
import { YANIT, SABIT, ESIK, onbellek } from "./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 = onbellek();

console.log(`${YANIT.length} yanit, ${taban.tablo.size} kayit; ` +
  `bozulan kayit ${taban.bozuk.length}, dogru olmayan yanit ` +
  `${YANIT.filter((y) => !y.dog).length}, istenmeden gelen yanit ` +
  `${YANIT.filter((y) => !y.ist).length}`);

const A = [-14, 10, 13, 9];
console.log("\n1. yanit kumesi: istenmis olmak ile dogru olmak ayri iki ozelliktir");
yaz(A, "yanit", "dogru", "dogru degil", "toplam");
for (const [ad, f] of [["istenmis", (y) => y.ist], ["istenmemis", (y) => !y.ist]]) {
  const l = YANIT.filter(f);
  yaz(A, ad, l.filter((y) => y.dog).length, l.filter((y) => !y.dog).length, l.length);
}

const B = [-10, 8, 15, 12];
console.log("\n2. belirti: bir donanim adresi kac ag adresi ustlendi");
yaz(B, "donanim", "iddia", "kabul edilen", "esik ustu");
const don = [...new Set(YANIT.map((y) => y.don))];
for (const d of don.filter((d) => YANIT.filter((y) => y.don === d).length > 1)) {
  const l = [...new Set(YANIT.filter((y) => y.don === d).map((y) => y.ag))];
  const k = [...taban.tablo].filter(([, v]) => v === d).length;
  yaz(B, d, l.length, k, l.length > ESIK ? "evet" : "hayir");
}

const C = [-28, 8, 8, 12, 11, 8, 8];
console.log("\n3. savunmalar: kurtarilan kayit ve bedeli");
yaz(C, "savunma", "kayit", "bozuk", "kurtarilan", "red mesru", "elle", "ek tur");
for (const s of [[], ["sabit"], ["tutarlilik"], ["istendi"], ["sabit", "tutarlilik"],
  ["sabit", "tutarlilik", "istendi"]]) {
  const r = onbellek(s);
  yaz(C, s.join(" + ") || "hicbiri", r.tablo.size, r.bozuk.length,
    taban.bozuk.length - r.bozuk.length, r.redMesru.length,
    s.includes("sabit") ? SABIT.length : 0, s.includes("istendi") ? r.tablo.size : 0);
}

const D = [-28, -34, -1];
console.log("\n4. hangi kayit bozuk kaliyor, hangi mesru yanit reddediliyor");
yaz(D, "savunma", "bozuk kalan kayit", "reddedilen mesru yanit");
for (const s of [["sabit"], ["tutarlilik"], ["istendi"], ["sabit", "tutarlilik"]]) {
  const r = onbellek(s);
  yaz(D, s.join(" + "), r.bozuk.map(([a]) => a).join(" ") || "yok",
    r.redMesru.map((y) => `${y.ag}=${y.don}`).join(" ") || "yok");
}
26 yanit, 18 kayit; bozulan kayit 6, dogru olmayan yanit 6, istenmeden gelen yanit 9

1. yanit kumesi: istenmis olmak ile dogru olmak ayri iki ozelliktir
yanit              dogru  dogru degil   toplam
istenmis              17            0       17
istenmemis             3            6        9

2. belirti: bir donanim adresi kac ag adresi ustlendi
donanim      iddia   kabul edilen   esik ustu
d01              2              1       hayir
d09              7              7        evet
d17              3              3        evet

3. savunmalar: kurtarilan kayit ve bedeli
savunma                        kayit   bozuk  kurtarilan  red mesru    elle  ek tur
hicbiri                           18       6           0          0       0       0
sabit                             18       2           4          1       5       0
tutarlilik                        17       1           5          1       0       0
istendi                           17       0           6          3       0      17
sabit + tutarlilik                17       1           5          2       5       0
sabit + tutarlilik + istendi      16       0           6          4       5      16

4. hangi kayit bozuk kaliyor, hangi mesru yanit reddediliyor
savunma                     bozuk kalan kayit                 reddedilen mesru yanit
sabit                       10.20.0.8 10.20.0.9               10.20.0.7=d15
tutarlilik                  10.20.0.1                         10.20.0.32=d17
istendi                     yok                               10.20.0.2=d01 10.20.0.7=d15 10.20.2.22=d16
sabit + tutarlilik          10.20.0.8                         10.20.0.32=d17 10.20.0.7=d15

Sayılar ölçüm sınıfındadır; girdileri PG7–PG9’dur.

Altı Kayıt

Yirmi altı yanıt on sekiz kayıt üretir ve savunma yokken bu kayıtların altısı bozuktur. Bozulma oranı üçte birdir, ama asıl belirleyici olan hangi kayıtların bozulduğudur: ağ geçidi, toplayıcı, doğrulayıcı, ad sunucusu, dizin ucu ve ölçüm deposu. Altısı da bölütün dışına ya da merkezî hizmetlere giden trafiği taşıyan adreslerdir; sahadaki terminaller ile yazıcının kayıtları bozulmamıştır.

Bozulan kayıt sayısı ile etkilenen trafik aynı sayı değildir. Önceki dersin envanterinde toplayıcı üzerindeki dört servis otuz günde 141.652, ad sunucusu üzerindeki iki servis 163.000 istek almıştı. Bu bölütteki bir uç, bozulan altı kaydın altısı için hedefine giden çerçeveleri yanlış donanım adresine teslim eder; kayıt başına düşen etki, o adresin taşıdığı istek hacmi kadardır. Bozulan kayıt sayısı yüzeyi ölçer, taşınan istek hacmi ise etkiyi ölçer ve ikisi aynı sırayı vermez.

Birinci tablo iki özelliği ayırır. On yedi yanıtın hepsi bekleyen bir isteğe karşılıktır ve hepsi doğrudur. Dokuz yanıt istenmeden gelmiştir; bunların üçü doğru, altısı değildir. İstenmemiş olmak yanlış olmak anlamına gelmez: sanal geçit adresinin duyurulması, faturalama adresinin yedeğe devri ve bir arayüz değişimi istenmeden duyurulur ve üçü de meşrudur. Bir savunmanın istenmemiş yanıtları toptan reddetmesi, altı yanlış yanıtla birlikte bu üçünü de keser.

İkinci tablo denetimin gördüğü belirtiyi verir. Birden fazla ağ adresi üstlenen üç donanım adresi vardır: biri iki, biri üç, biri yedi ağ adresi iddia eder ve yedisinin yedisi de kabul edilmiştir. Yedili satır, aynı bölütteki bir uçtan gelen ve kendi adresi dışında altı adres daha üstlenen yanıtları toplar. İki ve üç adres üstlenen satırlar ise meşrudur: biri ağ geçidinin sanal adresi, öteki üç konuk sistem çalıştıran bir konaktır. Belirti bir sayıdır, bir karar değildir; eşiğin nereye konduğu doğru ile yanlışı birlikte keser.

Üç Savunma, Üç Ayrı Boşluk

Üçüncü tablo üç savunmayı ayrı ayrı ve birlikte koşturur. Sabit kayıt beş adresi listeye alır ve listedekiler için gelen sonraki yanıtları yok sayar: dört bozuk kaydı kurtarır, ikisini bırakır. Bırakılanlar listede olmayan ad sunucusu ile dizin ucudur. Sabit kaydın koruması tam olarak listenin uzunluğu kadardır ve listede olmayan hiçbir kaydı kurtarmaz.

Tutarlılık denetimi bir donanım adresinin en çok iki ağ adresi üstlenmesine izin verir ve altı bozuk kaydın beşini kurtarır. Kurtaramadığı tek kayıt ağ geçididir. Nedeni sıradır: yedi adres üstlenen donanım adresi kendi adresine ek olarak önce ağ geçidini iddia eder ve o anda eşik henüz aşılmamıştır. Eşik ancak ikinci iddiada aşılır ve o noktadan sonrası reddedilir. Eşik tabanlı bir denetim, eşiğe kadar olan iddiaları kabul eder; kaçırdığı iddia her zaman ilk iddiadır ve ilk iddia genellikle en değerli hedeftir.

Yalnız istenen yanıtın kabul edilmesi altı bozuk kaydın altısını da kurtarır ve bozuk kayıt sayısını sıfıra indirir. Üç savunma içinde tek eksiksiz olan budur, çünkü altı yanlış yanıtın altısı da istenmeden gelmiştir. Bu eksiksizlik yanıt kümesinin bir özelliğidir, savunmanın gücünün değil: bekleyen bir isteğe karşılık olarak gelen bir yanıt aynı denetimden geçerdi.

Üçüncü tablonun beşinci satırı bir savunma birleşiminin her zaman toplanmadığını gösterir. Sabit kayıt ile tutarlılık denetimi birlikte açıldığında bozuk kayıt bir kalır — tutarlılık denetiminin tek başına verdiği sayının aynısı. Buna karşılık reddedilen meşru yanıt bire değil ikiye çıkar ve beş elle kalem de eklenir. Dördüncü tablo bozuk kalan kaydın değiştiğini gösterir: tutarlılık tek başınayken ağ geçidi kaydı bozuk kalıyordu, birleşimde ad sunucusu kaydı bozuk kalır. Sabit liste ilk üç iddiayı keser, dolayısıyla eşiği aşan ilk iddia artık dördüncü sıradaki ad sunucusudur ve o kabul edilir. Eşik tabanlı denetimin kaçırdığı kayıt, önündeki savunma değiştiğinde yer değiştirir; kaçırılan kayıt sayısı sabit kalır.

Bedelin Üç Biçimi

Dördüncü tablo her savunmanın kestiği meşru yanıtı adıyla verir ve üç bedelin biçimi birbirinden tümüyle farklıdır.

Sabit kaydın bedeli elle yönetimdir: beş kalem listede tutulur, her adres değişikliğinde elle güncellenir ve listedeki bir adres meşru olarak yer değiştirdiğinde değişiklik reddedilir. Tabloda tam olarak bu görülür: faturalama adresinin yedeğe devri kesilir. Beş kalem küçük bir sayıdır, ama ağdaki her yeni kritik adres bu sayıyı büyütür ve unutulan bir kalem sessizce korumasız kalır.

Tutarlılık denetiminin bedeli yanlış yakalamadır: üç konuk sistem çalıştıran konağın üçüncü adresi reddedilir. Eşiği üçe çıkarmak bu meşru kaydı kurtarır, ama aynı hareketle yedi adres üstlenen satırın ikinci iddiasını da kabul eder. Eşik hem doğruyu hem yanlışı aynı yönde kaydırır.

Yalnız istenen yanıtı kabul etmenin bedeli tur sayısı ve kesilen duyurudur: on yedi kaydın her biri için bir istek turu gerekir ve istenmeden gelen üç meşru duyurunun üçü de reddedilir. Bir yedeğe devir duyurusunun kesilmesi, önbelleğin eski kaydı yaşam süresi dolana kadar tutması demektir; devir anında trafiğin bir bölümü eski donanım adresine gitmeye devam eder.

Üçü birlikte açıldığında bozuk kayıt sıfırdır, ama reddedilen meşru yanıt sayısı dörde çıkar ve kayıt sayısı on sekizden on altıya iner. Eksik iki kayıt, hiçbir zaman oluşmayan iki eşlemedir: sanal geçit adresi ve üçüncü konuk sistemin adresi. O iki adrese giden trafik, kayıt oluşana kadar hiç gitmez. Bozuk kaydı sıfırlamanın bedeli yalnız reddedilen yanıt değil, oluşmayan kayıttır. Reddedilen bir yanıt denetimde bir kayıt bırakır ve aranabilir; oluşmayan bir eşleme hiçbir iz bırakmaz ve yalnız o adrese ulaşılamadığı görüldüğünde fark edilir.

Özet

  • Adres çözümleme önbelleğinin kabul kuralı “son yanıt kazanır”dır; 26 yanıtlık kümede 18 kaydın 6’sı bozulur ve altısı da bölüt dışına giden trafiği taşıyan adreslerdir.
  • İstenmiş olmak ile doğru olmak ayrı özelliklerdir: 17 istenmiş yanıtın 17’si doğrudur, 9 istenmemiş yanıtın 3’ü doğru 6’sı değildir.
  • Sabit kayıt listedeki 5 adres için 4 kaydı kurtarır ve listede olmayan 2’sini bırakır; tutarlılık denetimi 5 kaydı kurtarır ve sırası ilk olan ağ geçidi kaydını kaçırır.
  • Yalnız istenen yanıtın kabul edilmesi 6 kaydın 6’sını kurtarır, ama istenmeden gelen 3 meşru duyuruyu keser ve 17 kayıt için ek istek turu getirir.
  • Üç savunma birlikte bozuk kaydı sıfırlar; bedeli 4 reddedilen meşru yanıt, 5 elle kalem, 16 ek tur ve hiç oluşmayan 2 kayıttır.

Sonraki Adım

Bu ders bir bölütün içinde kaldı: sorulan soru “şu ağ adresi hangi donanım adresine ait” idi 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, ama bu kez önbellek yerel bir bölütte değil, ağın her katmanında bulunur ve tek bir yanlış kayıt tek bir makineyi değil, o kaydı okuyan bütün istemcileri yönlendirir. Sonraki ders ad çözümleme önbelleğini aynı biçimde kurar ve 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ç kalemi dışarıda bırakıyor.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat