Ders 05 / 18
Servis ve Sürüm Belirleme
Parmak izini kesinlik cinsinden ölçmek: 21 servisin ilk sonda düzeyinde 13'ünün tek sürüme inmesi ama 4'ünün yanlış sürüme atanması, kanıt oranının %42,9'dan %76,2'ye çıkarken izin 42 kayıttan 168 kayıt ve 6 uyarıya yükselmesi, üçüncü düzeyde kesin sayısının 14'ten 11'e düşerken doğruluğun tamamlanması ve yanlış sürüm bilgisinin bulgu listesine 9 yanlış satır taşıyıp 10 satırı kaçırması.
İçindekiler
Önceki ders bir noktanın açık olduğunu kesin olarak ayırdı: kanıt düzeyinde 21 açık nokta işaretlendi. Bir noktanın açık olması ise orada ne çalıştığını söylemez. Yirmi bir nokta şu an yalnız bir konumdur; arkasındaki yazılımın ne olduğu, hangi sürümü taşıdığı ve o sürümün bilinen bir açıkla ilişkili olup olmadığı hiç sorulmadı.
Bu soruyu soran adım parmak izi çıkarmadır (fingerprinting) ve yeni bir ölçü getirir: kesinlik. Bir uçtan toplanan imzalar bir sürüm kümesine işaret eder. Küme bazen tek elemanlıdır, bazen onlarca sürüm içerir — ve bazen tek elemanlıdır ama yanlış elemanı taşır. Üçüncü durum bu dersin ana konusudur, çünkü kesin görünen yanlış bir cevap, belirsiz kalan doğru bir cevaptan daha pahalıdır.
Kesinlik Aday Kümesinin Büyüklüğüdür
KS13: her servis üç şey taşır — kurgu gerçek sürümü, tanıtım dizesinin durumu (doğru, yanlış, yok) ve sonda düzeyi başına aday sürüm kümesinin büyüklüğü. KS14: bir servis N sondadan sonra kesindir (aday kümesi tek elemanlı); tanıtımı yanıltıcı olan servis doğru sürüme ancak üçüncü düzeyde ulaşır, önceki düzeylerde kesin ama yanlış atanır. KS15: iz sonda düzeyinden çıkar — her servise N istek, her istek bir ağ ve bir uygulama kaydı; üçüncü düzeyden başlayarak olağandışı sondalar uyarı üretir.
// kesif/surum.mjs — 04'un 21 kanit duzeyinde acik noktasi icin kurgu parmak izi sonucu (model): // gercek urun, gercek surum ve gercek acik kimligi yok; surum etiketleri de kurgudur. // KS13: her servis uc sey tasir — kurgu gercek surumu, tanitim dizesinin durumu (dogru, yanlis, // yok) ve sonda duzeyi 1..4 icin aday surum kumesinin buyuklugu. Tanitimi yanlis olan servis // icin "yanlisSurum", dizenin isaret ettigi surumdur. export const SERVIS = ` abone/n1 A4 dogru - 1 1 1 1 abone/n2 B2 dogru - 2 1 1 1 abone/n3 C7 yok - 12 5 2 1 saha/n1 A4 dogru - 1 1 1 1 saha/n5 D1 yanlis D0 1 1 3 1 saha/n6 E3 dogru - 1 1 1 1 saha/b1 F2 yok - 9 4 2 2 vpn/n6 E3 dogru - 1 1 1 1 toplayici/n6 E3 dogru - 1 1 1 1 toplayici/n7 G5 yok - 14 6 3 2 toplayici/n8 H1 yanlis H9 1 1 4 2 toplayici/b1 F2 yok - 9 4 2 2 rapor/n1 A4 dogru - 1 1 1 1 rapor/n6 E3 dogru - 1 1 1 1 ortak/n1 A4 dogru - 2 1 1 1 ortak/n3 C7 yok - 12 5 2 1 izleme/n1 A4 dogru - 1 1 1 1 izleme/n7 I2 yanlis I5 1 2 3 1 izleme/b1 F2 yok - 9 4 2 2 gunluk/n1 A4 dogru - 1 1 1 1 gunluk/n5 J8 yanlis J1 1 1 2 1` .trim().split("\n").map((r) => { const [ad, gercek, tanitim, yanlisSurum, ...d] = r.trim().split(/\s+/); return { ad, gercek, tanitim, yanlisSurum, kume: d.map(Number) }; }); // Kurgu surum-acik eslemesi: bir surum etiketinin bulgu listesine kac satir tasidigi. export const ACIK = { A4: 1, B2: 0, C7: 2, D1: 3, E3: 2, F2: 1, G5: 2, H1: 4, I2: 1, J8: 2, D0: 0, H9: 1, I5: 3, J1: 5 }; // KS14: bir servis N sondadan sonra kesindir (aday kumesi tek elemanli). Tanitimi yanlis olan // servis dogru surume ancak ucuncu duzeyde ulasir; onceki duzeylerde kesin ama yanlis atanir. export const kesin = (s, n) => s.kume[n - 1] === 1; export const dogru = (s, n) => (s.tanitim === "yanlis" ? n >= 3 : true); export const atanan = (s, n) => (dogru(s, n) ? s.gercek : s.yanlisSurum); // KS15: iz sonda duzeyinden cikar — her servise N istek, her istek bir ag ve bir uygulama kaydi; // ucuncu duzeyden itibaren olagandisi sondalar uyari uretir. export const iz = (n) => ({ istek: SERVIS.length * n, kayit: SERVIS.length * n * 2, uyari: n >= 3 ? (n - 2) * 3 : 0 });
// kesif/kesinlik.mjs — parmak izi kesinlik cinsinden: kac aday surum tek surume iniyor. import { SERVIS, ACIK, kesin, dogru, atanan, iz } from "./surum.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 DUZEY = [1, 2, 3, 4]; const K = (n) => SERVIS.filter((s) => kesin(s, n)); console.log(`${SERVIS.length} servis: ${SERVIS.filter((s) => s.tanitim === "dogru").length} ` + `tanitimi dogru, ${SERVIS.filter((s) => s.tanitim === "yanlis").length} yaniltici, ` + `${SERVIS.filter((s) => s.tanitim === "yok").length} tanitimsiz`); const A = [-8, 8, 8, 10, 9, 8, 11]; console.log("\n1. sonda duzeyi basina kesinlik"); yaz(A, "duzey", "istek", "kesin", "belirsiz", "yanlisP", "kanit", "kesinlik %"); for (const n of DUZEY) { const k = K(n), yp = k.filter((s) => !dogru(s, n)).length; yaz(A, n, iz(n).istek, k.length, SERVIS.length - k.length, yp, k.length - yp, (((k.length - yp) / SERVIS.length) * 100).toFixed(1)); } const B = [-8, 8, 8, 12, 12, 15]; console.log("\n2. kesinligin iz bedeli"); yaz(B, "duzey", "kayit", "uyari", "kayit/kanit", "uyari/kanit", "ort. kume boy"); for (const n of DUZEY) { const k = K(n), kanit = k.length - k.filter((s) => !dogru(s, n)).length; const ort = SERVIS.reduce((t, s) => t + s.kume[n - 1], 0) / SERVIS.length; yaz(B, n, iz(n).kayit, iz(n).uyari, (iz(n).kayit / kanit).toFixed(2), (iz(n).uyari / kanit).toFixed(3), ort.toFixed(2)); } const C = [-8, 10, 8, 8, 8, 10]; console.log("\n3. bulgu listesine tasinan satir"); yaz(C, "duzey", "bildirilen", "dogru", "yanlis", "kacan", "yanlis %"); for (const n of DUZEY) { const k = K(n); const bild = k.reduce((t, s) => t + ACIK[atanan(s, n)], 0); const dg = k.filter((s) => dogru(s, n)).reduce((t, s) => t + ACIK[s.gercek], 0); const ger = k.reduce((t, s) => t + ACIK[s.gercek], 0); yaz(C, n, bild, dg, bild - dg, ger - dg, ((bild - dg) / bild * 100).toFixed(1)); } const D = [-10, 7, 7, 7, 7, 7]; console.log("\n4. tanitim durumuna gore kesin sayisi"); yaz(D, "tanitim", "servis", "duzey1", "duzey2", "duzey3", "duzey4"); for (const t of ["dogru", "yanlis", "yok"]) { const l = SERVIS.filter((s) => s.tanitim === t); yaz(D, t, l.length, ...DUZEY.map((n) => l.filter((s) => kesin(s, n)).length)); } const b = SERVIS.filter((s) => s.tanitim === "yanlis"); console.log(`yaniltici tanitim: duzey 1'de ${b.filter((s) => kesin(s, 1)).length} servis kesin ` + `ama yanlis surume atanir; bunlarin gercek acik sayisi ` + `${b.reduce((t, s) => t + ACIK[s.gercek], 0)}, bildirilen ` + `${b.reduce((t, s) => t + ACIK[s.yanlisSurum], 0)}`);
21 servis: 11 tanitimi dogru, 4 yaniltici, 6 tanitimsiz 1. sonda duzeyi basina kesinlik duzey istek kesin belirsiz yanlisP kanit kesinlik % 1 21 13 8 4 9 42.9 2 42 14 7 3 11 52.4 3 63 11 10 0 11 52.4 4 84 16 5 0 16 76.2 2. kesinligin iz bedeli duzey kayit uyari kayit/kanit uyari/kanit ort. kume boy 1 42 0 4.67 0.000 3.90 2 84 0 7.64 0.000 2.10 3 126 3 11.45 0.273 1.71 4 168 6 10.50 0.375 1.24 3. bulgu listesine tasinan satir duzey bildirilen dogru yanlis kacan yanlis % 1 22 13 9 10 40.9 2 20 14 6 9 30.0 3 14 14 0 0 0.0 4 24 24 0 0 0.0 4. tanitim durumuna gore kesin sayisi tanitim servis duzey1 duzey2 duzey3 duzey4 dogru 11 9 11 11 11 yanlis 4 4 3 0 3 yok 6 0 0 0 2 yaniltici tanitim: duzey 1'de 4 servis kesin ama yanlis surume atanir; bunlarin gercek acik sayisi 10, bildirilen 9
Sayılar ölçüm sınıfındadır; girdileri KS13–KS15’tir.
On Üç Kesin, Dokuz Kanıt
Birinci tablonun ilk satırı bu dersin sorusunu tek başına kurar. İlk sonda düzeyinde 21 servisin 13’ü tek bir sürüme iner — kesinlik ölçütüne göre %61,9’u kesindir. Ne var ki bu on üçün 4’ü yanlış sürüme atanmıştır. Kanıt sayısı 13 değil, 9‘dur ve gerçek kesinlik %42,9’dur.
Aradaki fark ölçüm hatası değildir, ölçünün kendisiyle ilgilidir. Aday kümesinin tek elemanlı olması yalnız belirsizliğin ortadan kalktığını gösterir; elemanın doğru olduğunu göstermez. Bir tanıtım dizesine bakarak sürüm atayan bir adım, hedefin yazdığı bir metni okur ve o metni kanıt sayar. Metnin doğruluğunu denetleyen hiçbir şey yoktur.
Dördüncü tablo bunu tanıtım durumuna göre ayırır. Tanıtımı doğru olan 11 servisin 9’u ilk düzeyde kesin olur, ikisi iki sürüm arasında kalır ve ikinci düzeyde ayrılır. Tanıtımı yanıltıcı olan 4 servisin dördü de ilk düzeyde kesindir — hem de doğru tanıtımlı servislerden daha yüksek bir oranda. Tanıtımsız 6 servisin ilk üç düzeyde hiçbiri kesin olmaz.
Bu, bu dersin en ters sonucudur: yanıltıcı tanıtım en yüksek görünür kesinliği üretir. Bir uçtan gelen “ben şu sürümüm” iddiası, iddianın doğru ya da yanlış olmasına bakılmaksızın aday kümesini bire indirir. Belirsizlik gören taraf tanıtımsız uçtur; yanlış cevap alan taraf yanıltıcı olandır.
Kesin Sayısının Düştüğü Düzey
Birinci tablonun üçüncü satırı ilk bakışta bir gerileme gibi görünür: kesin sayısı ikinci düzeydeki 14’ten 11’e düşer. Aynı satırda yanlış pozitif 3’ten 0’a iner ve kanıt sayısı 11’de kalır.
Olan şey şudur. Üçüncü düzeydeki davranışsal sondalar, tanıtım dizesiyle çelişen imzalar üretir; yanıltıcı üç servis artık tek bir sürüme değil, üç ya da dört adaya işaret eder. Aday kümesi büyür, çünkü ölçüm ilk kez tanıtımın yalan olabileceğini hesaba katar. Görünür kesinlik düşer, gerçek kesinlik yerinde kalır ve yanlış atama sıfırlanır.
Bir değerlendirmede bu satır şöyle okunur: kesin sayısının düşmesi bir kayıp değil, önceki kesinliğin sahte olduğunun ortaya çıkmasıdır. Bir sonda eklemek kesinliği artırmak zorunda değildir; artırdığı şey doğruluktur ve doğruluk arttığında bazı kalemler haklı olarak belirsize döner.
Dördüncü düzeyde kesin sayısı 16’ya çıkar ve hepsi doğrudur — kesinlik %76,2. Kalan beş servis dört sondadan sonra da iki adaylık kümelerde durur; bunların dördü tanıtımsız uçlardır. Parmak izinin bu koşumdaki üst sınırı 21’in 16’sıdır.
Bulgu Listesine Taşınan Yanlış Satır
Üçüncü tablo yanlış sürüm bilgisinin bedelini raporun kendisinde ölçer. Her sürüm etiketi bulgu listesine belli sayıda satır taşır; yanlış sürüm yanlış satır taşır.
İlk düzeyde bulgu listesi 22 satırdır. Bunların 13’ü doğrudur, 9’u yanlıştır — listenin %40,9’u. Aynı düzeyde 10 gerçek satır hiç görünmez. Yani bir tarafta düzeltme bütçesini boşa harcayan dokuz kalem, öteki tarafta hiç bakılmayan on kalem vardır. Kapanış satırı bunu dört yanıltıcı servis üzerinden verir: gerçek açık sayıları toplam 10 iken bildirilen 9’dur; iki sayı birbirine yakındır ve hiçbir satırı ortak değildir.
İkinci düzeyde yanlış oran %30’a iner. Üçüncü düzeyde bulgu listesi 14 satıra düşer ve tamamı doğrudur; kaçan satır sıfırdır, çünkü kesin sayılan on bir servisin hepsi doğru atanmıştır. Dördüncü düzeyde liste 24 satıra çıkar ve yine tamamı doğrudur.
Birinci ve dördüncü düzey arasındaki karşılaştırma dersin pratik sonucudur: ikisinde de yaklaşık aynı büyüklükte bir liste üretilir (22’ye karşı 24), ama birinde satırların %40,9’u yanlıştır, ötekinde %0’ı. Bulgu sayısı ikisini birbirinden ayırmaz; ayıran tek şey doğrulamadır.
Bu tablonun savunma tarafında bir karşılığı vardır ve asimetriyi açıkça gösterir. Kurumun kendi yazılım envanterinde aynı 21 servisin sürümü tek adımda ve sıfır izle okunabilir; kurulum kayıtları hangi sürümün yüklü olduğunu, hangi yamanın uygulandığını ve hangi bileşenin hiç kullanılmadığını yanıltıcı bir tanıtım dizesine bakmadan söyler. Dışarıdan yapılan ölçüm 84 istek ve 168 kayıt harcayıp 16 servise ulaşırken içeriden yapılan aynı ölçüm 21 servisin hepsini kapsar. Değerlendirmenin bu adımdaki bulgusu, kurumun kendi envanterinden okuyabileceği bir bilginin pahalı ve eksik bir kopyasıdır; asıl değeri, o envanterin dışarıdan görünenle örtüşmediği yerlerde ortaya çıkar.
Kesinliğin İz Bedeli
İkinci tablo bu konu boyunca taşınan sütunu son kez açar. Ortalama aday küme boyu 3,90’dan 1,24’e iner; karşılığında hedefte biriken kayıt 42’den 168’e, uyarı 0’dan 6’ya çıkar.
Bedelin dağılımı eşit değildir. İlk iki düzey 84 kayıt bırakır ve hiç uyarı üretmez: bu sondalar sıradan isteklerden ayırt edilmez. Üçüncü düzeyden itibaren kullanılan olağandışı sondalar protokol düzeyinde anormallik üretir ve uyarıya dönüşür. Yani doğruluğu tamamlayan adım, aynı zamanda savunmanın fark ettiği ilk adımdır.
kayit/kanit sütunu bunu tek sayıya indirir: 4,67, 7,64, 11,45 ve 10,50. En pahalı düzey
üçüncüdür; dördüncü düzey daha çok kayıt bırakır ama beş yeni kanıt getirdiği için kanıt başına
maliyeti düşer. Mavi takım açısından okunuşu ise şudur: bu konudaki adımların çoğu görülür ama
fark edilmez. Beş dersin toplamında hedefte biriken kayıt yüzlerle ölçülür; uyarıya dönüşen
kalemler ise iki elin parmaklarını geçmez ve hepsi ya yoğunluktan ya da protokol anormalliğinden
çıkar — hiçbiri “bir keşif yapılıyor” biçiminde bir kayıt değildir.
Özet
- Kesinlik aday sürüm kümesinin büyüklüğüdür: ilk sonda düzeyinde 21 servisin 13’ü tek sürüme iner ama 4’ü yanlış sürüme atanır; kanıt 9, gerçek kesinlik %42,9’dur.
- Yanıltıcı tanıtım en yüksek görünür kesinliği üretir: tanıtımı yanlış 4 servisin dördü de ilk düzeyde kesindir, tanıtımsız 6 servisin ilk üç düzeyde hiçbiri kesin olmaz.
- Üçüncü düzeyde kesin sayısı 14’ten 11’e düşerken yanlış atama 3’ten 0’a iner: kesinliğin azalması önceki kesinliğin sahte olduğunun ortaya çıkmasıdır.
- Yanlış sürüm bilgisi ilk düzeyde bulgu listesine 9 yanlış satır taşır (%40,9) ve 10 gerçek satırı kaçırır; iki küme hiçbir satırı paylaşmaz.
- Dördüncü düzeyde 24 satırın tamamı doğrudur; birinci düzeydeki 22 satırla benzer büyüklükte bir listedir ve aradaki tek fark doğrulamadır.
- Kesinliği %42,9’dan %76,2’ye çıkarmanın bedeli 42 kayıttan 168 kayda ve 0 uyarıdan 6 uyarıya çıkmaktır; ilk iki düzey hiç uyarı üretmez, doğruluğu tamamlayan üçüncü düzey ilk uyarıyı üretir.
Sonraki Adım
Beş ders sonunda dışarıdan görünen envanter çıkarıldı ve her adımda adaylar sayıldı: halka açık kalemlerden 20 aday, kayıt sorgulamasından 8 doğrulanmış sahiplik, ad uzayından 21 kayıt ve 6 sahipsiz kalem, taramadan 21 açık nokta, parmak izinden 16 kesin sürüm. Her sayının yanında bıraktığı iz de yazıldı.
Yine de bütün bu ölçümlerin ortak bir sınırı var. Bu konudaki hiçbir adım, bir adayın gerçekten açık olup olmadığını söyleyemez. Bir sürüm etiketinin bilinen bir açıkla ilişkili olması, o uçtaki kurulumun gerçekten etkilenmiş olduğunu göstermez: yama uygulanmış olabilir, etkilenen bileşen hiç kullanılmıyor olabilir, ya da önündeki bir denetim ilgili isteği hiç geçirmiyor olabilir. Dördüncü düzeyin 24 satırı, kesinliği tam olsa bile, hâlâ birer adaydır.
Bu farkı kapatmanın tek yolu uçtan gelen ve uca giden trafiğe bakmaktır: hangi paketler akıyor, bir istek değiştirildiğinde yanıt nasıl değişiyor, bir dosya çalıştırıldığında ne yapıyor, bağımsız kaynaklar aynı kalem için ne söylüyor. Sonraki konu — Analiz Araçları — bu araçların her birini aynı iki soruyla ele alır: ne üretiyor ve neyi kanıtlayamıyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.