Ders 14 / 18
Test Türleri
Aynı 20 kalem ve aynı 41 kurgu açık üzerinde kara, gri ve beyaz kutu değerlendirmesi koşturuluyor. Kara kutu 78 aday üretip 6 kanıt bırakıyor (%7,7), gri kutu 63 adaydan 20, beyaz kutu 60 adaydan 31 kanıt çıkarıyor; 10 açık hiçbir türde kanıtlanamıyor çünkü kanıtı katılım kurallarının yasakladığı bir eylem gerektiriyor. Kanıt başına süre 8,82 saatten 1,87 saate, kanıt başına savunma kaydı 78'den 2,9'a iniyor; beyaz kutunun 31 kanıtının 17'si ancak içeriden anlamlı.
İçindekiler
Bir önceki ders kapsamı sayıya çevirdi: 20 kalem kapsamda, 11 kalem sınırda, net pencere 70 kişi-saat. O hesap neyin yapılabileceğini yazdı ama nasıl yapılacağını yazmadı. Aynı 20 kalem hiçbir ön bilgi verilmeden de değerlendirilebilir, kimlik bilgisi verilerek de, yapılandırma ve kaynak erişimi açılarak da. Üç yol aynı adı taşımaz ve aynı sonucu vermez.
Bu ders üç yolu tek bir hedefte karşılaştırır. Kara kutu değerlendirmesi hiçbir iç bilgi almadan başlar, gri kutu kimlik bilgisi ve sınırlı belge alır, beyaz kutu yapılandırmayı ve kaynağı görür. Karşılaştırmanın ölçüsü bulgu sayısı değildir; bulgu sayısı türden türe yanıltıcı biçimde değişir. Ölçü, üretilen aday ile kanıta dönüşen bulgu arasındaki farktır.
- TS7. Değerlendirme, önceki dersteki 20 kapsam içi kalem üzerinde yürür. Kalem kümesi de açık kümesi de kurgudur.
- TS8. Her açık iki ayrı erişim düzeyi taşır: onu görmek için gereken düzey ve onu
kanıtlamak için gereken düzey. Düzeyler
dis,kimlikveicbiçiminde sıralıdır. - TS9. Bazı açıkların kanıt düzeyi
etkidir: kanıtı ancak hizmeti etkileyecek bir eylemle alınabilir. Katılım kuralları bu eylemi yasakladığı için hiçbir tür bu düzeye erişemez. - TS10. Her kalem bir gürültü tabanı taşır: doğrulanmadan aday sayılan belirti sayısı. Tür ne kadar az iç bilgi görüyorsa gürültü çarpanı o kadar yüksektir.
- TS11. Süre iki kalemden oluşur: kalem başına hazırlık ve aday başına doğrulama. Bütün süreler kurgudur ve kişi-saat cinsindendir.
- TS12. İz kaydı, adımın savunma tarafında ürettiği kayıt sayısıdır. Aday başına iz çarpanı türe bağlıdır; belge okuyarak ilerleyen tür daha az kayıt üretir.
Aynı Hedefte Üç Tür
// turler.mjs — ayni hedefte kara, gri ve beyaz kutu degerlendirmesinin aday uretimi. // MODELDIR; kalem kumesi de acik kumesi de kurgudur. export const TOHUM = 20260811, KALEM = 20; const uretec = (t) => { let s = t >>> 0; return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; }; const r = uretec(TOHUM); // Her acik iki ayri erisim duzeyi tasir: GORME icin gereken ve KANIT icin gereken. // Kanit duzeyi gorme duzeyinden yuksek olabilir; aday ile kanit farki buradan cikar. const DUZEY = ["dis", "kimlik", "ic"]; export const ACIK = []; for (let k = 0; k < KALEM; k++) { const n = 1 + Math.floor(r() * 3); // kalem basina 1-3 gercek acik for (let j = 0; j < n; j++) { const g = Math.floor(r() * 3); // "etki": kaniti ancak hizmeti etkileyecek bir eylemle alinabilen acik. Katilim // kurallari bunu yasakladigi icin hicbir tur bu duzeye erisemez. const kanit = r() < 0.15 ? "etki" : DUZEY[Math.min(2, g + (r() < 0.42 ? 1 : 0))]; ACIK.push({ kalem: k, gorme: DUZEY[g], kanit }); } } // Kalem basina gurultu tabani: dogrulanmadan aday sayilan belirti sayisi. export const GURULTU = Array.from({ length: KALEM }, () => 1 + Math.floor(r() * 5)); // Tur tanimi: gordugu duzeyler, gurultu carpani, kalem basina hazirlik ve aday // basina dogrulama suresi (saat), aday basina savunmada birakilan kayit. export const TUR = [ { ad: "kara kutu", gorus: ["dis"], gurultu: 1.0, hazirlik: 0.5, dogrulama: 0.55, iz: 6.0 }, { ad: "gri kutu", gorus: ["dis", "kimlik"], gurultu: 0.6, hazirlik: 1.1, dogrulama: 0.40, iz: 3.5 }, { ad: "beyaz kutu", gorus: ["dis", "kimlik", "ic"], gurultu: 0.3, hazirlik: 2.0, dogrulama: 0.30, iz: 1.5 }, ]; // Bir tur, verilen kalem kumesinde olculur; kalem listesi verilmezse tamami. export function olc(t, kalemler = [...Array(KALEM).keys()]) { const kume = new Set(kalemler); const acik = ACIK.filter((a) => kume.has(a.kalem)); const gorulen = acik.filter((a) => t.gorus.includes(a.gorme)); const kanit = gorulen.filter((a) => t.gorus.includes(a.kanit)); const yanlis = kalemler.reduce((s, k) => s + Math.round(GURULTU[k] * t.gurultu), 0); const aday = gorulen.length + yanlis; const sure = kalemler.length * t.hazirlik + aday * t.dogrulama; return { aday, kanit: kanit.length, yanlis, askida: gorulen.length - kanit.length, kacan: acik.length - gorulen.length, sure, iz: Math.round(aday * t.iz) }; } if (import.meta.url === `file://${process.argv[1]}`) { const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))).join(""); const yz = gen([13, 7, 8, 9, 9, 9, 9, 11]); console.log(`model (tohum ${TOHUM}): ${KALEM} kapsam ici kalem, ${ACIK.length} gercek acik`); const d = (k) => ACIK.filter((a) => a.gorme === k).length; console.log(`gorme duzeyine gore: dis ${d("dis")}, kimlik ${d("kimlik")}, ic ${d("ic")}; ` + `${ACIK.filter((a) => a.gorme !== a.kanit).length} acikta kanit duzeyi gormeden yuksek`); console.log("\n" + yz(["tur", "aday", "kanit", "yanlis+", "askida", "kacan", "saat", "kanit/saat"])); for (const t of TUR) { const o = olc(t); console.log(yz([t.ad, o.aday, o.kanit, o.yanlis, o.askida, o.kacan, o.sure.toFixed(1), (o.kanit / o.sure).toFixed(2)])); } const [a, b, c] = TUR.map((t) => olc(t)); console.log(`\nkanit orani: kara ${(100 * a.kanit / a.aday).toFixed(1)}%, gri ` + `${(100 * b.kanit / b.aday).toFixed(1)}%, beyaz ${(100 * c.kanit / c.aday).toFixed(1)}%`); }
model (tohum 20260811): 20 kapsam ici kalem, 41 gercek acik gorme duzeyine gore: dis 16, kimlik 11, ic 14; 19 acikta kanit duzeyi gormeden yuksek tur aday kanit yanlis+ askida kacan saat kanit/saat kara kutu 78 6 62 10 25 52.9 0.11 gri kutu 63 20 36 7 14 47.2 0.42 beyaz kutu 60 31 19 10 0 58.0 0.53 kanit orani: kara 7.7%, gri 31.7%, beyaz 51.7%
Tablonun ilk sütunu bu kursun en yanıltıcı sayısıdır. En çok adayı en az kanıt üreten tür çıkarıyor. Kara kutu 78 aday bırakıyor, bunların 62’si yanlış pozitif, 10’u görülüp kanıtlanamayan kalem, geriye 6 kanıt kalıyor: yüzde 7,7. Aynı hedefte beyaz kutu 60 adaydan 31 kanıt çıkarıyor. Bir raporun kapağına yazılan “78 bulgu” ile “60 bulgu” arasındaki fark, kurumun gerçekte aldığı şeyle ters yöndedir.
Bu farkın kaynağı ikinci satırdadır: 41 açığın 19’unda kanıt düzeyi görme düzeyinden yüksektir. Bir açığı görmek ile onu kanıtlamak ayrı erişim gerektirir, ve keşif aşamasının ürettiği her belirti bu ayrımın yanlış tarafında durur. Kara kutu dışarıdan görünen 16 açığın tamamını görebilir, ama bunların yalnız 6’sının kanıtına dışarıdan ulaşabilir; kalan 10’u askıda kalır. Askıda kalan aday rapora girerse doğrulanmamış bir iddiadır; girmezse kurum onu hiç duymaz. İkisi de tek başına doğru değildir, ve bu dersin ölçtüğü şey tam olarak bu üçüncü sütunun büyüklüğüdür.
Gri kutunun yeri de bu tabloda okunuyor. 63 aday, 20 kanıt ve 14 kaçan açıkla iki uç arasında duruyor, ama asıl katkısı sayıda değildir: gri kutu, kimlik bilgisi ele geçirilmiş bir hesabın nereye ulaşabildiği sorusunun karşılığıdır. Kara kutu bu soruyu hiç soramaz, çünkü kimlik düzeyine erişemez; beyaz kutu sorabilir ama yanıtı yapılandırmadan okur, oysa soru koşum zamanına aittir. Gri kutunun 6 içeriden kanıtı tam olarak bu sınıftadır ve bir kimlik ele geçirme senaryosunun sınırını çizer.
Beyaz kutunun 10 askıda kalemi ayrı bir sınıftır. Beyaz kutu her düzeyi görür, dolayısıyla onun askıda bıraktığı 10 aday kanıtı yalnız hizmeti etkileyecek bir eylemle alınabilen açıklardır. Katılım kuralları bu eylemi yasaklar, ve yasak kalktığı an değerlendirme değil kesinti üretilir. Bu 10 kalem hiçbir türde kanıtlanamaz; raporda “kanıtlanmış bulgu” değil, “koşulları yazılı aday” olarak durmak zorundadır. Kaçan sütunu ise bunun tersini gösterir: kara kutu 25 gerçek açığı hiç görmez, gri kutu 14’ünü, beyaz kutu hiçbirini kaçırmaz.
İzin Bedeli ve Kanıtın Anlamı
// karsilastir.mjs — turlerin biraktigi iz ve kanitin disaridan erisilebilirligi. import { TUR, KALEM, ACIK, olc } from "./turler.mjs"; const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))).join(""); const yz = gen([13, 8, 10, 11, 8, 10, 11]); const tam = [...Array(KALEM).keys()]; // Kanitlanan aciklarin kaci disaridan gorulebilir duzeyde: bir saldirganin ilk // erisim olmadan ulasabilecegi kanit ile ancak iceriden anlamli olan kanit ayrilir. const dagit = (t) => { const kanit = ACIK.filter((a) => t.gorus.includes(a.gorme) && t.gorus.includes(a.kanit)); return { dis: kanit.filter((a) => a.gorme === "dis").length, ic: kanit.filter((a) => a.gorme !== "dis").length }; }; console.log(`${KALEM} kalem, ${ACIK.length} gercek acik; iz kaydi savunma tarafinda sayilan ` + `kayittir`); console.log(yz(["tur", "kanit", "iz kaydi", "iz / kanit", "distan", "iceriden", "saat/kanit"])); for (const t of TUR) { const o = olc(t), d = dagit(t); console.log(yz([t.ad, o.kanit, o.iz, (o.iz / o.kanit).toFixed(1), d.dis, d.ic, (o.sure / o.kanit).toFixed(2)])); } // Karma: ilk m kalemde beyaz kutu, kalan kalemlerde gri kutu. const [, gri, beyaz] = TUR; const karma = (m) => { const a = olc(beyaz, tam.slice(0, m)), b = olc(gri, tam.slice(m)); return { aday: a.aday + b.aday, kanit: a.kanit + b.kanit, askida: a.askida + b.askida, kacan: a.kacan + b.kacan, sure: a.sure + b.sure, iz: a.iz + b.iz }; }; const y2 = gen([17, 8, 8, 8, 8, 9, 10]); console.log("\n" + y2(["karma beyaz / gri", "aday", "kanit", "askida", "kacan", "saat", "iz kaydi"])); for (let m = 0; m <= KALEM; m += 4) { const k = karma(m); console.log(y2([`${m} / ${KALEM - m}`, k.aday, k.kanit, k.askida, k.kacan, k.sure.toFixed(1), k.iz])); } const s = karma(0), b20 = karma(KALEM); console.log(`\ngri kutudan beyaz kutuya gecmek ${(b20.sure - s.sure).toFixed(1)} saat ekliyor, ` + `kaniti ${s.kanit}'den ${b20.kanit}'e cikariyor, kacan acigi ${s.kacan}'ten 0'a indiriyor`); console.log(`ayni gecis iz kaydini ${s.iz}'den ${b20.iz}'a dusuruyor; askida kalan aday ` + `${s.askida}'den ${b20.askida}'a cikiyor, cunku beyaz kutu daha cok acik goruyor`);
20 kalem, 41 gercek acik; iz kaydi savunma tarafinda sayilan kayittir tur kanit iz kaydi iz / kanit distan iceriden saat/kanit kara kutu 6 468 78.0 6 0 8.82 gri kutu 20 221 11.1 14 6 2.36 beyaz kutu 31 90 2.9 14 17 1.87 karma beyaz / gri aday kanit askida kacan saat iz kaydi 0 / 20 63 20 7 14 47.2 221 4 / 16 64 24 7 10 49.9 199 8 / 12 62 26 7 8 51.6 169 12 / 8 63 30 7 4 54.2 145 16 / 4 61 31 8 2 55.8 114 20 / 0 60 31 10 0 58.0 90 gri kutudan beyaz kutuya gecmek 10.8 saat ekliyor, kaniti 20'den 31'e cikariyor, kacan acigi 14'ten 0'a indiriyor ayni gecis iz kaydini 221'den 90'a dusuruyor; askida kalan aday 7'den 10'a cikiyor, cunku beyaz kutu daha cok acik goruyor
Süre sütunu önceki dersin kaba planını düzeltiyor. Orada 20 kalem için 76 saatlik tek bir plan vardı ve tür ayrımı yoktu; tür ayrıldığında aynı 20 kalem 47,2 ile 58,0 saat arasında değişiyor ve üçü de 70 saatlik net pencereye sığıyor. Yani seçim bir süre kısıtı değildir. Kanıt başına süreye bakıldığında fark açılıyor: kara kutuda bir kanıt 8,82 saat, beyaz kutuda 1,87 saat tutuyor. Kara kutunun süresi doğrulamaya değil, 62 yanlış pozitifi elemeye gidiyor.
İz sütunu mavi takım tarafını yazıyor. Kara kutu savunmada 468 kayıt bırakıyor, beyaz kutu 90. Aradaki oran 5,2’dir ve nedeni yalnız aday sayısı değildir: kara kutu her adayı ağ üzerinden sınamak zorundadır, beyaz kutu adayların bir bölümünü belgede kapatır. Kanıt başına iz 78’den 2,9’a iniyor. Bir değerlendirmenin savunmayı ne kadar meşgul ettiğini ölçmenin doğru birimi budur: toplam kayıt sayısı değil, kanıt başına kayıt.
Son iki sütun ise beyaz kutunun sınırını gösteriyor. 31 kanıtın 17’si ancak içeriden anlamlıdır: yapılandırmada var olduğu gösterilmiştir, ama dışarıdan bir isteğin oraya ulaşabildiği gösterilmemiştir. Kara kutunun 6 kanıtının 6’sı ise dışarıdan erişilebilir sınıftadır. İki tür farklı sorulara yanıt verir — biri “bu açık var mı”, öteki “bu açığa dışarıdan ulaşılıyor mu” — ve bir düzeltme kuyruğunda bu ikisi aynı sıraya konamaz.
Bu ayrım tür seçimini bir tercih olmaktan çıkarıp bir soru eşleştirmesine dönüştürür. Sorulan şey “dışarıdan bakan biri ne görüyor ve nereye ulaşabiliyor” ise kara kutu doğru araçtır ve 6 kanıtı bu soruya doğrudan yanıt verir; 468 kayıt ise savunmanın bu tür bir denemeyi görüp görmediğinin ölçüsü olarak ayrıca değerlidir. Sorulan şey “envanterde kaç açık var ve hangisi düzeltme kuyruğuna girmeli” ise beyaz kutu doğru araçtır, çünkü kaçan sütununu sıfırlayan tek türdür. İkisini aynı sözleşmede aynı ölçütle değerlendirmek, iki farklı soruya verilen yanıtları aynı tabloya yazmak olur.
Karma tablo aradaki geçişi tek eksende gösteriyor. Beyaz kutuya kayan her dört kalem kaçan açığı azaltıyor ve iz kaydını düşürüyor; karşılığında süre artıyor ve askıda kalan aday sayısı yükseliyor, çünkü daha çok açık görüldükçe kanıtı yasak olan kalemlerin de daha çoğu görünür oluyor. Beyaz kutunun asıl bedeli tabloda görünmez: kurumun yapılandırmayı ve kaynağı test ekibine açması gerekir, ve bu bir süre kalemi değil bir kurumsal karardır. Tablonun ara satırları da bu yüzden işe yarar — bütün envanteri açmak yerine dört ya da sekiz kalemi açmak, kaçan açığı 14’ten 10’a ve 8’e indirirken açılan belge miktarını beşte bir düzeyinde tutar. Hangi kalemlerin açılacağı ise teknik değil, iş tarafında verilen bir karardır.
Özet
- Aynı 20 kalemde kara kutu 78 aday üretip 6 kanıt bırakıyor, beyaz kutu 60 adaydan 31 kanıt çıkarıyor; aday sayısı ile kanıt sayısı ters yönde hareket ediyor.
- Farkın kaynağı, 41 açığın 19’unda kanıt düzeyinin görme düzeyinden yüksek olmasıdır: bir açığı görmek ile kanıtlamak ayrı erişim gerektirir.
- 10 açık hiçbir türde kanıtlanamıyor, çünkü kanıtı ancak hizmeti etkileyecek bir eylemle alınabiliyor ve katılım kuralları bunu yasaklıyor; bu kalemler raporda kanıt değil, koşulları yazılı aday olarak durur.
- Üç tür de 70 saatlik pencereye sığıyor; ayrım kanıt başına süredir — 8,82 saate karşı 1,87 saat.
- Kara kutu savunmada 468, beyaz kutu 90 kayıt bırakıyor; kanıt başına iz 78’den 2,9’a iniyor.
- Beyaz kutunun 31 kanıtının 17’si ancak içeriden anlamlıdır; kara kutunun 6 kanıtının tamamı dışarıdan erişilebilir sınıftadır ve iki tür farklı sorulara yanıt verir.
Sonraki Adım
Üç türün de ortak bir kalıntısı var: yanlış pozitif. Kara kutuda 62, gri kutuda 36, beyaz kutuda 19 aday gerçek bir açığa karşılık gelmiyor ve bu sayılar bu derste tek bir çarpanla üretildi. Gerçekte hangi adayın eleneceği çarpanla değil, adayın hangi kanıta dayandığıyla belirlenir: sürüm bilgisine bakarak üretilen bir aday ile davranışı gözlenerek üretilen bir aday aynı ağırlıkta değildir. Sonraki ders aday listesini doğrulama kurallarından geçirir ve elenen yanlış pozitifi tek tek sayar: kaç aday yalnız sürüm bilgisine dayanıyor, kaçı davranışla doğrulanıyor ve doğrulamanın kendisi hedefe ne kadar risk ekliyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.