Ders 08 / 16
Kötü Amaçlı Yazılım Karşıtı Yazılımlar
Yirmi çalıştırma kalemi aynı kümede iki tespit türüyle değerlendirilir: imza tabanlı tespitin yakaladığı, kaçırdığı ve yanlış işaretlediği kalem; altı belirtiden türetilen davranış puanının eşik taraması; eşik düştükçe kaçırılanın azalıp yanlış pozitifin artması; engelleme kipinde kapanan tutunma noktası ile kesilen meşru iş ve uyarı kipinde yalnız görünür kılınan aynı nokta.
İçindekiler
Önceki ders on türün yedisini nokta kapatmayla durduramadı ve ikisinin kapatılacak noktası bile yoktu. O yediyi durduracak katman farklı bir soru sorar: uçta bir şey çalıştığında bu kalemin sakıncalı olduğu nereden bilinir? İki ayrı cevap var ve ikisi de aynı çalıştırma kümesi üzerinde ölçülebilir.
Birinci cevap tanımaya dayanır: bu kalemi daha önce gördüm ve sakıncalı olarak işaretlemiştim. İkinci cevap davranışa dayanır: bu kalemin yaptığı işler sakıncalı kalemlerin yaptıklarına benziyor. Birincinin tek bir ayarı yoktur, ikincinin bir eşiği vardır ve bu ders o eşiği uçtan uca tarar. Ölçülen üç sayı her koşumda birlikte yazılır: kaç kötü kalem yakalandı, kaçı kaçtı, kaç meşru kalem yanlışlıkla işaretlendi. Ağ tarafında tespit başka bir kursta ölçülmüştü ve orada eşik modellenmemişti; burada ölçülen tam olarak eşiğin kendisidir.
- UK7. Yirmi çalıştırma kalemi, altı belirti ve ağırlıkları kurgusal bölgesel ölçüm ağının bir
saha dizüstü ucuna aittir. Gerçek bir kalem çalıştırılmıyor; ölçülen şey
nodeile kurulan modeldir. - UK8. Kalemlerin gerçek sınıfı modelde bilinir. Gerçekte bu sınıf ancak inceleme sonrası bilinir; bilindiği varsayılıyor ki kaçırılan ile yanlış pozitif ayrı ayrı sayılabilsin.
- UK9. Davranış puanı belirti ağırlıklarının toplamıdır ve ağırlıklar sabittir. Gerçek düzeneklerde ağırlık öğrenilir ve zamanla kayar; sabit ağırlık eğrinin biçimini basitleştirir, iki yanlışın ters yönünü değiştirmez.
- UK10. İmza üç değerle modellendi: kesin eşleşme, geniş eşleşme ve eşleşmeme. Geniş eşleşme bir paketleme biçimine bakan kural demektir ve meşru bir kaleme de değebilir.
- UK11. Bir kalem ya çalışır ya engellenir; kısmi engelleme, karantinaya alma ve geri alma modellenmedi.
- UK12. Tutunma noktası sütunu önceki dersin envanterinden gelir: kalemin yazdığı nokta sayısıdır. Puanla ilişkisi yoktur; ayrı bir sütun olarak taşınır.
Belirtiden Türetilen Puan
Davranış puanı elle verilmiş bir sayı değil, altı belirtinin ağırlıklarının toplamıdır. Ağırlıklar belirtinin ne kadar ayırt edici olduğunu söyler: başka bir sürecin belleğine yazmak ve otomatik çalıştırılan bir noktaya kalem eklemek en yüksek ağırlığı taşır, alışılmadık saatte çalışmak en düşüğü. Belirtilerin hiçbiri tek başına sakıncalı değildir; meşru yönetim araçları da aynı işleri yapar ve modelin gerilimi buradan çıkar.
// olay.mjs — uctaki calistirma olaylari, belirti agirliklari ve iki tespit turu; model export const BELIRTI = { 'tutunma noktasina yazma': 3, 'baska surece yazma': 3, 'imzasiz ikili': 2, 'toplu dosya degisikligi': 2, 'dis adrese surekli baglanti': 2, 'kullanici disi saatte calisma': 1, }; const B = Object.keys(BELIRTI); const [N, S, I, D, G, Z] = B; // [kalem, gercek sinif, imza durumu, belirtiler, yazdigi tutunma noktasi sayisi] export const OLAY = [ ['ag uzerinden gelen bilesen', 'kotu', 'kesin', [N, I, G, Z], 2], ['uzaktan komut bekleyen bilesen', 'kotu', 'yok', [N, S, G], 2], ['veriyi sifreleyen bilesen', 'kotu', 'kesin', [I, D, G, Z], 0], ['tus ve ekran kaydeden bilesen', 'kotu', 'yok', [N, S, Z], 3], ['bellekte kalan yukleyici', 'kotu', 'yok', [I, G], 0], ['yerlesik araclarla kosan adim', 'kotu', 'yok', [G, Z], 0], ['uc nokta yonetim ajani', 'mesru', 'yok', [N, S, G], 2], ['yama dagitim ajani', 'mesru', 'yok', [N, D, Z], 1], ['yedekleme araci', 'mesru', 'yok', [D, G, Z], 0], ['envanter tarama araci', 'mesru', 'yok', [N, G], 1], ['kurumsal kurulum paketi', 'mesru', 'genel', [N, I], 1], ['uzak destek istemcisi', 'mesru', 'yok', [S, G], 0], ['saha olcum yukleyicisi', 'mesru', 'yok', [I, G, Z], 0], ['derleyici cikti dizini', 'mesru', 'yok', [I, D], 0], ['zamanlanmis rapor betigi', 'mesru', 'yok', [N, Z], 1], ['gunluk toplayici', 'mesru', 'yok', [G, Z], 0], ['disk sifreleme yardimcisi', 'mesru', 'yok', [D, Z], 0], ['arsivleme araci', 'mesru', 'yok', [D], 0], ['tarayici', 'mesru', 'yok', [G], 0], ['belge duzenleyici', 'mesru', 'yok', [], 0], ]; export const puan = (o) => o[3].reduce((a, b) => a + BELIRTI[b], 0); export const ENUST = Object.values(BELIRTI).reduce((a, b) => a + b, 0); export const imzaUyarir = (o) => o[2] !== 'yok'; export const davranisUyarir = (o, esik) => puan(o) >= esik; export function say(uyarir) { const k = OLAY.filter((o) => o[1] === 'kotu'); const yakalanan = k.filter(uyarir), yanlis = OLAY.filter((o) => o[1] === 'mesru' && uyarir(o)); return { yakalanan, kacan: k.filter((o) => !uyarir(o)), yanlis, nokta: yakalanan.reduce((a, o) => a + o[4], 0), mesruNokta: yanlis.reduce((a, o) => a + o[4], 0) }; }
İmzanın Üç Sayısı
// kosum1.mjs — olay kumesi, belirtiden turetilen davranis puani ve imza tabanli tespitin uc sayisi import { OLAY, BELIRTI, ENUST, puan, imzaUyarir, say } from './olay.mjs'; console.log(`${OLAY.length} calistirma kalemi, ${OLAY.filter((o) => o[1] === 'kotu').length} kotu; ` + `${Object.keys(BELIRTI).length} belirti, en yuksek puan ${ENUST}\n`); console.log(`${'belirti'.padEnd(30)} ${'agirlik'.padStart(7)} ${'kotu kalemde'.padStart(12)} ${'mesru kalemde'.padStart(13)}`); for (const [b, a] of Object.entries(BELIRTI)) { const g = OLAY.filter((o) => o[3].includes(b)); console.log(`${b.padEnd(30)} ${String(a).padStart(7)} ${String(g.filter((o) => o[1] === 'kotu').length).padStart(12)} ` + `${String(g.filter((o) => o[1] === 'mesru').length).padStart(13)}`); } console.log(`\n${'kalem'.padEnd(30)} ${'sinif'.padStart(5)} ${'imza'.padStart(5)} ${'puan'.padStart(4)} ${'nokta'.padStart(5)}`); for (const o of [...OLAY].sort((a, b) => puan(b) - puan(a))) console.log(`${o[0].padEnd(30)} ${o[1].padStart(5)} ${o[2].padStart(5)} ${String(puan(o)).padStart(4)} ${String(o[4]).padStart(5)}`); const r = say(imzaUyarir); console.log(`\nimza tabanli tespit: yakalanan ${r.yakalanan.length}/${r.yakalanan.length + r.kacan.length}, ` + `kacan ${r.kacan.length}, yanlis pozitif ${r.yanlis.length}`); console.log(` kacanlar: ${r.kacan.map((o) => o[0]).join('; ')}`); console.log(` yanlis pozitif: ${r.yanlis.map((o) => `${o[0]} (${o[2]} imza)`).join('; ')}`);
20 calistirma kalemi, 6 kotu; 6 belirti, en yuksek puan 13 belirti agirlik kotu kalemde mesru kalemde tutunma noktasina yazma 3 3 5 baska surece yazma 3 2 2 imzasiz ikili 2 3 3 toplu dosya degisikligi 2 1 5 dis adrese surekli baglanti 2 5 7 kullanici disi saatte calisma 1 4 6 kalem sinif imza puan nokta ag uzerinden gelen bilesen kotu kesin 8 2 uzaktan komut bekleyen bilesen kotu yok 8 2 uc nokta yonetim ajani mesru yok 8 2 veriyi sifreleyen bilesen kotu kesin 7 0 tus ve ekran kaydeden bilesen kotu yok 7 3 yama dagitim ajani mesru yok 6 1 yedekleme araci mesru yok 5 0 envanter tarama araci mesru yok 5 1 kurumsal kurulum paketi mesru genel 5 1 uzak destek istemcisi mesru yok 5 0 saha olcum yukleyicisi mesru yok 5 0 bellekte kalan yukleyici kotu yok 4 0 derleyici cikti dizini mesru yok 4 0 zamanlanmis rapor betigi mesru yok 4 1 yerlesik araclarla kosan adim kotu yok 3 0 gunluk toplayici mesru yok 3 0 disk sifreleme yardimcisi mesru yok 3 0 arsivleme araci mesru yok 2 0 tarayici mesru yok 2 0 belge duzenleyici mesru yok 0 0 imza tabanli tespit: yakalanan 2/6, kacan 4, yanlis pozitif 1 kacanlar: uzaktan komut bekleyen bilesen; tus ve ekran kaydeden bilesen; bellekte kalan yukleyici; yerlesik araclarla kosan adim yanlis pozitif: kurumsal kurulum paketi (genel imza)
Belirti tablosu ilk sonucu veriyor ve hiç ümit verici değil: altı belirtinin her biri meşru kalemlerde kötü kalemlerde olduğundan daha çok geçiyor. Dış adrese sürekli bağlantı beş kötü, yedi meşru kalemde var; tutunma noktasına yazma üç kötü, beş meşru kalemde. Bu bir modelleme kusuru değil, uçların gerçeğidir: bir uçta çalışan meşru yazılım sayısı kötü kalem sayısından çok büyüktür, dolayısıyla her belirti mutlak sayıyla meşru tarafta daha kalabalıktır.
Sıralı liste bunun sonucunu tek satırda gösteriyor. En yüksek puanlı üç kalemden biri meşrudur ve sekiz puanla iki kötü kalemle aynı yerde durur: uç nokta yönetim ajanı otomatik çalıştırılan noktalara yazar, başka süreçlere kod enjekte eder ve dışarıya sürekli bağlanır. Davranış tabanlı hiçbir eşik bu kalemi ikisinden ayıramaz, çünkü ayıracak bir sayı yoktur.
İmza tabanlı tespitin üç sayısı listenin altında. Altı kötü kalemin ikisini yakalıyor, dördünü kaçırıyor ve bir meşru kalemi işaretliyor. Kaçırdıklarının ortak yanı önceden görülmemiş olmaktır; işaretlediği meşru kalem ise geniş bir imzaya değiyor. Sıfır yanlış pozitif, imza tabanlı tespitin sık dile getirilen üstünlüğüdür ve modelde bile doğru değildir: geniş yazılan tek bir kural bu üstünlüğü bitirir.
Eşiği Oynatmak
// kosum2.mjs — davranis esigi taramasi; iki yanlisin ters yonu ve birlesik tespitin bedeli import { OLAY, puan, imzaUyarir, davranisUyarir, say } from './olay.mjs'; const KOTU = OLAY.filter((o) => o[1] === 'kotu').length; console.log(`${'esik'.padStart(4)} ${'yakalanan'.padStart(9)} ${'kacan'.padStart(5)} ${'yanlis'.padStart(6)} ` + `${'birlesik yak.'.padStart(13)} ${'birlesik yanlis'.padStart(15)} ${'toplam yanlis'.padStart(13)}`); const sonuc = []; for (let e = 1; e <= 10; e++) { const d = say((o) => davranisUyarir(o, e)); const b = say((o) => imzaUyarir(o) || davranisUyarir(o, e)); sonuc.push({ e, d, b }); console.log(`${String(e).padStart(4)} ${`${d.yakalanan.length}/${KOTU}`.padStart(9)} ${String(d.kacan.length).padStart(5)} ` + `${String(d.yanlis.length).padStart(6)} ${`${b.yakalanan.length}/${KOTU}`.padStart(13)} ${String(b.yanlis.length).padStart(15)} ` + `${String(b.kacan.length + b.yanlis.length).padStart(13)}`); } const enaz = sonuc.reduce((a, s) => (s.b.kacan.length + s.b.yanlis.length < a.b.kacan.length + a.b.yanlis.length ? s : a)); const tam = sonuc.filter((s) => s.b.kacan.length === 0); console.log(`\ntoplam yanlisi en aza indiren esik: ${enaz.e} (kacan ${enaz.b.kacan.length} + yanlis ${enaz.b.yanlis.length})`); console.log(`hic kacirmayan esikler: ${tam.map((s) => `${s.e} (yanlis ${s.b.yanlis.length})`).join(', ')}`); console.log(`sifir yanlis pozitifli esik: ${sonuc.filter((s) => s.b.yanlis.length === 0).map((s) => `${s.e} (kacan ${s.b.kacan.length})`).join(', ') || 'yok'}`); console.log(`\n${'esik'.padStart(4)} ${'kapanan nokta'.padStart(13)} ${'kesilen mesru is'.padStart(16)} ` + `${'gorunen nokta'.padStart(13)} ${'kesilen is'.padStart(10)} ${'elle bakilacak uyari'.padStart(20)}`); for (const { e, b } of sonuc.filter((s) => [3, 6, 8, 9].includes(s.e))) console.log(`${String(e).padStart(4)} ${String(b.nokta).padStart(13)} ${String(b.yanlis.length).padStart(16)} ` + `${String(b.nokta).padStart(13)} ${'0'.padStart(10)} ${String(b.yakalanan.length + b.yanlis.length).padStart(20)}`); const alti = say((o) => imzaUyarir(o) || davranisUyarir(o, 6)); console.log(`\nesik 6'da kacan kotu kalemler: ${alti.kacan.map((o) => `${o[0]} (puan ${puan(o)})`).join('; ')}`); console.log(`esik 6'da kesilen mesru is : ${alti.yanlis.map((o) => `${o[0]} (puan ${puan(o)})`).join('; ')}`);
esik yakalanan kacan yanlis birlesik yak. birlesik yanlis toplam yanlis 1 6/6 0 13 6/6 13 13 2 6/6 0 13 6/6 13 13 3 6/6 0 11 6/6 11 11 4 5/6 1 9 5/6 9 10 5 4/6 2 7 4/6 7 9 6 4/6 2 2 4/6 3 5 7 4/6 2 1 4/6 2 4 8 2/6 4 1 3/6 2 5 9 0/6 6 0 2/6 1 5 10 0/6 6 0 2/6 1 5 toplam yanlisi en aza indiren esik: 7 (kacan 2 + yanlis 2) hic kacirmayan esikler: 1 (yanlis 13), 2 (yanlis 13), 3 (yanlis 11) sifir yanlis pozitifli esik: yok esik kapanan nokta kesilen mesru is gorunen nokta kesilen is elle bakilacak uyari 3 7 11 7 0 17 6 7 3 7 0 7 8 4 2 4 0 5 9 2 1 2 0 3 esik 6'da kacan kotu kalemler: bellekte kalan yukleyici (puan 4); yerlesik araclarla kosan adim (puan 3) esik 6'da kesilen mesru is : uc nokta yonetim ajani (puan 8); yama dagitim ajani (puan 6); kurumsal kurulum paketi (puan 5)
Tarama iki sütunun ters yönünü satır satır veriyor. Eşik üçte altı kötü kalemin altısı da yakalanıyor ve on bir meşru kalem birlikte işaretleniyor. Eşik dokuzda yanlış pozitif sıfıra iniyor ve davranış tabanlı tespit hiçbir kötü kalemi yakalamıyor. Aradaki her satır bir takastır ve takasın oranı sabit değil: beşten altıya çıkmak yanlış pozitifi yediden ikiye düşürürken yakalananı hiç değiştirmiyor — bu, eğrinin en dik yeridir. Yediden sekize çıkmak ise yanlış pozitifi hiç düşürmeden yakalananı dörtten ikiye indiriyor.
İmzayı davranışla birleştirmek üçüncü ve dördüncü sütun arasındaki farkta okunuyor. Yüksek eşikte kazanç var: eşik dokuzda davranış hiçbir şey yakalamazken birleşik tespit iki kalem yakalıyor. Düşük eşikte imzanın hiçbir katkısı yok, yalnız yanlış pozitifi bir artırıyor. İki tespit türü birbirini bu yüzden tamamlar: biri bilinenin üzerinde, öteki bilinmeyenin üzerinde çalışır ve bilinen küme küçüldükçe eşiğin taşıdığı yük büyür.
Alt tabloda kursun iki sütunu ayrılıyor. Eşik altıda dört kötü kalem yakalanıyor ve engelleme kipinde yedi tutunma noktası kapanıyor; karşılığında üç meşru iş kesiliyor ve kesilenlerin arasında yama dağıtım ajanı ile uç nokta yönetim ajanı var — yani uçları koruyan iki düzeneğin kendisi. Uyarı kipinde aynı yedi nokta yalnız görünür oluyor, hiçbir meşru iş kesilmiyor ve karşılığında yedi kalem elle bakılmayı bekliyor. Kapanan nokta ile görünen nokta sayıca aynıdır; farkı yaratan, birinde noktanın ortadan kalkması, ötekinde yalnız bir kayda yazılmasıdır.
Eşiği üçe indirmek bu tabloda ölçülebilir bir tuzak gösteriyor. Yakalanan kötü kalem dörtten altıya çıkıyor ama kapanan tutunma noktası yedide kalıyor, çünkü eklenen iki kalemin kalıcılık noktası yok. Kesilen meşru iş üçten on bire çıkıyor. Yakalanan kalem sayısıyla karar veren bir ayar bunu bir iyileşme sayar; tutunma noktasıyla karar veren bir ayar hiçbir kazanç görmez.
Kaçan iki kalemin puanları listenin altına bakıldığında ayrı bir soru açıyor. Bellekte kalan yükleyici dört puanla üç meşru kalemin altında, yerleşik araçlarla koşan adım ise üç puanla iki meşru kalemle aynı yerde duruyor. İkisini yakalayacak eşik, kendilerinden yüksek puanlı bütün meşru kalemleri de yakalar; bu, eşik ayarıyla çözülebilecek bir sorun değildir. Puanı düşük olan kalem az iş yapmıyor — az belirti bırakan iş yapıyor, çünkü kullandığı araçların hepsi zaten uçta duruyor ve imzalıdır. Bu ayrım bir sonraki derste değil, beşinci derste sayıyla ölçülecek.
Özet
- 6 belirtinin hepsi meşru kalemlerde kötü kalemlerde olduğundan daha çok geçiyor. Bir uçta meşru yazılım sayısı çok daha büyük olduğu için her belirti mutlak sayıyla meşru tarafta kalabalıktır.
- En yüksek puanlı 3 kalemden biri meşrudur ve 2 kötü kalemle aynı puandadır (8): uç nokta yönetim ajanı. Hiçbir davranış eşiği bu üçünü birbirinden ayıramaz.
- İmza tabanlı tespit 6 kötü kalemin 2’sini yakalıyor, 4’ünü kaçırıyor ve geniş yazılmış tek bir kural yüzünden 1 meşru kalemi işaretliyor. “İmza yanlış pozitif üretmez” modelde bile yanlıştır.
- Eşik 3’te 6/6 yakalanıyor ve 11 meşru kalem kesiliyor; eşik 9’da yanlış pozitif sıfır ve davranış hiçbir şey yakalamıyor. Toplam yanlışı en aza indiren eşik 7’dir (2 kaçan + 2 yanlış); iki hatayı birden sıfırlayan eşik yoktur.
- Eşik 6’da 7 tutunma noktası kapanıyor, 3 meşru iş kesiliyor ve kesilenler arasında yama dağıtım ajanı ile uç nokta yönetim ajanı var. Uyarı kipinde aynı 7 nokta yalnız görünür oluyor, kesilen iş 0, elle bakılacak uyarı 7.
- Eşiği 6’dan 3’e indirmek yakalananı 4’ten 6’ya çıkarıyor ama kapanan noktayı 7’de bırakıyor: iki yeni kalemin kalıcılık noktası yok. Kesilen meşru iş 3’ten 11’e çıkıyor.
Sonraki Adım
Uyarı kipi bu dersin en ucuz seçeneğiydi: hiçbir meşru iş kesilmiyordu. Bedeli o zaman yedi kalemlik bir kuyruk gibi göründü, ama asıl bedeli başka yerdedir. Bir kalemin yalnız görünür olması için birinin onu kaydetmiş olması gerekir ve uçta her şey kaydedilmez. Eşik altıda kaçan iki kalemin ortak yanı da buydu: ikisi de diske hiçbir şey yazmadı. Sonraki dersin sorusu budur: uç nokta telemetrisi tutunma noktalarının kaçını görüyor, kaçı hiçbir kaynakta hiç görünmüyor ve toplanan verinin hacmi saklama penceresini ne kadar kısaltıyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.