---
title: 'Kötü Amaçlı Yazılım Karşıtı Yazılımlar'
source: 'https://academia.sh/tr/kurslar/uc-nokta-guvenligi/kotu-amacli-yazilim-karsiti'
course: 'Uç Nokta ve Sistem Sertleştirme'
language: tr
updated: '2026-08-17T18:08:35+00:00'
license: 'CC BY-SA 4.0'
---

# 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.

Ö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 `node` ile 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.

```js
// 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ı

```js
// 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

```js
// 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.
