İçeriğe geç
academia.sh

Ders 18 / 18

Sorumlu Açıklama

Bildirimden yayına giden süre altı aşamada ölçülüyor: tek tarafı ilgilendiren bulgu ortalama 12,7 günde, dört tarafı ilgilendiren 96,0 günde kapanıyor ve en uzun aşama düzeltmedir. Üç yayın politikası karşılaştırıldığında sabit 90 günlük pencere 13 bulguyu düzeltilmeden yayımlıyor, düzeltmeye bağlı pencere hiçbirini yayımlamıyor ama en geç yayını 226. güne itiyor, uzatmalı pencere 3'te kalıyor. Ders kursu kapatır ve on sekiz dersin aday, kanıt ve iz sayılarını tek tabloda toplar.

İçindekiler

Bir önceki ders raporu yeniden üretilebilirlik cinsinden ölçtü ve tek bir varsayıma dayandı: raporun gideceği yer bellidir, orada bir düzeltme ekibi vardır ve o ekip bulguyu bekliyordur. Sözleşmeli bir değerlendirmede bu varsayım tutar. Bulgu dışarıdan geldiğinde — bağımsız bir araştırmadan, bir üçüncü taraf bileşeninde görülen bir kalemden — düşer.

Sorumlu açıklama (responsible disclosure), o durumda kime, hangi kanaldan, ne kadar süre içinde bildirileceğini ve bulgunun ne zaman yayımlanabileceğini belirleyen süreçtir. Bu ders onu iki sayı cinsinden ölçer: kaç gün ve kaç taraf. Ölçüm bir modeldir ve bütün süreler kurgudur; gerçek bir kurum, gerçek bir bileşen ya da gerçek bir açık kimliği yazılmaz.

  • TS31. Bulgu kümesi önceki dersin 61 kaydıdır. Her bulgu dört bildirim sınıfından birine düşer ve sınıf, sürece giren taraf sayısını belirler.
  • TS32. Süreç altı aşamadır: bildirim kanalının bulunması, alındı onayı, teknik doğrulama, düzeltme, dağıtım ve doğrulama turu. Süreler gün cinsindendir.
  • TS33. Düzeltme süresi sınıf tabanından 0,6 ile 1,6 kat arasında sapar; bulguların bir bölümünde düzeltme takılır ve süre dört katına çıkar.
  • TS34. Hazır günü, düzeltmenin dağıtılıp doğrulandığı gündür. Düzeltmenin yazılmış olması ile uygulanmış olması ayrı iki tarihtir.
  • TS35. Üç yayın politikası karşılaştırılır: bildirimden 90 gün sonra sabit yayın; düzeltme hazır olduktan 14 gün sonra yayın; 90 gün ama düzeltme sürüyorsa bir kez 30 gün uzatma.
  • TS36. Bir bulgu, yayın gününde hazır değilse düzeltilmeden yayımlanmış sayılır ve aradaki gün sayısı yayın sonrası açık kalan süredir.

Bildirimden Yayına

// aciklama.mjs — sorumlu aciklama sureci: bildirimden yayina kac gun, kac taraf.
// MODELDIR; bulgu kumesi, sureler ve taraflar kurgudur.
export const TOHUM = 20260714, N = 61;
const uretec = (t) => { let s = t >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };
const r = uretec(TOHUM);

// Asamalar: bildirim kanalinin bulunmasindan yayina kadar. Sureler gun cinsinden
// ve sinifa gore degisir; her sinif ayri sayida tarafi ilgilendirir.
export const ASAMA = ["kanal bulma", "alindi onayi", "teknik dogrulama", "duzeltme",
  "dagitim", "dogrulama turu"];
const KISA = ["kanal", "onay", "inceleme", "duzeltme", "dagitim", "tur"];
export const SINIF = [
  { ad: "kurum yapilandirmasi", pay: 0.34, taraf: ["kurum"], gun: [1, 1, 2, 3, 2, 2] },
  { ad: "kurum yazilimi", pay: 0.28, taraf: ["kurum", "gelistirme ekibi"],
    gun: [1, 2, 4, 14, 7, 3] },
  { ad: "ucuncu taraf bilesen", pay: 0.23,
    taraf: ["kurum", "gelistirme ekibi", "bilesen saglayicisi"], gun: [5, 7, 10, 45, 21, 5] },
  { ad: "paylasilan altyapi", pay: 0.15,
    taraf: ["kurum", "gelistirme ekibi", "altyapi isleticisi", "duzenleyici"],
    gun: [3, 5, 8, 30, 30, 7] },
];
const sinifSec = (u) => { let t = 0;
  for (const s of SINIF) { t += s.pay; if (u < t) return s; } return SINIF.at(-1); };

// Her bulgu bir sinifa duser; duzeltme suresi sinif tabanindan sapar, bir bolumunde takilir.
export const BULGU = Array.from({ length: N }, (_, i) => {
  const s = sinifSec(r()), carpan = 0.6 + r(), takilan = r() < 0.12;
  const gun = s.gun.map((g, j) => (j === 3 ? Math.round(g * carpan * (takilan ? 4 : 1)) : g));
  return { no: i + 1, sinif: s.ad, taraf: s.taraf, gun, takilan,
    hazir: gun.reduce((a, g) => a + g, 0) };
});

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([22, 7, 8, 7, 10, 10, 9, 6, 10, 7]);
  console.log(`model (tohum ${TOHUM}): ${N} bulgu, ${SINIF.length} bildirim sinifi`);
  console.log("\n" + yz(["bulgu sinifi", "bulgu", ...KISA, "ort gun", "taraf"]));
  for (const s of SINIF) {
    const l = BULGU.filter((b) => b.sinif === s.ad);
    const ort = l.reduce((a, b) => a + b.hazir, 0) / l.length;
    console.log(yz([s.ad, l.length, ...s.gun, ort.toFixed(1), s.taraf.length]));
  }
  const taraflar = new Set(SINIF.flatMap((s) => s.taraf));
  const enUzun = ASAMA.map((a, j) => [a, SINIF.reduce((x, s) => x + s.gun[j], 0)])
    .sort((a, b) => b[1] - a[1])[0];
  console.log(`\ndort sinif toplam ${taraflar.size} ayri tarafi ilgilendiriyor; ` +
    `en uzun asama "${enUzun[0]}" (dort sinifta toplam ${enUzun[1]} gun)`);
  const dagitim = SINIF.reduce((a, s) => a + s.gun[4], 0);
  console.log(`duzeltme yazildiktan sonra dagitim tek basina ${dagitim} gun tutuyor: ` +
    `duzeltmenin var olmasi ile uygulanmis olmasi ayri iki tarihtir`);
}
model (tohum 20260714): 61 bulgu, 4 bildirim sinifi

bulgu sinifi            bulgu   kanal   onay  inceleme  duzeltme  dagitim   tur   ort gun  taraf
kurum yapilandirmasi       26       1      1         2         3        2     2      12.7      1
kurum yazilimi             15       1      2         4        14        7     3      40.3      2
ucuncu taraf bilesen       11       5      7        10        45       21     5     113.2      3
paylasilan altyapi          9       3      5         8        30       30     7      96.0      4

dort sinif toplam 5 ayri tarafi ilgilendiriyor; en uzun asama "duzeltme" (dort sinifta toplam 92 gun)
duzeltme yazildiktan sonra dagitim tek basina 60 gun tutuyor: duzeltmenin var olmasi ile uygulanmis olmasi ayri iki tarihtir

Son iki sütun bir arada okunduğunda ilişki nettir: taraf sayısı arttıkça ortalama süre üç ile sekiz kat büyüyor. Tek tarafı ilgilendiren bir yapılandırma bulgusu 12,7 günde, üç tarafı ilgilendiren bir bileşen bulgusu 113,2 günde kapanıyor. Kaynağı yalnız düzeltme değildir: kanal bulma 1 günden 5 güne, alındı onayı 1 günden 7 güne çıkıyor, çünkü her yeni taraf kendi bildirim kanalını, onayını ve teknik incelemesini ekliyor.

En uzun aşama düzeltmedir ve dört sınıfta 92 gün tutar. Ama tek başına düzeltmeye bakmak yanıltıcıdır: dağıtım tek başına 60 gün tutuyor. Bir düzeltmenin yazılmış olması ile uygulanmış olması ayrı iki tarihtir ve arada açık hâlâ açıktır. Paylaşılan altyapı sınıfında dağıtım düzeltmeyle eşit süre tutuyor, çünkü değişiklik tek bir yerde değil, işletilen bütün kalemlerde uygulanmak zorundadır.

Kanal bulma aşaması küçüktür ama bir şey söyler: bildirimi yapacak kişi önce kime bildireceğini aramak zorundadır. Yayımlanmış bir bildirim adresi olmayan kurum, kendi düzeltme süresine baştan gün ekler.

Yayın Penceresi ve Taraf Sayısı

// yayin.mjs — yayin politikasi: sabit pencere, duzeltmeye bagli pencere, uzatmali pencere.
import { BULGU, SINIF } from "./aciklama.mjs";

const N = BULGU.length, PENCERE = 90, UZATMA = 30, BEKLEME = 14;
// Her politika bir bulgu icin yayin gunu dondurur.
const POLITIKA = [
  ["sabit pencere", () => PENCERE],
  ["duzeltmeye bagli", (b) => b.hazir + BEKLEME],
  ["uzatmali pencere", (b) => (b.hazir <= PENCERE ? PENCERE : PENCERE + UZATMA)],
];
const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j])
  : String(v).padEnd(B[0]))).join("");
const yz = gen([20, 11, 11, 13, 16, 20]);
console.log(`${N} bulgu; pencere ${PENCERE} gun, uzatma ${UZATMA} gun, ` +
  `duzeltme sonrasi bekleme ${BEKLEME} gun (kurgu)`);
console.log(yz(["politika", "ort yayin", "en gec", "duzeltilmis", "duzeltilmeden",
  "yayin sonrasi acik"]));
for (const [ad, f] of POLITIKA) {
  const gun = BULGU.map(f), duzeltilmis = BULGU.filter((b) => b.hazir <= f(b)).length;
  console.log(yz([ad, (gun.reduce((a, g) => a + g, 0) / N).toFixed(1), Math.max(...gun),
    duzeltilmis, N - duzeltilmis,
    (BULGU.reduce((a, b) => a + Math.max(0, b.hazir - f(b)), 0) / N).toFixed(1)]));
}

// Taraf sayisi ile pencereyi asma arasindaki iliski.
const y2 = gen([22, 8, 10, 14, 16, 14]);
console.log("\n" + y2(["bulgu sinifi", "taraf", "bulgu", "90 gunu asan", "120 gunu asan",
  "takilan"]));
for (const s of SINIF) {
  const l = BULGU.filter((b) => b.sinif === s.ad);
  console.log(y2([s.ad, s.taraf.length, l.length, l.filter((b) => b.hazir > PENCERE).length,
    l.filter((b) => b.hazir > PENCERE + UZATMA).length, l.filter((b) => b.takilan).length]));
}
const asan = BULGU.filter((b) => b.hazir > PENCERE);
const cokTaraf = BULGU.filter((b) => b.taraf.length >= 3);
console.log(`\n${N} bulgunun ${asan.length}'i ${PENCERE} gunluk pencereyi asiyor; ` +
  `bunlarin ${asan.filter((b) => b.taraf.length >= 3).length}'i uc ya da daha cok tarafi ` +
  `ilgilendiren siniflardan geliyor`);
console.log(`uc ve daha cok tarafli ${cokTaraf.length} bulgunun ` +
  `${(100 * cokTaraf.filter((b) => b.hazir > PENCERE).length / cokTaraf.length).toFixed(1)}%'i ` +
  `pencereyi asiyor; tek tarafli ${BULGU.filter((b) => b.taraf.length === 1).length} bulgunun ` +
  `${BULGU.filter((b) => b.taraf.length === 1 && b.hazir > PENCERE).length}'i asiyor`);
const takilan = BULGU.filter((b) => b.takilan);
console.log(`duzeltmesi takilan ${takilan.length} bulgu, duzeltmeye bagli politikada ortalama ` +
  `${(takilan.reduce((a, b) => a + b.hazir + BEKLEME, 0) / takilan.length).toFixed(1)} gun ` +
  `yayimlanmadan bekliyor; sabit pencerede ${PENCERE}. gun yayimlanir`);
61 bulgu; pencere 90 gun, uzatma 30 gun, duzeltme sonrasi bekleme 14 gun (kurgu)
politika              ort yayin     en gec  duzeltilmis   duzeltilmeden  yayin sonrasi acik
sabit pencere              90.0         90           48              13                 5.9
duzeltmeye bagli           63.9        226           61               0                 0.0
uzatmali pencere           96.4        120           58               3                 3.1

bulgu sinifi             taraf     bulgu  90 gunu asan   120 gunu asan       takilan
kurum yapilandirmasi         1        26             0               0             3
kurum yazilimi               2        15             0               0             3
ucuncu taraf bilesen         3        11             9               2             2
paylasilan altyapi           4         9             4               1             1

61 bulgunun 13'i 90 gunluk pencereyi asiyor; bunlarin 13'i uc ya da daha cok tarafi ilgilendiren siniflardan geliyor
uc ve daha cok tarafli 20 bulgunun 65.0%'i pencereyi asiyor; tek tarafli 26 bulgunun 0'i asiyor
duzeltmesi takilan 9 bulgu, duzeltmeye bagli politikada ortalama 106.9 gun yayimlanmadan bekliyor; sabit pencerede 90. gun yayimlanir

Üç politika üç ayrı şeyi koruyor ve hiçbiri ötekini kapsamıyor. Sabit pencere kesin bir tarih verir ve kurumu süreye bağlar, ama 13 bulguyu düzeltilmeden yayımlar ve bunlar ortalama 5,9 gün boyunca hem açık hem herkese açıktır. Düzeltmeye bağlı pencere hiçbir bulguyu düzeltilmeden yayımlamaz; ortalama yayın günü 63,9 ile en erkendir, çünkü bulguların çoğu hızlı kapanır. Bedeli son sütunda değil “en geç” sütunundadır: 226. gün. Düzeltme takıldığında yayın süresiz ertelenebilir ve kararı bildirimi alan taraf verir.

Uzatmalı pencere ikisinin arasındadır: düzeltilmeden yayımlananı 13’ten 3’e, yayın sonrası açık süreyi 5,9 günden 3,1 güne indirirken en geç yayını 120 günde tutar. Kazandığı kesin bir üst sınırdır; eklediği, uzatmanın ne zaman verileceği kararıdır.

İkinci tablo pencereyi kimin aştığını gösteriyor ve sonuç tek bir eksende toplanıyor: 90 günü aşan 13 bulgunun 13’ü de üç ya da daha çok tarafı ilgilendiren sınıflardandır. Tek tarafı ilgilendiren 26 bulgunun hiçbiri pencereyi aşmıyor; üç ve daha çok taraflı 20 bulgunun yüzde 65,0’i aşıyor. Süreyi belirleyen şey açığın teknik ağırlığı değil, kaç kurumun aynı takvimde buluşması gerektiğidir. Düzeltmesi takılan 9 bulgu bu tabloya dağılmış durumdadır ve düzeltmeye bağlı politikada ortalama 106,9 gün yayımlanmadan bekler.

Buradan pratik bir kural çıkıyor: pencere tek bir sayı olarak yazılamaz. Taraf sayısı bildirimin ilk gününde bilinir ve pencere uzunluğu o sayıya bağlanabilir. Tek taraflı bir bulgu için 90 gün fazlasıyla yeterlidir; dört taraflı bir bulgu için aynı 90 gün, koordinasyon tamamlanmadan yayın demektir.

Özet

  • Bildirimden hazır olma gününe kadar geçen süre taraf sayısına bağlıdır: tek taraflı bulgu ortalama 12,7 gün, iki taraflı 40,3 gün, üç taraflı 113,2 gün, dört taraflı 96,0 gün tutuyor.
  • Artış yalnız düzeltmeden gelmiyor; kanal bulma 1 günden 5 güne, alındı onayı 1 günden 7 güne çıkıyor, çünkü her taraf kendi kanalını, onayını ve incelemesini ekliyor.
  • Dağıtım dört sınıfta toplam 60 gün tutuyor: düzeltmenin yazılmış olması ile uygulanmış olması ayrı iki tarihtir ve arada açık hâlâ açıktır.
  • Sabit 90 günlük pencere 13 bulguyu düzeltilmeden yayımlıyor ve ortalama 5,9 gün açık bırakıyor; düzeltmeye bağlı pencere hiçbirini yayımlamıyor ama en geç yayını 226. güne itiyor.
  • Uzatmalı pencere düzeltilmeden yayımlananı 3’e, açık kalan süreyi 3,1 güne indirirken üst sınırı 120 günde tutuyor.
  • 90 günü aşan 13 bulgunun tamamı üç ya da daha çok tarafı ilgilendiren sınıflardan geliyor; tek taraflı 26 bulgunun hiçbiri aşmıyor. Pencere uzunluğu teknik ağırlığa değil taraf sayısına bağlanmalıdır.

Kurs Kapanışı

Ders Aday Kanıta dönen Savunmada bıraktığı iz
Açık Kaynak İstihbaratı 29 kalem, 20 aday 9 kanıt, 6 yanlış pozitif 12 erişim kaydı, 0 uyarı
Alan Adı ve Kayıt Sorgulama 20 aday, 4 ölçüt 8 kanıt, 0 yanlış pozitif 26 kayıt, 0 uyarı
Alt Alan ve Varlık Keşfi 24 bölge kaydı 21 bulundu, 7 sahipsiz ad başına 8,57 kayıt, 5 uyarı
Bağlantı Noktası Tarama 96 nokta, 21 belirsiz 18 kanıt, 3 yanlış pozitif 72–90 kayıt, 2 uyarı
Servis ve Sürüm Belirleme 21 servis, 4 düzey 16 kesin, 0 yanlış atama 168 kayıt, 6 uyarı
Paket Yakalama ve Çözümleme 85 iddia adayı 50 kanıt, 28 çıkarım 0 kayıt, 1 yapılandırma onayı
Protokol Çözümleyicileri 91 aday, 30 alan 43 kanıt, 48 çıkarım 0 kayıt, akış başına 1 uyarı
İstek Manipülasyonu 18 aday, 40 istek 8 kanıt, 6 elenen 35 kayıt, 16 uyarı
Sanal Alan Analizi 14 kalem, 27 davranış 12 karara bağlanan, 1 yanlış 0 kayıt, 5 dış bağlantı
Dosya ve Bağlantı İtibar Servisleri 24 kalem, 8 gönderilebilir %86 kesinlik, %8 anma 0 kayıt, 14 servis sorgusu
İstismar Çerçeveleri 16 aday, 9 gerçek 3 kanıt, 3 yokluk kanıtı 31 kayıt, 17 uyarı
Test Dağıtımları ve Laboratuvarlar 18 beceri kalemi 13 kapsanan, 5 açık 0 kayıt, 0 gerçek risk
Katılım Kuralları 64 hedef, 11 sınırda 20 kapsamda onaylı 0 kayıt, 6 taraf, 3 durdurma
Test Türleri 78 / 63 / 60 aday 6 / 20 / 31 kanıt 468 / 221 / 90 kayıt
Açık Doğrulama 240 ham aday 61 kanıt, 9 askıda 461 kayıt, zincirle 313
Etki Değerlendirmesi 61 bulgu, 2 bağlam ilk onda 0 ortak sıra 0 kayıt, 40 adam-gün kuyruk
Raporlama 61 kayıt, 8 alan 8 yeniden üretilir, 3 kapanır 0 kayıt, 9,4 saat yazım
Sorumlu Açıklama 61 bulgu, 4 sınıf 48 düzeltilmiş yayın 0 kayıt, 5 taraf, 13 aşan

Tablonun ikinci ve üçüncü sütunu hiçbir satırda birbirine eşit değil, ve bu kursun kuralı buradan çıkıyor: sızma testinin çıktısı bulgu sayısı değil, kanıtlanmış ve yeniden üretilebilir bulgudur; kanıtlanamayan bir aday rapora girdiğinde düzeltme bütçesini boşa harcar. Dördüncü sütunda “0 kayıt” yazan dokuz satır var ve en çok kanıt üreten iki ders bunların içindedir: en çok iz bırakan adım en çok kanıt üreten adım değildir.

On sekiz derste aday–kanıt farkı hep aynı yönde çalıştı. Keşif adayı bol, kanıtı seyrek üretti; çözümleme araçları kanıt ile çıkarımı ayırdı; doğrulama listeyi dörtte bire indirip kendi hatasını da yazdı; süreç dersleri kanıtın tek başına yetmediğini gösterdi.

Bir sütun bütün bu ölçümde tek yönlü kaldı. Her adımın savunmada kaç kayıt ve kaç uyarı bıraktığı sayıldı: 12 erişim kaydından 468 kayda, sıfır uyarıdan 17 uyarıya. Ama o kayıtları kimin, ne kadar sürede ve hangi eşikle okuduğu hiç sorulmadı. Bir uyarı gerçekten birine ulaşıyor mu, ne kadar sürede bakılıyor, hangi eşiğin altındaki kayıt hiç görülmüyor ve gerçek bir olayda kimin ne yapacağı yazılı mı? M24/K08 Güvenlik Operasyonları ve Olay Müdahalesi kursu tam olarak bu soruyla başlar.

İ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