İçeriğe geç
academia.sh

Ders 12 / 20

Saldırı Tespit ve Önleme Sistemleri

On dört olay sınıfı ve yedi imza aynı dönem üzerinde koşturulur: ağ tabanlı ile konak tabanlı algılayıcının gördüğü kalem farkı, yakalanan ve kaçan olay, uyarıların ne kadarının yanlış pozitif olduğu, önleme kipine geçilince kesilen meşru iş ve gürültülü imzayı kapatmanın aynı hamlede kaybettirdiği tespit.

İçindekiler

Önceki ders iki yüz on üç bin bağlantıyı bir kayda yazdırdı. Kayıt tutmak görmek değildir: dönemin kayıtları arasında hangisinin bakılmaya değer olduğunu söyleyen bir şey yok. Bu dersin konusu o söylemeyi üstlenen katmandır — ve o katmanın kendisi de sayılabilir bir şey yapar, çünkü her “bakılmaya değer” kararı bir doğru ve bir yanlış üretir.

Ölçülen üç sayı var: dönemin kötü olaylarından kaçı yakalanıyor, yakalananların yanında kaç meşru olay yanlışlıkla işaretleniyor ve tespitten önlemeye geçildiğinde — yani kayıt tutmak yerine bağlantı kesilmeye başlandığında — kaç meşru iş duruyor. Buna bir dördüncü ekleniyor: algılayıcı ağda mı yoksa konakta mı duruyor, çünkü ikisi aynı dönemde farklı olay kümesi görüyor. Bu derste hiçbir saldırı adımı yazılmadı; olay sınıfları savunmanın gördüğü belirtilerdir.

  • CS18. On dört olay sınıfı, dönem sayıları ve yedi imza kurgusal bölgesel ölçüm ağına aittir. Gerçek bir olay üretilmiyor; ölçülen şey node ile kurulan modeldir.
  • CS19. Olayların gerçek sınıfı elle işaretlendi. Gerçekte bu sınıf ancak inceleme sonrası bilinir; modelde bilindiği varsayılıyor ki yanlış pozitif sayılabilsin.
  • CS20. Bir olay sınıfı ya tek bir imzayla eşleşiyor ya hiçbiriyle. Gerçekte bir olay birden çok imzaya değebilir; uyarı sayısını büyütür, oranların yönünü değiştirmez.
  • CS21. Görünürlük üç değerle modellendi: yalnız ağdan, yalnız konaktan ya da ikisinden. Şifreli akış konak tarafında açık, ağ tarafında kapalı sayıldı.
  • CS22. Eşik, sıklık penceresi ve öğrenme evresi modellenmedi. Bir imza ya uyarır ya uyarmaz.
  • CS23. Önleme kipinde uyaran her olayın durdurulduğu varsayıldı; gecikme ve kısmi kesme yok.

Olay Kümesi ve İki Algılayıcı Türü

Model her olay sınıfı için beş şey tutuyor: adı, gerçek sınıfı, hangi konumdan görülebildiği, dönemdeki sayısı ve eşleştiği imza. Algılayıcının uyarması iki koşula bağlı — olayı görebilmesi ve bir imzanın eşleşmesi. İkisi ayrı ayrı sayılabildiği için kaçan olayları iki nedene ayırmak mümkün oluyor.

// olay.mjs — donem olay kumesi, imza listesi ve iki algilayici turu; model, gercek olay degil
// [ad, gercek sinif, gorunurluk, donem sayisi, eslesen imza]
export const OLAY = [
  ['yonetim kapisina yogun deneme', 'kotu', 'ikisi', 12000, 'yogun-deneme'],
  ['bilinmeyen sunucu adina cikis', 'kotu', 'ag', 40, 'bilinmeyen-ad'],
  ['konakta yeni ayricalikli surec', 'kotu', 'konak', 6, 'yeni-surec'],
  ['duzenli aralikli kucuk cikis', 'kotu', 'ikisi', 2880, null],
  ['yerel dosya izninin degismesi', 'kotu', 'konak', 14, 'izin-degisikligi'],
  ['sifreli akis icinde bilinen yuk', 'kotu', 'konak', 3, 'bilinen-yuk'],
  ['ic bolgede tarama benzeri dizi', 'kotu', 'ag', 220, 'tarama-dizisi'],
  ['ceyrek sonu toplu sorgu', 'mesru', 'ikisi', 12, 'tarama-dizisi'],
  ['yedek aktarimi', 'mesru', 'ikisi', 12, 'buyuk-hacim'],
  ['yama dagitimi', 'mesru', 'ikisi', 90, 'yeni-surec'],
  ['saha ucu yeniden baglanma dalgasi', 'mesru', 'ag', 5100, 'yogun-deneme'],
  ['olcut cekme', 'mesru', 'ikisi', 259200, null],
  ['sube arayuz istekleri', 'mesru', 'ag', 184000, null],
  ['zaman kaynagi sorgusu', 'mesru', 'ag', 43200, null],
];
export const SENSOR = { ag: ['ag', 'ikisi'], konak: ['konak', 'ikisi'], ikisi: ['ag', 'konak', 'ikisi'] };
export const IMZA = [...new Set(OLAY.map((o) => o[4]).filter(Boolean))];
export const gorur = (s, o) => SENSOR[s].includes(o[2]);
export const uyarir = (s, o, kapali = []) => gorur(s, o) && o[4] !== null && !kapali.includes(o[4]);
export const topla = (l) => l.reduce((a, o) => a + o[3], 0);
export function say(s, kapali = []) {
  const u = (f) => OLAY.filter((o) => f(o));
  const yakalanan = u((o) => o[1] === 'kotu' && uyarir(s, o, kapali));
  const kacan = u((o) => o[1] === 'kotu' && !uyarir(s, o, kapali));
  const yanlis = u((o) => o[1] === 'mesru' && uyarir(s, o, kapali));
  return { yakalanan, kacan, yanlis, uyari: topla(yakalanan) + topla(yanlis) };
}

İmza kümesi yedi kalemden oluşuyor ve hiçbiri bir ürüne ait değil; her biri bir belirtinin adıdır. Dönemin toplam olay sayısı beş yüz altı bini aşıyor, bunun büyük çoğunluğu üç sınıftan geliyor ve o üç sınıfın hiçbir imzası yok. Ölçüm bu yüzden hacimle değil sınıfla başlıyor: hangi sınıf hangi konumdan görünüyor, hangi sınıfa bir imza değiyor.

Ağ Tabanlı ile Konak Tabanlı

// kosum1.mjs — ag ve konak tabanli algilayicinin gordugu kalem, yakaladigi ve kacirdigi olay
import { OLAY, SENSOR, IMZA, gorur, uyarir, topla, say } from './olay.mjs';

const KOTU = OLAY.filter((o) => o[1] === 'kotu');
console.log(`${OLAY.length} olay sinifi, ${KOTU.length} kotu / ${OLAY.length - KOTU.length} mesru; ` +
  `donemde ${topla(OLAY)} olay, ${IMZA.length} imza\n`);
console.log(`${'olay sinifi'.padEnd(34)} ${'sinif'.padStart(6)} ${'sayi'.padStart(6)} ${'imza'.padStart(17)} ` +
  `${'ag'.padStart(8)} ${'konak'.padStart(8)}`);
for (const o of OLAY)
  console.log(`${o[0].padEnd(34)} ${o[1].padStart(6)} ${String(o[3]).padStart(6)} ${String(o[4] ?? '-').padStart(17)} ` +
    `${(gorur('ag', o) ? (uyarir('ag', o) ? 'uyari' : 'gorur') : '-').padStart(8)} ` +
    `${(gorur('konak', o) ? (uyarir('konak', o) ? 'uyari' : 'gorur') : '-').padStart(8)}`);
console.log(`\n${'algilayici'.padEnd(11)} ${'gordugu sinif'.padStart(13)} ${'yakalanan kotu'.padStart(14)} ` +
  `${'kacan kotu'.padStart(10)} ${'yanlis pozitif sinif'.padStart(20)} ${'donem uyarisi'.padStart(13)}`);
for (const s of Object.keys(SENSOR)) {
  const r = say(s), gordugu = OLAY.filter((o) => gorur(s, o)).length;
  console.log(`${s.padEnd(11)} ${String(gordugu).padStart(13)} ${`${r.yakalanan.length}/${KOTU.length}`.padStart(14)} ` +
    `${String(r.kacan.length).padStart(10)} ${String(r.yanlis.length).padStart(20)} ${String(r.uyari).padStart(13)}`);
}
const ikisi = say('ikisi');
console.log(`\niki algilayici birlikteyken kacan kotu siniflar:`);
for (const o of ikisi.kacan) console.log(`  ${o[0].padEnd(34)} ${String(o[3]).padStart(6)}  ${o[4] === null ? 'imza yok' : 'gorulmuyor'}`);
14 olay sinifi, 7 kotu / 7 mesru; donemde 506777 olay, 7 imza

olay sinifi                         sinif   sayi              imza       ag    konak
yonetim kapisina yogun deneme        kotu  12000      yogun-deneme    uyari    uyari
bilinmeyen sunucu adina cikis        kotu     40     bilinmeyen-ad    uyari        -
konakta yeni ayricalikli surec       kotu      6        yeni-surec        -    uyari
duzenli aralikli kucuk cikis         kotu   2880                 -    gorur    gorur
yerel dosya izninin degismesi        kotu     14  izin-degisikligi        -    uyari
sifreli akis icinde bilinen yuk      kotu      3       bilinen-yuk        -    uyari
ic bolgede tarama benzeri dizi       kotu    220     tarama-dizisi    uyari        -
ceyrek sonu toplu sorgu             mesru     12     tarama-dizisi    uyari    uyari
yedek aktarimi                      mesru     12       buyuk-hacim    uyari    uyari
yama dagitimi                       mesru     90        yeni-surec    uyari    uyari
saha ucu yeniden baglanma dalgasi   mesru   5100      yogun-deneme    uyari        -
olcut cekme                         mesru 259200                 -    gorur    gorur
sube arayuz istekleri               mesru 184000                 -    gorur        -
zaman kaynagi sorgusu               mesru  43200                 -    gorur        -

algilayici  gordugu sinif yakalanan kotu kacan kotu yanlis pozitif sinif donem uyarisi
ag                     11            3/7          4                    4         17474
konak                   9            4/7          3                    3         12137
ikisi                  14            6/7          1                    4         17497

iki algilayici birlikteyken kacan kotu siniflar:
  duzenli aralikli kucuk cikis         2880  imza yok

İki algılayıcı türü aynı dönemde farklı kümeler görüyor ve kesişimleri tam değil. Ağ tabanlı olan on bir sınıf görüyor, konak tabanlı olan dokuz; ikisinin birleşimi on dörttür, yani her sınıf en az birinden görülüyor. Ayrıştıkları yer tek tek satırlarda okunuyor. Konakta açılan ayrıcalıklı bir süreç ve yerel dosya izninin değişmesi ağdan hiç görünmüyor, çünkü bu olaylar hiçbir paket üretmiyor. Şifreli akış içindeki bilinen yük de ağdan görünmüyor — ilk derste ölçülen kayıp burada tespit tarafında karşımıza çıkıyor. Buna karşılık iç bölgedeki tarama benzeri bağlantı dizisi konaktan görünmüyor: her makine kendi payına düşen tek bir bağlantıyı görür, diziyi görmek için bütün makinelerin bağlantılarına aynı anda bakmak gerekir.

Yakalanan sütunu bu farkın toplamıdır. Ağ tabanlı algılayıcı yedi kötü sınıfın üçünü, konak tabanlı dördünü yakalıyor; ikisi birlikte altısını. Tek bir sınıf ikisinden de kaçıyor ve nedeni görünürlük değil: düzenli aralıklı küçük çıkışları iki algılayıcı da görüyor, hiçbir imza eşleşmiyor. Bu olay hiçbir kurala aykırı değildir; aykırı olan düzenliliğidir ve düzenlilik bir imzayla değil, bir taban çizgisiyle yakalanır.

Yanlış pozitif sütunu ise ters yönde okunmalıdır. Ağ tabanlı algılayıcı dört sınıfta, konak tabanlı üç sınıfta yanlış uyarı üretiyor; ikisini birlikte çalıştırmak yanlış pozitif sınıfını dörtte tutuyor ama uyarı sayısını on yedi bin dört yüz yetmiş dörtten on yedi bin dört yüz doksan yediye çıkarıyor. İki algılayıcı aynı olayı iki kez işaretlediğinde yakalanan sınıf artmaz, kuyruk artar. İkisini birlikte kurmanın kazancı — yakalanan sınıfın üçten ya da dörtten altıya çıkması — bedelsiz değildir: iki ayrı kural kümesi, iki ayrı kuyruk ve konak tarafında her makineye yerleştirilecek bir kalem.

Tespit, Önleme ve İmzayı Kapatmak

// kosum2.mjs — ayni kume once tespit sonra onleme kipinde; imza kapatmanin iki yonu
import { OLAY, IMZA, uyarir, topla, say } from './olay.mjs';

console.log(`${'imza'.padEnd(17)} ${'uyardigi kotu'.padStart(13)} ${'uyardigi mesru'.padStart(14)} ${'gurultu payi'.padStart(12)}`);
for (const i of IMZA) {
  const e = OLAY.filter((o) => o[4] === i && uyarir('ikisi', o));
  const [k, m] = [topla(e.filter((o) => o[1] === 'kotu')), topla(e.filter((o) => o[1] === 'mesru'))];
  console.log(`${i.padEnd(17)} ${String(k).padStart(13)} ${String(m).padStart(14)} ${`%${(m * 100 / (k + m)).toFixed(1)}`.padStart(12)}`);
}
console.log(`\n${'imza kumesi'.padEnd(26)} ${'uyari'.padStart(6)} ${'gurultu'.padStart(7)} ${'yakalanan kotu'.padStart(14)} ` +
  `${'kacan kotu'.padStart(10)} ${'onlemede kesilen mesru'.padStart(22)}`);
for (const [ad, kapali] of [['hepsi acik', []], ['buyuk-hacim kapali', ['buyuk-hacim']],
  ['+ yogun-deneme kapali', ['buyuk-hacim', 'yogun-deneme']]]) {
  const r = say('ikisi', kapali);
  console.log(`${ad.padEnd(26)} ${String(r.uyari).padStart(6)} ${`%${(topla(r.yanlis) * 100 / r.uyari).toFixed(1)}`.padStart(7)} ` +
    `${String(topla(r.yakalanan)).padStart(14)} ${String(topla(r.kacan)).padStart(10)} ${String(topla(r.yanlis)).padStart(22)}`);
}
const r = say('ikisi');
console.log('\nonleme kipine gecilince kesilen mesru is:');
for (const o of r.yanlis) console.log(`  ${o[0].padEnd(34)} ${String(o[3]).padStart(5)}  imza: ${o[4]}`);
console.log(`\n${'olcu'.padEnd(30)} ${'tespit kipi'.padStart(11)} ${'onleme kipi'.padStart(11)}`);
for (const [ad, t, o] of [['duran kotu olay', 0, topla(r.yakalanan)], ['kesilen mesru olay', 0, topla(r.yanlis)],
  ['elle bakilacak uyari', r.uyari, r.uyari], ['kacan kotu olay', topla(r.kacan), topla(r.kacan)]])
  console.log(`${ad.padEnd(30)} ${String(t).padStart(11)} ${String(o).padStart(11)}`);
imza              uyardigi kotu uyardigi mesru gurultu payi
yogun-deneme              12000           5100        %29.8
bilinmeyen-ad                40              0         %0.0
yeni-surec                    6             90        %93.8
izin-degisikligi             14              0         %0.0
bilinen-yuk                   3              0         %0.0
tarama-dizisi               220             12         %5.2
buyuk-hacim                   0             12       %100.0

imza kumesi                 uyari gurultu yakalanan kotu kacan kotu onlemede kesilen mesru
hepsi acik                  17497   %29.8          12283       2880                   5214
buyuk-hacim kapali          17485   %29.8          12283       2880                   5202
+ yogun-deneme kapali         385   %26.5            283      14880                    102

onleme kipine gecilince kesilen mesru is:
  ceyrek sonu toplu sorgu               12  imza: tarama-dizisi
  yedek aktarimi                        12  imza: buyuk-hacim
  yama dagitimi                         90  imza: yeni-surec
  saha ucu yeniden baglanma dalgasi   5100  imza: yogun-deneme

olcu                           tespit kipi onleme kipi
duran kotu olay                          0       12283
kesilen mesru olay                       0        5214
elle bakilacak uyari                 17497       17497
kacan kotu olay                       2880        2880

Üst tablo imzaları tek tek tartıyor ve iki uç var. Büyük hacimli aktarım imzası dönemde hiçbir kötü olay yakalamadı, on iki meşru yedek aktarımı işaretledi: gürültü payı yüzde yüz. Bilinen yük ve izin değişikliği imzaları hiç yanlış pozitif üretmedi. Aradaki fark imzanın ne kadar özel yazıldığıdır; hacim ölçen bir imza işin kendisiyle aynı şeye bakar, bir dosya izninin belirli bir biçimde değişmesi işin hiçbir yerinde olmaz.

Alt tablo bu tartının sonucunu koşturuyor. Gürültü payı yüzde yüz olan imzayı kapatmak on iki uyarı düşürüyor ve hiçbir tespit kaybettirmiyor — karşılıksız kazanç budur ve nadirdir. İkinci adım gerçek takası gösteriyor. Yoğun deneme imzası dönemin en gürültülü ikinci imzasıdır ve tek başına beş bin yüz yanlış pozitif üretir; kapatmak uyarı sayısını on yedi binden üç yüz seksen beşe indirir. Aynı hamle yakalanan kötü olayı on iki binden iki yüz seksen üçe düşürür, kaçan kötü olayı iki bin sekiz yüzden on dört bin sekiz yüze çıkarır. Gürültü payı ise yüzde otuzdan yüzde yirmi altıya iner: gürültünün oranı neredeyse değişmez, çünkü hem pay hem payda aynı imzadan geliyordu. Gürültü oranıyla karar veren bir düzen bu hamleyi bir iyileşme sanır.

Son tablo tespit ile önleme arasındaki tek gerçek farkı veriyor. İki kip aynı uyarıyı üretiyor ve aynı olayı kaçırıyor; ayrıştıkları yer ilk iki satırdır. Önleme kipi on iki bin iki yüz seksen üç kötü olayı durduruyor ve karşılığında beş bin iki yüz on dört meşru olayı kesiyor. Kesilen dört sınıfın hangileri olduğu alt listede yazıyor ve sayıdan daha önemli olan sınıfın kendisidir: doksan yama dağıtımı ve on iki yedek aktarımı kesiliyor. Bir önleme sistemi yama dağıtımını durdurduğunda ağı yalnız o dönem için korumuş olmaz; makineleri yamasız bıraktığı için sonraki dönemin açık kalemini kendisi üretir. Beş bin yüz saha ucu yeniden bağlanma denemesinin kesilmesi ise ölçüm verisinin kaybı demektir.

Kesilen sınıflardan biri bu takasın en dar hâlini gösteriyor. Yama dağıtımı ile konakta açılan ayrıcalıklı süreç aynı imzayı tetikliyor ve o imzanın gürültü payı yüzde doksan dörttür: doksan altı işaretin doksanı yanlıştır. Böyle bir imzayı önleme kipinde bırakmak, altı gerçek olayı durdurmak için doksan yama dağıtımını kesmek demektir. Kapatmak ise altı olayı tamamen görünmez kılar. Üçüncü bir seçenek modelde yok ve gerçekte de ucuz değildir: imzayı bağlama duyarlı hâle getirmek, yani süreci neyin başlattığını bilmek. O bilgi ağ katmanında hiç yoktur.

Tespit kipinde bu maliyetlerin hiçbiri yoktur; onun yerine on yedi bin dört yüz doksan yedi uyarının elle bakılacak bir kuyruk oluşturması vardır. İki kip arasındaki seçim bir doğruluk seçimi değildir — aynı imza kümesi, aynı yanlışlar. Seçilen şey yanlışın nereye yazılacağıdır: kesilen meşru işe mi, yoksa kimsenin sonuna kadar bakamayacağı bir kuyruğa mı.

Özet

  • Ağ tabanlı algılayıcı 14 sınıfın 11’ini, konak tabanlı 9’unu görüyor. Konakta açılan ayrıcalıklı süreç ve dosya izni değişikliği ağdan hiç görünmüyor; iç bölgedeki tarama benzeri dizi ise konaktan görünmüyor, çünkü her makine yalnız kendi tek bağlantısını görür.
  • İkisi birlikte 7 kötü sınıfın 6’sını yakalıyor. Kaçan tek sınıfı ikisi de görüyor; eşleşen imza yok — aykırı olan tek şey düzenliliğidir.
  • 7 imzanın gürültü payı %0 ile %100 arasında değişiyor. Büyük hacim imzası dönemde hiç kötü olay yakalamayıp 12 meşru aktarım işaretliyor; kapatmak karşılıksız kazançtır.
  • Yoğun deneme imzasını kapatmak uyarıyı 17.497’den 385’e indiriyor, ama yakalanan kötü olayı 12.283’ten 283’e düşürüp kaçanı 2.880’den 14.880’e çıkarıyor. Gürültü oranı %29,8’den %26,5’e iniyor: oranla karar veren düzen bu hamleyi iyileşme sanır.
  • Önleme kipi 12.283 kötü olayı durdurup 4 sınıfta 5.214 meşru olayı kesiyor; kesilenlerin arasında 90 yama dağıtımı var. İki kip aynı olayı kaçırıyor; seçilen şey yanlışın kesilen işe mi yoksa bakılamayan uyarı kuyruğuna mı yazılacağıdır.

Sonraki Adım

Bu dersin bütün gürültüsü tek bir yerden geldi: imzalar hem meşru işin hem de kötü olayın geçtiği bir alana bakıyordu. Yanlış pozitif oranını düşürmenin yolu daha iyi imza yazmak değil, meşru işin hiç uğramadığı bir yere bakmaktır. Sonraki dersin sorusu budur: dönemde hiçbir meşru bağlantının hiç dokunmaması gereken bir kalem konulursa, ona gelen her etkileşimin yanlış pozitif oranı ne olur, bu sinyal dönemin kaçıncı gününde gelir ve aynı düzenin hiç göremediği kaç kalem kalır.

İ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