İçeriğe geç
academia.sh

Ders 07 / 18

Protokol Çözümleyicileri

Uygulama katmanı incelemesinin görünürlük cinsinden ölçülmesi: on akışta tanımlı 30 uygulama alanının yalnız 16'sının okunabilmesi, iki akışın taşıma numarasına bakan çözümleyici tarafından yanlış etiketlenmesi, 91 iddia adayının 43'ünün kanıt ve 48'inin meta veriden yapılan çıkarım olması, beş şifreli akışın üçünde anahtar malzemesine erişimin kurum içinde bulunması ve pasif çözümlemenin hedefte sıfır kayıt bırakması.

İçindekiler

Önceki ders alanları üretenine göre sınıflandırdı ve şifreli akışları tek satırla geçti: yük görünmez, sunucu adı alanı görünür. Kurgu ölçüm ağındaki en çok iş taşıyan akışlar tam olarak şifreli olanlardır. Çözümlemenin bu akışlarda eli boş kaldığı doğru değildir; eli başka türlü doludur ve bu dersin konusu o “başka türlü”nün ne kadar ettiğidir.

Protokol çözümleyici, yakalanan baytları uygulama katmanı alanlarına ayırır. İki iş yapar: bir biçim varsayar ve o biçime göre alanları adlandırır. İkisi de kanıt üretmez; birincisi bir tahmindir, ikincisi tahmin doğruysa alan okur. Ölçülen şey bu iki adımın kaç akışta tuttuğudur.

Görünürlük İki Sütundur

Bir akışta iki ayrı alan kümesi vardır. Uygulama alanları yalnız şifreleme kalkarsa ve biçim doğru bilinirse okunur. Meta alanları her koşulda üretilir: uç adresleri, taşıma numarası, yön dizisi, paket boyut dizisi, zamanlama aralığı, akış süresi. Şifreli oturumlarda buna el sıkışma parametreleri ve sunucu adı alanı eklenir — şifreleme bu iki alanı kapatmaz.

Meta veri (metadata) kendi sorularına kanıt düzeyinde yanıt verir: akış ne kadar sürdü, hacmi neydi, düzenli aralıklı mı. Bunlar yakalama noktasının kendi gözlemidir. Sorun, meta verinin başka soruların yanıtı gibi kullanılmasında başlar. Boyut dizisine bakıp “işlem başarılı oldu”, yön dizisine bakıp “bu bir yazma işlemiydi” demek bir vekil çıkarımdır: alan okunmadan alanın yanıtı tahmin edilir. Bu çıkarımlar sık sık doğrudur ve kanıt değildir.

  • AA8. Biçim kataloğu, akış listesi ve iddia listesi modeldir; gerçek bir yakalama yok.
  • AA9. Çözümleyici biçimi taşıma numarasından varsayar. Varsayım yanlışsa alanları okuyamaz ve akışı yanlış etiketler. Gerçek çözümleyiciler içerik imzasına da bakar; bu model yalnız numaraya bakar ve yanlış etiket sayısını üst sınır olarak verir.
  • AA10. Metin tabanlı bir biçim yanlış etiketlendiğinde ham metin parçası görünür sayılır; ikili biçimde hiçbir şey görünmez.
  • AA11. Şifreli akışta uygulama alanı okunmaz; meta alanları eksiksiz üretilir.
  • AA12. Bir iddia, dayanağı okunmuş uygulama alanından geliyorsa kanıttır; meta türü iddialar meta alanından karşılandığında da kanıttır. Vekil alandan karşılanan alan türü iddia çıkarımdır.
  • AA13. Anahtar malzemesine erişim kurumun kendi ucunda bir ajanla sağlanıyorsa uc-ajani, sağlanamıyorsa yok yazılır.
  • AA14. Pasif çözümleme hedefte kayıt üretmez; araya girerek çözme aktif bir adımdır.
// prot/cozum.mjs — protokol cozumleyici gorunurlugu MODELIDIR. Gercek bir yakalama,
// gercek adres ve gercek kurum yok. Bir cozumleyici, tasima bilgisinden bir bicim VARSAYAR;
// varsayim yanlissa alanlari okuyamaz ve akisi yanlis etiketler.
export const BICIM = {
  'metin-istek':     { metin: true,  alan: ['istek-satiri', 'baslik-alanlari', 'govde', 'durum-kodu', 'oturum-kimligi', 'kullanici-alani'] },
  'olcum-protokolu': { metin: false, alan: ['islev-kodu', 'kayit-adresi', 'deger-alani', 'birim-kimligi'] },
  'dosya-aktarimi':  { metin: true,  alan: ['komut-adi', 'dosya-adi', 'kullanici-alani', 'boyut-alani'] },
  'ad-cozumleme':    { metin: true,  alan: ['sorgu-adi', 'kayit-turu', 'yanit-kodu'] },
  'ikili-senkron':   { metin: false, alan: ['islem-kodu', 'kayit-sayisi', 'zaman-damgasi'] },
  'sifreli-oturum':  { metin: false, alan: [] },
};

// Cozumleyicinin tasima numarasindan yaptigi bicim varsayimi.
export const VARSAYIM = { 80: 'metin-istek', 443: 'sifreli-oturum', 502: 'olcum-protokolu',
  21: 'dosya-aktarimi', 53: 'ad-cozumleme', 8080: 'metin-istek' };

// Sifreleme kalksa da kalan alanlar: cozumleyici bunlari her akista uretir.
export const META = ['uc-adresleri', 'tasima-numarasi', 'yon-dizisi', 'paket-boyut-dizisi',
  'zamanlama-araligi', 'akis-suresi'];
export const SIFRELI_EK = ['sunucu-adi-alani', 'el-sikisma-parametreleri'];

// satir: akis | tasima numarasi | gercek bicim | sifreli mi | anahtar malzemesine erisim
export const AKIS = `
  s1-ucu>toplayici       502 olcum-protokolu evet uc-ajani
  s2-ucu>toplayici       502 olcum-protokolu evet uc-ajani
  toplayici>dogrulayici  443 sifreli-oturum  evet uc-ajani
  abone-ucu>portal       443 sifreli-oturum  evet yok
  saha-uc>saha-svc      8080 ikili-senkron   hayir yok
  yonetim>toplayici       80 metin-istek     hayir yok
  yonetim>dogrulayici     80 metin-istek     hayir yok
  fatura>dis-uc          443 sifreli-oturum  evet yok
  toplayici>fatura       502 ikili-senkron   hayir yok
  saha-uc>dosya-svc       21 dosya-aktarimi  hayir yok
`.trim().split('\n').map((r) => {
  const [ad, port, bicim, sifreli, anahtar] = r.trim().split(/\s+/);
  return { ad, port: +port, bicim, sifreli: sifreli === 'evet', anahtar };
});

// Cozumleme sonucu: okunan uygulama alani, uretilen meta alan, yanlis etiket.
export function coz(a) {
  const varsayilan = VARSAYIM[a.port];
  const meta = [...META, ...(a.sifreli ? SIFRELI_EK : [])];
  if (a.sifreli) return { okunan: [], meta, etiket: varsayilan, yanlisEtiket: false, derinlik: 'yalniz-meta' };
  if (varsayilan === a.bicim)
    return { okunan: BICIM[a.bicim].alan, meta, etiket: varsayilan, yanlisEtiket: false, derinlik: 'tam' };
  const kismi = BICIM[a.bicim].metin ? ['ham-metin-parcasi'] : [];
  return { okunan: kismi, meta, etiket: varsayilan, yanlisEtiket: true,
    derinlik: kismi.length ? 'kismi' : 'yok' };
}

// Iddia: cozumleyici ciktisindan cikarilan onerme.
// tur 'meta' iddialar dogrudan meta alanindan karsilanir ve kanit sayilir (nokta gozlemi).
// tur 'alan' iddialar yalniz uygulama alanindan kanitlanir; vekil, meta alanindan yapilan
// tahmindir ve CIKARIM sayilir.
export const IDDIA = [
  { ad: 'akis-suresi-ve-hacmi', tur: 'meta', gerek: ['akis-suresi'], vekil: [] },
  { ad: 'duzenli-aralik-var',   tur: 'meta', gerek: ['zamanlama-araligi'], vekil: [] },
  { ad: 'karsi-uc-adi',         tur: 'meta', gerek: ['sunucu-adi-alani'], vekil: [] },
  { ad: 'oturum-parametreleri', tur: 'meta', gerek: ['el-sikisma-parametreleri'], vekil: [] },
  { ad: 'konusulan-bicim',      tur: 'alan', gerek: ['istek-satiri', 'islev-kodu', 'komut-adi', 'islem-kodu', 'sorgu-adi'], vekil: ['tasima-numarasi'] },
  { ad: 'istenen-kaynak',       tur: 'alan', gerek: ['istek-satiri', 'sorgu-adi', 'dosya-adi'], vekil: ['sunucu-adi-alani'] },
  { ad: 'islem-sonucu',         tur: 'alan', gerek: ['durum-kodu', 'yanit-kodu'], vekil: ['paket-boyut-dizisi'] },
  { ad: 'yazma-mi-okuma-mi',    tur: 'alan', gerek: ['islev-kodu', 'islem-kodu', 'komut-adi'], vekil: ['yon-dizisi'] },
  { ad: 'aktarilan-dosya',      tur: 'alan', gerek: ['dosya-adi', 'boyut-alani'], vekil: ['paket-boyut-dizisi'] },
  { ad: 'kayit-sayisi',         tur: 'alan', gerek: ['kayit-sayisi', 'kayit-adresi'], vekil: ['paket-boyut-dizisi'] },
  { ad: 'tasinan-kimlik-alani', tur: 'alan', gerek: ['kullanici-alani', 'oturum-kimligi'], vekil: [] },
  { ad: 'yazilan-olcum-degeri', tur: 'alan', gerek: ['deger-alani'], vekil: [] },
];

// Bir iddianin bir akistaki durumu: kanit | cikarim | karsilanmaz
export function durum(i, c) {
  if (i.gerek.some((g) => c.okunan.includes(g))) return 'kanit';
  if (i.tur === 'meta' && i.gerek.some((g) => c.meta.includes(g))) return 'kanit';
  if (i.vekil.some((g) => c.meta.includes(g))) return 'cikarim';
  return 'karsilanmaz';
}

export function olc() {
  const s = { tanimli: 0, okunan: 0, meta: 0, yanlisEtiket: 0, aday: 0, kanit: 0, cikarim: 0 };
  for (const a of AKIS) {
    const c = coz(a);
    s.tanimli += BICIM[a.bicim].alan.length;
    s.okunan += c.okunan.length;
    s.meta += c.meta.length;
    if (c.yanlisEtiket) s.yanlisEtiket += 1;
    for (const i of IDDIA) {
      const d = durum(i, c);
      if (d !== 'karsilanmaz') { s.aday += 1; s[d] += 1; }
    }
  }
  return s;
}

On Akış, İki Sütun

// prot/gorunurluk.mjs — on akis cozumleyiciden gecirilir; alan ile meta ayri sayilir.
import { AKIS, BICIM, IDDIA, coz, durum, olc } from './cozum.mjs';

const y = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join('').trimEnd());

const A = [-23, -17, 7, 8, 8, 7, 17, 13];
console.log('1. akis basina cozumleme derinligi');
y(A, 'akis', 'gercek bicim', 'tasima', 'sifreli', 'tanimli', 'okunan', 'etiket', 'derinlik');
for (const a of AKIS) {
  const c = coz(a);
  y(A, a.ad, a.bicim, a.port, a.sifreli ? 'evet' : 'hayir', BICIM[a.bicim].alan.length,
    c.okunan.length, c.etiket, c.derinlik);
}

const B = [-22, 6, 7, 9, 13];
console.log('\n2. iddia turu basina karsilanma (10 akis)');
y(B, 'iddia', 'tur', 'kanit', 'cikarim', 'karsilanmaz');
for (const i of IDDIA) {
  const d = AKIS.map((a) => durum(i, coz(a)));
  y(B, i.ad, i.tur, d.filter((x) => x === 'kanit').length,
    d.filter((x) => x === 'cikarim').length, d.filter((x) => x === 'karsilanmaz').length);
}

const s = olc();
console.log('\n3. toplam');
console.log(`  tanimli uygulama alani     ${s.tanimli}`);
console.log(`  okunan uygulama alani      ${s.okunan}`);
console.log(`  uretilen meta alani        ${s.meta}`);
console.log(`  yanlis etiketlenen akis    ${s.yanlisEtiket} / ${AKIS.length}`);
console.log(`  uretilen iddia adayi       ${s.aday} / ${IDDIA.length * AKIS.length}`);
console.log(`    kanit                    ${s.kanit}`);
console.log(`    cikarim                  ${s.cikarim}`);
console.log(`  bicim cikarimi yanlis olan ${s.yanlisEtiket} akis`);

const sifreli = AKIS.filter((a) => a.sifreli);
console.log('\n4. sifreli akista ici gorme secenekleri');
console.log(`  sifreli akis                          ${sifreli.length} / ${AKIS.length}`);
console.log(`  uc ajaniyla anahtara erisim var       ${sifreli.filter((a) => a.anahtar !== 'yok').length}`);
console.log(`  araya girmeden cozulemez              ${sifreli.filter((a) => a.anahtar === 'yok').length}`);
console.log(`  pasif cozumlemenin hedefte izi        0 kayit`);
console.log(`  araya girmenin hedefte izi            akis basina 1 uyari (aktif adim)`);
1. akis basina cozumleme derinligi
akis                   gercek bicim      tasima sifreli tanimli okunan           etiket     derinlik
s1-ucu>toplayici       olcum-protokolu      502    evet       4      0  olcum-protokolu  yalniz-meta
s2-ucu>toplayici       olcum-protokolu      502    evet       4      0  olcum-protokolu  yalniz-meta
toplayici>dogrulayici  sifreli-oturum       443    evet       0      0   sifreli-oturum  yalniz-meta
abone-ucu>portal       sifreli-oturum       443    evet       0      0   sifreli-oturum  yalniz-meta
saha-uc>saha-svc       ikili-senkron       8080   hayir       3      0      metin-istek          yok
yonetim>toplayici      metin-istek           80   hayir       6      6      metin-istek          tam
yonetim>dogrulayici    metin-istek           80   hayir       6      6      metin-istek          tam
fatura>dis-uc          sifreli-oturum       443    evet       0      0   sifreli-oturum  yalniz-meta
toplayici>fatura       ikili-senkron        502   hayir       3      0  olcum-protokolu          yok
saha-uc>dosya-svc      dosya-aktarimi        21   hayir       4      4   dosya-aktarimi          tam

2. iddia turu basina karsilanma (10 akis)
iddia                    tur  kanit  cikarim  karsilanmaz
akis-suresi-ve-hacmi    meta     10        0            0
duzenli-aralik-var      meta     10        0            0
karsi-uc-adi            meta      5        0            5
oturum-parametreleri    meta      5        0            5
konusulan-bicim         alan      3        7            0
istenen-kaynak          alan      3        5            2
islem-sonucu            alan      2        8            0
yazma-mi-okuma-mi       alan      1        9            0
aktarilan-dosya         alan      1        9            0
kayit-sayisi            alan      0       10            0
tasinan-kimlik-alani    alan      3        0            7
yazilan-olcum-degeri    alan      0        0           10

3. toplam
  tanimli uygulama alani     30
  okunan uygulama alani      16
  uretilen meta alani        70
  yanlis etiketlenen akis    2 / 10
  uretilen iddia adayi       91 / 120
    kanit                    43
    cikarim                  48
  bicim cikarimi yanlis olan 2 akis

4. sifreli akista ici gorme secenekleri
  sifreli akis                          5 / 10
  uc ajaniyla anahtara erisim var       3
  araya girmeden cozulemez              2
  pasif cozumlemenin hedefte izi        0 kayit
  araya girmenin hedefte izi            akis basina 1 uyari (aktif adim)

Çözümleyicinin Kendi Yorumu

İlk tablonun son iki sütunu bu dersin en sessiz bulgusudur. Tanımlı 30 uygulama alanının yalnız 16’sı okunuyor. Kayıp iki yerden geliyor: beş akış şifreli, iki akış da yanlış etiketlenmiş.

Yanlış etiket, aracın bir kusuru değil bir varsayımın sonucudur. Saha eşitlemesi ikili bir biçim konuşuyor ama alışılmış metin numarasının bir yakınında dinliyor; çözümleyici metin isteği varsayıyor ve üç tanımlı alandan hiçbirini okuyamıyor. Toplayıcıdan faturalamaya giden akış ölçüm numarası üzerinden ikili eşitleme yapıyor; çözümleyici ölçüm protokolü etiketi basıyor. İkisinde de çıktı boş değildir — çıktı yanlıştır. Rapora “şu akışta ölçüm protokolü konuşuluyor” satırı girerse, o satır bir yanlış pozitiftir ve kaynağı hedefteki sistem değil, çözümleyicinin kendisidir.

İkinci tabloda konusulan-bicim satırı bunu sayıyla verir: üç akışta biçim gerçekten okunan bir alandan doğrulanmış, yedi akışta yalnız taşıma numarasından çıkarılmış ve o yedinin ikisi yanlış. Bir çıkarımı kanıta çevirmenin yolu, biçimi ele veren bir alanı gerçekten okumaktır.

Bu iki akışın ikinci bir okuması daha vardır ve savunma tarafına yazılır. Alışılmış numarasının dışında konuşan bir servis, envanterde kolay gözden kaçar ve numaraya bakarak sınıflandıran her denetimi aynı biçimde şaşırtır. Değerlendirmenin çözümleyicisini yanıltan şey, savunmanın sınıflandırıcısını da yanıltır; bulgu “çözümleyici yanıldı” değil, “bu iki akış hiçbir numara temelli sınıflandırmaya girmiyor” biçiminde yazılır.

Meta Verinin Söylediği ve Söylemediği

Doksan bir aday üretildi; 43’ü kanıt, 48’i çıkarım. Çıkarım sütunu neredeyse yarıdır ve içeriği belirgin bir düzen gösteriyor. kayit-sayisi on akışın onunda çıkarım, sıfırında kanıt: paket boyut dizisine bakıp “şu kadar kayıt aktarıldı” demek her akışta mümkündür ve hiçbir akışta kanıt değildir. islem-sonucu sekiz akışta çıkarım — yanıt boyutundan başarı okumak eski bir alışkanlıktır ve şifreli akışlarda tek seçenek gibi görünür.

Buna karşılık iki satır hiç çıkarım üretmiyor. tasinan-kimlik-alani üç akışta kanıt, yedi akışta karşılanmaz; yazilan-olcum-degeri on akışın onunda karşılanmaz. Bu iki satır şifrelemenin gerçekten tuttuğu yerdir: kimlik alanının içeriği ve yazılan ölçüm değeri meta veriden türetilemez, vekilleri yoktur. Değerlendirme raporunda “karşılanmaz” yazmak bir eksiklik değil, doğru cevaptır; çıkarımı kanıt diye yazmak eksikliktir.

Meta türü dört iddia toplam 30 kanıt üretiyor ve bunların 10’u yalnız şifreli akışlardan geliyor — sunucu adı alanı ile el sıkışma parametreleri. Şifreleme uygulama alanlarını kapatırken bu iki alanı açık bırakır ve istenen-kaynak iddiasına beş akışta bir vekil sağlar. Şifreli trafik, sorunun tamamını kapatmaz; hangi tarafla konuşulduğunu ve ne kadar konuşulduğunu söylemeye devam eder.

Şifrenin İçini Görmenin Bedeli

Beş şifreli akışın üçünde anahtar malzemesine erişim kurumun kendi ucundadır: ölçüm uçları ve toplayıcı kurumun yönettiği aygıtlardır, uçtaki bir ajan çözümlemeyi kapsam içinde mümkün kılar. Kalan ikisi abone portalı oturumu ile dış bildirim akışıdır. Birincisinin diğer ucunda bir abone vardır, ikincisininkinde başka bir kurum. Bu iki akışın içini görmenin tek yolu araya girmektir; araya girmek pasif olmaktan çıkmak, hedefte kayıt ve uyarı üretmek ve üçüncü tarafın trafiğine dokunmak demektir. Yazılı yetki ve tanımlı kapsam bunları içermiyorsa bu adım hem yasadışı hem meslek dışıdır ve iki akış çözümlenmeden bırakılır.

Savunmada bırakılan iz de burada ikiye ayrılır. Pasif çözümleme önceki dersteki gibi sıfır kayıt üretir. Araya girerek çözme akış başına en az bir uyarı üretir — kurulan güven zincirinin beklenenden farklı olması, uçtaki denetimin göreceği ilk şeydir. Bu, kursta ilk kez sıfır olmayan iz sütunudur ve nedeni araçların değişmesi değil, adımın aktif hale gelmesidir.

Özet

  • On akışta tanımlı 30 uygulama alanının 16’sı okunur; kaybın beş akışlık bölümü şifrelemeden, iki akışlık bölümü biçim varsayımının tutmamasından gelir.
  • Çözümleyici biçimi taşıma bilgisinden varsayar; iki akış yanlış etiketlenir ve çıktı boş değil yanlış olur. Bu, hedeften değil araçtan gelen bir yanlış pozitif kaynağıdır.
  • Doksan bir adayın 43’ü kanıt, 48’i meta veriden yapılan vekil çıkarımdır; kayit-sayisi on akışın onunda çıkarım, sıfırında kanıttır.
  • Kimlik alanının içeriği ve yazılan ölçüm değeri hiçbir akışta meta veriden türetilemez; şifrelemenin gerçekten tuttuğu yer bu iki satırdır.
  • Beş şifreli akışın üçünde anahtara kurum içinden erişilir; ikisi abone ve üçüncü taraf içerdiği için çözümlenmeden bırakılır.
  • Pasif çözümleme sıfır kayıt bırakır; araya girerek çözme akış başına en az bir uyarı üretir ve adımı aktif sınıfa taşır.

Sonraki Adım

Buraya kadar iki araç da yalnız bakan araçlardı: geçen trafiği kaydettiler ve okuyabildikleri alanları okudular. İkisinin de ortak sınırı şu: bir akışta bir alanın belirli bir değerle geçtiğini görmek, o alana başka bir değer yazıldığında sistemin ne yapacağını söylemez. Bir adayın gerçekten açık olduğunu göstermek için isteği değiştirip yanıtı görmek gerekir.

Sonraki ders vekil aracı bir doğrulama adımı olarak ele alır ve tek soruyu sorar: bir adayın açık olduğunu göstermek kaç istek ister. İstekler üç risk sınıfına ayrılır — yalnız gözleyen, hedefte durum değiştiren ve hizmeti kesme riski taşıyan — ve her adayın doğrulama planı bu sınıflar cinsinden sayılır. Ayrıca kapsam denetimi ilk kez devreye girer: bazı istekler kapsam dışındaki bir tarafa dokunduğu için hiç gönderilemez ve o adaylar kanıta dönüşmeden kalır.

İ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