Ders 05 / 15
Uygulama Düzeyinde Anormallik Tespiti
Rol taban çizgisine göre puanlanan yedi oturumun kırk beş dakikalık davranış kaydında koşturulması ve işaretleme eşiğinin dört ayarda karşılaştırılması: sapmanın başladığı dakika ile işaretin düştüğü dakika arasındaki gecikme, o gecikmede dışarı çıkan kayıt sayısı, yavaş sapan iç tehdit oturumu ile fatura dönemindeki meşru analist oturumunun puan farkı ve aynı sızıntının tasarım aşamasında kaç kayıt önce kapatıldığı.
İçindekiler
Önceki dört ders isteğe baktı: kural kümesi biçime, hız sayacı sayıya, eşikler hesaba ve adrese, başlıklar yanıta. Dördü de kararını tek bir istek ya da tek bir yanıt üzerinde verdi. Birinci dersten beri hiçbir ayarda durdurulamayan kalem de tam bu yüzden kaçtı: iş akışı dışı toplu indirmenin istekleri tek tek kusursuzdu, kimliği doğrulanmıştı, yetkisi vardı. Yanlış olan tek şey aynı oturumun isteklerinin birlikte çizdiği şekildi.
Bu ders savunmayı isteğin dışına çıkarıp oturumun davranışına taşıyor. Ölçü de değişiyor: durdurulan istek yerine gecikme sayılıyor — sapma başladıktan kaç dakika sonra işaret düşüyor ve o dakikalarda ne kadar veri dışarı çıkıyor. Bu katman bir isteği engellemez; bir oturumu geç ya da erken işaretler.
Taban Çizgisi ve Anormallik Puanı
Aşağıdaki her şey node ile kurulan bir modeldir; gerçek bir oturum kaydı okunmuyor ve hiçbir
oturum ele geçirme yöntemi yazılmıyor. Ele geçmiş oturumlar yalnız davranış vektörleriyle,
yani dakikadaki istek, benzersiz uç, kayıt ve ilk kez görülen uç sayısıyla temsil ediliyor.
- US21. Yedi oturum, üç rol taban çizgisi ve kırk beş dakikalık pencere kurgusal ölçüm ağına aittir. Taban çizgisi otuz günlük olağan davranışın ortalaması olarak veriliyor.
- US22. Puan, her özelliğin taban çizgisine oranından türer ve özellik başına sapma payı iki birimle sınırlanır. Tavan olmasaydı tek bir uç değer oturumu anında işaretlerdi; gerçek puanlama düzeneklerinde de böyle bir doyum vardır.
- US23. İşaret, son beş dakikanın puan toplamı eşiği aştığında düşer. Yığın penceresi sabittir; değişen tek şey eşiktir.
- US24. Meşru oturumlardan ikisi kasten olağan dışıdır: fatura dönemindeki analistin kayıt hacmi taban çizgisinin iki buçuk katına çıkıyor, yeni başlayan saha teknisyeninin ise ilk kez görülen uç sayısı yüksek. İkisi de yanlış işaret adayıdır.
- US25. “Daha erken kapatma aşaması” sütunu her kötü oturum için elle işaretlendi.
// davranis.mjs — kirk bes dakikalik oturum davranis kaydi ve anormallik puanlamasi; model export const SURE = 45; export const OZELLIK = ['istek/dk', 'benzersiz uc', 'kayit/dk', 'ilk kez gorulen uc']; export const AGIRLIK = [1, 1.5, 2, 2.5]; export const TAVAN = 2; // ozellik basina sapma payi tavani // rol taban cizgisi: otuz gunluk olagan davranistan cikarilmis ortalama export const TABAN = { abone: [4, 3, 12, 0.2], saha: [9, 5, 40, 0.4], analist: [6, 7, 300, 0.3], }; // [oturum, rol, gercek sinif, sapma dakikasi, sapma carpanlari, kac dakikada tam carpan, erken asama] export const OTURUM = [ ['abone-3391', 'abone', 'mesru', Infinity, [1, 1, 1, 1], 1, '-'], ['saha-12, vardiya', 'saha', 'mesru', Infinity, [1, 1, 1, 1], 1, '-'], ['analist-4, fatura donemi', 'analist', 'mesru', 0, [1.2, 1.1, 2.6, 1.3], 4, '-'], ['saha-58, yeni baslayan', 'saha', 'mesru', 0, [0.8, 1.8, 0.9, 6.0], 3, '-'], ['abone-8842, ele gecmis', 'abone', 'kotu', 12, [3.5, 2.5, 22, 5], 3, 'kod'], ['analist-9, ic tehdit', 'analist', 'kotu', 8, [1.4, 1.3, 2.2, 1.5], 12, 'tasarim'], ['saha-31, calinan jeton', 'saha', 'kotu', 20, [2.2, 4.4, 3.5, 9], 2, 'yok'], ]; // bir oturumun dakika dakika ozellik vektoru export function kayit(o) { const [, rol, , sapma, carpan, ramp] = o, t0 = TABAN[rol], d = []; for (let t = 0; t < SURE; t++) { const f = t < sapma ? 0 : Math.min(1, (t - sapma + 1) / ramp); d.push(t0.map((b, i) => b * (1 + (carpan[i] - 1) * f))); } return d; } export const puan = (v, rol) => v.reduce((t, x, i) => t + AGIRLIK[i] * Math.min(TAVAN, Math.max(0, x / TABAN[rol][i] - 1)), 0); export const yigin = (o, pen = 5) => { const p = kayit(o).map((v) => puan(v, o[1])); return p.map((_, t) => p.slice(Math.max(0, t - pen + 1), t + 1).reduce((x, y) => x + y, 0)); }; // son `pen` dakikanin puan toplami esigi asinca oturum isaretlenir export function isaretle(o, esik, pen = 5) { const d = kayit(o), p = d.map((v) => puan(v, o[1])); for (let t = 0; t < SURE; t++) { const yig = p.slice(Math.max(0, t - pen + 1), t + 1).reduce((x, y) => x + y, 0); if (yig >= esik) { const bas = Number.isFinite(o[3]) ? o[3] : 0; const kayitSayisi = d.slice(bas, t + 1).reduce((x, v) => x + v[2], 0); return { dakika: t, gecikme: t - bas, kayitSayisi: Math.round(kayitSayisi) }; } } return null; }
Kaç Dakika Gecikmeyle
// kosum.mjs — ayni davranis kaydi, degisen tek sey isaretleme esigi import { SURE, OTURUM, kayit, puan, yigin, isaretle } from './davranis.mjs'; const s = (x, n) => String(x).padStart(n); console.log(`${OTURUM.length} oturum, ${SURE} dakika, 3 rol taban cizgisi\n`); console.log(`${'oturum'.padEnd(26)}${s('rol', 9)}${s('sinif', 7)}${s('sapma dk', 10)}` + `${s('en yuksek dk puani', 20)}${s('en yuksek yigin', 17)}${s('toplam kayit', 14)}${s('erken asama', 13)}`); for (const o of OTURUM) { const d = kayit(o), p = d.map((v) => puan(v, o[1])); console.log(`${o[0].padEnd(26)}${s(o[1], 9)}${s(o[2], 7)}` + `${s(Number.isFinite(o[3]) ? o[3] : '-', 10)}${s(Math.max(...p).toFixed(2), 20)}` + `${s(Math.max(...yigin(o)).toFixed(1), 17)}` + `${s(Math.round(d.reduce((x, v) => x + v[2], 0)), 14)}${s(o[6], 13)}`); } console.log(`\n${'esik'.padEnd(6)}${s('isaretlenen kotu', 18)}${s('kacirilan kotu', 16)}` + `${s('yanlis isaretlenen', 20)}${s('ortalama gecikme dk', 21)}${s('gecikmede inen kayit', 22)}`); const K = OTURUM.filter((o) => o[2] === 'kotu'), M = OTURUM.filter((o) => o[2] === 'mesru'); for (const esik of [40, 30, 20, 12]) { const ik = K.filter((o) => isaretle(o, esik)), im = M.filter((o) => isaretle(o, esik)); const g = ik.map((o) => isaretle(o, esik)); console.log(`${String(esik).padEnd(6)}${s(`${ik.length}/${K.length}`, 18)}` + `${s(K.length - ik.length, 16)}${s(`${im.length}/${M.length}`, 20)}` + `${s((g.reduce((x, r) => x + r.gecikme, 0) / g.length).toFixed(1), 21)}` + `${s(g.reduce((x, r) => x + r.kayitSayisi, 0), 22)}`); } for (const esik of [30, 20]) { console.log(`\nesik ${esik}, oturum oturum:`); console.log(` ${'oturum'.padEnd(26)}${s('sinif', 7)}${s('isaret dk', 15)}${s('gecikme dk', 12)}` + `${s('gecikmede inen kayit', 22)}`); for (const o of OTURUM) { const r = isaretle(o, esik); console.log(` ${o[0].padEnd(26)}${s(o[2], 7)}${s(r ? r.dakika : 'isaretlenmedi', 15)}` + `${s(r ? r.gecikme : '-', 12)}${s(r && o[2] === 'kotu' ? r.kayitSayisi : '-', 22)}`); } }
7 oturum, 45 dakika, 3 rol taban cizgisi oturum rol sinif sapma dk en yuksek dk puani en yuksek yigin toplam kayit erken asama abone-3391 abone mesru - 0.00 0.0 540 - saha-12, vardiya saha mesru - 0.00 0.0 1800 - analist-4, fatura donemi analist mesru 0 4.30 21.5 34380 - saha-58, yeni baslayan saha mesru 0 6.20 31.0 1624 - abone-8842, ele gecmis abone kotu 12 13.25 66.3 8604 kod analist-9, ic tehdit analist kotu 8 4.50 22.5 24840 tasarim saha-31, calinan jeton saha kotu 20 13.20 66.0 4250 yok esik isaretlenen kotu kacirilan kotu yanlis isaretlenen ortalama gecikme dk gecikmede inen kayit 40 2/3 1 0/4 3.0 1314 30 2/3 1 1/4 2.0 910 20 3/3 0 2/4 4.7 7106 12 3/3 0 2/4 3.3 4556 esik 30, oturum oturum: oturum sinif isaret dk gecikme dk gecikmede inen kayit abone-3391 mesru isaretlenmedi - - saha-12, vardiya mesru isaretlenmedi - - analist-4, fatura donemi mesru isaretlenmedi - - saha-58, yeni baslayan mesru 5 5 - abone-8842, ele gecmis kotu 14 2 540 analist-9, ic tehdit kotu isaretlenmedi - - saha-31, calinan jeton kotu 22 2 370 esik 20, oturum oturum: oturum sinif isaret dk gecikme dk gecikmede inen kayit abone-3391 mesru isaretlenmedi - - saha-12, vardiya mesru isaretlenmedi - - analist-4, fatura donemi mesru 6 6 - saha-58, yeni baslayan mesru 3 3 - abone-8842, ele gecmis kotu 13 1 276 analist-9, ic tehdit kotu 20 12 6600 saha-31, calinan jeton kotu 21 1 230
İlk tablonun iki satırı yan yana okunmalıdır. Fatura dönemindeki meşru analistin en yüksek beş dakikalık yığını 21,5, iç tehdit oturumunun 22,5. Aradaki fark bir birimdir ve puanlamanın gördüğü her şey bu farktan ibarettir. İkisi de aynı rolde, taban çizgisinin birkaç katı hacimle çalışıyor; birinin yaptığı dönem sonu raporu, ötekinin sızdırma. Puanlama bu iki oturumu ayıramaz, çünkü ayrım davranışta değil niyettedir — birinci dersteki kural kümesinin sınırının aynısı, bir katman yukarıda.
Eşik tablosu bunun sonucunu veriyor. Eşik kırkta hiçbir meşru oturum işaretlenmiyor, ortalama gecikme üç dakika, ama iç tehdit hiç yakalanmıyor: yığını hiçbir zaman kırka ulaşmıyor. Eşik otuzda tablo daha da iyi görünür — gecikme iki dakikaya, gecikmede inen kayıt dokuz yüz ona düşer — ama iç tehdit yine kaçıyor ve yeni başlayan saha teknisyeni yanlış işaretleniyor. İç tehdidin yakalandığı ilk ayar yirmidir ve orada dört sayının üçü birden kötüleşir: yanlış işaretlenen oturum ikiye, ortalama gecikme 4,7 dakikaya, gecikmede inen kayıt yedi bin yüz altıya çıkar.
Oturum bazlı iki liste gecikmenin nereden geldiğini gösteriyor. Ele geçmiş abone oturumu ile çalınan jeton oturumu hızlı sapıyor ve bir ya da iki dakikada işaretleniyor; ikisinin gecikmede çıkardığı kayıt iki yüz otuz ile beş yüz kırk arasındadır. İç tehdit ise on iki dakika sonra işaretleniyor ve o sürede altı bin altı yüz kayıt indiriyor — üç kötü oturumun toplam gecikme maliyetinin yüzde doksan üçü. Yavaş sapan oturum hem en geç yakalanandır hem de en çok veri çıkarandır; gecikme ile zarar aynı yönde büyür.
Gecikmenin Nereye Ait Olduğu
// asama.mjs — ayni sizintiyi daha erken hangi asama, kac kayit onceden kapatir import { SURE, OTURUM, TABAN, kayit, isaretle } from './davranis.mjs'; const s = (x, n) => String(x).padStart(n); const bul = (ad) => OTURUM.find((o) => o[0].startsWith(ad)); const tehdit = bul('analist-9'), donem = bul('analist-4'), T = TABAN.analist[2]; const kum = (o) => kayit(o).reduce((a, v) => (a.push((a.at(-1) || 0) + v[2]), a), []); const fazla = (o, t) => Math.round(kum(o)[t] - T * (t + 1)); const tavanla = (o, tavan) => { const k = kum(o), t = k.findIndex((x) => x >= tavan); return t < 0 ? { dk: 'kesilmedi', t: SURE - 1 } : { dk: `${t}. dk`, t }; }; console.log(`analist rolunun taban cizgisi ${T} kayit/dk; ${SURE} dakikalik olagan is ${T * SURE} kayit`); console.log(`ic tehdit oturumu toplam ${Math.round(kum(tehdit).at(-1))} kayit indirdi,` + ` taban ustu ${fazla(tehdit, SURE - 1)}\n`); console.log(`${'onlem'.padEnd(32)}${s('asama', 16)}${s('taban ustu kayit', 18)}${s('mesru bedel', 30)}`); const e20 = isaretle(tehdit, 20), e40 = isaretle(tehdit, 40); for (const [a, b, c, d] of [ ['onlem yok', '-', fazla(tehdit, SURE - 1), '0'], ['anormallik esigi 40', 'calisma zamani', e40 ? fazla(tehdit, e40.dakika) : fazla(tehdit, SURE - 1), 'yanlis isaret yok'], ['anormallik esigi 20', 'calisma zamani', fazla(tehdit, e20.dakika), `donem analisti ${isaretle(donem, 20).dakika}. dk isaretli`], ['rol basina kayit tavani 18000', 'tasarim', fazla(tehdit, tavanla(tehdit, 18000).t), `donem analisti ${tavanla(donem, 18000).dk} kesilir`], ['toplu cikarma kuyruk isine alinir', 'tasarim', 0, 'toplu is onaya girer'], ]) console.log(`${a.padEnd(32)}${s(b, 16)}${s(c, 18)}${s(d, 30)}`); console.log(`\n${'tavan'.padEnd(8)}${s('ic tehdit kesildi', 19)}${s('taban ustu kayit', 18)}` + `${s('donem analisti kesildi', 24)}${s('kesilen mesru kayit', 21)}`); for (const tv of [13500, 18000, 25000]) { const a = tavanla(tehdit, tv), b = tavanla(donem, tv); console.log(`${String(tv).padEnd(8)}${s(a.dk, 19)}${s(fazla(tehdit, a.t), 18)}${s(b.dk, 24)}` + `${s(Math.round(kum(donem).at(-1) - kum(donem)[b.t]), 21)}`); } console.log(`\n${'kotu oturum'.padEnd(26)}${s('esik 20 gecikme', 17)}${s('erken asama', 13)}${s('orada kapanan', 16)}`); const NE = { kod: 'ikinci etken', tasarim: 'is akisi', yok: 'yok' }; for (const o of OTURUM.filter((x) => x[2] === 'kotu')) console.log(`${o[0].padEnd(26)}${s(`${isaretle(o, 20).gecikme} dk`, 17)}${s(o[6], 13)}${s(NE[o[6]], 16)}`);
analist rolunun taban cizgisi 300 kayit/dk; 45 dakikalik olagan is 13500 kayit ic tehdit oturumu toplam 24840 kayit indirdi, taban ustu 11340 onlem asama taban ustu kayit mesru bedel onlem yok - 11340 0 anormallik esigi 40 calisma zamani 11340 yanlis isaret yok anormallik esigi 20 calisma zamani 2700 donem analisti 6. dk isaretli rol basina kayit tavani 18000 tasarim 7740 donem analisti 23. dk kesilir toplu cikarma kuyruk isine alinir tasarim 0 toplu is onaya girer tavan ic tehdit kesildi taban ustu kayit donem analisti kesildi kesilen mesru kayit 13500 27. dk 5220 18. dk 20280 18000 34. dk 7740 23. dk 16380 25000 kesilmedi 11340 32. dk 9360 kotu oturum esik 20 gecikme erken asama orada kapanan abone-8842, ele gecmis 1 dk kod ikinci etken analist-9, ic tehdit 12 dk tasarim is akisi saha-31, calinan jeton 1 dk yok yok
Üst tablo kaba bir tasarım önleminin çalışma zamanı puanlamasından daha kötü olabileceğini gösteriyor. Rol başına on sekiz binlik bir kayıt tavanı iç tehdidin taban üstü çıkardığı kaydı yalnız on bir bin üç yüz kırktan yedi bin yedi yüz kırka indiriyor; anormallik eşiği yirmi aynı kalemi iki bin yedi yüzde durduruyor. Orta tablo tavanın neden bu kadar zayıf kaldığını yazıyor: tavanı iç tehdidi erken kesecek kadar indirmek gerekir, ama on üç bin beş yüzlük tavan fatura dönemi analistini on sekizinci dakikada kesip yirmi bin iki yüz seksen meşru kaydı dışarıda bırakıyor. Sabit bir sayı, dönemsel iş yükü olan bir rolde ayarlanamaz.
Ayarlanabilen şey iş akışının kendisidir. Toplu çıkarma etkileşimli uçtan alınıp onaylı bir kuyruk işine taşındığında oturumun taban üstü çıkarabileceği kayıt sıfırdır: iç tehdit oturumu o hacmi üretemez, çünkü etkileşimli uçta o yetenek yoktur. Meşru bedel de daha küçüktür — dönem analistinin toplu işi kesilmez, onaya girer ve gecikir. Bu, tasarımda bir kez verilen karardır; her gün eşik ayarlamayı gerektirmez.
Alt tablo üç kötü oturumu ayırıyor. Ele geçmiş abone oturumu bir dakika gecikmeyle yakalanıyor, ama zaten daha ucuzu vardı: aynı ele geçirmeyi üçüncü ders ikinci etkenle yetmişten beşe indirmişti. İç tehdit on iki dakika gecikmeyle yakalanıyor ve doğru yeri iş akışıdır. Çalınan jeton oturumu için ise erken aşama yoktur; jeton geçerlidir, kimlik doğrulaması başarılıdır ve hiçbir tasarım ya da kod kararı geçerli bir kimlik bilgisini geçersiz kılmaz. Bu katmanın karşılıksız payı o tek satırdır — ve o satır bile bir dakikalık gecikme taşır.
Özet
- Fatura dönemindeki meşru analistin en yüksek beş dakikalık yığını 21,5, iç tehdit oturumunun 22,5. Puanlamanın iki oturum arasında gördüğü fark bir birimdir; ayrım davranışta değil niyettedir.
- Eşik 40 ve 30, hiçbir meşru oturumu ya da yalnız birini işaretleyip iç tehdidi kaçırıyor. İç tehdidin yakalandığı ilk ayar 20’dir ve orada yanlış işaretlenen oturum 2/4’e, ortalama gecikme 4,7 dakikaya, gecikmede inen kayıt 7.106’ya çıkar.
- Hızlı sapan iki oturum 1–2 dakikada işaretlendi ve gecikmede 230–540 kayıt çıkardı. Yavaş sapan iç tehdit 12 dakikada işaretlendi ve 6.600 kayıt çıkardı: toplam gecikme maliyetinin yüzde 93’ü. Gecikme ile zarar aynı yönde büyür.
- Kaba bir tasarım önlemi çalışma zamanından kötü olabilir: 18.000’lik kayıt tavanı taban üstü sızıntıyı 7.740’ta, anormallik eşiği 20 ise 2.700’de durdurdu. 13.500’lük tavan iç tehdidi 27. dakikada keserken dönem analistinin 20.280 meşru kaydını da kesiyor.
- Toplu çıkarmanın onaylı kuyruk işine alınması taban üstü kaydı sıfırlıyor ve meşru işi kesmiyor, yalnız geciktiriyor. Üç kötü oturumdan biri kod aşamasında (ikinci etken), biri tasarımda (iş akışı) kapanıyor; çalınan jeton oturumu için erken aşama yoktur.
Sonraki Adım
Bu konu istek katmanında ne yakalandığını ve neyin yanlış kesildiğini beş derste saydı: kural kümesi, hız sınırı, hesap ve adres eşikleri, başlık kapsamı, oturum davranışı. Her derste bir kalem sınıfı için “burada değil, daha erken kapanırdı” yazıldı ve her derste bir tane de tersi çıktı — yalnız burada kapatılabilen bir sınıf.
Bu dersin çalınan jeton oturumu tam olarak o sınıftandır ve bıraktığı soru bütün konuyu aşıyor. O oturum işaretlendi, ama işaretlenmesini gerektiren şey jetonun hâlâ geçerli olmasıydı. Beş dersin savunmaları da aynı varsayıma dayanır: arkalarında duran anahtarlar, jetonlar ve kimlik bilgileri geçerlidir ve geçerli kaldıkları sürece bu katmanlar davranışa bakmak zorundadır. O kimlik bilgilerinin nerede durduğu, kimin okuyabildiği ve ne kadar süreyle geçerli kaldığı ise hiç sorulmadı. Sonraki konu bunu sorar ve ilk ölçüsü ömürdür: bir sırrın geçerli kaldığı süre, açık bıraktığı pencerenin kendisidir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.