İçeriğe geç
academia.sh

Ders 07 / 20

Araya Girme Saldırıları

Araya girmenin kanıt zinciri eksikliği olarak ölçülmesi: 8 akışın 36 adımında 3 akışın hiç zinciri olmaması ve 16 adımın içeriği okuyabilmesi, kimlik iddiasını üretebilecek taraf sayısının 272 olması, uç doğrulamanın bu sayıyı 509'a çıkarması, kök sabitlemenin 11'e indirmesi ve 89.400 istek taşıyan tek akışın doğrulama yapamadığı için zincirsiz kalması.

İçindekiler

Önceki ders bir iddianın kanıtsız olmasının niceliğini ölçtü: kaç istek, kaç yuva, kaç saniye. Yük düştüğünde ya da savunma yeterli olduğunda hizmet ayakta kalır ve ölçüm biter. Oysa aynı kanıtsız iddia, hiçbir kapasite tüketmeden ve hiçbir sayacı sapıtmadan da kullanılabilir.

Bir bağlantının iki ucu birbirini kanıtla tanımıyorsa, aralarındaki her adım kendini karşı taraf olarak sunabilir ve bağlantı olağan hızında, olağan hacminde sürer. Burada ölçülecek şey bir yük ya da bir sayaç değildir; eksik olan bir kanıttır. Bu ders o eksikliği sayar.

Araya Girme Bir Eksikliktir

PG19: araya girme (man-in-the-middle) bir yetenek değil, bir eksikliktir — iki ucun birbirinin kimlik iddiasını bağladığı kanıt zincirinin (evidence chain) eksik olması. PG20: bir kanıt zincirinin gücü halka sayısı değil, o iddiayı üretebilecek taraf sayısıdır; bu sayı bir ise zincir tektir, büyüdükçe zincir zayıflar. PG21: zincirin halkaları sayılabilir; dayanağı olmayan halka, o halkayı kim yazarsa yazsın kabul edilen halkadır.

PG20 bu dersin ölçüyü halka saymaktan kurtaran maddesidir. Üç halkalı bir zincir, tek halkalı bir zincirden daha güçlü değildir; belirleyici olan, o üç halkanın sonuncusunu kaç ayrı tarafın yazabildiğidir. Aktarımda şifreleme ve sertifika doğrulamanın algoritma tarafı bu kursun konusu değildir ve M24/K04’te ölçülecektir; burada sayılan tek şey iddianın kaç taraftan gelebileceğidir.

Aşağıdaki akış kümesi bir modeldir: kurgu ölçüm ağının akışları, adım sayıları ve zincir türleri veri olarak yazılır; gerçek bir ağ, gerçek bir ad ya da gerçek bir kök listesi yoktur. Kod hiçbir trafiği yakalamaz ya da değiştirmez; koşan tek şey zincir sayımıdır. Bir yolun adımlarını kendi ağının dışında sınamak yazılı yetki ve tanımlı kapsam olmadan hem yasadışı hem meslek dışıdır.

// aglar/zincir.mjs — kurgu bolgesel olcum agindaki akislarin kanit zinciri (model):
// gercek bir ag, gercek bir ad ya da gercek bir kok listesi yok. Rastgelelik yok.

// PG19: araya girme bir yetenek degil, bir eksikliktir: iki ucun birbirinin kimlik
// iddiasini bagladigi kanit zincirinin eksik olmasi.
// PG20: bir kanit zincirinin gucu halka sayisi degil, o iddiayi uretebilecek taraf
// sayisidir; bu sayi bir ise zincir tektir, buyudukce zincir zayiflar.
export const KOK = 84;   // uclarin kosulsuz kabul ettigi kok listesindeki kalem sayisi

// Sutunlar: akis, yoldaki adim sayisi, zincir turu, gunluk istek, ucu dogrulama
// yapabiliyor mu (e/h).
export const AKIS = `
  saha-terminali>toplayici    6  yok           12400 e
  sayac-ucu>alim-ucu          4  yok           89400 h
  sube-gecidi>merkez-gecidi   5  ortak-kok     43200 e
  yonetim-ucu>sube-gecidi     3  ilk-kullanim    268 e
  faturalama>dogrulayici      2  ortak-kok     22800 e
  dogrulayici>olcum-deposu    2  sabit-kok     61300 e
  saha-terminali>ad-sunucusu  6  yok           34600 e
  dis-istemci>ortak-arayuz    8  ortak-kok      1150 e`
  .trim().split(/\s+/).reduce((l, _, i, a) => (i % 5 ? l : [...l, {
    ad: a[i], adim: +a[i + 1], zincir: a[i + 2], istek: +a[i + 3], yapabilir: a[i + 4] === "e",
  }]), []);

// PG21: zincirin halkalari sayilabilir; dayanagi olmayan halka, o halkayi kim yazarsa
// yazsin kabul edilen halkadir.
// halka = zincirdeki dogrulama adimi, dayanaksiz = ucun sinayamadigi halka.
export const ZINCIR = {
  "yok":          { halka: 0, dayanaksiz: 0, okur: true },
  "ilk-kullanim": { halka: 1, dayanaksiz: 1, okur: false },
  "ortak-kok":    { halka: 3, dayanaksiz: 1, okur: false },
  "sabit-kok":    { halka: 3, dayanaksiz: 0, okur: false },
};

// Bir akisin kimlik iddiasini kac ayri taraf uretebilir.
export function uretebilen(a) {
  if (a.zincir === "yok") return a.adim;
  if (a.zincir === "ilk-kullanim") return a.adim;   // yalnizca ilk baglantida
  if (a.zincir === "ortak-kok") return KOK;
  return 1;
}

// Savunma: uc dogrulama zincirsiz akislari ortak koke, sabitleme ortak kok akislarini
// sabit koke tasir. Ucu dogrulama yapamayan akis oldugu gibi kalir.
export function uygula(savunma = []) {
  return AKIS.map((a) => {
    let z = a.zincir;
    if (savunma.includes("uc-dogrulama") && a.yapabilir && z === "yok") z = "ortak-kok";
    if (savunma.includes("uc-dogrulama") && a.yapabilir && z === "ilk-kullanim") z = "ortak-kok";
    if (savunma.includes("sabitleme") && a.yapabilir && z === "ortak-kok") z = "sabit-kok";
    return { ...a, zincir: z };
  });
}
// aglar/zincir-denetimi.mjs — kac akista kanit zinciri kopuk, kimlik iddiasini kac taraf
// uretebiliyor, uc dogrulama ve kok sabitleme neyi degistiriyor ve bedeli ne.
import { AKIS, KOK, ZINCIR, uretebilen, uygula } from "./zincir.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 okuyan = (l) => l.reduce((t, a) => t + (ZINCIR[a.zincir].okur ? a.adim : 0), 0);
const uretim = (l) => l.reduce((t, a) => t + uretebilen(a), 0);
const KUR = [[], ["uc-dogrulama"], ["sabitleme"], ["uc-dogrulama", "sabitleme"]];

console.log(`${AKIS.length} akis, ${AKIS.reduce((t, a) => t + a.adim, 0)} adim, ` +
  `kok listesi ${KOK} kalem; zinciri olmayan akis ` +
  `${AKIS.filter((a) => a.zincir === "yok").length}, okuyabilen adim ${okuyan(AKIS)}, ` +
  `30 gunluk toplam istek ${AKIS.reduce((t, a) => t + a.istek, 0)}`);

const A = [-27, 7, 14, 8, 12, 12, 11];
console.log("\n1. akis basina kanit zinciri");
yaz(A, "akis", "adim", "zincir", "halka", "dayanaksiz", "uretebilen", "30g istek");
for (const a of AKIS)
  yaz(A, a.ad, a.adim, a.zincir, ZINCIR[a.zincir].halka, ZINCIR[a.zincir].dayanaksiz,
    uretebilen(a), a.istek);

const B = [-26, 10, 12, 12, 12, 13, 19];
console.log("\n2. savunmalar: zincirin durumu");
yaz(B, "savunma", "zincirsiz", "dayanaksiz", "uretebilen", "tek zincir", "okuyan adim",
    "zincirsiz istek %");
for (const s of KUR) {
  const l = uygula(s);
  yaz(B, s.join(" + ") || "hicbiri", l.filter((a) => a.zincir === "yok").length,
    l.reduce((t, a) => t + ZINCIR[a.zincir].dayanaksiz, 0), uretim(l),
    l.filter((a) => uretebilen(a) === 1).length, okuyan(l),
    ((l.filter((a) => a.zincir === "yok").reduce((t, a) => t + a.istek, 0) /
      AKIS.reduce((t, a) => t + a.istek, 0)) * 100).toFixed(1));
}

const C = [-26, 9, 8, 8, 14, 13];
console.log("\n3. ayni savunmalarin bedeli");
yaz(C, "savunma", "kok kalem", "ek tur", "elle", "kesilen akis", "kapsam disi");
for (const s of KUR) {
  const l = uygula(s), kapsam = AKIS.filter((a) => a.yapabilir);
  const sabit = l.filter((a) => a.zincir === "sabit-kok" && a.yapabilir).length;
  yaz(C, s.join(" + ") || "hicbiri", s.includes("uc-dogrulama") ? KOK : 0,
    s.includes("uc-dogrulama") ? kapsam.length * 2 : 0, s.includes("sabitleme") ? sabit : 0,
    s.includes("sabitleme") ? sabit : 0, AKIS.length - kapsam.length);
}

const D = [-27, 14, 12, 12];
console.log("\n4. uc dogrulama ve sabitleme birlikte acikken kalan");
yaz(D, "akis", "zincir", "uretebilen", "30g istek");
for (const a of uygula(["uc-dogrulama", "sabitleme"]).filter((x) => uretebilen(x) > 1))
  yaz(D, a.ad, a.zincir, uretebilen(a), a.istek);
8 akis, 36 adim, kok listesi 84 kalem; zinciri olmayan akis 3, okuyabilen adim 16, 30 gunluk toplam istek 265118

1. akis basina kanit zinciri
akis                          adim        zincir   halka  dayanaksiz  uretebilen  30g istek
saha-terminali>toplayici         6           yok       0           0           6      12400
sayac-ucu>alim-ucu               4           yok       0           0           4      89400
sube-gecidi>merkez-gecidi        5     ortak-kok       3           1          84      43200
yonetim-ucu>sube-gecidi          3  ilk-kullanim       1           1           3        268
faturalama>dogrulayici           2     ortak-kok       3           1          84      22800
dogrulayici>olcum-deposu         2     sabit-kok       3           0           1      61300
saha-terminali>ad-sunucusu       6           yok       0           0           6      34600
dis-istemci>ortak-arayuz         8     ortak-kok       3           1          84       1150

2. savunmalar: zincirin durumu
savunma                    zincirsiz  dayanaksiz  uretebilen  tek zincir  okuyan adim  zincirsiz istek %
hicbiri                            3           4         272           1           16               51.4
uc-dogrulama                       1           6         509           1            4               33.7
sabitleme                          3           1          23           4           16               51.4
uc-dogrulama + sabitleme           1           0          11           7            4               33.7

3. ayni savunmalarin bedeli
savunma                   kok kalem  ek tur    elle  kesilen akis  kapsam disi
hicbiri                           0       0       0             0            1
uc-dogrulama                     84      14       0             0            1
sabitleme                         0       0       4             4            1
uc-dogrulama + sabitleme         84      14       7             7            1

4. uc dogrulama ve sabitleme birlikte acikken kalan
akis                               zincir  uretebilen   30g istek
sayac-ucu>alim-ucu                    yok           4       89400

Sayılar ölçüm sınıfındadır; girdileri PG19–PG21’dir.

Otuz Altı Adım, Üç Zincirsiz Akış

Sekiz akış toplam otuz altı adımdan geçer. Üç akışın hiç kanıt zinciri yoktur ve bu üç akışın on altı adımı içeriği okuyabilir. Kalan beş akışta bir zincir vardır, ama zincirin varlığı tek başına bir sonuç değildir.

Birinci tablo bunu altıncı sütunda gösterir. dogrulayici>olcum-deposu akışının zinciri üç halkalıdır ve dayanaksız halkası yoktur: kimlik iddiasını üretebilecek taraf sayısı birdir. faturalama>dogrulayici akışının zinciri de üç halkalıdır, ama bir halkası dayanaksızdır ve üretebilen taraf sayısı 84’tür. İki akış aynı halka sayısına sahiptir ve aralarında seksen üç kat fark vardır.

Farkın kaynağı dayanaksız halkadır. Ortak kök düzeninde uç, kök listesindeki her kalemin yazdığı bir ifadeyi kabul eder; o listede kaç kalem varsa iddiayı o kadar taraf üretebilir. Sabit kök düzeninde uç yalnız tek bir kalemin ifadesini kabul eder. Zincirin uzunluğu güveni ölçmez; listenin uzunluğu ölçer.

Zincirsiz akışlarda sayı daha küçüktür ve bu, ilk bakışta ters görünür. saha- terminali>toplayici akışının üretebilen taraf sayısı altıdır — yoldaki altı adım. Ortak kök düzenindeki bir akışın seksen dördüne göre az. Aradaki fark niteliktedir: zincirsiz akışta o altı adım yolun üstündedir ve trafiği ayrıca okuyabilir; ortak kök düzenindeki seksen dört kalem yolun üstünde değildir ve içeriği okuyamaz. Sayılar aynı eksende karşılaştırılamaz; ikisi de yazılır.

Akış sayısı yerine istek hacmi okunduğunda tablo daha da keskinleşir. Sekiz akış otuz günde 265.118 istek taşır; zinciri hiç olmayan üç akış bunun 136.400’ünü, yani %51,4’ünü taşır. Zincirin tek halkaya indiği tek akış — dogrulayici>olcum-deposu — 61.300 istekle toplamın %23,1’ini taşır. Akış sayısına göre üç sekizde bir olan zincirsizlik, hacme göre yarıdan fazladır. Kanıt zinciri kapsamı akış sayarak değil, o akışların taşıdığı istek hacmiyle raporlanır.

Dördüncü satırdaki ilk kullanımda güven düzeni ayrı bir kalemdir. Bu akışta iddiayı üretebilecek taraf sayısı yalnız ilk bağlantıda üçtür; ilk bağlantı tamamlandıktan sonra uç gördüğü değeri saklar ve sayı bire iner. Zincirin tamamı tek bir ana bağlıdır ve o an bir daha gelmez. Bu düzenin ölçüsü bir taraf sayısı değil, bir pencere sayısıdır: kaç kez ilk bağlantı kuruluyor. Aygıt değişiminde, yeniden kurulumda ve anahtar yenilemesinde pencere yeniden açılır.

Uç Doğrulamanın Yön Değiştirdiği Yer

İkinci tablo bu dersin en dikkat çekici satırını üretir. Uç doğrulama açıldığında zincirsiz akış sayısı üçten bire iner ve okuyan adım sayısı on altıdan dörde düşer — beklenen iyileşme. Aynı satırda üretebilen taraf toplamı ise 272’den 509’a çıkar. Dayanaksız halka sayısı da dörtten altıya yükselir.

Neden yükseldiği birinci tablodan okunur. Zincirsiz iki akış, yolundaki altı adım tarafından üretilebilen bir iddia taşıyordu; uç doğrulama açıldığında bu akışlar ortak kök düzenine geçer ve iddiayı üretebilecek taraf sayısı altıdan seksen dörde çıkar. Okuma tümüyle kapanır, ama kimlik iddiasını üretebilecek taraf kümesi büyür.

Uç doğrulama, iddiayı yoldaki adımlardan alıp bir kök listesine devreder; kazanç okuma tarafındadır, kayıp ise güven kümesinin büyümesindedir. Bu iki sonucu tek bir “güvenli oldu” cümlesinde toplayan bir değerlendirme, ikinci sütunun yönünü hiç görmez.

Üçüncü satır sabitlemeyi tek başına ölçer: üretebilen toplam 272’den 23’e iner ve tek zincirli akış sayısı birden dörde çıkar. Okuyan adım on altıda kalır, çünkü sabitleme zincirsiz akışlara dokunmaz. Dördüncü satır ikisini birleştirir ve iki eksende de en iyi sonucu verir: dayanaksız halka sıfır, üretebilen toplam 11, tek zincirli akış yedi, okuyan adım dört.

Kalan Akış ve Bedel

Dördüncü tablo geriye kalanı adıyla verir. Sekiz akıştan biri — sayaç uçlarından alım ucuna giden akış — uç doğrulama yapamaz ve zincirsiz kalır. Bu akış otuz günde 89.400 istek taşır; sekiz akışın toplam hacminin en büyük payı. İkinci derste doğrulanamayan yedi kabul noktasını bırakan neden burada da geçerlidir: uçlar kanıt üretemez. Savunma yetmemektedir ve yetmemesinin nedeni yapılandırma değildir.

Üçüncü tablo bedeli yazar. Uç doğrulama seksen dört kalemlik bir kök listesinin sürekli yönetilmesini ve akış başına iki ek tur — kapsamdaki yedi akış için toplam on dört tur — ister. Sabitleme yedi elle kalem getirir ve her kalem, sabitlenen kök değiştiğinde o akışın kesilmesi anlamına gelir: yedi kesilen akış. Kapsam dışı kalan akış sayısı her satırda birdir ve hiçbir savunma onu değiştirmez. Hacim cinsinden bu tek akış, üç savunma da açıkken zincirsiz kalan 265.118 isteğin 89.400’ü — toplamın %33,7’si — demektir; başlangıçtaki %51,4’ten inmiştir ama üçte biri hâlâ kanıtsızdır.

Kök listesi kalemi ile elle sabitleme kalemi ters yönde çalışır. Seksen dört kalemlik liste merkezî olarak yönetilir ve akış sayısından bağımsızdır; yedi sabitleme kalemi akış başınadır ve her yeni akış bir kalem ekler. Küçük bir ağda sabitleme ucuzdur ve güven kümesini bire indirir; akış sayısı büyüdükçe kalem sayısı doğrusal artar ve her kök değişimi bir kesinti üretir. İkinci tablonun son sütunu bu iki bedelin karşılığını tek sayıda toplar: hangi savunma açılırsa açılsın zincirsiz istek payı ya %51,4’te kalır ya %33,7’ye iner, çünkü aradaki fark tümüyle uç doğrulamanın kapsadığı akışlardan gelir ve sabitleme o payı hiç değiştirmez.

Özet

  • Araya girme bir kanıt zinciri eksikliğidir: 8 akışın 36 adımında 3 akışın hiç zinciri yoktur ve bu üç akışın 16 adımı içeriği okuyabilir.
  • Zincirin gücü halka sayısı değil, iddiayı üretebilecek taraf sayısıdır: aynı 3 halkalı iki akıştan biri 1, öteki 84 tarafça üretilebilir; farkı dayanaksız tek halka yaratır.
  • Uç doğrulama okuyan adımı 16’dan 4’e indirir, ama üretebilen taraf toplamını 272’den 509’a çıkarır; iddiayı yoldaki adımlardan alıp 84 kalemlik bir kök listesine devreder.
  • Kök sabitleme üretebilen toplamı 23’e, ikisi birlikte 11’e indirir ve dayanaksız halkayı sıfırlar; bedeli 84 kalemlik liste, 14 ek tur ve kök değişiminde kesilen 7 akıştır.
  • Uç doğrulama yapamayan tek akış 30 günde 89.400 istek taşır ve hiçbir savunma onu kapsamaz.

Sonraki Adım

Bu ders bir iddianın kimden geldiğini sordu ve yanıtı bir zincirle bağladı. Sabit kök düzeninde iddiayı üretebilecek taraf sayısı bire indi; kimliğin kanıtı tamdır. Yine de tam bir kanıt zinciriyle üretilmiş, doğru kaynaktan gelmiş, hiçbir halkası dayanaksız olmayan bir mesajın bir özelliği hâlâ hiç sorulmadı: ne zaman üretildiği. Aynı mesaj bir kez daha sunulduğunda kimlik kanıtı yine geçerlidir, zincir yine tamdır ve alıcı onu ilk seferkiyle aynı biçimde kabul eder. Sonraki ders bunu tazelik kanıtı cinsinden ölçer: mesaj kümesinin kaçı tekrar edildiğinde kabul ediliyor, sayaç, zaman damgası ve tek kullanımlık değer kaçını yakalıyor, kaçı hâlâ yakalanamıyor ve bunun durum, saat ve depolama bedeli ne oluyor.

İ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