İçeriğe geç
academia.sh

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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat