İçeriğe geç
academia.sh

Ders 08 / 20

Tekrar ve Sahtecilik Saldırıları

Tekrar ve sahteciliğin tazelik kanıtı cinsinden ölçülmesi: 10 mesaj türünün tazelik kanıtı yokken tekrarı olduğu gibi kabul etmesi, sayacın hacmin %75'ini tam koruyup durum değiştiren tek bir türü bile kapsamaması, zaman damgasının 120 saniyelik pencere kadar açık kalması, ayrı depolu tek kullanımlık değerin 2 alıcı kadar açık kalması ve üç kanıt birlikte açıkken 36.460 isteğin hâlâ sınırsız tekrarlanabilmesi.

İçindekiler

Önceki 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. Kimlik kanıtı mesajın kimden geldiğini söyler; hiçbir şey mesajın yeni olduğunu söylemez. Bu ders o eksik özelliği sayar ve konuyu kapatır.

Tazelik Bir Kanıt İster

Aynı mesajın yeniden sunulmasına tekrar saldırısı (replay attack) denir.

PG22: tazelik kanıtı (freshness proof), bir mesajın daha önce sunulmadığını alıcının sınayabilmesidir; kimlik kanıtı tam olsa da tazelik kanıtı yoksa aynı mesaj yeniden kabul edilir. PG23: üç tazelik kanıtı vardır ve güçleri eşit değildir — sayaç tamdır, zaman damgası pencere kadar açıktır, tek kullanımlık değer (nonce) yalnız depo paylaşılıyorsa tamdır. PG24: bir savunma yalnız mesajın taşıdığı alanı sınayabilir; alan yoksa savunma o mesaj türüne hiç dokunmaz.

PG24 bu dersin kapsamını belirler. Tazelik denetimi bir açma kapama düğmesi değildir: mesaj biçiminde ilgili alan yoksa denetim koşacak bir şey bulamaz. Bu yüzden ölçüm iki aşamalıdır — önce hangi mesaj türünün hangi alanı taşıdığı, sonra o alanın hangi koruma düzeyini verdiği.

Aşağıdaki mesaj kümesi bir modeldir: kurgu ölçüm ağının mesaj türleri, taşıdıkları alanlar ve otuz günlük hacimleri veri olarak yazılır; gerçek bir ağ ya da gerçek bir mesaj yoktur. Kod hiçbir mesaj üretmez ya da yeniden sunmaz; koşan tek şey alıcı tarafındaki tazelik denetiminin sayımıdır. Bir mesajın sahibi olunmayan bir sistemde yeniden sunulması yazılı yetki ve tanımlı kapsam olmadan hem yasadışı hem meslek dışıdır.

// aglar/tazelik.mjs — kurgu bolgesel olcum agindaki mesaj turlerinin tazelik kaniti
// (model): gercek bir ag, gercek bir mesaj ya da gercek bir hacim yok. Rastgelelik yok.

// PG22: tazelik kaniti, bir mesajin daha once sunulmadigini alicinin sinayabilmesidir;
// kimlik kaniti tam olsa da tazelik kaniti yoksa ayni mesaj yeniden kabul edilir.
// PG23: uc tazelik kaniti vardir ve gucleri esit degildir. Sayac tamdir; zaman damgasi
// pencere kadar aciktir; tek kullanimlik deger yalnizca depo paylasiliyorsa tamdir.
export const PENCERE = 120;      // zaman damgasi penceresi (sn)
export const ALICI = 3;          // ayni mesaji kabul eden alici sayisi
export const UC = 224;           // sayac ya da saat tutulacak uc sayisi
export const KAYIT = 24;         // tek kullanimlik deger kaydinin boyutu (bayt)
export const AY = 2592000;       // 30 gun (sn)
export const SIRASIZ = 0.003;    // sayac denetiminde sirasiz gelen mesru mesaj orani
export const GEC = 0.008;        // pencereden gec gelen mesru mesaj orani

// Sutunlar: mesaj turu, sayac tasiyor mu, zaman damgasi tasiyor mu, tek kullanimlik deger
// tasiyor mu, tekrari durum degistiriyor mu (etkili), 30 gunluk hacim.
export const MESAJ = `
  okuma-bildirimi      e e h h 89400    yapilandirma-komutu  h e e e   140
  kira-yenileme        h h h e  1860    gunluk-kaydi         e e h h 43200
  is-emri-onayi        h e h e   420    oturum-acma          h h e e   870
  toplu-aktarim        e h h h  8640    durum-sorgusu        h h h h 34600
  sayac-okuma-talebi   h e h h  9240    guncelleme-onayi     h e e e    36`
  .trim().split(/\s+/).reduce((l, _, i, a) => (i % 6 ? l : [...l, {
    tur: a[i], sayac: a[i + 1] === "e", zaman: a[i + 2] === "e",
    tekil: a[i + 3] === "e", etkili: a[i + 4] === "e", hacim: +a[i + 5],
  }]), []);

// PG24: bir savunma yalnizca mesajin tasidigi alani sinayabilir; alan yoksa savunma o
// mesaj turune hic dokunmaz.
// Koruma duzeyi: tam = her tekrar yakalanir; kismi = bir pencere ya da bir alici kadar
// acik kalir; yok = tekrar oldugu gibi kabul edilir.
export function duzey(m, savunma = [], paylasik = false) {
  if (savunma.includes("sayac") && m.sayac) return { d: "tam", acik: "-" };
  if (savunma.includes("tekil") && m.tekil)
    return paylasik ? { d: "tam", acik: "-" } : { d: "kismi", acik: `${ALICI - 1} alici` };
  if (savunma.includes("zaman") && m.zaman) return { d: "kismi", acik: `${PENCERE} sn` };
  return { d: "yok", acik: "sinirsiz" };
}

export const hacim = (l) => l.reduce((t, m) => t + m.hacim, 0);
export function bedel(savunma = [], paylasik = false) {
  const korunan = (f) => hacim(MESAJ.filter(f));
  const tekilHacim = korunan((m) => savunma.includes("tekil") && m.tekil);
  return {
    durum: savunma.includes("sayac") ? UC : 0,
    saat: savunma.includes("zaman") ? UC : 0,
    depoPencere: Math.ceil(PENCERE * tekilHacim / AY) * KAYIT * (paylasik ? 1 : ALICI),
    depoSinirsiz: tekilHacim * KAYIT * (paylasik ? 1 : ALICI),
    red: Math.round(SIRASIZ * korunan((m) => savunma.includes("sayac") && m.sayac)) +
      Math.round(GEC * korunan((m) => savunma.includes("zaman") && m.zaman && !m.sayac)),
  };
}
// aglar/tazelik-denetimi.mjs — mesaj kumesinin kaci tekrar edildiginde kabul ediliyor,
// sayac, zaman damgasi ve tek kullanimlik deger kacini yakaliyor, kaci aciksa bedeli ne.
import { MESAJ, PENCERE, ALICI, UC, KAYIT, duzey, hacim, bedel } from "./tazelik.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 say = (s, p, d) => MESAJ.filter((m) => duzey(m, s, p).d === d);
// [savunma kumesi, tek kullanimlik deger deposu aliciar arasinda paylasik mi]
const KUR = [[[], false], [["sayac"], false], [["zaman"], false], [["tekil"], false],
  [["sayac", "zaman", "tekil"], false], [["sayac", "zaman", "tekil"], true]];
const ad = (s, p) => (s.join(" + ") || "hicbiri") + (p ? " (paylasik depo)" : "");

console.log(`${MESAJ.length} mesaj turu, 30 gunluk hacim ${hacim(MESAJ)}; ` +
  `tazelik kaniti yokken tekrar edildiginde kabul edilen tur ${MESAJ.length}, ` +
  `tekrari durum degistiren tur ${MESAJ.filter((m) => m.etkili).length}`);

const A = [-12, 7, 12, 12, 12];
console.log("\n1. hangi alan kac turde var");
yaz(A, "alan", "tur", "30g hacim", "hacim %", "etkili tur");
for (const [k, f] of [["sayac", (m) => m.sayac], ["zaman", (m) => m.zaman],
  ["tekil", (m) => m.tekil], ["hicbiri", (m) => !m.sayac && !m.zaman && !m.tekil]]) {
  const l = MESAJ.filter(f);
  yaz(A, k, l.length, hacim(l), ((hacim(l) / hacim(MESAJ)) * 100).toFixed(1),
    l.filter((m) => m.etkili).length);
}

const B = [-38, 6, 7, 6, 13, 17];
console.log("\n2. savunmalarin yakaladigi tur ve hacim");
yaz(B, "savunma", "tam", "kismi", "yok", "acik hacim", "etkili acik tur");
for (const [s, p] of KUR) {
  const acik = say(s, p, "yok");
  yaz(B, ad(s, p), say(s, p, "tam").length, say(s, p, "kismi").length, acik.length,
    hacim(acik), acik.filter((m) => m.etkili).length);
}

const C = [-38, 8, 8, 16, 14, 11];
console.log("\n3. ayni savunmalarin bedeli");
yaz(C, "savunma", "durum", "saat", "depo (pencere)", "depo (30g)", "red mesru");
for (const [s, p] of KUR) {
  const b = bedel(s, p);
  yaz(C, ad(s, p), b.durum, b.saat, b.depoPencere + " B", b.depoSinirsiz + " B", b.red);
}

const D = [-22, 8, 8, 10, 12];
console.log("\n4. uc kanit birlikte acikken kalan aciklik");
yaz(D, "tur", "duzey", "etkili", "30g hacim", "acik kalan");
for (const m of MESAJ) {
  const z = duzey(m, ["sayac", "zaman", "tekil"], false);
  if (z.d !== "tam") yaz(D, m.tur, z.d, m.etkili ? "evet" : "hayir", m.hacim, z.acik);
}
console.log(`pencere ${PENCERE} sn, alici ${ALICI}, uc ${UC}, kayit ${KAYIT} bayt`);
10 mesaj turu, 30 gunluk hacim 188406; tazelik kaniti yokken tekrar edildiginde kabul edilen tur 10, tekrari durum degistiren tur 5

1. hangi alan kac turde var
alan            tur   30g hacim     hacim %  etkili tur
sayac             3      141240        75.0           0
zaman             6      142436        75.6           3
tekil             3        1046         0.6           3
hicbiri           2       36460        19.4           1

2. savunmalarin yakaladigi tur ve hacim
savunma                                  tam  kismi   yok   acik hacim  etkili acik tur
hicbiri                                    0      0    10       188406                5
sayac                                      3      0     7        47166                5
zaman                                      0      6     4        45970                2
tekil                                      0      3     7       187360                2
sayac + zaman + tekil                      3      5     2        36460                1
sayac + zaman + tekil (paylasik depo)      6      2     2        36460                1

3. ayni savunmalarin bedeli
savunma                                  durum    saat  depo (pencere)    depo (30g)  red mesru
hicbiri                                      0       0             0 B           0 B          0
sayac                                      224       0             0 B           0 B        424
zaman                                        0     224             0 B           0 B         79
tekil                                        0       0            72 B       75312 B          0
sayac + zaman + tekil                      224     224            72 B       75312 B        503
sayac + zaman + tekil (paylasik depo)      224     224            24 B       25104 B        503

4. uc kanit birlikte acikken kalan aciklik
tur                      duzey  etkili 30g hacim  acik kalan
yapilandirma-komutu      kismi    evet       140     2 alici
kira-yenileme              yok    evet      1860    sinirsiz
is-emri-onayi            kismi    evet       420      120 sn
oturum-acma              kismi    evet       870     2 alici
durum-sorgusu              yok   hayir     34600    sinirsiz
sayac-okuma-talebi       kismi   hayir      9240      120 sn
guncelleme-onayi         kismi    evet        36     2 alici
pencere 120 sn, alici 3, uc 224, kayit 24 bayt

Sayılar ölçüm sınıfındadır; girdileri PG22–PG24’tür.

Alan Yoksa Denetim Yok

Başlık satırı tabanı verir: on mesaj türünün onu da tazelik kanıtı yokken tekrar edildiğinde kabul edilir ve bunların beşinin tekrarı durumu değiştirir. Hacim otuz günde 188.406 istektir.

Birinci tablo alanların dağılımını gösterir ve bu dersin ters orantısını kurar. Sayaç alanı üç türde vardır ve hacmin %75’ini taşır; bu üç türün hiçbiri durum değiştirmez. Tek kullanımlık değer alanı da üç türdedir, ama hacmin yalnız %0,6’sını taşır; buna karşılık üç türün üçü de durum değiştirir. Zaman damgası altı türde ve hacmin %75,6’sındadır.

İki uçtaki bu dağılım rastlantı değildir. Sayaç, sürekli akan ve sırası zaten anlamlı olan mesajlarda bulunur — okuma bildirimi, günlük kaydı, toplu aktarım. Tek kullanımlık değer, seyrek ve tekil işlemlerde bulunur — yapılandırma komutu, oturum açma, güncelleme onayı. En güçlü tazelik kanıtı en yüksek hacimli ve en zararsız mesajlarda, en pahalı kanıt en düşük hacimli ve en etkili mesajlardadır.

Son satır boşluğu verir: iki tür hiçbir alan taşımaz, hacmin %19,4’ünü tutar ve biri durum değiştirir. Bu iki tür hiçbir savunmayla korunamaz, çünkü korunacak alan mesajda yoktur.

Üç Kanıtın Üç Ayrı Açıklığı

İkinci tablo savunmaları ayrı ayrı koşturur. Sayaç üç türü tam korur ve açık hacmi 188.406’dan 47.166’ya indirir — hacim ölçüsünde en büyük düşüş. Durum değiştiren açık tür sayısı ise beşte kalır; sayaç hiçbirine dokunmaz.

Zaman damgası altı türü korur, ama koruma düzeyi kısmidir: pencere 120 saniyedir ve bu süre içinde sunulan bir tekrar geçerli sayılır. Açık hacim 45.970’e iner ve durum değiştiren açık tür beşten ikiye düşer. Pencereyi daraltmak açıklığı kısaltır ve reddedilen meşru mesaj sayısını artırır; sıfır yapmak, saatleri tam eşitlenmemiş her ucu dışarıda bırakır.

Tek kullanımlık değer üç türü korur, ama ayrı depolarla koruma yine kısmidir: bir alıcının kabul ettiği değer öteki iki alıcının deposunda yoktur ve aynı mesaj onlara sunulduğunda geçer. Açıklık iki alıcı kadardır. Açık hacim 187.360’ta kalır, çünkü korunan üç tür hacmin yalnız %0,6’sıdır.

Üçü birlikte açıkken üç tür tam, beş tür kısmi korunur ve iki tür açık kalır. Depo alıcılar arasında paylaşıldığında tam korunan tür sayısı üçten altıya çıkar, kısmi ikiye iner ve açık tür yine ikidir. Paylaşılan depo hiçbir yeni türü kapsamaz; yalnız kapsadıklarının düzeyini yükseltir.

Kalan Açıklığın Bedeli

Dördüncü tablo üç kanıt açıkken kalan yedi kalemi ve her birinin ne kadar açık olduğunu verir. Üçü iki alıcı kadar, ikisi 120 saniye kadar, ikisi sınırsız açıktır. Sınırsız olanlardan biri kira yenilemedir ve durumu değiştirir: hiçbir alan taşımadığı için hiçbir denetim ona dokunamaz. Öteki durum sorgusudur ve 34.600 istekle kalan açık hacmin büyük payını tutar.

Üçüncü tablo bedeli üç ayrı kalemde yazar. Sayaç 224 durum kalemi ister — her uç için bir sayaç — ve sırasız gelen 424 meşru mesajı reddeder. Zaman damgası 224 saat eşitleme kalemi ister ve pencereden geç gelen 79 meşru mesajı reddeder. İkisi birlikte 503 meşru mesajın reddedilmesi demektir; otuz günlük hacmin binde 2,7’si.

Tek kullanımlık değerin bedeli depolamadır ve iki sayı arasındaki fark bu tablonun en büyük oranıdır. Zaman damgası penceresiyle sınırlandığında depo 72 bayttır; pencere olmadan, yani tekrarın ne zamana kadar mümkün olduğu bilinmediğinde, otuz günlük depo 75.312 bayttır — bin katın üstünde. Paylaşılan tek depoyla bu sayılar 24 ve 25.104 bayta iner. Tek kullanımlık değer tek başına sınırsız depolama ister; sınırlı hâle gelmesi zaman damgasına bağlıdır ve iki kanıt ancak birlikte kullanılabilir.

Özet

  • Tazelik kanıtı olmadan 10 mesaj türünün 10’u da tekrarı olduğu gibi kabul eder; 5’inin tekrarı durumu değiştirir ve toplam hacim 30 günde 188.406 istektir.
  • Alan dağılımı terstir: sayaç hacmin %75’ini taşıyan 3 türdedir ve hiçbiri durum değiştirmez; tek kullanımlık değer hacmin %0,6’sını taşıyan 3 türdedir ve üçü de durum değiştirir. İki tür hiçbir alan taşımaz ve hacmin %19,4’ünü tutar.
  • Üç kanıtın açıklıkları farklı büyüklüktedir: sayaç tam korur, zaman damgası 120 saniye, ayrı depolu tek kullanımlık değer 2 alıcı kadar açık kalır.
  • Üçü birlikte açıkken 3 tür tam, 5 tür kısmi korunur ve 2 tür açık kalır; paylaşılan depo tam korunan türü 6’ya çıkarır ama hiçbir yeni türü kapsamaz.
  • Bedel 224 durum kalemi, 224 saat eşitleme kalemi, 503 reddedilen meşru mesaj ve 72 baytlık bir depodur; pencere olmadan aynı depo 75.312 bayta çıkar.

Sonraki Adım

Bu konu ağın ölçü birimini kurdu ve sekiz derste aynı üç sütunu yazdı. Bir okumanın taşıdığı on sekiz iddia sayıldı ve savunma yokken hiçbirinin kanıtı olmadığı görüldü; açık bir bağlantı noktasının bir kabul bildirimi olduğu ve kırk dokuz kabul noktasının yirmi birinin kanıtsız olduğu ölçüldü; adres ve ad çözümleme önbelleklerinde doğrulanmayan yanıtın kaç kaydı ve kaç bağımlı servisi bozduğu, adres dağıtımında tek bir kabulün beş iddiayı birden bağladığı, kaynak adresi kanıtsız olan isteklerin kapasiteyi ve durum tablosunu nasıl tükettiği, kanıt zincirinin kaç tarafça üretilebildiği ve tazelik kanıtının kaç türde hiç bulunmadığı sayıldı.

Bütün bu ölçümlerin ortak bir varsayımı vardı ve bu ders de dâhil hiçbir yerde sorgulanmadı: her iddia aynı düz ağda dolaşıyordu. Doğrulanmayan bir yanıtın önbelleğe ulaşabildiği, bir dağıtım yanıtının uca varabildiği, kanıtsız bir kaynağın alım ucuna istek gönderebildiği, tekrarlanan bir mesajın alıcıya erişebildiği varsayıldı. Ağın kendisine bir sınır çizilirse bu iddiaların kaçı karşıya bile geçemez, o sınır kaç kural ister ve kaç meşru akışı durdurur? Sonraki konu — Çevre Savunması — aynı iddia kümesini bu kez ağın çizilmiş sınırları üzerinde ölçer.

İ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