---
title: 'Uygulama İhlali Müdahalesi'
source: 'https://academia.sh/tr/kurslar/uygulama-tespit-ve-uyumluluk/uygulama-ihlali-mudahalesi'
course: 'Tespit, Müdahale ve Uyumluluk'
language: tr
updated: '2026-08-17T18:06:41+00:00'
license: 'CC BY-SA 4.0'
---

# Uygulama İhlali Müdahalesi

Bir yetkisiz erişim ihlalinde on iki müdahale adımı dört kayıt şemasıyla koşturuluyor. Taban şemada yedi adım kayıtsız kalıyor, toplam 630 dakika sürüyor ve iki adım hiç tamamlanamıyor; en geniş şemada aynı müdahale 151 dakika, 4,17 kat kısa. Kayıt yokluğu adımları 4 ile 8,3 kat arasında uzatıyor. Kapsama kararı her şemada 10. dakikada veriliyor — fark kapsamada değil kapsam çıkarmada: etkilenen abone kümesi çıkarılamadığında bildirim 380 aboneden 41 200 abonelik üst sınıra genişliyor.

Önceki dersin sonunda elde doğru bir uyarı var: bir oturum, yetkili olmadığı abone kayıtlarını
okumuş. Uyarının doğrulanmasıyla birlikte iş, saymaktan yapmaya döner ve sorular değişir — hangi
hesap, nereden, hangi uç noktalardan, kaç abone kaydı, veri değişti mi, aynı desende başka hesap
var mı. Olay müdahale yaşam döngüsünün aşamaları ve nöbet düzeni Güvenlik Operasyonları ve Olay
Müdahalesi kursunda ölçülmüştü; burada tekrarlanmaz.

Bu ders yalnız bir şeyi ölçer: **hangi adım hangi kayda ihtiyaç duyuyor ve o kayıt yoksa adım kaç
dakika uzuyor.** İhlal senaryosu kayıt olarak girer; hiçbir istismar yöntemi ya da yük anlatılmaz,
çünkü ölçülen şey saldırının nasıl yapıldığı değil, yapıldıktan sonra nasıl anlaşıldığıdır.

- **UM12.** Olay **kurgudur**: abone portalında bir hesap üzerinden yetkisiz okuma; kiracıda
  41 200 abone kaydı var, gerçekte dokunulan küme 380 kayıt.
- **UM13.** **Olay müdahale kılavuzu**, adımların veri yapısı olarak modellenmiş hâlidir. Her
  adımın üç niteliği vardır: gereken kayıt alanları, kayıtla süren dakika, kayıtsız süren dakika.
- **UM14.** Bir adımın gereken alanları **tek bir eşlenebilir kümede** bulunmalıdır; önceki
  dersteki bağ kuralı burada da geçerlidir.
- **UM15.** Kayıtsız süresi tanımsız olan adım **hiç tamamlanamaz**: en iyi çabayla dört katı
  süre harcanır ve kesin sonuç yerine bir üst sınır bildirilir.
- **UM16.** Süreler **veridir**, bu sayfada yapılmış bir ölçüm değildir. Dört şema önceki
  derslerin şemalarıdır: taban, bağ alanı eklenmiş, yetki kararı ile sürüm eklenmiş, oturum ile
  değişiklik öncesi değer de eklenmiş.

## Adım–Kayıt Bağımlılığı

```js
// mudahale.mjs — uygulama ihlali senaryosunda mudahale adimlari kosturulur; her adim
// bir kayit kumesine bagimlidir. MODELDIR: olay da sureler de kurgudur.
export const KIRACI_ABONE = 41200;   // kesin kume cikarilamazsa bildirilecek ust sinir

// Sema = onceki dersin kayit tasarimlari. Alanlar eslenebilir kumeler halinde tutulur:
// ayni kume icindeki alanlar birlestirilebilir, ayri kumelerdekiler birlestirilemez.
export const SEMA = [
  { ad: "taban", kume: [["zaman", "iz", "aktor", "eylem", "sonuc", "yol", "yontem", "durum",
    "istemci_ip"], ["zaman", "tablo", "nesne", "islem"]] },
  { ad: "+iz", kume: [["zaman", "iz", "aktor", "eylem", "sonuc", "yol", "yontem", "durum",
    "istemci_ip", "tablo", "nesne", "islem"]] },
  { ad: "+karar+surum", kume: [["zaman", "iz", "aktor", "eylem", "sonuc", "yol", "yontem",
    "durum", "istemci_ip", "tablo", "nesne", "islem", "yetki_karari", "surum"]] },
  { ad: "+oturum+deger", kume: [["zaman", "iz", "aktor", "eylem", "sonuc", "yol", "yontem",
    "durum", "istemci_ip", "tablo", "nesne", "islem", "yetki_karari", "surum", "oturum",
    "once_deger"]] },
];

// Adim = [ad, gereken alanlar, kayitla dakika, kayitsiz dakika]. Kayitsiz dakika null ise
// adim hic tamamlanamaz; en iyi cabayla dort kati sure gider, sonuc ust sinir olur.
export const ADIM = [
  ["uyariyi dogrula", ["aktor", "eylem", "sonuc"], 6, 40],
  ["hesabi ve oturumu kes", ["aktor"], 4, 25],
  ["giris yolunu bul", ["istemci_ip", "iz"], 12, 70],
  ["cagrilan uc noktalari cikar", ["yol", "yontem", "iz"], 10, 60],
  ["yetki karari neden olumlu", ["aktor", "eylem", "yetki_karari"], 14, 100],
  ["etkilenen abone kumesi", ["aktor", "eylem", "nesne"], 25, null],
  ["veri degisti mi", ["iz", "tablo", "islem"], 15, 120],
  ["degisen degerleri geri al", ["tablo", "once_deger"], 20, null],
  ["ayni desende baska hesap", ["istemci_ip", "aktor"], 18, 90],
  ["surum ve yama durumu", ["aktor", "surum"], 8, 45],
  ["ayni oturumdaki diger isler", ["oturum", "eylem"], 9, 75],
  ["bildirilecek kapsami yaz", ["aktor", "nesne", "zaman"], 10, 60],
];
export const KAPSAMA_ADIM = 2;   // ilk iki adim kapsama kararini besler

export const varMi = (sema, alanlar) =>
  sema.kume.some((c) => alanlar.every((a) => c.includes(a)));

export function kosuf(sema) {
  let toplam = 0, kapsama = 0, eksik = 0, tamamlanamayan = 0, kesinKume = true;
  const satir = ADIM.map(([ad, alanlar, ile, siz], i) => {
    const var_ = varMi(sema, alanlar);
    const dk = var_ ? ile : (siz ?? ile * 4);
    if (!var_) { eksik++; if (siz === null) { tamamlanamayan++;
      if (ad === "etkilenen abone kumesi") kesinKume = false; } }
    toplam += dk;
    if (i < KAPSAMA_ADIM) kapsama += dk;
    return { ad, dk, durum: var_ ? "kayittan" : (siz === null ? "tamamlanamaz" : "elle") };
  });
  return { satir, toplam, kapsama, eksik, tamamlanamayan,
    bildirim: kesinKume ? 380 : KIRACI_ABONE };
}

export const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j])
  : String(v).padEnd(B[0]))).join("");

if (import.meta.url === `file://${process.argv[1]}`) {
  const s = SEMA[0], o = kosuf(s);
  console.log(`sema "${s.ad}": ${ADIM.length} mudahale adimi, ` +
    `${s.kume.length} eslenebilir alan kumesi`);
  const y = gen([30, 34, 10, 15]);
  console.log("\n" + y(["adim", "gereken alanlar", "dakika", "kaynak"]));
  ADIM.forEach(([ad, alanlar], i) =>
    console.log(y([ad, alanlar.join(","), o.satir[i].dk, o.satir[i].durum])));
  console.log(`\ntoplam ${o.toplam} dakika, kayitsiz adim ${o.eksik}/${ADIM.length}, ` +
    `hic tamamlanamayan ${o.tamamlanamayan}, kapsama karari ${o.kapsama}. dakikada`);
  console.log(`etkilenen abone kumesi cikarilamadi: bildirim kapsami ${o.bildirim} abone`);
}
```

```
sema "taban": 12 mudahale adimi, 2 eslenebilir alan kumesi

adim                                             gereken alanlar    dakika         kaynak
uyariyi dogrula                                aktor,eylem,sonuc         6       kayittan
hesabi ve oturumu kes                                      aktor         4       kayittan
giris yolunu bul                                   istemci_ip,iz        12       kayittan
cagrilan uc noktalari cikar                        yol,yontem,iz        10       kayittan
yetki karari neden olumlu               aktor,eylem,yetki_karari       100           elle
etkilenen abone kumesi                         aktor,eylem,nesne       100   tamamlanamaz
veri degisti mi                                   iz,tablo,islem       120           elle
degisen degerleri geri al                       tablo,once_deger        80   tamamlanamaz
ayni desende baska hesap                        istemci_ip,aktor        18       kayittan
surum ve yama durumu                                 aktor,surum        45           elle
ayni oturumdaki diger isler                         oturum,eylem        75           elle
bildirilecek kapsami yaz                       aktor,nesne,zaman        60           elle

toplam 630 dakika, kayitsiz adim 7/12, hic tamamlanamayan 2, kapsama karari 10. dakikada
etkilenen abone kumesi cikarilamadi: bildirim kapsami 41200 abone
```

Tablonun ilk dört satırı hızlıdır ve hepsi tek bir eşlenebilir kümeden okunur: kim, nereden,
hangi uç noktalardan. Bu dört adım 32 dakika sürer ve müdahalenin en görünür kısmıdır. Kalan sekiz
satırın yedisi kayıtsızdır ve toplam sürenin 598 dakikasını üretir. **Bir müdahalenin süresini
belirleyen şey ilk adımların hızı değil, ortadaki adımların hangi kaydı bulamadığıdır.**

En pahalı iki satır aynı nedenden pahalıdır. "Veri değişti mi" adımı `iz`, `tablo` ve `islem`
alanlarını birlikte ister; üç alan da yazılıyor, ama veritabanı değişiklik kaydında bağ alanı
olmadığı için hangi isteğin hangi satırı değiştirdiği gösterilemez. Aynı şey "etkilenen abone
kümesi" adımında olur: `aktor` bir kümede, `nesne` ötekinde. İkisi de eksik alan değil, kurulmamış
bağ yüzünden uzar. **Bağ eksikliğinin bedeli ölçüm defterinde bir satır, müdahale defterinde iki
yüz dakikadır.**

Tablonun okunmayan bir satırı da vardır ve o satır bir yanılgıyı önler: "aynı desende başka
hesap" adımı taban şemada bile kayıttan okunur, çünkü `istemci_ip` ile `aktor` aynı kümededir. Bu
adım müdahalenin en geniş kapsamlı sorusunu sorar — olay tek hesapla mı sınırlı — ve on sekiz
dakikada cevaplanır. **Bir kayıt tasarımının değeri adım sayısına göre değil, hangi adımların
kayıttan okunabildiğine göre dağılır; en ucuz alan en geniş soruyu cevaplayan alan olabilir.**

Son iki satır kayıt tasarımının müdahale dışına taşan bedelini yazar. Etkilenen abone kümesi
kesin olarak çıkarılamadığında yerine bir üst sınır bildirilir: kiracıdaki 41 200 abonenin
tamamı. Gerçekte dokunulan küme 380 kayıttır. Aradaki fark bir raporlama ayrıntısı değildir;
bildirim yükümlülüğünü, çağrı merkezi yükünü ve kurumun dışarıya söylediği cümleyi belirler.
Benzer biçimde "değişen değerleri geri al" adımı, değişiklik öncesi değer yazılmadığı için hiç
tamamlanamaz — veri geri alınamaz, yalnız hangi satırların değiştiği söylenebilir. İki adım da
harcanan zamanı geri vermez: model bu adımlara sırasıyla 100 ve 80 dakika yazar ve o sürenin
sonunda elde kesin bir küme değil, bir aralık kalır. **Tamamlanamayan adım, atlanan adım
değildir; bedeli hem dakikada hem cevabın kesinliğinde iki kez ödenir.**

## Aynı Müdahale, Dört Kayıt Şeması

```js
// karsilastir.mjs — ayni mudahale dort kayit semasiyla kosturulur; kayit tasarimindaki
// fark dakikaya ve bildirim kapsamina cevrilir. MODELDIR.
import { SEMA, ADIM, kosuf, varMi, gen } from "./mudahale.mjs";

const y = gen([16, 10, 11, 12, 15, 12]);
console.log(y(["sema", "toplam dk", "kapsama dk", "kayitsiz", "tamamlanamaz", "bildirim"]));
const sonuc = SEMA.map((s) => {
  const o = kosuf(s);
  console.log(y([s.ad, o.toplam, o.kapsama, `${o.eksik}/${ADIM.length}`, o.tamamlanamayan,
    o.bildirim]));
  return o;
});

// Adim basina uzama: ayni adim taban semada ve en genis semada kac dakika suruyor.
const taban = SEMA[0];
const uzama = ADIM.map(([ad, alanlar, ile, siz]) => ({ ad, ile,
  siz: varMi(taban, alanlar) ? ile : (siz ?? ile * 4),
  kesin: siz !== null || varMi(taban, alanlar) }))
  .filter((u) => u.siz !== u.ile).sort((a, b) => (b.siz - b.ile) - (a.siz - a.ile));
const z = gen([30, 10, 10, 8, 10]);
console.log("\ntaban semada uzayan adimlar (en genis semayla karsilastirma)");
console.log(z(["adim", "kayitla", "kayitsiz", "kat", "sonuc"]));
for (const u of uzama)
  console.log(z([u.ad, u.ile, u.siz, (u.siz / u.ile).toFixed(1), u.kesin ? "kesin" : "ust sinir"]));

const t = sonuc[0], g = sonuc.at(-1);
console.log(`\ntaban sema ${t.toplam} dakika, en genis sema ${g.toplam} dakika: ` +
  `${t.toplam - g.toplam} dakika fark, ${(t.toplam / g.toplam).toFixed(2)} kat`);
console.log(`kapsama karari her semada ${g.kapsama}. dakikada verilebiliyor; ` +
  `fark kapsamada degil kapsam cikarmada`);
console.log(`bildirim kapsami ${t.bildirim} abonelik ust sinirdan ${g.bildirim} abonelik ` +
  `kesin kumeye iniyor: ${(t.bildirim / g.bildirim).toFixed(0)} kat dar`);
console.log(`ikinci sema (+iz) tek alanla ${t.toplam - sonuc[1].toplam} dakika kazandiriyor ` +
  `ve tamamlanamayan adimi ${t.tamamlanamayan}'den ${sonuc[1].tamamlanamayan}'e indiriyor`);
```

```
sema             toplam dk kapsama dk    kayitsiz   tamamlanamaz    bildirim
taban                  630         10        7/12              2       41200
+iz                    400         10        4/12              1         380
+karar+surum           277         10        2/12              1         380
+oturum+deger          151         10        0/12              0         380

taban semada uzayan adimlar (en genis semayla karsilastirma)
adim                             kayitla  kayitsiz     kat     sonuc
veri degisti mi                       15       120     8.0     kesin
yetki karari neden olumlu             14       100     7.1     kesin
etkilenen abone kumesi                25       100     4.0 ust sinir
ayni oturumdaki diger isler            9        75     8.3     kesin
degisen degerleri geri al             20        80     4.0 ust sinir
bildirilecek kapsami yaz              10        60     6.0     kesin
surum ve yama durumu                   8        45     5.6     kesin

taban sema 630 dakika, en genis sema 151 dakika: 479 dakika fark, 4.17 kat
kapsama karari her semada 10. dakikada verilebiliyor; fark kapsamada degil kapsam cikarmada
bildirim kapsami 41200 abonelik ust sinirdan 380 abonelik kesin kumeye iniyor: 108 kat dar
ikinci sema (+iz) tek alanla 230 dakika kazandiriyor ve tamamlanamayan adimi 2'den 1'e indiriyor
```

İlk sütun kayıt tasarımının müdahale süresine çevrilmiş hâlidir: aynı olay, aynı adımlar, aynı
kişiler; 630 dakika ile 151 dakika arasında 4,17 kat fark. İkinci satır bu farkın nereden
geldiğini gösteriyor. Tek bir bağ alanı — veritabanı kaydına eklenen 18 baytlık `iz` — müdahaleyi
230 dakika kısaltır ve tamamlanamayan adımı ikiden bire indirir. Önceki derste aynı alan cevaplanan
soruyu beşten on bire çıkarmıştı; burada aynı alanın ikinci faturası ödenmiş olur.

İkinci sütun bir yanılgıyı kesiyor. Kapsama kararı — hesabın askıya alınması ve oturumun
kesilmesi — dört şemada da 10. dakikada verilebilir, çünkü o adım yalnız `aktor` alanını ister ve
o alan her şemada vardır. **Kayıt tasarımı saldırıyı durdurma hızını değiştirmez; değiştirdiği
şey ne olduğunu söyleme hızıdır.** İhlal müdahalelerinin uzun sürmesinin nedeni çoğu zaman
kapsama değil, kapsam çıkarmadır: kimin verisine dokunulduğu, neyin değiştiği ve aynı desende
başka hesap olup olmadığı.

Şemaların sırası da bir bilgi taşır. Birinci adımdan ikinciye geçiş bir alan karşılığında 230
dakika kazandırır; ikinciden üçüncüye iki alan karşılığında 123 dakika; üçüncüden dördüncüye iki
alan karşılığında 126 dakika. Alan başına kazanç 230, 62 ve 63 dakikadır. Bağ alanı diğerlerinden
üç kattan fazla kazandırır ve bunu hiçbir yeni olgu kaydetmeden yapar. Aynı sıra hacim tarafında
tersine döner: bağ alanı günlük hacmi yüzde iki, son iki alan yüzde otuz dokuz büyütür. **Kayıt
alanları eşit fiyatlı değildir; hem kazançları hem bedelleri arasında kat farkı vardır ve iki
sıralama birbirinin tersidir.**

Uzama tablosu bedeli adım adım yazıyor. Kat sütunu 4,0 ile 8,3 arasında değişir ve en yüksek
katlar en küçük adımlardadır: dokuz dakikalık "aynı oturumdaki diğer işler" adımı kayıtsız 75
dakika sürer. Sonuç sütunu daha keskin bir ayrım getirir. Beş adım kayıtsız da olsa **kesin**
sonuç verir — yalnız daha uzun sürer. İki adım kayıtsız kaldığında kesin sonuç veremez; harcanan
100 ve 80 dakikanın karşılığı bir üst sınırdır. **Bir adımın kayıt bağımlılığı iki türlüdür:
biri süreyi, öteki cevabın kesinliğini belirler; ikincisi hiçbir insan saatiyle kapatılamaz.**

Modelin sınırı da yazılmalıdır: toplam dakika tek kişilik bir hesaptır. Adımların çoğu birbirini
beklemez ve üç kişi çalıştığında geçen süre toplam dakikadan küçük olur. Ama bölünme yalnız
**süreyi** böler, kesinliği bölmez: üç kişi de "etkilenen abone kümesi" adımını kayıtsız
koşturduğunda sonuç yine üst sınırdır. Aynı biçimde kayıtsız adımların uzaması insan sayısıyla
kapatılabilirken, iki tamamlanamayan adım hiçbir kadroyla kapatılamaz. **İnsan ekleyerek
kısaltılabilen şey ile kısaltılamayan şey ayrı sütunlardır; müdahale planı ikisini karıştırdığında
kadro artırarak çözülemeyecek bir işi kadroya havale eder.**

Bedelin öteki yüzü önceki derste sayılmıştı ve burada tekrar okunmalıdır. En geniş şema 151
dakikalık müdahaleyi mümkün kılar, ama günlük hacmi 1,45 kata çıkarır, saklamayı 65 günden 45
güne indirir ve kişisel veri kalemini üçe çıkarır. 45 günlük saklama, 60 günlük denetim döneminin
başındaki bir olayda bu 151 dakikayı hiç kullandırmaz — kayıt orada yoktur. **Müdahale hızı için
alınan alan, olayın penceresi kaçtığında hiçbir şey kazandırmaz.**

## Özet

- Bir müdahale kılavuzu adım listesi olarak değil, adım–kayıt bağımlılığı olarak ölçülür: her
  adımın gereken alanları, kayıtla süresi ve kayıtsız süresi ayrı yazılır.
- Taban şemada 12 adımın 7'si kayıtsız kalır, müdahale 630 dakika sürer; en geniş şemada aynı
  müdahale 151 dakikadır, arada 4,17 kat vardır.
- Uzamanın büyük bölümü eksik alandan değil kurulmamış bağdan gelir; tek bir bağ alanı 230
  dakika kazandırır ve tamamlanamayan adımı ikiden bire indirir.
- Kayıt tasarımı kapsama kararının hızını değiştirmez — her şemada 10. dakika — yalnız kapsam
  çıkarmanın hızını değiştirir.
- Kayıt bağımlılığı iki türlüdür: beş adım kayıtsız da kesin sonuç verir ama 4 ile 8,3 kat uzar;
  iki adım kesin sonuç veremez ve bildirim 380 aboneden 41 200 abonelik üst sınıra genişler.
- Hızlı müdahalenin bedeli önceki dersin defterinde yazılıdır: 1,45 kat hacim, 65 günden 45 güne
  inen saklama ve üç kişisel veri kalemi.

## Sonraki Adım

Bu dersin bütün hesabı bir varsayıma dayanıyordu: kayıt alanı yazıldıysa müdahale anında elde
duruyor. Kalıcı bir hizmette bu doğrudur. Kısa ömürlü iş yüklerinde değildir — bir görev
konteyneri kırk saniye yaşayıp sonlandığında, ürettiği kayıt kalemlerinin ancak dışarı
yazılabilmiş olanı sorgulanabilir; gerisi süreçle birlikte gider. Sonraki ders bu pencereyi
ölçer: iş yükü ölmeden hangi uygulama kalemi dışarı çıkabiliyor, ayrıntı düzeyi arttıkça
toplanabilen kalemin oranı ne oluyor ve elde kalan kalemler önceki derslerin sorularından kaçını
cevaplıyor.
