İçeriğe geç
academia.sh

Ders 06 / 18

Paket Yakalama ve Çözümleme

Yakalanan trafiğin kanıt değerinin ölçülmesi: 24 kurgu paketten çıkan 10 akış, üç yakalama noktasında 18, 44 ve 85 iddia adayı, çekirdek aynada 85 adayın 50'sinin kanıt ve 7'sinin sahtelenebilir çıkması, düşük değerli iddiaların 20/20'si kanıtlanırken yüksek değerlilerin yalnız 10/25'inin kanıtlanması ve pasif yakalamanın hedefte sıfır kayıt bırakıp bir yapılandırma değişikliği istemesi.

İçindekiler

Önceki konu dışarıdan görünen envanteri çıkardı ve adayları saydı; kapanışta kalan soru şuydu — bir adayın gerçekten açık olup olmadığını hiçbir keşif adımı söyleyemez, bunun için trafiğe ve isteğe bakmak gerekir. Bu konu oraya bakan araçları ele alır ve hepsini tek bir ölçüyle sınar: ürettikleri aday ile geriye kalan kanıtlanmış bulgu arasındaki fark.

İlk araç sınıfı paket yakalayıcıdır: ağdan geçen çerçeveleri bir noktada kaydeder. Protokollerin nasıl çalıştığı Bilgisayar Ağları müfredatındaki Ağ Modelleri kursunda kuruldu ve burada tekrarlanmaz. Burada sorulan tek soru şudur: kaydedilen bu yığından hangi alan doğrudan kanıt sayılır, hangisi yalnız bir çıkarım, hangisi de karşı tarafın serbestçe yazabildiği bir beyandır. Yetkilendirilmiş bir değerlendirmede bile başka bir kuruma ait trafiğin yazılı yetki ve tanımlı kapsam olmadan kaydedilmesi hem yasadışı hem meslek dışıdır.

Alanın Sınıfı Üretenine Bağlıdır

Bir paketteki her alanı aynı gözle okumak, çözümlemenin en yaygın hatasıdır. Alanların bir bölümünü yakalama noktasının kendisi üretir: kaydın zamanı, çerçevenin hangi bacaktan girdiği, yön, boyut, sayı. Bunlar gönderenin beyanı değildir; ölçüm aracının gözlemidir ve gönderen tarafından değiştirilemez. Bir bölümünü başlıklar taşır: adresler, bağlantı noktası numarası, sunucu adı alanı. Bunlar ağ yolu boyunca tutarlı olmak zorundadır, dolayısıyla tümüyle serbest değildir, ama gözlem de değildir — çıkarımdır. Kalan bölümü yük taşır: kullanıcı adı, sayaç kimliği, istemci saati. Bunları yazan taraf gönderendir ve kriptografik olarak bağlanmadıkça istediğini yazabilir.

Dördüncü bir sınıf vardır: imza. Yük içindeki bir alan kriptografik olarak bağlıysa, o alan gönderenin beyanı olmaktan çıkıp sınanabilir bir kanıta dönüşür — ancak akış şifreliyse yakalama noktası imzayı da göremez.

  • AA1. Paket kümesi, hizmet tablosu, yakalama noktaları ve iddia listesi modeldir; gerçek bir yakalama yapılmadı. Gerçek adres, ana bilgisayar adı ve kurum yazılmaz.
  • AA2. Akış (flow), aynı kaynak, hedef ve hizmet üçlüsünü taşıyan paketlerin kümesidir.
  • AA3. Bir alanın sınıfı üretenine bağlıdır: nokta gözlemi ve imza kanıt, başlık alanı çıkarım, yük alanı sahtelenebilir.
  • AA4. Şifreli akışta yük alanları ve imza görünmez; sunucu adı alanı görünür sayılır.
  • AA5. İddia, yakalanan trafikten çıkarılan bir önermedir. Dayanaklarından en az biri görünüyorsa iddia bir adaydır; sınıfı, görünen en güçlü dayanağın sınıfıdır.
  • AA6. Her iddiaya bir değer verilir: raporda ne kadar iş taşıdığı. Değer elle atandı.
  • AA7. Yakalama pasiftir; hedef sistemlerde kayıt üretmez.
// pak/akis.mjs — kurgu paket kumesi, akis cikarma ve alan siniflandirmasi MODELIDIR.
// Gercek bir yakalama yok; gercek adres, ana bilgisayar adi ve kurum yazilmaz.
// Bir alanin sinifi, o alani kimin urettigine baglidir.
export const ALAN = {
  'yakalama-zamani': 'nokta', 'giris-bacagi': 'nokta', 'yon': 'nokta',
  'cerceve-boyutu': 'nokta', 'paket-sayisi': 'nokta', 'duz-metin-varligi': 'nokta',
  'kaynak-adresi': 'baslik', 'hedef-adresi': 'baslik', 'baglanti-noktasi': 'baslik',
  'sunucu-adi-alani': 'baslik', 'imza-dogrulamasi': 'imza',
  'kullanici-adi': 'yuk', 'parola-alani': 'yuk', 'sayac-kimligi': 'yuk',
  'okuma-degeri': 'yuk', 'abone-no': 'yuk', 'oturum-belirteci': 'yuk',
  'istemci-saati': 'yuk', 'cihaz-kimligi': 'yuk', 'islem-kimligi': 'yuk',
};
export const SINIF = { nokta: 'kanit', imza: 'kanit', baslik: 'cikarim', yuk: 'sahte' };
export const GUC = { kanit: 3, cikarim: 2, sahte: 1 };

// Hizmet: sifreli mi, yuku imzali mi, yukte hangi alanlar tasiniyor.
export const HIZMET = {
  'olcum-toplama':   { sifreli: false, imzali: true,  yuk: ['sayac-kimligi', 'okuma-degeri', 'istemci-saati'] },
  'dogrulama-cagri': { sifreli: true,  imzali: true,  yuk: ['islem-kimligi', 'abone-no'] },
  'portal-oturumu':  { sifreli: true,  imzali: false, yuk: ['oturum-belirteci', 'kullanici-adi'] },
  'saha-senkron':    { sifreli: false, imzali: false, yuk: ['kullanici-adi', 'cihaz-kimligi'] },
  'yonetim-erisimi': { sifreli: false, imzali: false, yuk: ['kullanici-adi', 'parola-alani'] },
  'dis-bildirim':    { sifreli: true,  imzali: false, yuk: ['abone-no'] },
};

// Yakalama noktasi: hangi bacaklardan gecen paketi goruyor.
export const NOKTA = {
  'sube-bacagi':   ['sube-1'],
  'cekirdek-ayna': ['sube-1', 'sube-2', 'merkez', 'dis'],
  'toplayici-ucu': ['merkez'],
};

// satir: zaman(sn) | bacak | kaynak | hedef | hizmet | boyut(bayt)
export const PAKET = `
  0 sube-1 s1-ucu toplayici olcum-toplama 420
  1 sube-1 s1-ucu toplayici olcum-toplama 418
  2 sube-1 s1-ucu toplayici olcum-toplama 421
  3 sube-2 s2-ucu toplayici olcum-toplama 419
  4 sube-2 s2-ucu toplayici olcum-toplama 420
  5 merkez toplayici dogrulayici dogrulama-cagri 1180
  6 merkez toplayici dogrulayici dogrulama-cagri 1174
  7 merkez toplayici dogrulayici dogrulama-cagri 1190
  8 dis abone-ucu portal portal-oturumu 2240
  9 dis abone-ucu portal portal-oturumu 2180
 10 dis abone-ucu portal portal-oturumu 2260
 11 sube-1 saha-uc saha-svc saha-senkron 960
 12 sube-1 saha-uc saha-svc saha-senkron 955
 13 sube-2 saha-uc saha-svc saha-senkron 962
 14 merkez yonetim toplayici yonetim-erisimi 310
 15 merkez yonetim toplayici yonetim-erisimi 305
 16 merkez yonetim dogrulayici yonetim-erisimi 308
 17 dis fatura dis-uc dis-bildirim 1420
 18 dis fatura dis-uc dis-bildirim 1415
 19 sube-1 s1-ucu toplayici olcum-toplama 417
 20 merkez toplayici fatura dogrulama-cagri 1160
 21 merkez toplayici fatura dogrulama-cagri 1168
 22 sube-2 s2-ucu toplayici olcum-toplama 422
 23 merkez yonetim saha-svc yonetim-erisimi 312
`.trim().split('\n').map((r) => {
  const [t, bacak, kaynak, hedef, hizmet, boyut] = r.trim().split(/\s+/);
  return { t: +t, bacak, kaynak, hedef, hizmet, boyut: +boyut };
});

// Akis: ayni (kaynak, hedef, hizmet) uclusunu tasiyan paketler.
export function akislar(paketler) {
  const m = new Map();
  for (const p of paketler) {
    const k = `${p.kaynak}>${p.hedef}/${p.hizmet}`;
    if (!m.has(k)) m.set(k, { ad: k, hizmet: p.hizmet, bacak: new Set(), paket: 0, bayt: 0 });
    const a = m.get(k);
    a.bacak.add(p.bacak); a.paket += 1; a.bayt += p.boyut;
  }
  return [...m.values()];
}

// Bir akista gorunen alanlar: nokta ve baslik alanlari her zaman,
// yuk alanlari ile imza yalniz sifresiz akista.
export function gorunurAlan(a) {
  const h = HIZMET[a.hizmet];
  const g = ['yakalama-zamani', 'giris-bacagi', 'yon', 'cerceve-boyutu', 'paket-sayisi',
    'kaynak-adresi', 'hedef-adresi', 'baglanti-noktasi'];
  if (h.sifreli) g.push('sunucu-adi-alani');
  else {
    g.push('duz-metin-varligi', ...h.yuk.filter((f) => ALAN[f]));
    if (h.imzali) g.push('imza-dogrulamasi');
  }
  return g;
}

// Iddia: yakalanan trafikten cikarilan onerme. Dayanak alanlarindan en az biri gorunuyorsa
// iddia bir ADAY olur; iddianin sinifi, gorunen en guclu dayanagin sinifidir.
export const IDDIA = [
  { ad: 'akis-var',             deger: 'dusuk',  dayanak: ['yon', 'cerceve-boyutu'] },
  { ad: 'hacim-ve-zamanlama',   deger: 'dusuk',  dayanak: ['paket-sayisi', 'yakalama-zamani'] },
  { ad: 'islemin-zamani',       deger: 'orta',   dayanak: ['istemci-saati', 'yakalama-zamani'] },
  { ad: 'trafik-su-bacaktan',   deger: 'orta',   dayanak: ['giris-bacagi'] },
  { ad: 'konusulan-servis',     deger: 'orta',   dayanak: ['baglanti-noktasi'] },
  { ad: 'karsi-uc-kimligi',     deger: 'orta',   dayanak: ['hedef-adresi', 'sunucu-adi-alani'] },
  { ad: 'alanlar-duz-metinde',  deger: 'yuksek', dayanak: ['duz-metin-varligi'] },
  { ad: 'gonderen-uc-kimligi',  deger: 'yuksek', dayanak: ['kaynak-adresi', 'imza-dogrulamasi'] },
  { ad: 'okunan-sayac-degeri',  deger: 'yuksek', dayanak: ['okuma-degeri', 'sayac-kimligi', 'imza-dogrulamasi'] },
  { ad: 'kimlik-alani-icerigi', deger: 'yuksek', dayanak: ['parola-alani', 'oturum-belirteci'] },
  { ad: 'islemi-yapan-kisi',    deger: 'yuksek', dayanak: ['kullanici-adi', 'cihaz-kimligi'] },
];

export function iddiaSinifi(iddia, gorunen) {
  const v = iddia.dayanak.filter((f) => gorunen.includes(f));
  if (v.length === 0) return null;
  return v.map((f) => SINIF[ALAN[f]]).sort((x, y) => GUC[y] - GUC[x])[0];
}

export function noktaOlc(nokta) {
  const bacaklar = NOKTA[nokta];
  const p = PAKET.filter((x) => bacaklar.includes(x.bacak));
  const s = { paket: p.length, bayt: p.reduce((t, x) => t + x.boyut, 0), akis: 0,
    aday: 0, kanit: 0, cikarim: 0, sahte: 0 };
  for (const a of akislar(p)) {
    s.akis += 1;
    const g = gorunurAlan(a);
    for (const i of IDDIA) {
      const c = iddiaSinifi(i, g);
      if (c) { s.aday += 1; s[c] += 1; }
    }
  }
  return s;
}

Üç Yakalama Noktası

// pak/olc.mjs — ayni paket kumesi uc yakalama noktasindan olculur.
import { PAKET, NOKTA, IDDIA, HIZMET, akislar, gorunurAlan, iddiaSinifi, noktaOlc } from './akis.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());

console.log(`${PAKET.length} paket -> ${akislar(PAKET).length} akis, ` +
  `${Object.keys(HIZMET).length} hizmet, ${IDDIA.length} iddia turu`);

const A = [-22, -17, 7, 7, 9, 8, 6];
console.log('\n1. akis basina gorunur alan');
y(A, 'akis', 'hizmet', 'paket', 'bayt', 'sifreli', 'imzali', 'alan');
for (const a of akislar(PAKET)) {
  const h = HIZMET[a.hizmet];
  y(A, a.ad.split('/')[0], a.hizmet, a.paket, a.bayt, h.sifreli ? 'evet' : 'hayir',
    h.imzali ? 'evet' : 'hayir', gorunurAlan(a).length);
}

const B = [-16, 8, 7, 7, 8, 9, 16];
console.log('\n2. yakalama noktasi basina iddia');
y(B, 'nokta', 'paket', 'akis', 'aday', 'kanit', 'cikarim', 'sahtelenebilir');
for (const n of Object.keys(NOKTA)) {
  const s = noktaOlc(n);
  y(B, n, s.paket, s.akis, s.aday, s.kanit, s.cikarim, s.sahte);
}

const C = [-22, 9, 8, 9, 16];
console.log('\n3. cekirdek aynada iddia turu basina sinif dagilimi');
y(C, 'iddia', 'deger', 'kanit', 'cikarim', 'sahtelenebilir');
const ag = akislar(PAKET).map(gorunurAlan);
const kutu = { dusuk: [0, 0], orta: [0, 0], yuksek: [0, 0] };
for (const i of IDDIA) {
  const c = { kanit: 0, cikarim: 0, sahte: 0 };
  for (const g of ag) { const s = iddiaSinifi(i, g); if (s) c[s] += 1; }
  y(C, i.ad, i.deger, c.kanit, c.cikarim, c.sahte);
  kutu[i.deger][0] += c.kanit;
  kutu[i.deger][1] += c.kanit + c.cikarim + c.sahte;
}

console.log('\n4. iddia degeri ile kanit orani');
for (const d of ['dusuk', 'orta', 'yuksek'])
  console.log(`  ${d.padEnd(8)} kanit ${String(kutu[d][0]).padStart(3)} / ${kutu[d][1]}`);

const t = noktaOlc('cekirdek-ayna');
console.log(`\nhedef sistemlerde uretilen kayit             0`);
console.log(`yakalama icin gereken yapilandirma degisikligi 1 (ayna bacagi, yazili onay)`);
console.log(`incelenen hacim                              ${t.bayt} bayt`);
console.log(`sube bacagindan gorulemeyen akis             ${t.akis - noktaOlc('sube-bacagi').akis} / ${t.akis}`);
24 paket -> 10 akis, 6 hizmet, 11 iddia turu

1. akis basina gorunur alan
akis                  hizmet             paket   bayt  sifreli  imzali  alan
s1-ucu>toplayici      olcum-toplama          4   1676    hayir    evet    13
s2-ucu>toplayici      olcum-toplama          3   1261    hayir    evet    13
toplayici>dogrulayici dogrulama-cagri        3   3544     evet    evet     9
abone-ucu>portal      portal-oturumu         3   6680     evet   hayir     9
saha-uc>saha-svc      saha-senkron           3   2877    hayir   hayir    11
yonetim>toplayici     yonetim-erisimi        2    615    hayir   hayir    11
yonetim>dogrulayici   yonetim-erisimi        1    308    hayir   hayir    11
fatura>dis-uc         dis-bildirim           2   2835     evet   hayir     9
toplayici>fatura      dogrulama-cagri        2   2328     evet    evet     9
yonetim>saha-svc      yonetim-erisimi        1    312    hayir   hayir    11

2. yakalama noktasi basina iddia
nokta              paket   akis   aday   kanit  cikarim  sahtelenebilir
sube-bacagi            6      2     18      12        5               1
cekirdek-ayna         24     10     85      50       28               7
toplayici-ucu          9      5     44      23       15               6

3. cekirdek aynada iddia turu basina sinif dagilimi
iddia                     deger   kanit  cikarim  sahtelenebilir
akis-var                  dusuk      10        0               0
hacim-ve-zamanlama        dusuk      10        0               0
islemin-zamani             orta      10        0               0
trafik-su-bacaktan         orta      10        0               0
konusulan-servis           orta       0       10               0
karsi-uc-kimligi           orta       0       10               0
alanlar-duz-metinde      yuksek       6        0               0
gonderen-uc-kimligi      yuksek       2        8               0
okunan-sayac-degeri      yuksek       2        0               0
kimlik-alani-icerigi     yuksek       0        0               3
islemi-yapan-kisi        yuksek       0        0               4

4. iddia degeri ile kanit orani
  dusuk    kanit  20 / 20
  orta     kanit  20 / 40
  yuksek   kanit  10 / 25

hedef sistemlerde uretilen kayit             0
yakalama icin gereken yapilandirma degisikligi 1 (ayna bacagi, yazili onay)
incelenen hacim                              22436 bayt
sube bacagindan gorulemeyen akis             8 / 10

Kanıt Ucuz, Değerli İddia Pahalı

Dördüncü tablo bu dersin sonucudur. Düşük değerli iddiaların 20’sinin 20’si kanıt sınıfında. “Bu iki uç arasında akış var”, “şu kadar paket şu saatte geçti” — hepsi doğrudur, hiçbiri tartışılamaz ve hiçbiri bir rapor satırı etmez. Orta değerlilerde oran yarıya iner: bacak ve zaman kanıttır, konuşulan servis ile karşı ucun kimliği başlıktan okunur ve çıkarımdır. Yüksek değerli iddiaların ise yalnız 10’u 25’ten kanıt sınıfına girer.

Bu ters orantı bir kusur değil, yöntemin yapısıdır. Yakalama noktası ne kadar çok şey gözlemliyorsa o gözlem o kadar az şey söyler; gerçekten bir şey söyleyen alanları ise gönderen üretir ve gönderen her zaman şüphelidir. Ölçüm hattında bunun üç somut karşılığı var.

Kimlik alanı içeriği ve işlemi yapan kişi hiçbir akışta kanıt olmuyor; yedi kez aday olarak üretiliyor ve yedisi de yalnız yük alanına dayanıyor. Bir yakalamada bir kullanıcı adı görülmesi, o işlemi o kişinin yaptığını göstermez — yalnız o adın o alana yazıldığını gösterir. Rapora “kullanıcı X şu işlemi yaptı” diye giren satır, kanıtlanmamış bir adaydır ve düzeltme bütçesini yanlış yere harcatır.

Gönderen uç kimliği on adayın ikisinde kanıt, sekizinde çıkarım. İki kanıt, yükü imzalı ve şifresiz olan ölçüm toplama akışlarından geliyor: imza görülüyor ve doğrulanabiliyor. Kalan sekizde elde yalnız kaynak adresi var. Şifreli akışlarda imza da yükün içinde kaldığı için görünmez — şifreleme doğru karardır, ama kanıt olabilecek alanı çözümleyiciden de saklar.

Alanlar düz metinde altı akışta kanıt sınıfında ve bu, kurgu ağdaki en sağlam bulgudur. Yönetim erişiminin üç akışı ile saha eşitlemesinin akışı, alanlarını şifresiz taşıyor. Burada ayrım önemlidir: alanların düz metinde taşındığı yakalama noktasının gözlemidir ve kanıttır; o alanların ne dediği gönderenin beyanıdır ve değildir.

Noktanın Konumu ve Bırakılan İz

İkinci tablo yakalayıcının nereye konduğunun ölçüsüdür. Şube bacağında 6 paket, 2 akış ve 18 aday var; çekirdek aynada 24 paket, 10 akış ve 85 aday. Şube bacağından bakan bir çözümleyici on akışın sekizini hiç görmez ve görmediği akış hakkında hiçbir şey söyleyemez. Toplayıcı ucu ortadadır: merkez trafiğini görür, şube bacaklarını görmez, ama gördüğü akışların altısı şifresiz olduğu için sahtelenebilir aday oranı en yüksek noktadır — 44 adayın 6’sı.

Bedel sütunu iki kalemden oluşuyor ve ikisi de küçüktür. İncelenen hacim 22.436 bayt; gerçek bir değerlendirmede bu sayı çok daha büyüktür ve çözümleme süresini belirleyen asıl kalemdir. Savunmada bırakılan iz ise sıfır kayıttır: yakalama pasiftir, hedef sistemlere hiçbir istek gitmez, hiçbir günlük satırı üretilmez. Bu, kursta göreceğimiz en düşük izli adımdır.

Sıfır olmayan tek kalem, yakalamanın mümkün kılınmasıdır. Ayna bacağı açmak bir yapılandırma değişikliğidir; bir değişiklik kaydı üretir, ağ ekibinin onayını ve kapsam belgesinde açık bir satırı gerektirir. Trafiğin içinde abone verisi geçtiği için kaydın nerede saklanacağı ve ne zaman silineceği de aynı belgede yazılıdır. Pasif olan yakalamanın kendisidir; ona erişim izni pasif değildir.

Özet

  • Yirmi dört kurgu paketten 10 akış çıkar; akış başına görünen alan sayısı şifreli akışlarda 9, şifresiz akışlarda 11 ile 13 arasındadır.
  • Bir alanın kanıt değeri üretenine bağlıdır: yakalama noktasının gözlemi ve kriptografik imza kanıt, başlık alanı çıkarım, yük alanı sahtelenebilir beyandır.
  • Çekirdek aynada 85 iddia adayının 50’si kanıt, 28’i çıkarım, 7’si sahtelenebilir sınıftadır; bir iddianın sınıfı, görünen en güçlü dayanağının sınıfıdır.
  • Kanıt oranı iddianın değeriyle ters gider: düşük değerli iddiaların 20/20’si kanıtlanır, yüksek değerlilerin yalnız 10/25’i. Kullanıcıyı işleme bağlayan yedi adayın hiçbiri kanıt değildir.
  • Yakalama noktasının konumu görülen akışı belirler: şube bacağı 10 akışın 8’ini hiç görmez.
  • Pasif yakalama hedefte sıfır kayıt bırakır; tek iz, ayna bacağı için gereken bir yapılandırma değişikliği ve ona bağlı yazılı onaydır.

Sonraki Adım

Bu derste alanlar tek tek sınıflandırıldı ama şifreli akışlar tek bir satırla geçildi: yük görünmez, sunucu adı alanı görünür. Kurgu ağdaki on akışın dördü şifreli ve bu dördü tam olarak en çok iş taşıyan akışlar — abone portalı oturumu, doğrulama çağrısı, dış bildirim. Çözümlemenin bu akışlarda eli boş kaldığı doğru değildir; eli başka türlü doludur.

Sonraki ders uygulama katmanı incelemesini görünürlük cinsinden ölçer. Aynı akış kümesi bir protokol çözümleyiciden geçirilir ve iki sütun ayrı sayılır: şifresiz akışta kaç alan okunabiliyor, şifreli akışta kaç alan yalnız meta veri olarak kalıyor. Meta verinin ne kadar iddia taşıdığı, şifre çözmenin hangi kapsam ve gizlilik kalemini gerektirdiği ve çözümleyicinin kendi yorumunun ne zaman bir çıkarım olduğu ölçülü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