---
title: 'Güvenlik Bilgi ve Olay Yönetimi'
source: 'https://academia.sh/tr/kurslar/guvenlik-operasyonlari/guvenlik-bilgi-ve-olay-yonetimi'
course: 'Güvenlik Operasyonları ve Olay Müdahalesi'
language: tr
updated: '2026-08-17T18:08:41+00:00'
license: 'CC BY-SA 4.0'
---

# Güvenlik Bilgi ve Olay Yönetimi

Üç koşullu bir bağıntı kuralı 3.083 kayıtlık kurgu bir olay akışında koşturulur: kural 10 uyarı üretiyor ve bu uyarılar 161 ham olayı birleştiriyor, uyarı başına 16,1 olay. Beş kurgu kampanyanın üçü yakalanıyor; biri eşiğin altında kaldığı, biri üçüncü adımı yalnız ağ akışında bıraktığı için hiç görünmüyor. Huni 3.083 kayıttan 12 adaya, 12 adaydan 10 uyarıya, 10 uyarıdan 3 karara iniyor ve ilk kaydın düşmesinden 43 dakika sürüyor. Eşik, pencere ve gecikme taramasında hiçbir ayar beş kampanyanın beşini birden getirmiyor; en iyi satır 4/5 ve 1 yanlış pozitif.

Bir önceki derste kümeleme tek ölçütle yapılmıştı: aynı aktör ve bir zaman penceresi. O ölçüt 184
küme üretti ve bunların yalnız 21'i modelin bildiği bir olaya karşılık geliyordu. Bir güvenlik
bilgi ve olay yönetimi sistemi kümelemeyi böyle yapmaz; **koşul dizisi** yazar — hangi kaynaktan
hangi alan, hangi sırayla, hangi sayıdan sonra.

Bu ders normalleştirilmiş bir akışın üzerine böyle bir kural koşturur ve iki sayı çıkarır: kural
kaç ham olayı tek uyarıda birleştiriyor ve birleştirdiklerinin dışında neyi hiç görmüyor. Aşağıdaki
akış bir **modeldir** ve olaylar yalnız **kayıt olarak** girer; hiçbir yerde bir saldırı adımının
nasıl yapıldığı yazmaz. **Bir hesap kümesine tekrarlı parola denemesi, yazılı yetki ve tanımlı
kapsam olmadan hem yasadışı hem meslek dışıdır**; burada denemenin bıraktığı kayıt ölçülür.

- **TA13.** Akış bir günü kapsar: 120 personel hesabı, 6 servis kimliği ve beş olay türü. Servis
  kimliği yetki değiştiremez, bu yüzden o kayıt onda **hiç yoktur**.
- **TA14.** Beş kurgu kampanya kayıt dizisi olarak verilir. Etiket modelin doğrusudur ve **akışa
  yazılmaz**; kural onu göremez.
- **TA15.** Bağıntı kuralı K1 üç koşulludur: aynı aktörde `P` dakika içinde en az `E` başarısız
  kayıt, ardından bir başarılı, ardından `G` dakika içinde bir yetki değişikliği.
- **TA16.** Bir uyarının **kanıtı**, kuralın onu üretirken tuttuğu ham olay kümesidir. Birleşme
  ölçüsü bu kümenin büyüklüğüdür.
- **TA17.** Zincirin sabit gecikmeleri model verisidir: aktarım ve normalleştirme 3 dakika, uyarı
  kuyruğu 14 dakika, analist incelemesi uyarı başına 9 dakika.

## Bir Bağıntı Kuralının Durum Makinesi

```js
// akis.mjs — kurgu olay akisi ve bir baginti kuralinin durum makinesi. MODELDIR.
// Olaylar KAYIT olarak girer; saldiri adimi degil, adimin biraktigi kayit modellenir.
export const TOHUM = 20260403;
const uretec = (t) => { let s = t >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };
const r = uretec(TOHUM);
const tam = (n) => Math.floor(r() * n);
const HESAP = Array.from({ length: 120 }, (_, i) => `sh-${301 + i}`);
const SERVIS = Array.from({ length: 6 }, (_, i) => `sv-${11 + i}`);

const ham = [];        // {dakika, aktor, tur, etiket} — etiket modelin dogrusudur
const ek = (t, a, tur, e) => ham.push({ t: Math.round(t), aktor: a, tur, etiket: e });
const kez = (n, f) => { for (let k = 0; k < n; k++) f(); };

// Arka plan: gunluk olagan is. Servis kimligi yetki degistiremez, o kayit onda hic yok.
for (const h of HESAP) {
  kez(2 + tam(6), () => ek(tam(1440), h, "kimlik.basarili", "olagan"));
  kez(tam(9), () => ek(tam(1440), h, "kimlik.basarisiz", "olagan"));
  kez(tam(4), () => ek(tam(1440), h, "yetki.degistir", "olagan"));
  kez(4 + tam(14), () => ek(tam(1440), h, "akis.giden", "olagan"));
}
for (const h of SERVIS) {
  kez(6 + tam(10), () => ek(tam(1440), h, "kimlik.basarili", "olagan"));
  kez(tam(20), () => ek(tam(1440), h, "kimlik.basarisiz", "olagan"));
  kez(20 + tam(40), () => ek(tam(1440), h, "akis.giden", "olagan"));
}
// Yogun parola sifirlama: esigi asan mesru kume, ardindan giris ve yetki isi.
for (const h of HESAP.slice(0, 9)) {
  let t = 420 + tam(600);
  kez(6 + tam(5), () => ek(t += 1 + r() * 3, h, "kimlik.basarisiz", "sifirlama"));
  ek(t += 12, h, "kimlik.basarili", "sifirlama");
  if (r() < 0.55) ek(t + 5 + tam(30), h, "yetki.degistir", "sifirlama");
}
// Bes kurgu kampanya: [ad, aktor, basarisiz kayit sayisi, ucuncu adimin turu, gecikme dk].
// Yalnizca KAYIT dizisi verilir; yontem anlatilmaz.
const KAMPANYA = [["k1", HESAP[8], 40, "yetki.degistir", 25],
  ["k2", HESAP[21], 22, "yetki.degistir", 48], ["k3", HESAP[55], 61, "yetki.degistir", 9],
  ["k4", SERVIS[2], 33, "akis.giden", 20],     // ucuncu adim yalniz ag akisinda
  ["k5", HESAP[96], 4, "yetki.degistir", 35]]; // basarisizlik esigin altinda
for (const [ad, h, n, ucuncu, gecikme] of KAMPANYA) {
  let t = 60 + tam(1200);
  kez(n, () => ek(t += 0.4 + r() * 1.2, h, "kimlik.basarisiz", ad));
  ek(t += 3, h, "kimlik.basarili", ad);
  ek(t + gecikme, h, ucuncu, ad);
}
ham.sort((a, b) => a.t - b.t);
export const OLAY = ham.map(({ t, aktor, tur }) => ({ t, aktor, tur }));
export const ETIKET = ham.map((o) => o.etiket);   // hat bunu GORMEZ
export const AD = KAMPANYA.map(([a]) => a);

// Baginti kurali K1 (durum makinesi): ayni aktorde P dakika icinde >=E basarisiz kayit,
// ardindan bir basarili, ardindan G dakika icinde bir yetki degisikligi.
export function K1({ esik = 5, pencere = 30, gecikme = 60 } = {}) {
  const durum = new Map(), uyari = [], aday = new Set(), gecen = new Set();
  for (const [i, o] of OLAY.entries()) {
    const d = durum.get(o.aktor) || { bas: [], acik: null, kanit: [] };
    durum.set(o.aktor, d);
    if (o.tur === "kimlik.basarisiz") {
      d.bas = d.bas.filter((x) => OLAY[x].t > o.t - pencere).concat(i);
      if (d.bas.length >= esik) aday.add(o.aktor);
    } else if (o.tur === "kimlik.basarili" && d.bas.length >= esik) {
      d.acik = o.t; d.kanit = [...d.bas, i]; gecen.add(o.aktor);
    } else if (o.tur === "yetki.degistir" && d.acik !== null && o.t - d.acik <= gecikme) {
      uyari.push({ aktor: o.aktor, t: o.t, kanit: [...d.kanit, i] });
      d.acik = null; d.bas = [];
    }
  }
  return { uyari, aday: aday.size, gecen: gecen.size };
}
export const yakalayan = (u, ad) => u.find((x) => x.kanit.some((i) => ETIKET[i] === ad));
export const yanlisPozitif = (u) => u.filter((x) => !x.kanit.some((i) => AD.includes(ETIKET[i])));

if (import.meta.url === `file://${process.argv[1]}`) {
  const s = K1(), birlesen = s.uyari.reduce((a, u) => a + u.kanit.length, 0);
  console.log(`model (tohum ${TOHUM}): ${OLAY.length} olay, ${HESAP.length} personel ve ` +
    `${SERVIS.length} servis hesabi, ${KAMPANYA.length} kurgu kampanya (kayit olarak)`);
  console.log(`K1 (esik 5 / pencere 30 dk / gecikme 60 dk): ${s.uyari.length} uyari; ` +
    `bu uyarilar ${birlesen} ham olayi birlestiriyor, olay basina ` +
    `${(birlesen / s.uyari.length).toFixed(1)}`);
  const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j])
    : String(v).padEnd(B[0]))).join("");
  const yz = gen([11, 9, 18, 11, 15, 32]);
  console.log();
  console.log(yz(["kampanya", "kayit", "ucuncu adim", "yakalandi", "birlesen olay",
    "gorulmeme nedeni"]));
  for (const [ad, , n, ucuncu] of KAMPANYA) {
    const u = yakalayan(s.uyari, ad);
    console.log(yz([ad, n + 2, ucuncu, u ? "evet" : "hayir", u ? u.kanit.length : 0,
      u ? "-" : ucuncu === "akis.giden" ? "ucuncu adim yalniz ag akisinda"
        : "basarisizlik esigin altinda"]));
  }
  console.log(`\naday aktor ${s.aday}, ikinci kosulu gecen ${s.gecen}, uyari ` +
    `${s.uyari.length}; bunlarin ${yanlisPozitif(s.uyari).length} tanesi hicbir kampanya ` +
    `kaydi icermiyor`);
}
```

```
model (tohum 20260403): 3083 olay, 120 personel ve 6 servis hesabi, 5 kurgu kampanya (kayit olarak)
K1 (esik 5 / pencere 30 dk / gecikme 60 dk): 10 uyari; bu uyarilar 161 ham olayi birlestiriyor, olay basina 16.1

kampanya       kayit       ucuncu adim  yakalandi  birlesen olay                gorulmeme nedeni
k1                42    yetki.degistir       evet             32                               -
k2                24    yetki.degistir       evet             24                               -
k3                63    yetki.degistir       evet             32                               -
k4                35        akis.giden      hayir              0  ucuncu adim yalniz ag akisinda
k5                 6    yetki.degistir      hayir              0     basarisizlik esigin altinda

aday aktor 12, ikinci kosulu gecen 12, uyari 10; bunlarin 7 tanesi hicbir kampanya kaydi icermiyor
```

Birleşme oranı kuralın en görünür işidir: 10 uyarı 161 ham olayı topluyor, uyarı başına 16,1 kayıt.
Analistin önüne 161 satır değil, 10 kalem geliyor ve her kalemin altında kanıt kümesi duruyor. Bu,
bir önceki dersteki 184 kümenin yerine geçen sayıdır ve kuralın **var olma nedenidir**.

Üçüncü sütun bir ayrıntıyı gösteriyor: k3'ün 63 kaydı var ama uyarıda yalnız 32 olay birleşiyor.
Otuz dakikalık pencere daha eski başarısızlıkları düşürüyor, çünkü sayaç kayan penceredir. Kanıt
kümesi olayın tamamı değil, **kuralın gördüğü bölümüdür**; inceleme sırasında geri kalanı elle
aranır.

Alt iki satır dersin asıl sonucudur. k5 eşiğin altında kalıyor: dört başarısız kayıt beş eşiğini
geçmiyor ve kural hiç uyanmıyor. k4 ise farklı bir nedenle görünmüyor — üçüncü adımı bir yetki
değişikliği değil, giden bir ağ bağlantısıdır ve kuralın üçüncü koşulu o türü hiç sormaz. Servis
kimliğinde yetki değişikliği kaydı **hiçbir zaman oluşmaz**; kural bu aktörde tanım gereği
tetiklenemez.

Bu iki satır bir önceki dersin ölçüsüne doğrudan bağlanır. Kural yalnız şemada bulunan alanları
sorabilir; k4'ün üçüncü kaydı ortak şemaya oturuyor ama kuralın koşul dizisinde o türe yer yoktur.
Eksiklik kaynağın toplanmamasından değil, kuralın **hangi alanı sorduğundan** gelir ve bu ayrım
tespit kapsamının sayılmasında belirleyicidir.

Son satır bedeli veriyor: 10 uyarının 7'si hiçbir kampanya kaydı içermiyor. Bunların çoğu yoğun
parola sıfırlama kümesidir — eşiği aşan meşru başarısızlık, ardından giriş, ardından olağan bir
yetki işi. Kuralın koşul dizisi bu diziyi kampanyadan ayırt edemez, çünkü ikisi de aynı üç kaydı
aynı sırayla bırakır.

## Kayıttan Karara: Huni ve Dakika

```js
// huni.mjs — kayittan karara giden zincir: her adimda kac aday eleniyor, kac dakika ekleniyor.
import { OLAY, K1, AD, yakalayan, yanlisPozitif } from "./akis.mjs";

// Zincirin sabit gecikmeleri model VERISIDIR, olcum degil (dakika).
const AKTARIM = 3, KUYRUK = 14, INCELEME = 9;
const s = K1(), yp = yanlisPozitif(s.uyari);
// Kuralin ucuncu adimi beklemek zorunda kaldigi ortalama sure.
const bekleme = s.uyari.reduce((a, u) =>
  a + (u.t - OLAY[u.kanit[u.kanit.length - 2]].t), 0) / s.uyari.length;

const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j])
  : String(v).padEnd(B[0]))).join("");
const yh = gen([32, 12, 10, 13]);
console.log(`${OLAY.length} ham olay, ${s.uyari.length} uyari, ` +
  `${s.uyari.length - yp.length} tanesi bir kampanya kaydi iceriyor`);
console.log();
console.log(yh(["adim", "kalan aday", "elenen", "eklenen dk"]));
const adim = [["ham kayit", OLAY.length, 0], ["aktarim ve normallestirme", OLAY.length, AKTARIM],
  ["kosul 1: 5 basarisiz / 30 dk", s.aday, 0], ["kosul 2: ardindan basarili", s.gecen, 0],
  ["kosul 3: 60 dk icinde yetki", s.uyari.length, Math.round(bekleme)],
  ["uyari kuyrugu", s.uyari.length, KUYRUK],
  ["analist incelemesi", s.uyari.length - yp.length, INCELEME]];
let onceki = OLAY.length, toplam = 0;
for (const [ad, kalan, dk] of adim) {
  toplam += dk;
  console.log(yh([ad, kalan, onceki - kalan, dk]));
  onceki = kalan;
}
console.log(`toplam: ${OLAY.length} kayittan ${s.uyari.length - yp.length} karara, ` +
  `ilk kaydin dusmesinden ${toplam} dakika sonra`);

const yz = gen([7, 10, 10, 8, 8, 12, 13, 13]);
console.log();
console.log(yz(["esik", "pencere", "gecikme", "aday", "uyari", "yakalanan", "yanlis poz.",
  "inceleme dk"]));
for (const [esik, pencere, gecikme] of [[5, 30, 60], [3, 30, 60], [8, 30, 60],
    [5, 5, 60], [3, 5, 60], [5, 30, 15], [5, 30, 240]]) {
  const k = K1({ esik, pencere, gecikme });
  const y = AD.filter((a) => yakalayan(k.uyari, a)).length;
  const n = yanlisPozitif(k.uyari).length;
  console.log(yz([esik, `${pencere} dk`, `${gecikme} dk`, k.aday, k.uyari.length,
    `${y}/${AD.length}`, n, n * INCELEME]));
}
```

```
3083 ham olay, 10 uyari, 3 tanesi bir kampanya kaydi iceriyor

adim                              kalan aday    elenen   eklenen dk
ham kayit                               3083         0            0
aktarim ve normallestirme               3083         0            3
kosul 1: 5 basarisiz / 30 dk              12      3071            0
kosul 2: ardindan basarili                12         0            0
kosul 3: 60 dk icinde yetki               10         2           17
uyari kuyrugu                             10         0           14
analist incelemesi                         3         7            9
toplam: 3083 kayittan 3 karara, ilk kaydin dusmesinden 43 dakika sonra

esik      pencere   gecikme    aday   uyari   yakalanan  yanlis poz.  inceleme dk
5           30 dk     60 dk      12      10         3/5            7           63
3           30 dk     60 dk      18      11         4/5            7           63
8           30 dk     60 dk      10       8         3/5            5           45
5            5 dk     60 dk       4       2         2/5            0            0
3            5 dk     60 dk      12       5         4/5            1            9
5           30 dk     15 dk      12       6         1/5            5           45
5           30 dk    240 dk      12      11         3/5            8           72
```

Huninin ilk satırı bütün elemeyi tek adımda yapıyor: birinci koşul 3.083 olayı 12 adaya indiriyor.
İkinci koşul **hiçbir şey elemiyor** — eşiği aşan on iki aktörün hepsi eninde sonunda giriyor.
Kuralı dar tutan şey, sanıldığı gibi üç koşulun art arda gelmesi değil, birinci koşuldur; ikinci
koşul yalnız zincirin başlangıcını işaretler.

Dakika sütunu daha az bilinen bir maliyeti gösteriyor. Üçüncü koşulun eklediği 17 dakika bir işlem
gecikmesi değildir — kural **beklemek zorundadır**, çünkü üçüncü kaydın gelip gelmeyeceği ancak
gecikme penceresi dolduğunda bilinir. Toplam 43 dakika bu kuralın fark etme süresidir ve
17'si kuralın kendi tanımından, 14'ü kuyruktan, 9'u incelemeden gelir. Aktarım ve normalleştirmenin payı yalnız 3 dakikadır; hattı
hızlandırmaya çalışan bir çalışmanın kazanabileceği en fazla süre budur.

Alt tablo parametrelerin sınırını çiziyor. Eşiği üçe çekmek k5'i getiriyor ve yakalanan 4/5 oluyor,
ama aday sayısı 12'den 18'e çıkıyor. Pencereyi beş dakikaya daraltmak yanlış pozitifi sıfırlıyor ve
inceleme yükünü 63 dakikadan sıfıra indiriyor — karşılığında k1 kayboluyor, çünkü onun kayıtları
otuz dakikalık pencereye yayılmıştır. En iyi satır eşik 3 ile pencere 5'in birleşimidir: 4/5 ve tek
yanlış pozitif.

Hiçbir satır 5/5 vermiyor. k4 her ayarda görünmez kalır, çünkü eksik olan eşik ya da pencere değil
**kaynaktır**: üçüncü adımın kaydı yalnız ağ akış verisindedir ve K1 o türü hiç sormaz. Parametre
taraması bir kuralın **kendi tanımının dışına** çıkamaz.

## Özet

- Üç koşullu bağıntı kuralı 3.083 ham olayı 10 uyarıya indiriyor ve bu uyarılar 161 olayı
  birleştiriyor; uyarı başına 16,1 kayıt analistin önüne tek kalem olarak geliyor.
- Kanıt kümesi olayın tamamı değildir: k3'ün 63 kaydından uyarıya yalnız 32'si giriyor, çünkü sayaç
  kayan penceredir ve daha eskileri düşürür.
- Beş kampanyanın üçü yakalanıyor; k5 eşiğin altında kalıyor, k4 üçüncü adımını yalnız ağ akışında
  bıraktığı için kuralın tanımı gereği hiç görünmüyor.
- On uyarının 7'si hiçbir kampanya kaydı içermiyor; yoğun parola sıfırlama kümesi kampanyayla aynı
  üç kaydı aynı sırayla bıraktığı için koşul dizisi ikisini ayıramıyor.
- Kayıttan karara 43 dakika geçiyor ve bunun 17'si kuralın üçüncü adımı beklemesinden, 14'ü
  kuyruktan, 9'u incelemeden gelir; aktarım ve normalleştirmenin payı 3 dakikadır.

## Sonraki Adım

k4'ün üçüncü adımı hiçbir kimlik ya da yönetim kaydında yoktu; yalnız giden bir bağlantı olarak, ağ
akış verisinde vardı. O kaynak öteki ikisinden yapı olarak ayrılır: bir akış kaydı bağlantının
**içeriğini** yazmaz, yalnız kimin kiminle, ne kadar süreyle ve kaç bayt konuştuğunu yazar. Sonraki
ders bu kısıtı ölçüye çevirir — içerik olmadan hangi soru yanıtlanabiliyor, hangisi yanıtlanamıyor
ve şifreli bir bağlantıda meta veriden okunabilen düzen, kaç kalemi öteki kaynakların hiç görmediği
bir eksende ayırıyor.
