---
title: 'Katılım Kuralları'
source: 'https://academia.sh/tr/kurslar/sizma-testi/katilim-kurallari'
course: 'Güvenlik Araçları ve Sızma Testi'
language: tr
updated: '2026-08-17T18:08:41+00:00'
license: 'CC BY-SA 4.0'
---

# Katılım Kuralları

64 kalemlik kurgu bir envanterde yazılı kapsam tanımı programlı denetime çevriliyor: 20 kalem kapsamda, 11 kalem sınırda, 33 kalem dışında çıkıyor. Beş paylaşılan ön yüz üzerinden 29 kapsam dışı ve sınırdaki kaleme yanlışlıkla dokunulabiliyor; bunların 11'i katılım kurallarında adıyla yasaklanmış. Kaba pencere planlanan işi 4 saat aşarken sayaç okuma aralığı düşünce 6 saat eksik kalıyor, dört eşiğin ikisinde nöbet karşılığı olmadığı için gerçekleşen bildirim süresi sözleşmede yazandan uzun çıkıyor.

Bir önceki konu araçların ne ürettiğini ve neyi kanıtlayamadığını gösterdi: paket kümesinden
çıkarılan akış, vekil aracın değiştirdiği istek, sanal alanın gözleyebildiği davranış, itibar
servislerinin çoğunluk kararı. Hepsi aynı sessiz varsayımı taşıyordu — o araçların çalıştırıldığı
hedef üzerinde çalıştırma hakkı vardı. Bu hakkın nereden geldiği, nerede bittiği ve bittiği yeri
kimin ölçtüğü hiç yazılmadı.

**Katılım kuralları** (rules of engagement) o hakkın yazılı biçimidir: neye dokunulabileceğini,
ne zaman dokunulabileceğini ve bir şey ters gittiğinde kimin ne kadar sürede haber alacağını
belirler. Yazılı bir cümle ise bir denetim değildir. "Abone portalı kapsamdadır, şube ağı kapsam
dışıdır" cümlesi elde bir hedef listesi varken tek tek karara dönüşmek zorundadır, ve bu ders o
dönüşümü koşturur. **Kapsam dışı bir hedefe dokunmak yetkiyi geçersiz kılar: o andan sonra yapılan
işlem yazılı izne değil izinsiz erişime dönüşür, hem yasal sonuç doğurur hem de değerlendirmenin
tamamını kullanılamaz kılar.**

- **TS1.** Bölgesel ölçüm ağı envanteri 64 kalemdir; dört birime, üç ortama ve sekiz ön yüze
  dağılır. Envanter de kapsam tanımı da **kurgudur**, gerçek hedef yoktur.
- **TS2.** Kapsam tanımı üç izin ölçütü (ağ bloku, birim, ortam) ve iki dışlama ölçütünden
  oluşur; toplam altı izin, üç dışlama kalemi.
- **TS3.** Denetim üç karar üretir: **kapsamda**, **sınırda**, **dışında**. Sınırda demek,
  ölçütlerin yalnız bir bölümünün tuttuğu ya da kalemin hem izin hem dışlama kuralına girdiği
  anlamına gelir; bu kalemler ayrı ve yazılı onay olmadan dokunulamaz.
- **TS4.** **Ön yüz**, birden çok kalemi aynı noktadan yayımlayan ortak giriştir. Bir ön yüze
  gönderilen istek, o ön yüzün arkasındaki her kaleme ulaşabilir.
- **TS5.** Test penceresi beş gece, gecede sekiz saat, iki kişidir. Gecenin bir saati sayaç okuma
  aralığıdır ve o aralıkta hiçbir kaleme dokunulmaz.
- **TS6.** İletişim protokolü dört eşik tanımlar; örnek olay gecenin 02:30'unda oluşur, mesai
  09:00'da başlar. Bütün süreler kurgudur.

## Kapsam Tanımı Bir Denetim Olarak

```js
// kapsam.mjs — kapsam tanimini programli denetime ceviren model.
// MODELDIR; envanter de kapsam da kurgudur, gercek hedef yoktur.
export const TOHUM = 20260806;
const uretec = (t) => { let s = t >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };
const r = uretec(TOHUM);

// Her kalem bir birime, bir ortama, bir ic ag blokuna ve bir on yuze baglidir.
const BIRIM = ["abone-portali", "saha-uygulamasi", "sube-agi", "sayac-toplayici"];
const ORTAM = ["uretim", "hazirlik", "gelistirme"];
const HAVUZ = {                                     // hangi birim hangi on yuzu kullaniyor
  "abone-portali": ["onyuz-a1", "onyuz-a2", "onyuz-ortak-1"],
  "saha-uygulamasi": ["onyuz-s1", "onyuz-ortak-1", "onyuz-ortak-2"],
  "sube-agi": ["onyuz-b1", "onyuz-ortak-2"],
  "sayac-toplayici": ["onyuz-t1", "onyuz-t2", "onyuz-ortak-2"],
};
export const HEDEF = Array.from({ length: 64 }, (_, i) => {
  const birim = BIRIM[Math.floor(r() * 4)], havuz = HAVUZ[birim];
  return { ad: `${birim}-${String(i + 1).padStart(2, "0")}`, birim,
    ortam: ORTAM[Math.floor(r() * 3)],
    blok: `10.${20 + Math.floor(r() * 4)}.${Math.floor(r() * 6)}.0/24`,
    onyuz: havuz[Math.floor(r() * havuz.length)] };
});

// Katilim kurallarinda yazan kapsam tanimi: uc izin olcutu, iki dislama olcutu.
export const KAPSAM = {
  izinliBlok: ["10.20.", "10.21."],
  izinliBirim: ["abone-portali", "saha-uygulamasi"],
  izinliOrtam: ["uretim", "hazirlik"],
  dislananAd: ["sayac-toplayici", "sube-agi"],
  dislananOrtam: ["gelistirme"],
};

// Denetim: uc olcute ayri ayri bakilir. Hepsi tutarsa kapsamda, hicbiri tutmazsa
// disinda, bir bolumu tutarsa ya da dislama ile cakisirsa SINIRDA.
export function kararVer(h, k = KAPSAM) {
  const olcut = [k.izinliBlok.some((b) => h.blok.startsWith(b)),
    k.izinliBirim.includes(h.birim), k.izinliOrtam.includes(h.ortam)];
  const dislandi = k.dislananAd.some((a) => h.ad.startsWith(a)) ||
    k.dislananOrtam.includes(h.ortam);
  const tutan = olcut.filter(Boolean).length;
  if (dislandi) return tutan === 3 ? "sinirda" : "disinda";
  return tutan === 3 ? "kapsamda" : tutan === 0 ? "disinda" : "sinirda";
}
export const KARAR = new Map(HEDEF.map((h) => [h.ad, kararVer(h)]));

// Paylasilan on yuz: kapsam ici bir kalemle ayni on yuzu kullanan kapsam disi
// kalem varsa, o on yuze gonderilen istek ona da ulasir.
export function paylasilanRisk() {
  const onyuzler = new Map();
  for (const h of HEDEF) onyuzler.set(h.onyuz, [...(onyuzler.get(h.onyuz) ?? []), h]);
  const riskli = [];
  for (const [ad, liste] of onyuzler) {
    const d = (k) => liste.filter((h) => KARAR.get(h.ad) === k).length;
    const yasak = liste.filter((h) => KAPSAM.dislananAd.some((a) => h.ad.startsWith(a))).length;
    if (d("kapsamda") && liste.length > d("kapsamda")) {
      riskli.push({ onyuz: ad, ici: d("kapsamda"), disi: d("disinda"),
        sinirda: d("sinirda"), yasak });
    }
  }
  return riskli.sort((a, b) => b.disi - a.disi || a.onyuz.localeCompare(b.onyuz));
}

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([18, 10, 10, 10, 12]);
  const say = (d) => HEDEF.filter((h) => KARAR.get(h.ad) === d).length;
  console.log(`model (tohum ${TOHUM}): ${HEDEF.length} hedef, ${BIRIM.length} birim, ` +
    `${new Set(HEDEF.map((h) => h.onyuz)).size} on yuz`);
  console.log("\n" + yz(["birim", "kapsamda", "sinirda", "disinda", "toplam"]));
  for (const b of BIRIM) {
    const l = HEDEF.filter((h) => h.birim === b);
    const c = (d) => l.filter((h) => KARAR.get(h.ad) === d).length;
    console.log(yz([b, c("kapsamda"), c("sinirda"), c("disinda"), l.length]));
  }
  console.log(yz(["TOPLAM", say("kapsamda"), say("sinirda"), say("disinda"), HEDEF.length]));

  const riskli = paylasilanRisk(), yz2 = gen([15, 12, 12, 11, 13]);
  console.log("\n" + yz2(["on yuz", "kapsam ici", "kapsam disi", "sinirda", "adiyla yasak"]));
  for (const x of riskli) console.log(yz2([x.onyuz, x.ici, x.disi, x.sinirda, x.yasak]));
  const t = (alan) => riskli.reduce((a, x) => a + x[alan], 0);
  console.log(`\npaylasilan on yuz ${riskli.length}; bu on yuzlere gonderilen istek ` +
    `${t("disi") + t("sinirda")} kapsam disi ve sinirdaki kaleme de ulasabilir, ` +
    `${t("yasak")}'i katilim kurallarinda adiyla yasaklanmis`);
}
```

```
model (tohum 20260806): 64 hedef, 4 birim, 8 on yuz

birim               kapsamda   sinirda   disinda      toplam
abone-portali             11         5         1          17
saha-uygulamasi            9         6         6          21
sube-agi                   0         0         9           9
sayac-toplayici            0         0        17          17
TOPLAM                    20        11        33          64

on yuz           kapsam ici kapsam disi    sinirda adiyla yasak
onyuz-ortak-2             1          14          2           11
onyuz-ortak-1             7           3          5            0
onyuz-a1                  3           1          0            0
onyuz-a2                  5           0          3            0
onyuz-s1                  4           0          1            0

paylasilan on yuz 5; bu on yuzlere gonderilen istek 29 kapsam disi ve sinirdaki kaleme de ulasabilir, 11'i katilim kurallarinda adiyla yasaklanmis
```

Üstteki tablo, iki cümlelik bir kapsam tanımının 64 kalem üzerinde neye karşılık geldiğini yazıyor.
Yazılı metin iki birimi içeri, iki birimi dışarı alıyor; sayı ise üç sütuna dağılıyor. **20 kalem
kapsamda, 33 kalem dışında, 11 kalem sınırda.** Sınırdaki 11 kalemin tamamı izinli birimlerden
geliyor: birim ölçütü tutuyor ama ağ bloku ya da ortam ölçütü tutmuyor. Yazılı tanım bu kalemler
için bir karar üretmez, çünkü tanımı yazan kişi bir birimin üç ayrı blokta ve üç ayrı ortamda
kalemi olabileceğini hesaba katmamıştır. Ölçüm bu boşluğu ada indirger: kapsamın belirsiz olduğu
kalem sayısı, kapsamda olduğu kalemin yarısından biraz azdır.

Üçüncü kararın ayrı bir sütun olması bir ayrıntı değil, denetimin taşıdığı asıl bilgidir. Sınırdaki
kalem "kapsamda" sayılırsa yetki sınırı aşılır; "dışında" sayılırsa değerlendirme kendi kapsamını
gereğinden dar tutar ve gerçekten test edilmesi gereken kalemler hiç görülmez. İki yanlıştan
birincisi yasal sonuç doğurur, ikincisi kurumun parasını boşa harcar. Doğru işlem üçüncü bir
kararla kalemi işaretlemek ve kararı yazan tarafa geri göndermektir. Bir kapsam denetiminin
değeri de burada ölçülür: kaç kalemi otomatik onayladığı değil, **kaç kalemi insana geri
gönderdiği**.

Alttaki tablo daha sert bir sonuç veriyor. Sekiz ön yüzün beşi kapsam içi ve kapsam dışı kalemi
aynı noktada topluyor. En ağırı `onyuz-ortak-2`: arkasında **tek** bir kapsam içi kalem var, buna
karşılık 14 kapsam dışı ve 2 sınırdaki kalem duruyor, ve 14'ün 11'i katılım kurallarında birim
adıyla yasaklanmış kalemlerdir. O tek kalem için o ön yüze gönderilen istek, adıyla yasaklanmış 11
kaleme de ulaşır. Toplamda beş ön yüz üzerinden **29 kalem** yanlışlıkla dokunulabilir durumdadır.

Bu, kapsam tanımının bir kalem listesi olarak yazılmasının neden yetmediğini gösterir. Kapsam
kalemle değil, **erişim noktasıyla** kesişir; bir noktanın arkasında kaç kalem olduğu envanterin
değil, altyapının kararıdır. Buradaki doğru işlem `onyuz-ortak-2` arkasındaki tek kalemi
değerlendirme dışına çıkarmaktır: bir kalemin getirisi, 11 yasak kaleme dokunma riskinin yanında
ölçülemeyecek kadar küçüktür. Sınırdaki 11 kalem ise ayrı bir yazılı onaya bağlanır ve onay
gelmeden hiçbir adım koşturulmaz.

## Zaman Penceresi ve İletişim Protokolü

```js
// pencere.mjs — zaman penceresi ve iletisim protokolu kalem olarak sayilir.
import { HEDEF, KARAR } from "./kapsam.mjs";

const kapsamda = HEDEF.filter((h) => KARAR.get(h.ad) === "kapsamda").length;
const ADIM = [["kesif", 0.4], ["tarama", 1.1], ["dogrulama", 2.3]];   // saat/kalem, kurgu
const GECE = 5, SAAT = 8, KISI = 2, YASAK = 1;      // gecenin bir saati sayac okuma araligi

const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j])
  : String(v).padEnd(B[0]))).join("");
const y1 = gen([12, 10, 12, 14]);
const planlanan = ADIM.reduce((a, [, s]) => a + s * kapsamda, 0);
const kaba = GECE * SAAT * KISI, net = GECE * (SAAT - YASAK) * KISI;

console.log(`${kapsamda} kapsam ici kalem, ${ADIM.length} adim sinifi`);
console.log(y1(["adim", "kalem", "sure/kalem", "toplam saat"]));
for (const [ad, s] of ADIM) {
  console.log(y1([ad, kapsamda, s.toFixed(1), (s * kapsamda).toFixed(1)]));
}
console.log(y1(["PLANLANAN", "", "", planlanan.toFixed(1)]));
console.log(`pencere: ${GECE} gece x ${SAAT} saat x ${KISI} kisi = ${kaba} kisi-saat; ` +
  `sayac okuma araligi (${YASAK} saat/gece) dusunce ${net} kisi-saat`);
console.log(`kaba pencere planlanani ${(kaba - planlanan).toFixed(1)} saat asiyor, ` +
  `net pencere ${(planlanan - net).toFixed(1)} saat eksik kaliyor`);

// Iletisim protokolu: her esik icin sozlesme suresi, nobet karsiligi ve taraflar.
const ESIK = [
  ["kritik bulgu", 1, true, ["test ekibi", "kurum guvenlik"], false],
  ["hizmet kesintisi", 0.25, true, ["test ekibi", "kurum guvenlik", "sistem sahibi"], true],
  ["kapsam disina tasma", 4, false, ["test ekibi", "kurum guvenlik", "sistem sahibi",
    "hukuk"], true],
  ["ucuncu taraf verisi", 24, false, ["test ekibi", "kurum guvenlik", "hukuk",
    "veri sahibi", "duzenleyici"], true],
];
const OLAY = 2.5, MESAI = 9;                        // olay saati ve mesai baslangici
const y2 = gen([22, 10, 8, 12, 9, 9]);
console.log("\n" + y2(["esik", "sozlesme", "nobet", "gerceklesen", "taraf", "durdur"]));
let sozToplam = 0, gercekToplam = 0;
for (const [ad, soz, nobet, taraf, durdur] of ESIK) {
  const gercek = nobet ? soz : Math.max(soz, MESAI - OLAY);
  sozToplam += soz; gercekToplam += gercek;
  console.log(y2([ad, `${soz} sa`, nobet ? "var" : "yok", `${gercek.toFixed(2)} sa`,
    taraf.length, durdur ? "evet" : "hayir"]));
}
const taraflar = new Set(ESIK.flatMap(([, , , t]) => t));
console.log(`\n${ESIK.length} esik, ${taraflar.size} ayri taraf, ` +
  `${ESIK.filter((e) => e[4]).length} esikte test durdurulur`);
console.log(`gecenin ${OLAY.toFixed(2)}'unda olusan olayda sozlesme toplam ` +
  `${sozToplam.toFixed(2)} saat vaat ediyor, gerceklesen ${gercekToplam.toFixed(2)} saat`);
```

```
20 kapsam ici kalem, 3 adim sinifi
adim             kalem  sure/kalem   toplam saat
kesif               20         0.4           8.0
tarama              20         1.1          22.0
dogrulama           20         2.3          46.0
PLANLANAN                                   76.0
pencere: 5 gece x 8 saat x 2 kisi = 80 kisi-saat; sayac okuma araligi (1 saat/gece) dusunce 70 kisi-saat
kaba pencere planlanani 4.0 saat asiyor, net pencere 6.0 saat eksik kaliyor

esik                    sozlesme   nobet gerceklesen    taraf   durdur
kritik bulgu                1 sa     var     1.00 sa        2    hayir
hizmet kesintisi         0.25 sa     var     0.25 sa        3     evet
kapsam disina tasma         4 sa     yok     6.50 sa        4     evet
ucuncu taraf verisi        24 sa     yok    24.00 sa        5     evet

4 esik, 6 ayri taraf, 3 esikte test durdurulur
gecenin 2.50'unda olusan olayda sozlesme toplam 29.25 saat vaat ediyor, gerceklesen 31.75 saat
```

Zaman penceresi kâğıt üzerinde yeterlidir ve gerçekte değildir. Beş gece, iki kişi ve gecede sekiz
saat 80 kişi-saat verir; planlanan iş 76 saattir, yani pencere işi dört saat aşar. Sayaç okuma
aralığı düşüldüğünde kullanılabilir süre 70 saate iner ve aynı plan **altı saat eksik** kalır.
Aradaki fark bir yönetim kararı değil, aritmetiktir: dokunulmaz aralık pencerenin sekizde biridir
ve planın payı da o oranda düşer. Süreyi kurtarmanın tek yolu adım sayısını azaltmaktır, ve
doğrulama 46 saatle en pahalı sınıf olduğu için kesinti oradan gelir — bu da bir sonraki dersin
sorusudur.

İkinci tablo iletişimi ölçüyor. Dört eşiğin ikisinde nöbet karşılığı vardır ve o ikisinde
gerçekleşen bildirim süresi sözleşmede yazana eşittir. Kalan ikisinde karşı taraf yalnız mesai
saatlerinde ulaşılabilirdir; gecenin 02:30'unda oluşan bir olayda kapsam dışına taşma şüphesi için
sözleşme dört saat yazarken gerçekleşen süre 6,5 saattir. Bu, protokolün en kritik eşiğinin en
yavaş eşik olması demektir: testi durduran üç eşikten ikisi mesaiye bağlıdır. Dört eşik toplamda
altı ayrı tarafı ilgilendirir ve taraf sayısı arttıkça bildirimin tamamlanma süresi de uzar, çünkü
protokol tarafların hepsine ulaşmayı şart koşar.

Durdurma sütunu da ayrıca okunmalıdır. Üç eşikte test durur, ve durma anı bir karar değil bir
yükümlülüktür: kapsam dışına taşma şüphesi doğduğunda o şüphe giderilene kadar hiçbir yeni adım
koşturulmaz. Bu, pencerede kaybedilen saati doğrudan artırır — gecenin 02:30'unda duran bir test
09:00'a kadar bekliyorsa o gecenin kalan 3,5 saati iki kişi için yedi kişi-saat eder ve zaten altı
saat eksik olan plana eklenir. Katılım kurallarının zaman ve iletişim bölümleri bu yüzden ayrı
belgeler değildir; biri ötekinin girdisidir.

Sonuç tek cümleye iner: katılım kuralları üç ayrı sayı üretir — dokunulabilir kalem sayısı,
kullanılabilir saat sayısı ve bildirimin gerçekleşme süresi. Üçü de yazılı metinde değil, envanter
ve takvim üzerinde koşturulduğunda ortaya çıkar.

## Özet

- 64 kalemlik envanterde iki cümlelik kapsam tanımı 20 kalemi kapsamda, 33'ünü dışında bırakıyor
  ve **11 kalemi sınırda** — kararsız — bırakıyor; sınırdaki kalemlerin tamamı izinli birimlerden,
  izinsiz blok ya da ortamdan geliyor.
- Sekiz ön yüzün beşi kapsam içi ve kapsam dışı kalemi aynı noktada topluyor; bu ön yüzler
  üzerinden 29 kaleme yanlışlıkla dokunulabiliyor ve 11'i katılım kurallarında adıyla yasaklanmış.
- `onyuz-ortak-2` arkasında tek bir kapsam içi kalem için 11 yasak kalem riski taşıyor; doğru
  karar o tek kalemi değerlendirme dışına çıkarmaktır.
- Pencere kaba hesapta planlanan işi 4 saat aşarken sayaç okuma aralığı düşünce 6 saat eksik
  kalıyor; kesinti 46 saatlik doğrulama sınıfından gelmek zorundadır.
- Dört iletişim eşiğinin ikisinde nöbet karşılığı yok; gecenin 02:30'unda kapsam dışına taşma
  şüphesi sözleşmede 4 saat, gerçekte 6,5 saat sürüyor ve altı ayrı tarafı ilgilendiriyor.

## Sonraki Adım

Kapsam sayıya çevrildi, pencere hesaplandı ve bildirim süreleri yazıldı. Bu üç sayı neyin
yapılabileceğini belirler, ama **nasıl** yapılacağını belirlemez. Aynı 20 kalem üzerinde
değerlendirme hiçbir ön bilgi verilmeden de yürütülebilir, kimlik bilgisi ve mimari belgesi
verilerek de. İki yol aynı süreyi harcamaz ve aynı sayıda aday üretmez. Sonraki ders kara, gri ve
beyaz kutu değerlendirmelerini aday üretimi cinsinden karşılaştırır: aynı hedefte her tür kaç aday
çıkarıyor, kaçı kanıta dönüşüyor ve aradaki süre farkı neye mal oluyor.
