---
title: 'Servis ve Sürüm Belirleme'
source: 'https://academia.sh/tr/kurslar/sizma-testi/servis-ve-surum-belirleme'
course: 'Güvenlik Araçları ve Sızma Testi'
language: tr
updated: '2026-08-17T18:08:41+00:00'
license: 'CC BY-SA 4.0'
---

# Servis ve Sürüm Belirleme

Parmak izini kesinlik cinsinden ölçmek: 21 servisin ilk sonda düzeyinde 13'ünün tek sürüme inmesi ama 4'ünün yanlış sürüme atanması, kanıt oranının %42,9'dan %76,2'ye çıkarken izin 42 kayıttan 168 kayıt ve 6 uyarıya yükselmesi, üçüncü düzeyde kesin sayısının 14'ten 11'e düşerken doğruluğun tamamlanması ve yanlış sürüm bilgisinin bulgu listesine 9 yanlış satır taşıyıp 10 satırı kaçırması.

Önceki ders bir noktanın açık olduğunu kesin olarak ayırdı: kanıt düzeyinde 21 açık nokta
işaretlendi. Bir noktanın açık olması ise orada **ne çalıştığını** söylemez. Yirmi bir nokta şu an
yalnız bir konumdur; arkasındaki yazılımın ne olduğu, hangi sürümü taşıdığı ve o sürümün bilinen
bir açıkla ilişkili olup olmadığı hiç sorulmadı.

Bu soruyu soran adım **parmak izi çıkarmadır (fingerprinting)** ve yeni bir ölçü getirir:
**kesinlik**. Bir uçtan toplanan imzalar bir sürüm kümesine işaret eder. Küme bazen tek
elemanlıdır, bazen onlarca sürüm içerir — ve bazen tek elemanlıdır ama **yanlış** elemanı taşır.
Üçüncü durum bu dersin ana konusudur, çünkü kesin görünen yanlış bir cevap, belirsiz kalan doğru
bir cevaptan daha pahalıdır.

## Kesinlik Aday Kümesinin Büyüklüğüdür

**KS13:** her servis üç şey taşır — kurgu gerçek sürümü, tanıtım dizesinin durumu (doğru, yanlış,
yok) ve sonda düzeyi başına aday sürüm kümesinin büyüklüğü. **KS14:** bir servis N sondadan sonra
**kesindir** (aday kümesi tek elemanlı); tanıtımı yanıltıcı olan servis doğru sürüme ancak üçüncü
düzeyde ulaşır, önceki düzeylerde kesin ama yanlış atanır. **KS15:** iz sonda düzeyinden çıkar —
her servise N istek, her istek bir ağ ve bir uygulama kaydı; üçüncü düzeyden başlayarak olağandışı
sondalar uyarı üretir.

```js
// kesif/surum.mjs — 04'un 21 kanit duzeyinde acik noktasi icin kurgu parmak izi sonucu (model):
// gercek urun, gercek surum ve gercek acik kimligi yok; surum etiketleri de kurgudur.

// KS13: her servis uc sey tasir — kurgu gercek surumu, tanitim dizesinin durumu (dogru, yanlis,
// yok) ve sonda duzeyi 1..4 icin aday surum kumesinin buyuklugu. Tanitimi yanlis olan servis
// icin "yanlisSurum", dizenin isaret ettigi surumdur.
export const SERVIS = `
  abone/n1      A4 dogru  -   1 1 1 1
  abone/n2      B2 dogru  -   2 1 1 1
  abone/n3      C7 yok    -  12 5 2 1
  saha/n1       A4 dogru  -   1 1 1 1
  saha/n5       D1 yanlis D0   1 1 3 1
  saha/n6       E3 dogru  -   1 1 1 1
  saha/b1       F2 yok    -   9 4 2 2
  vpn/n6        E3 dogru  -   1 1 1 1
  toplayici/n6  E3 dogru  -   1 1 1 1
  toplayici/n7  G5 yok    -  14 6 3 2
  toplayici/n8  H1 yanlis H9   1 1 4 2
  toplayici/b1  F2 yok    -   9 4 2 2
  rapor/n1      A4 dogru  -   1 1 1 1
  rapor/n6      E3 dogru  -   1 1 1 1
  ortak/n1      A4 dogru  -   2 1 1 1
  ortak/n3      C7 yok    -  12 5 2 1
  izleme/n1     A4 dogru  -   1 1 1 1
  izleme/n7     I2 yanlis I5   1 2 3 1
  izleme/b1     F2 yok    -   9 4 2 2
  gunluk/n1     A4 dogru  -   1 1 1 1
  gunluk/n5     J8 yanlis J1   1 1 2 1`
  .trim().split("\n").map((r) => {
    const [ad, gercek, tanitim, yanlisSurum, ...d] = r.trim().split(/\s+/);
    return { ad, gercek, tanitim, yanlisSurum, kume: d.map(Number) };
  });

// Kurgu surum-acik eslemesi: bir surum etiketinin bulgu listesine kac satir tasidigi.
export const ACIK = { A4: 1, B2: 0, C7: 2, D1: 3, E3: 2, F2: 1, G5: 2, H1: 4, I2: 1, J8: 2,
  D0: 0, H9: 1, I5: 3, J1: 5 };

// KS14: bir servis N sondadan sonra kesindir (aday kumesi tek elemanli). Tanitimi yanlis olan
// servis dogru surume ancak ucuncu duzeyde ulasir; onceki duzeylerde kesin ama yanlis atanir.
export const kesin = (s, n) => s.kume[n - 1] === 1;
export const dogru = (s, n) => (s.tanitim === "yanlis" ? n >= 3 : true);
export const atanan = (s, n) => (dogru(s, n) ? s.gercek : s.yanlisSurum);

// KS15: iz sonda duzeyinden cikar — her servise N istek, her istek bir ag ve bir uygulama kaydi;
// ucuncu duzeyden itibaren olagandisi sondalar uyari uretir.
export const iz = (n) => ({ istek: SERVIS.length * n, kayit: SERVIS.length * n * 2,
  uyari: n >= 3 ? (n - 2) * 3 : 0 });
```

```js
// kesif/kesinlik.mjs — parmak izi kesinlik cinsinden: kac aday surum tek surume iniyor.
import { SERVIS, ACIK, kesin, dogru, atanan, iz } from "./surum.mjs";

const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
const DUZEY = [1, 2, 3, 4];
const K = (n) => SERVIS.filter((s) => kesin(s, n));

console.log(`${SERVIS.length} servis: ${SERVIS.filter((s) => s.tanitim === "dogru").length} ` +
  `tanitimi dogru, ${SERVIS.filter((s) => s.tanitim === "yanlis").length} yaniltici, ` +
  `${SERVIS.filter((s) => s.tanitim === "yok").length} tanitimsiz`);

const A = [-8, 8, 8, 10, 9, 8, 11];
console.log("\n1. sonda duzeyi basina kesinlik");
yaz(A, "duzey", "istek", "kesin", "belirsiz", "yanlisP", "kanit", "kesinlik %");
for (const n of DUZEY) {
  const k = K(n), yp = k.filter((s) => !dogru(s, n)).length;
  yaz(A, n, iz(n).istek, k.length, SERVIS.length - k.length, yp, k.length - yp,
    (((k.length - yp) / SERVIS.length) * 100).toFixed(1));
}

const B = [-8, 8, 8, 12, 12, 15];
console.log("\n2. kesinligin iz bedeli");
yaz(B, "duzey", "kayit", "uyari", "kayit/kanit", "uyari/kanit", "ort. kume boy");
for (const n of DUZEY) {
  const k = K(n), kanit = k.length - k.filter((s) => !dogru(s, n)).length;
  const ort = SERVIS.reduce((t, s) => t + s.kume[n - 1], 0) / SERVIS.length;
  yaz(B, n, iz(n).kayit, iz(n).uyari, (iz(n).kayit / kanit).toFixed(2),
    (iz(n).uyari / kanit).toFixed(3), ort.toFixed(2));
}

const C = [-8, 10, 8, 8, 8, 10];
console.log("\n3. bulgu listesine tasinan satir");
yaz(C, "duzey", "bildirilen", "dogru", "yanlis", "kacan", "yanlis %");
for (const n of DUZEY) {
  const k = K(n);
  const bild = k.reduce((t, s) => t + ACIK[atanan(s, n)], 0);
  const dg = k.filter((s) => dogru(s, n)).reduce((t, s) => t + ACIK[s.gercek], 0);
  const ger = k.reduce((t, s) => t + ACIK[s.gercek], 0);
  yaz(C, n, bild, dg, bild - dg, ger - dg, ((bild - dg) / bild * 100).toFixed(1));
}

const D = [-10, 7, 7, 7, 7, 7];
console.log("\n4. tanitim durumuna gore kesin sayisi");
yaz(D, "tanitim", "servis", "duzey1", "duzey2", "duzey3", "duzey4");
for (const t of ["dogru", "yanlis", "yok"]) {
  const l = SERVIS.filter((s) => s.tanitim === t);
  yaz(D, t, l.length, ...DUZEY.map((n) => l.filter((s) => kesin(s, n)).length));
}
const b = SERVIS.filter((s) => s.tanitim === "yanlis");
console.log(`yaniltici tanitim: duzey 1'de ${b.filter((s) => kesin(s, 1)).length} servis kesin ` +
  `ama yanlis surume atanir; bunlarin gercek acik sayisi ` +
  `${b.reduce((t, s) => t + ACIK[s.gercek], 0)}, bildirilen ` +
  `${b.reduce((t, s) => t + ACIK[s.yanlisSurum], 0)}`);
```

```
21 servis: 11 tanitimi dogru, 4 yaniltici, 6 tanitimsiz

1. sonda duzeyi basina kesinlik
duzey      istek   kesin  belirsiz  yanlisP   kanit kesinlik %
1             21      13         8        4       9       42.9
2             42      14         7        3      11       52.4
3             63      11        10        0      11       52.4
4             84      16         5        0      16       76.2

2. kesinligin iz bedeli
duzey      kayit   uyari kayit/kanit uyari/kanit  ort. kume boy
1             42       0        4.67       0.000           3.90
2             84       0        7.64       0.000           2.10
3            126       3       11.45       0.273           1.71
4            168       6       10.50       0.375           1.24

3. bulgu listesine tasinan satir
duzey   bildirilen   dogru  yanlis   kacan  yanlis %
1               22      13       9      10      40.9
2               20      14       6       9      30.0
3               14      14       0       0       0.0
4               24      24       0       0       0.0

4. tanitim durumuna gore kesin sayisi
tanitim    servis duzey1 duzey2 duzey3 duzey4
dogru          11      9     11     11     11
yanlis          4      4      3      0      3
yok             6      0      0      0      2
yaniltici tanitim: duzey 1'de 4 servis kesin ama yanlis surume atanir; bunlarin gercek acik sayisi 10, bildirilen 9
```

Sayılar **ölçüm** sınıfındadır; girdileri KS13–KS15'tir.

## On Üç Kesin, Dokuz Kanıt

Birinci tablonun ilk satırı bu dersin sorusunu tek başına kurar. İlk sonda düzeyinde 21 servisin
**13'ü tek bir sürüme iner** — kesinlik ölçütüne göre %61,9'u kesindir. Ne var ki bu on üçün
**4'ü yanlış sürüme atanmıştır**. Kanıt sayısı 13 değil, **9**'dur ve gerçek kesinlik %42,9'dur.

Aradaki fark ölçüm hatası değildir, ölçünün kendisiyle ilgilidir. Aday kümesinin tek elemanlı
olması yalnız **belirsizliğin** ortadan kalktığını gösterir; elemanın doğru olduğunu göstermez.
Bir tanıtım dizesine bakarak sürüm atayan bir adım, hedefin yazdığı bir metni okur ve o metni
kanıt sayar. Metnin doğruluğunu denetleyen hiçbir şey yoktur.

Dördüncü tablo bunu tanıtım durumuna göre ayırır. Tanıtımı doğru olan 11 servisin 9'u ilk düzeyde
kesin olur, ikisi iki sürüm arasında kalır ve ikinci düzeyde ayrılır. Tanıtımı yanıltıcı olan **4
servisin dördü de ilk düzeyde kesindir** — hem de doğru tanıtımlı servislerden daha yüksek bir
oranda. Tanıtımsız 6 servisin ilk üç düzeyde **hiçbiri** kesin olmaz.

Bu, bu dersin en ters sonucudur: **yanıltıcı tanıtım en yüksek görünür kesinliği üretir.** Bir
uçtan gelen "ben şu sürümüm" iddiası, iddianın doğru ya da yanlış olmasına bakılmaksızın aday
kümesini bire indirir. Belirsizlik gören taraf tanıtımsız uçtur; yanlış cevap alan taraf
yanıltıcı olandır.

## Kesin Sayısının Düştüğü Düzey

Birinci tablonun üçüncü satırı ilk bakışta bir gerileme gibi görünür: kesin sayısı ikinci
düzeydeki **14'ten 11'e** düşer. Aynı satırda yanlış pozitif 3'ten **0'a** iner ve kanıt sayısı
11'de kalır.

Olan şey şudur. Üçüncü düzeydeki davranışsal sondalar, tanıtım dizesiyle çelişen imzalar üretir;
yanıltıcı üç servis artık tek bir sürüme değil, üç ya da dört adaya işaret eder. Aday kümesi
**büyür**, çünkü ölçüm ilk kez tanıtımın yalan olabileceğini hesaba katar. Görünür kesinlik
düşer, gerçek kesinlik yerinde kalır ve yanlış atama sıfırlanır.

Bir değerlendirmede bu satır şöyle okunur: **kesin sayısının düşmesi bir kayıp değil, önceki
kesinliğin sahte olduğunun ortaya çıkmasıdır.** Bir sonda eklemek kesinliği artırmak zorunda
değildir; artırdığı şey doğruluktur ve doğruluk arttığında bazı kalemler haklı olarak belirsize
döner.

Dördüncü düzeyde kesin sayısı 16'ya çıkar ve hepsi doğrudur — kesinlik **%76,2**. Kalan beş
servis dört sondadan sonra da iki adaylık kümelerde durur; bunların dördü tanıtımsız uçlardır.
Parmak izinin bu koşumdaki üst sınırı 21'in 16'sıdır.

## Bulgu Listesine Taşınan Yanlış Satır

Üçüncü tablo yanlış sürüm bilgisinin bedelini raporun kendisinde ölçer. Her sürüm etiketi bulgu
listesine belli sayıda satır taşır; yanlış sürüm yanlış satır taşır.

İlk düzeyde bulgu listesi **22 satırdır**. Bunların 13'ü doğrudur, **9'u yanlıştır** — listenin
**%40,9'u**. Aynı düzeyde 10 gerçek satır hiç görünmez. Yani bir tarafta düzeltme bütçesini boşa
harcayan dokuz kalem, öteki tarafta hiç bakılmayan on kalem vardır. Kapanış satırı bunu dört
yanıltıcı servis üzerinden verir: gerçek açık sayıları toplam 10 iken bildirilen 9'dur; iki sayı
birbirine yakındır ve **hiçbir satırı ortak değildir**.

İkinci düzeyde yanlış oran %30'a iner. Üçüncü düzeyde bulgu listesi **14 satıra düşer** ve
tamamı doğrudur; kaçan satır sıfırdır, çünkü kesin sayılan on bir servisin hepsi doğru
atanmıştır. Dördüncü düzeyde liste 24 satıra çıkar ve yine tamamı doğrudur.

Birinci ve dördüncü düzey arasındaki karşılaştırma dersin pratik sonucudur: ikisinde de yaklaşık
aynı büyüklükte bir liste üretilir (22'ye karşı 24), ama birinde satırların %40,9'u yanlıştır,
ötekinde %0'ı. **Bulgu sayısı ikisini birbirinden ayırmaz; ayıran tek şey doğrulamadır.**

Bu tablonun savunma tarafında bir karşılığı vardır ve asimetriyi açıkça gösterir. Kurumun kendi
yazılım envanterinde aynı 21 servisin sürümü **tek adımda ve sıfır izle** okunabilir; kurulum
kayıtları hangi sürümün yüklü olduğunu, hangi yamanın uygulandığını ve hangi bileşenin hiç
kullanılmadığını yanıltıcı bir tanıtım dizesine bakmadan söyler. Dışarıdan yapılan ölçüm 84 istek
ve 168 kayıt harcayıp 16 servise ulaşırken içeriden yapılan aynı ölçüm 21 servisin hepsini kapsar.
Değerlendirmenin bu adımdaki bulgusu, kurumun **kendi envanterinden okuyabileceği** bir bilginin
pahalı ve eksik bir kopyasıdır; asıl değeri, o envanterin dışarıdan görünenle **örtüşmediği**
yerlerde ortaya çıkar.

## Kesinliğin İz Bedeli

İkinci tablo bu konu boyunca taşınan sütunu son kez açar. Ortalama aday küme boyu 3,90'dan
1,24'e iner; karşılığında hedefte biriken kayıt **42'den 168'e**, uyarı **0'dan 6'ya** çıkar.

Bedelin dağılımı eşit değildir. İlk iki düzey 84 kayıt bırakır ve **hiç uyarı üretmez**: bu
sondalar sıradan isteklerden ayırt edilmez. Üçüncü düzeyden itibaren kullanılan olağandışı
sondalar protokol düzeyinde anormallik üretir ve uyarıya dönüşür. Yani doğruluğu tamamlayan
adım, aynı zamanda **savunmanın fark ettiği ilk adımdır**.

`kayit/kanit` sütunu bunu tek sayıya indirir: 4,67, 7,64, 11,45 ve 10,50. En pahalı düzey
üçüncüdür; dördüncü düzey daha çok kayıt bırakır ama beş yeni kanıt getirdiği için kanıt başına
maliyeti düşer. Mavi takım açısından okunuşu ise şudur: **bu konudaki adımların çoğu görülür ama
fark edilmez.** Beş dersin toplamında hedefte biriken kayıt yüzlerle ölçülür; uyarıya dönüşen
kalemler ise iki elin parmaklarını geçmez ve hepsi ya yoğunluktan ya da protokol anormalliğinden
çıkar — hiçbiri "bir keşif yapılıyor" biçiminde bir kayıt değildir.

## Özet

- Kesinlik aday sürüm kümesinin büyüklüğüdür: ilk sonda düzeyinde 21 servisin 13'ü tek sürüme
  iner ama 4'ü yanlış sürüme atanır; kanıt 9, gerçek kesinlik %42,9'dur.
- Yanıltıcı tanıtım en yüksek görünür kesinliği üretir: tanıtımı yanlış 4 servisin dördü de ilk
  düzeyde kesindir, tanıtımsız 6 servisin ilk üç düzeyde hiçbiri kesin olmaz.
- Üçüncü düzeyde kesin sayısı 14'ten 11'e düşerken yanlış atama 3'ten 0'a iner: kesinliğin
  azalması önceki kesinliğin sahte olduğunun ortaya çıkmasıdır.
- Yanlış sürüm bilgisi ilk düzeyde bulgu listesine 9 yanlış satır taşır (%40,9) ve 10 gerçek
  satırı kaçırır; iki küme hiçbir satırı paylaşmaz.
- Dördüncü düzeyde 24 satırın tamamı doğrudur; birinci düzeydeki 22 satırla benzer büyüklükte bir
  listedir ve aradaki tek fark doğrulamadır.
- Kesinliği %42,9'dan %76,2'ye çıkarmanın bedeli 42 kayıttan 168 kayda ve 0 uyarıdan 6 uyarıya
  çıkmaktır; ilk iki düzey hiç uyarı üretmez, doğruluğu tamamlayan üçüncü düzey ilk uyarıyı üretir.

## Sonraki Adım

Beş ders sonunda dışarıdan görünen envanter çıkarıldı ve her adımda adaylar sayıldı: halka açık
kalemlerden 20 aday, kayıt sorgulamasından 8 doğrulanmış sahiplik, ad uzayından 21 kayıt ve 6
sahipsiz kalem, taramadan 21 açık nokta, parmak izinden 16 kesin sürüm. Her sayının yanında
bıraktığı iz de yazıldı.

Yine de bütün bu ölçümlerin ortak bir sınırı var. Bu konudaki hiçbir adım, bir adayın **gerçekten
açık olup olmadığını** söyleyemez. Bir sürüm etiketinin bilinen bir açıkla ilişkili olması, o
uçtaki kurulumun gerçekten etkilenmiş olduğunu göstermez: yama uygulanmış olabilir, etkilenen
bileşen hiç kullanılmıyor olabilir, ya da önündeki bir denetim ilgili isteği hiç geçirmiyor
olabilir. Dördüncü düzeyin 24 satırı, kesinliği tam olsa bile, hâlâ birer **adaydır**.

Bu farkı kapatmanın tek yolu uçtan gelen ve uca giden trafiğe bakmaktır: hangi paketler
akıyor, bir istek değiştirildiğinde yanıt nasıl değişiyor, bir dosya çalıştırıldığında ne
yapıyor, bağımsız kaynaklar aynı kalem için ne söylüyor. Sonraki konu — **Analiz Araçları** —
bu araçların her birini aynı iki soruyla ele alır: ne üretiyor ve **neyi kanıtlayamıyor**.
