Ders 14 / 21
Tehdit Tespiti
Anormal etkinlik uyarılarının bilinen olay kümesinde ölçülmesi: 30 olayda 9 tespit kuralının 11 zararlının 9'unu yakalaması, 13 yanlış alarm üretmesi, 8 olayın yalnız tek bir sinyal kaynağıyla yakalanması, üç kaynağın ayda 612 kurgu birim tutması ve yanlış alarm eşiği aşılınca iki kural kapanınca yakalananın 7'ye inmesi.
İçindekiler
Önceki ders genel ucu kapattı ve çizelgede yazılı üç meşru olmayan erişimi kesti. O üçü kesilebildi, çünkü çizelgede vardılar. Özel ağın içinden gelen, geçerli kimlik bilgisi taşıyan ve izin verilmiş bir işlemi yapan bir etkinlik hiçbir erişim tablosunda görünmez; erişim denetimi onu meşru sayar, çünkü tanımı gereği meşrudur. Tehdit tespiti (threat detection) bu boşluğu hedefler: yetki kontrolünün geçirdiği etkinliğin olağandışı olup olmadığını sorar.
Sorunun biçimi bu yüzden başkadır. Erişim kararı ikili bir yüklemdir ve doğru yanıtı tanımlıdır; tespit ise bir tahmindir ve üç sayıyla ölçülür: yakalanan, kaçan, yanlış alarm. Bu ders bilinen bir olay kümesi üzerinde tespit kurallarını koşturup üç sayıyı çıkarır, sonra iki bedeli sayar — sinyal toplamanın ücreti ve yanlış alarmın ekipte ürettiği davranış.
Olay Kümesi, Sinyal Kaynakları ve Kurallar
Örnek kursun kurgu bölgesel ölçüm ağıdır. BG37 — bilinen olay kümesi: otuz olay, on biri zararlı etiketli. Zararsız on dokuzu bilerek zor benzerler seçilmiştir; her biri bir zararlı olayın bir yüzeyini paylaşır, dolayısıyla yanlış alarm oranı kolay bir kümedekinden yüksek olacaktır. BG38 — üç sinyal kaynağı: denetim kaydı (işlem, işlem sayısı, saat), ağ akışı (dışarı çıkan hacim, daha önce görülmemiş hedef, olağandışı port) ve kimlik davranışı (yeni konum, başarısız deneme, ilk kez görülen özne). BG39 — dokuz tespit kuralı: her kural tek bir kaynağa bakar, kaynak başına üç kural. BG40 — toplama ücreti: kaynak başına günlük hacim ve GB başına birim (kurgu birim). BG41 — yanlış alarm eşiği: üç ve üzeri yanlış alarm üreten kural kapatılır. BG42 — toplama sınırı: günde 60 GB (kurgu birim).
Aşağıdaki dosya kümeyi, kuralları ve iki bedeli kurar. Süreç içi bir modeldir; gerçek olay, sinyal akışı ya da ücret yoktur.
// tespit/kural.mjs — bilinen olay kumesinde tespit kurallarinin kosturulmasi. Surec ici model: // bolgesel olcum agi (kurgu); gercek olay, sinyal akisi ya da ucret yoktur. const satir = (s) => s.trim().split("\n").map((l) => l.trim().split("|")); const yaz = (g, ...s) => console.log(s.map((v, i) => (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join("")); // Olay: ad|zararli|D islem|D sayi|D saat|A cikis MB|A yeni hedef|A olagandisi port| // K yeni konum|K basarisiz deneme|K yeni ozne const OLAY = satir(` toplu-arsiv-silme|1|sil|40|3|20|0|0|0|0|0 politika-genisletme|1|politika-degistir|2|4|5|0|0|1|0|0 gece-rol-zinciri|1|rol-ustlen|9|2|10|0|0|1|2|0 depo-disari-kopya|1|oku|60|14|900|1|0|0|0|0 yeni-hedefe-sizinti|1|oku|12|11|120|1|0|0|0|0 anahtar-cikarma|1|anahtar-olustur|3|1|8|0|0|1|0|1 kaba-kuvvet-girisi|1|oku|4|22|3|0|0|1|18|0 sessiz-yan-kanal|1|oku|6|13|40|0|1|0|0|0 ortak-hesap-devri|1|rol-ustlen|2|10|15|0|0|1|1|1 gunluk-kapatma|1|politika-degistir|1|13|4|0|0|0|0|0 yavas-sizdirma|1|oku|9|15|45|0|0|0|0|0 gece-yedek-donusu|0|sil|30|3|400|0|0|0|0|0 toplu-temizlik|0|sil|25|11|10|0|0|0|0|0 surum-yayimi|0|politika-degistir|1|10|6|0|0|0|0|0 olcum-alimi|0|yaz|80|9|650|0|0|0|0|0 gece-rapor-cekimi|0|oku|20|4|300|1|0|0|0|0 yeni-ekip-uyesi|0|oku|5|9|12|0|0|1|1|1 seyahatten-giris|0|oku|7|8|9|0|0|1|2|0 ortak-agdan-rapor|0|oku|11|16|80|1|0|0|0|0 kenar-yukleme|0|yaz|14|20|140|1|0|0|0|0 sinama-kosumu|0|rol-ustlen|6|13|20|0|0|0|0|0 arac-guncellemesi|0|yaz|3|2|18|0|1|0|0|0 parola-unutma|0|oku|2|9|2|0|0|0|11|0 bakim-penceresi|0|sil|22|1|30|0|0|0|0|0 yedek-dogrulama|0|oku|18|5|520|0|0|0|0|0 kurulum-isi|0|anahtar-olustur|2|14|7|0|0|0|0|1 katalog-yenileme|0|oku|15|10|60|0|0|0|0|0 sinama-verisi-silme|0|sil|8|14|5|0|0|0|0|0 gunluk-arsivleme|0|yaz|19|12|210|0|0|0|0|0 plan-isi|0|oku|10|7|25|0|0|0|0|0`) .map(([ad, z, di, ds, dh, ac, ay, ap, kk, kb, ko]) => ({ ad, zararli: z === "1", dIslem: di, dSayi: +ds, dSaat: +dh, aCikis: +ac, aYeniHedef: +ay, aPort: +ap, kKonum: +kk, kBasarisiz: +kb, kOzne: +ko })); // Tespit kurali: kimlik|sinyal kaynagi|yuklem. Her kural tek bir kaynaga bakar. const KURAL = { T1: ["denetim kaydi", (o) => o.dIslem === "politika-degistir" && o.dSaat < 6], T2: ["denetim kaydi", (o) => o.dIslem === "sil" && o.dSayi >= 20], T3: ["denetim kaydi", (o) => o.dIslem === "rol-ustlen" && o.dSayi >= 5], T4: ["ag akisi", (o) => o.aCikis >= 500], T5: ["ag akisi", (o) => o.aYeniHedef === 1 && o.aCikis >= 50], T6: ["ag akisi", (o) => o.aPort === 1], T7: ["kimlik davranisi", (o) => o.kKonum === 1 && o.kBasarisiz >= 1], T8: ["kimlik davranisi", (o) => o.kBasarisiz >= 10], T9: ["kimlik davranisi", (o) => o.kOzne === 1 && o.kKonum === 1], }; const KAYNAK = ["denetim kaydi", "ag akisi", "kimlik davranisi"]; const KURALLAR = Object.keys(KURAL); const alarm = (kurallar) => OLAY.map((o) => ({ o, kural: kurallar.filter((t) => KURAL[t][1](o)) })); const ozet = (kurallar) => { const a = alarm(kurallar); const zararli = a.filter((x) => x.o.zararli); return { yakalanan: zararli.filter((x) => x.kural.length > 0).length, kacan: zararli.filter((x) => x.kural.length === 0).length, yanlis: a.filter((x) => !x.o.zararli && x.kural.length > 0).length, sessiz: a.filter((x) => !x.o.zararli && x.kural.length === 0).length, }; }; const zararliSayi = OLAY.filter((o) => o.zararli).length; console.log(`${OLAY.length} bilinen olay (${zararliSayi} zararli etiketli), ` + `${KURALLAR.length} tespit kurali, ${KAYNAK.length} sinyal kaynagi`); // Kural basina const K = [-6, -18, 9, 11, 14]; console.log(); yaz(K, "kural", "sinyal kaynagi", "alarm", "yakalanan", "yanlis alarm"); for (const t of KURALLAR) { const a = alarm([t]).filter((x) => x.kural.length > 0); const y = a.filter((x) => x.o.zararli).length; yaz(K, t, KURAL[t][0], a.length, y, a.length - y); } const T = ozet(KURALLAR); yaz(K, "toplam", "", T.yakalanan + T.yanlis, `${T.yakalanan}/${zararliSayi}`, T.yanlis); // Sinyal kaynagi basina: kaynak tek basina ve kaynak cikarilinca const S = [-18, 13, 14, 14, 18]; console.log(); yaz(S, "sinyal kaynagi", "tek basina", "yanlis alarm", "cikarilinca", "yalniz bu kaynak"); for (const s of KAYNAK) { const kendi = KURALLAR.filter((t) => KURAL[t][0] === s); const digeri = KURALLAR.filter((t) => KURAL[t][0] !== s); const tek = ozet(kendi), yok = ozet(digeri); yaz(S, s, `${tek.yakalanan}/${zararliSayi}`, tek.yanlis, `${yok.yakalanan}/${zararliSayi}`, T.yakalanan - yok.yakalanan); } // Yalniz tek bir kaynakla yakalanan olaylar adiyla yazilir console.log(); for (const x of alarm(KURALLAR).filter((x) => x.o.zararli && x.kural.length > 0)) { const kaynaklar = [...new Set(x.kural.map((t) => KURAL[t][0]))]; if (kaynaklar.length === 1) console.log(`yalniz "${kaynaklar[0]}" ile: ${x.o.ad}`); } for (const x of alarm(KURALLAR).filter((x) => x.o.zararli && x.kural.length === 0)) console.log(`hicbir kaynak yakalamiyor: ${x.o.ad}`); // Toplama ucreti (kurgu birim): kaynak|gunluk GB|GB basina birim const UCRET = Object.fromEntries(satir(` denetim kaydi|12|0.5 ag akisi|40|0.3 kimlik davranisi|3|0.8`).map(([s, gb, b]) => [s, { gb: +gb, birim: +b }])); const U = [-18, 10, 12, 13, 18]; console.log(); yaz(U, "sinyal kaynagi", "GB/gun", "birim/GB", "birim/ay", "yalniz-bu basina"); let toplamAy = 0, toplamGb = 0; for (const s of KAYNAK) { const ay = UCRET[s].gb * UCRET[s].birim * 30; const digeri = KURALLAR.filter((t) => KURAL[t][0] !== s); const yalniz = T.yakalanan - ozet(digeri).yakalanan; toplamAy += ay; toplamGb += UCRET[s].gb; yaz(U, s, UCRET[s].gb, UCRET[s].birim.toFixed(1), ay.toFixed(0), yalniz ? (ay / yalniz).toFixed(0) : "-"); } yaz(U, "toplam", toplamGb, "", toplamAy.toFixed(0), ""); // Yanlis alarmin urettigi davranis: esigi asan kural kapatiliyor (M20/K04 ile ayni olcu) const ESIK = 3; const kapali = KURALLAR.filter((t) => { const a = alarm([t]).filter((x) => x.kural.length > 0); return a.length - a.filter((x) => x.o.zararli).length >= ESIK; }); const A = ozet(KURALLAR.filter((t) => !kapali.includes(t))); console.log(`\nyanlis alarm esigi ${ESIK}: kapatilan kural ${kapali.join(", ")} ` + `(${kapali.length}/${KURALLAR.length}); kapatildiktan sonra yakalanan ` + `${T.yakalanan} -> ${A.yakalanan}, kacan ${T.kacan} -> ${A.kacan}, ` + `yanlis alarm ${T.yanlis} -> ${A.yanlis}`); const acik = KURALLAR.filter((t) => !kapali.includes(t)); const yeniKacan = alarm(KURALLAR).filter((x) => x.o.zararli && x.kural.length > 0 && !x.kural.some((t) => acik.includes(t))).map((x) => x.o.ad); console.log(`kapatma sonrasi kacana eklenen: ${yeniKacan.join(", ")}; ` + `kapatilan kurallarin baktigi kaynaklarin ucreti (${[...new Set(kapali.map((t) => KURAL[t][0]))].join(", ")}) odenmeye devam ediyor`); // Sinir ve kalan (kurgu): gunluk toplama siniri const SINIR = 60; console.log(`toplama siniri ${SINIR} GB/gun; kullanilan ${toplamGb}, kalan ${SINIR - toplamGb} -> ` + `dorduncu bir kaynak icin ${SINIR - toplamGb} GB/gun yer var, ag akisi ikiye katlansa sinir asilir`);
30 bilinen olay (11 zararli etiketli), 9 tespit kurali, 3 sinyal kaynagi kural sinyal kaynagi alarm yakalanan yanlis alarm T1 denetim kaydi 1 1 0 T2 denetim kaydi 4 1 3 T3 denetim kaydi 2 1 1 T4 ag akisi 3 1 2 T5 ag akisi 5 2 3 T6 ag akisi 2 1 1 T7 kimlik davranisi 5 3 2 T8 kimlik davranisi 2 1 1 T9 kimlik davranisi 3 2 1 toplam 22 9/11 13 sinyal kaynagi tek basina yanlis alarm cikarilinca yalniz bu kaynak denetim kaydi 3/11 4 7/11 2 ag akisi 3/11 6 6/11 3 kimlik davranisi 4/11 3 6/11 3 yalniz "denetim kaydi" ile: toplu-arsiv-silme yalniz "denetim kaydi" ile: politika-genisletme yalniz "ag akisi" ile: depo-disari-kopya yalniz "ag akisi" ile: yeni-hedefe-sizinti yalniz "kimlik davranisi" ile: anahtar-cikarma yalniz "kimlik davranisi" ile: kaba-kuvvet-girisi yalniz "ag akisi" ile: sessiz-yan-kanal yalniz "kimlik davranisi" ile: ortak-hesap-devri hicbir kaynak yakalamiyor: gunluk-kapatma hicbir kaynak yakalamiyor: yavas-sizdirma sinyal kaynagi GB/gun birim/GB birim/ay yalniz-bu basina denetim kaydi 12 0.5 180 90 ag akisi 40 0.3 360 120 kimlik davranisi 3 0.8 72 24 toplam 55 612 yanlis alarm esigi 3: kapatilan kural T2, T5 (2/9); kapatildiktan sonra yakalanan 9 -> 7, kacan 2 -> 4, yanlis alarm 13 -> 7 kapatma sonrasi kacana eklenen: toplu-arsiv-silme, yeni-hedefe-sizinti; kapatilan kurallarin baktigi kaynaklarin ucreti (denetim kaydi, ag akisi) odenmeye devam ediyor toplama siniri 60 GB/gun; kullanilan 55, kalan 5 -> dorduncu bir kaynak icin 5 GB/gun yer var, ag akisi ikiye katlansa sinir asilir
Sayılar ölçüm sınıfındadır; girdileri yukarıdaki varsayımlardır. Dokuz kural otuz olay üzerinde yirmi iki alarm üretiyor: on bir zararlının dokuzu yakalanıyor, ikisi kaçıyor, on üç zararsız olay işaretleniyor. Yanlış alarm sayısının yakalanandan büyük olması bu kümenin seçiminden gelir — zararsız olaylar zararlıların yüzeylerini paylaşacak biçimde seçildi — ama oranın yönü gerçektir: tespit kuralları meşru işi işaretlemeden çalışmaz.
Kural başına bakıldığında dağılım eşit değil. T1 tek bir alarm üretiyor ve hiç yanlışı yok; dar yazılmış bir kuraldır ve karşılığında yalnız bir olay görüyor. T7 beş alarmın üçünü doğru veriyor. T2 ve T5 ise üçer yanlış alarmla en gürültülü ikilidir ve bu iki sayı dersin son bölümünde geri gelecektir.
Sinyal Kaynakları Ayrı Ayrı
Asıl ayrım kaynak tablosundadır ve iki farklı soruyu ayırır. Birinci sütun kaynağın tek başına ne yakaladığını söyler: denetim kaydı üç, ağ akışı üç, kimlik davranışı dört. Üçünün toplamı ondur ama birlikte yakalanan dokuzdur; örtüşme vardır. Üçüncü sütun daha yararlıdır — kaynak çıkarıldığında ne kalıyor. Denetim kaydı çıkarılırsa yakalanan dokuzdan yediye, ağ akışı ya da kimlik davranışı çıkarılırsa altıya iner.
Son sütun kararı taşıyan sayıdır: yalnız bu kaynakla yakalanan olay. Denetim kaydında iki, ağ akışında üç, kimlik davranışında üç. Sekiz zararlı olay tek bir kaynağın omzunda duruyor ve adlarıyla yazılıyor. Toplu arşiv silme ile politika genişletmesini yalnız denetim kaydı görüyor; ikisi de ağda iz bırakmıyor, çünkü dışarı veri çıkmıyor. Depoya yapılan dışarı kopyayı, yeni bir hedefe akan sızıntıyı ve sessiz yan kanalı yalnız ağ akışı görüyor; üçü de yetkili bir öznenin izin verilmiş okuma işlemidir ve denetim kaydında olağan görünür. Anahtar çıkarmayı, kaba kuvvet girişini ve ortak hesap devrini yalnız kimlik davranışı görüyor. Dokuz yakalanandan yalnız biri — gece rol zinciri — iki kaynakta birden görünüyor.
Kaçan ikisi de tabloların altında adıyla duruyor ve neden kaçtıkları birbirine benziyor. Günlük kapatma, mesai saatinde yapılmış tek bir politika değişikliğidir; T1 bunu yakalayabilirdi ama yüklemi saati de arıyor, gece dışında ateşlemiyor. Yavaş sızdırma 45 MB’lık bir okumadır; T4’ün eşiğinin çok altında, T5 için hedef yeni değil. İkisi de kural kümesinin eşiğinin öbür yanındadır, kapsamının değil — yani gevşetilerek yakalanabilirler. T1’den saat koşulunu kaldırmak günlük kapatmayı yakalar ve sürüm yayımını yanlış alarma çevirir; T4’ün eşiğini 40 MB’a indirmek yavaş sızdırmayı yakalar ve o kuralın yanlış alarmını ikiden sekize çıkarır. Eşiği gevşetmek kaçanı yakalanana taşır, ama taşıdığı her olay için yanlış alarm sütununa birden fazla kalem yazar; bir sonraki bölüm bu kalemlerin ne yaptığını sayacaktır.
Buradan çıkan cümle şudur: üç kaynak birbirinin yedeği değildir. Bir kaynağı ücreti yüzünden kesmek, o kaynağın tek başına gördüğü olayları doğrudan kaçana çevirir. Hangi kaynağın kesilebilir olduğu, ücretine değil bu sütuna bakılarak söylenir.
Tespitin İki Bedeli
Birinci bedel ücret tablosudur. Üç kaynak günde 55 GB üretiyor ve ayda 612 kurgu birim tutuyor. Kalemler eşit değil: ağ akışı hacmin dörtte üçünü ve ücretin 360 birimini alıyor, kimlik davranışı üç GB ile 72 birim. Son sütun ikisini karşılaştırılabilir kılar — yalnız o kaynakla yakalanan olay başına düşen aylık ücret: kimlik davranışı 24 birim, denetim kaydı 90, ağ akışı 120. Ağ akışı en pahalı kaynaktır ve üç olayı tek başına gören tek şeydir; ikisi aynı anda doğrudur ve karar bu iki sayının arasında verilir.
İkinci bedel ücretle ödenmez. Yanlış alarm eşiği üçe konduğunda T2 ve T5 kapanıyor; ikisi de üçer yanlış alarm üretmişti. Kapatmadan sonra yakalanan dokuzdan yediye, kaçan ikiden dörde gidiyor, yanlış alarm on üçten yediye iniyor. Kaçana eklenen iki olay adıyla bellidir: toplu arşiv silme ve yeni hedefe sızıntı. İkisi de yalnız kapatılan kuralın gördüğü olaylardı. Bu ölçü M20/K04’ün uygunluk işlevlerinde kullandığı ölçüyle aynı biçimdedir — yakalamayı artıran her ayar yanlış alarmı da artırır ve yanlış alarmın ürettiği davranış kuralın kapatılmasıdır — ilişki bir cümleyle söylenip geçilir.
Bu ikinci bedelin altı çizilmeli: kural kapandığında toplama durmaz. Denetim kaydı ve ağ akışı ücreti aynen ödenmeye devam eder; kesilen şey ücret değil, ücretin satın aldığı görüştür. Kapatma kararını veren de alarmı okuyan ekiptir, dolayısıyla tespitin gerçek kapsamı yazılı kural kümesi değil, açık bırakılmış kural kümesidir ve ikisi arasındaki fark hiçbir faturada görünmez.
Sınır tarafında kalan az: günlük toplama sınırı 60 GB, kullanılan 55, kalan 5. Dördüncü bir sinyal kaynağı için beş GB’lık yer vardır ve ağ akışı ikiye katlanırsa sınır aşılır. Kaynak eklemek de, var olan kaynağın hacminin büyümesi de aynı sınıra çarpar.
Özet
- Dokuz kural otuz olayda yirmi iki alarm üretiyor: on bir zararlının dokuzu yakalanıyor, ikisi hiçbir kaynakta iz bırakmıyor, on üç zararsız olay işaretleniyor.
- Yakalanan dokuz olayın sekizi yalnız tek bir sinyal kaynağıyla yakalanıyor; yalnızca biri iki kaynakta birden görünüyor. Üç kaynak birbirinin yedeği değildir.
- Bir kaynağı çıkarmanın bedeli tablodadır: denetim kaydı çıkarılırsa yakalanan dokuzdan yediye, ağ akışı ya da kimlik davranışı çıkarılırsa altıya iner.
- Toplama ücreti ayda 612 kurgu birimdir; yalnız o kaynakla yakalanan olay başına kimlik davranışı 24, denetim kaydı 90, ağ akışı 120 birim eder.
- Yanlış alarm eşiği üç olduğunda iki kural kapanıyor: yakalanan 9’dan 7’ye, kaçan 2’den 4’e gidiyor, yanlış alarm 13’ten 7’ye iniyor; kapanan kuralların kaynaklarının ücreti ödenmeye devam ediyor.
- Toplama sınırı 60 GB/gün, kullanılan 55, kalan 5; dördüncü bir kaynak ya da ağ akışının büyümesi aynı sınıra çarpar.
Sonraki Adım
Tespit kuralları koştu, yakalanan ve kaçan sayıldı, iki kuralın kapatıldığı da yazıldı. Bu sayıların hepsi içeriye bakan sayılardır: ekibin kendi ölçüsü, kendi eşiği, kendi kararı. Dışarıdan biri “erişimin kısıtlandığını ve olağandışı etkinliğin izlendiğini gösterin” dediğinde ise istenen şey ölçü değil kanıttır ve kanıtın bir kısmı kiracının elinde bile değildir. Sonraki ders uyumluluk gereksinimlerini tür olarak alır ve her gereksinim için kanıtın kimden geldiğini — sağlayıcının belgesi ile kendi kaydın — ayırır, hangi gereksinimde kanıtın boşlukta kaldığını sayar.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.