---
title: 'Sürükle–Bırak İndirmeleri'
source: 'https://academia.sh/tr/kurslar/saldiri-teknikleri/surukle-birak-indirmeleri'
course: 'Saldırı Teknikleri ve Tehdit Ortamı'
language: tr
updated: '2026-08-17T18:08:33+00:00'
license: 'CC BY-SA 4.0'
---

# Sürükle–Bırak İndirmeleri

Tarayıcı üzerinden bulaşmanın önkoşul zinciri olarak sayılması: altı yüz kurgu uç noktada altı koşulun altısının aynı anda yalnız yirmi ikisinde tutması, dördüncü koşula kadar tutan yetmiş üç uçta kalemin diske yazılmış olması, tek başına en etkili savunmanın kalanı bire indirmesi, iki koşulu birden kıran savunmanın kapsam darlığı yüzünden en zayıf kalması ve iki savunmanın dokuz meşru bedelle sağladığı sonuca yedi savunmanın elli beş bedelle ulaşması.

Buraya kadarki yedi sınıfta zincir her zaman saldıranın bir isteğiyle başladı: bir alan
dolduruldu, bir bağlantı gönderildi, bir deneme yapıldı. Bu sınıfta ilk adımı **kurban** atar
ve yaptığı şey olağandır — bir sayfayı açar.

Sürükle–bırak indirmesi tek bir adımın adı değildir; birbirinden bağımsız birkaç koşulun aynı
anda tutmasının adıdır. Bu yüzden bu ders zinciri bir **VE dizisi** olarak sayar: altı koşulun
altısı da tutmazsa hiçbir şey olmaz. Ölçüm bir kurgu uç nokta filosu üzerinde yürür; hiçbir
bulaşma adımı, hiçbir sayfa ve hiçbir bileşen adı yazılmaz.

## Altı Koşul

1. **Sayfaya ulaşma.** Kullanıcı, üzerinde saldıranın denetimindeki içerik bulunan bir sayfayı
   açar. Önkoşul: o sayfaya bir yol var.
2. **Üçüncü taraf içerik.** Sayfa, kendi kökeninin dışından içerik yükleyebiliyor. Önkoşul:
   kaynak kısıtı yok.
3. **Açık kalmış bileşen.** Yükleyici bileşende düzeltilmemiş bir kalem var. Önkoşul: tarayıcı
   ya da eklenti güncel değil.
4. **Onaysız yazma.** Bir kalem kullanıcı onayı olmadan diske yazılabiliyor. Önkoşul: indirme
   kendiliğinden tamamlanıyor.
5. **Çalıştırılabilirlik.** Yazılan kalem çalıştırılabiliyor. Önkoşul: uygulama izin listesi yok.
6. **Korumanın görmemesi.** Uç nokta koruması kalemi durdurmuyor. Önkoşul: imza ya da davranış
   karşılığı yok.

Bir VE zinciri savunma için elverişlidir: **tek bir koşulu düşürmek yeter**. Zorluk koşulun
seçiminde değil, savunmanın filonun ne kadarına ulaştığındadır. Bu ders o iki sayıyı — kırılan
koşul ve kapsam — birlikte ölçer.

Koşulların hepsi aynı tarafa ait de değildir. Birinci ve ikinci koşul ağ ile sayfanın kendi
yapılandırmasına, üçüncü ve beşinci koşul uç noktanın yazılım durumuna, dördüncü koşul
tarayıcının davranışına, altıncı koşul koruma yazılımına aittir. Bu dağılım bir kurumda bu
sınıfın neden tek bir ekibin sorumluluğuna verilemeyeceğini gösterir: altı koşul dört ayrı
yönetim alanına dağılmıştır ve hiçbiri ötekinin sayısını göremez.

**TS30:** zincir bir VE dizisidir; `oran`, kurgu filoda o koşulun tuttuğu uç noktaların
payıdır. **TS31:** her savunma bir ya da iki koşulu kırar; `kapsam`, dağıtıldığı uç noktaların
payıdır. **TS32:** dördüncü koşuldan sonra kalem diske yazılmış sayılır; erken kırmanın sınırı
üçüncü koşuldur.

```js
// sb/filo.mjs — tarayici uzerinden bulasmanin onkosul zinciri (model). Gercek bir sayfa,
// gercek bir bilesen ve hicbir bulasma adimi yok; her uc nokta yalnizca kosullarin ve
// savunmalarin durumunu tasiyan bir bit vektorudur.
export const UC_SAYISI = 600;

export const KOSUL = [
  { ad: "sayfaya-ulasma",       oran: 0.60 },
  { ad: "ucuncu-taraf-icerik",  oran: 0.75 },
  { ad: "acik-kalmis-bilesen",  oran: 0.40 },
  { ad: "onaysiz-yazma",        oran: 0.60 },
  { ad: "calistirilabilirlik",  oran: 0.80 },
  { ad: "korumanin-gormemesi",  oran: 0.35 },
];

export const SAVUNMA = [
  { ad: "ad-cozumleme-suzgeci", kirar: [0], kapsam: 0.85, mesru: 5 },
  { ad: "icerik-politikasi",    kirar: [1], kapsam: 0.60, mesru: 7 },
  { ad: "otomatik-guncelleme",  kirar: [2], kapsam: 0.75, mesru: 3 },
  { ad: "indirme-onayi",        kirar: [3], kapsam: 0.80, mesru: 9 },
  { ad: "uygulama-izin-listesi", kirar: [4], kapsam: 0.45, mesru: 14 },
  { ad: "uc-nokta-koruma",      kirar: [5], kapsam: 0.90, mesru: 6 },
  { ad: "tarayici-yalitimi",    kirar: [2, 4], kapsam: 0.30, mesru: 11 },
];

function uretec(tohum) {
  let s = tohum >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296;
}

// Filo bir kez uretilir; tohum gorunur, kosumdan kosuma ayni sonuc cikar.
export function filo(tohum = 20260803) {
  const r = uretec(tohum);
  const f = [];
  for (let i = 0; i < UC_SAYISI; i++) {
    const k = KOSUL.map((x) => r() < x.oran);
    const s = SAVUNMA.map((x) => r() < x.kapsam);
    f.push({ k, s });
  }
  return f;
}

export const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
```

```js
// sb/olcum.mjs — alti kosulun kac uc noktada ayni anda tuttugu ve her savunmanin bu sayiyi
// nereye indirdigi. Rastgelelik uretecten gelir, tohum gorunurdur.
import { UC_SAYISI, KOSUL, SAVUNMA, filo, yaz } from "./filo.mjs";

const F = filo();
// Bir uc noktada n. kosul, dagitilan savunmalardan biri onu kirmiyorsa tutar.
const tutar = (u, i, kume) => u.k[i] &&
  !SAVUNMA.some((s, j) => kume.includes(s.ad) && u.s[j] && s.kirar.includes(i));
const tamZincir = (u, kume) => KOSUL.every((_, i) => tutar(u, i, kume));
const nKosul = (u, kume, n) => KOSUL.slice(0, n).every((_, i) => tutar(u, i, kume));
const say = (kume, f) => F.filter((u) => f(u, kume)).length;

console.log(`${UC_SAYISI} kurgu uc nokta, ${KOSUL.length} kosul, ${SAVUNMA.length} savunma\n`);

const A = [-22, 10, 10, 14];
console.log("1. kosul basina tutan uc nokta");
yaz(A, "kosul", "hedef oran", "tutan uc", "buraya kadar");
for (const [i, k] of KOSUL.entries())
  yaz(A, k.ad, k.oran.toFixed(2), F.filter((u) => u.k[i]).length,
    say([], (u) => nKosul(u, [], i + 1)));
const taban = say([], tamZincir);
console.log(`alti kosulun altisi da ${taban} uc noktada tutuyor ` +
  `(%${((taban / UC_SAYISI) * 100).toFixed(1)}); dorduncu kosula kadar tutan ` +
  `${say([], (u) => nKosul(u, [], 4))} uc noktada kalem diske yazilmis olur`);

const B = [-22, 12, 12, 14, 10];
console.log("\n2. tek savunma dagitildiginda");
yaz(B, "savunma", "kirdigi", "kapsam", "kalan uc", "mesru");
for (const s of SAVUNMA)
  yaz(B, s.ad, s.kirar.map((i) => i + 1).join(","), s.kapsam.toFixed(2),
    say([s.ad], tamZincir), s.mesru);
console.log(`hicbir savunma yokken kalan uc: ${taban}`);

const C = [-22, 12, 12, 18, 12];
console.log("\n3. en cok azaltandan baslayarak birikimli");
yaz(C, "eklenen savunma", "kalan uc", "azalma", "birikimli mesru", "kalan %");
let kume = [], mesru = 0;
while (kume.length < SAVUNMA.length) {
  const aday = SAVUNMA.filter((s) => !kume.includes(s.ad))
    .map((s) => ({ s, kalan: say([...kume, s.ad], tamZincir) }))
    .sort((a, b) => a.kalan - b.kalan || a.s.mesru - b.s.mesru)[0];
  const once = say(kume, tamZincir);
  kume.push(aday.s.ad); mesru += aday.s.mesru;
  yaz(C, aday.s.ad, aday.kalan, once - aday.kalan, mesru,
    `%${((aday.kalan / taban) * 100).toFixed(1)}`);
}

const SONUC = ["iz yok", "iz yok", "iz yok", "kalem diske yazildi",
  "kalem calisti", "koruma gormedi"];
const D = [-8, 18, 18, -24];
console.log("\n4. gec kirmanin bedeli (savunmasiz filoda)");
yaz(D, "kosul", "buraya kadar tutan", "bu kosulda dusen", "  asamanin sonucu");
for (let n = 1; n <= KOSUL.length; n++) {
  const tut = say([], (u) => nKosul(u, [], n));
  yaz(D, `${n}.`, tut, say([], (u) => nKosul(u, [], n - 1)) - tut, `  ${SONUC[n - 1]}`);
}
console.log(`dorduncu kosuldan sonra kalem diske yazilmistir: erken kirmanin siniri ` +
  `ucuncu kosuldur (${say([], (u) => nKosul(u, [], 3))} uc nokta)`);
console.log(`tam kurulusta kalan uc: ${say(SAVUNMA.map((s) => s.ad), tamZincir)}, ` +
  `dorduncu kosula kadar tutan: ` +
  `${say(SAVUNMA.map((s) => s.ad), (u, q) => nKosul(u, q, 4))}`);
```

```
600 kurgu uc nokta, 6 kosul, 7 savunma

1. kosul basina tutan uc nokta
kosul                 hedef oran  tutan uc  buraya kadar
sayfaya-ulasma              0.60       362           362
ucuncu-taraf-icerik         0.75       440           262
acik-kalmis-bilesen         0.40       241           118
onaysiz-yazma               0.60       362            73
calistirilabilirlik         0.80       482            63
korumanin-gormemesi         0.35       221            22
alti kosulun altisi da 22 uc noktada tutuyor (%3.7); dorduncu kosula kadar tutan 73 uc noktada kalem diske yazilmis olur

2. tek savunma dagitildiginda
savunma                    kirdigi      kapsam      kalan uc     mesru
ad-cozumleme-suzgeci             1        0.85             5         5
icerik-politikasi                2        0.60            10         7
otomatik-guncelleme              3        0.75             5         3
indirme-onayi                    4        0.80             6         9
uygulama-izin-listesi            5        0.45            10        14
uc-nokta-koruma                  6        0.90             1         6
tarayici-yalitimi              3,5        0.30            16        11
hicbir savunma yokken kalan uc: 22

3. en cok azaltandan baslayarak birikimli
eklenen savunma           kalan uc      azalma   birikimli mesru     kalan %
uc-nokta-koruma                  1          21                 6        %4.5
otomatik-guncelleme              0           1                 9        %0.0
ad-cozumleme-suzgeci             0           0                14        %0.0
icerik-politikasi                0           0                21        %0.0
indirme-onayi                    0           0                30        %0.0
tarayici-yalitimi                0           0                41        %0.0
uygulama-izin-listesi            0           0                55        %0.0

4. gec kirmanin bedeli (savunmasiz filoda)
kosul   buraya kadar tutan  bu kosulda dusen  asamanin sonucu
1.                     362               238  iz yok
2.                     262               100  iz yok
3.                     118               144  iz yok
4.                      73                45  kalem diske yazildi
5.                      63                10  kalem calisti
6.                      22                41  koruma gormedi
dorduncu kosuldan sonra kalem diske yazilmistir: erken kirmanin siniri ucuncu kosuldur (118 uc nokta)
tam kurulusta kalan uc: 0, dorduncu kosula kadar tutan: 0
```

## Altı Koşulun Kesişimi

Birinci çıktı koşulları tek tek ve birikimli olarak sayar. Tek tek bakıldığında hiçbir koşul
seyrek değildir: en dar koşul 600 uç noktanın 221'inde, en geniş koşul 482'sinde tutuyor.
Birikimli sütun ise hızla iner: 362, 262, 118, 73, 63 ve sonunda **22**.

Birikimli sütunun ilk satırı ile son satırı arasındaki oran on altı kattır. Bu düşüşün her
adımı bir çarpımdır ve çarpanların hiçbiri sıfıra yakın değildir; sonucu küçük yapan şey
çarpanların **sayısıdır**. Bir koşulun oranını yarıya indirmek sonucu da yarıya indirir, ama
bir koşulu tamamen kaldırmak sonucu sıfırlar — VE zincirinde bu iki hamle arasındaki fark
niceliksel değil, niteliksel bir farktır.

Filonun **%3,7'sinde** altı koşulun altısı da aynı anda tutuyor. Bu sayı sınıfın neden hem
yaygın hem de seyrek göründüğünü açıklar. Her koşul tek başına sıradandır; sıra dışı olan
kesişimdir. Bir raporda "uç noktaların %40'ında güncel olmayan bir bileşen var" cümlesi doğru
olabilir ve bu sınıfın büyüklüğü hakkında hiçbir şey söylemez.

En büyük düşüş üçüncü koşuldadır: 262'den 118'e. Açık kalmış bileşen koşulu, kesişimi en çok
daraltan kalemdir ve bunun nedeni oranının en düşük olmasıdır. **VE zincirinde en dar koşul
sonucu belirler** — ve savunma açısından bu, en dar koşulu daha da daraltmanın en verimli
hamle olduğu anlamına gelir.

## Kırılan Koşul ve Kapsam

İkinci çıktı her savunmayı tek başına dağıtır. Sonuçlar 1 ile 16 arasında değişir ve sıralama
kırılan koşulun sırasıyla ilgili değildir; **kapsamla ilgilidir.**

Uç nokta koruması kalanı 22'den **1'e** indirir: kapsamı 0,90'dır ve kırdığı koşul zaten
seyrektir. Ad çözümleme süzgeci 5'e, otomatik güncelleme 5'e, indirme onayı 6'ya indirir.
Uygulama izin listesi 10'da kalır çünkü kapsamı 0,45'tir.

Son satır bu çıktının en dikkat çekici sonucudur. Tarayıcı yalıtımı **iki koşulu birden kırar**
— altı savunmanın hiçbiri bunu yapmaz — ve buna rağmen kalanı yalnız 16'ya indirir; yedisinin
en zayıfıdır. Nedeni kapsamının 0,30 olmasıdır. **İki koşul kıran ve filonun üçte birine
ulaşan bir savunma, tek koşul kıran ve dokuzda onuna ulaşan bir savunmadan zayıftır.** Katmanın
gücü kırdığı koşul sayısıyla değil, kırdığı koşul ile kapsamının çarpımıyla ölçülür.

## Birikimli Ekleme

Üçüncü çıktı savunmaları her turda en çok azaltandan başlayarak ekler. İlk iki adımda kalan uç
sayısı 22'den 1'e, sonra **0'a** iner ve birikimli meşru bedel **9'dur**. Kalan beş savunma
hiçbir uç noktayı daha düşürmez ve bedeli 55'e çıkarır.

Bu, öteki beş savunmanın gereksiz olduğu anlamına gelmez ve bu ayrım önemlidir. Ölçüm bir
**anlık görüntüdür**: bu filoda, bu kapsam değerleriyle, bu koşul oranlarıyla. Üçüncü koşulun
oranı 0,40'tan 0,70'e çıktığında — yeni bir açık kalem ortaya çıktığında — sıralama değişir ve
sıfır kalan savunmalar sayı üretmeye başlar. VE zincirinde yedek katmanların işlevi bugünkü
sayıyı düşürmek değil, **bir koşulun oranı değiştiğinde sayının fırlamasını engellemektir**.

Yine de bir şey açıktır: iki kalem, dokuz birim meşru bedelle bu filoyu sıfıra indiriyor. Yedi
kalemin toplam bedeli 55. Savunma bütçesi sınırlıysa sıralama bu tablodan okunur, katman
listesinden değil.

Sıranın kendisi de tesadüf değildir. Açgözlü seçim ilk turda uç nokta korumasını alır, çünkü
kırdığı koşul filoda en dar olan koşuldur ve kapsamı en yüksek olanlardandır. İkinci turda
otomatik güncellemeyi alır; kalan tek uç noktanın koruma kapsamı dışında kalan uç olması, o
uçta ikinci bir koşulun düşürülmesini gerektirir. Üçüncü turdan itibaren seçim yapacak bir şey
kalmaz ve sıralama yalnız meşru bedele göre yapılır.

## Erken Kırmanın Sınırı

Dördüncü çıktı bedeli aşama aşama verir. İlk üç koşul boyunca **hiçbir iz kalmaz**: kullanıcı
bir sayfa açmış, sayfa bir içerik yüklemiş, bileşende bir kalem bulunmuştur. Dördüncü koşulda
bir kalem diske yazılır — savunmasız filoda **73 uç noktada**. Beşinci koşulda kalem çalışır
(63 uç nokta), altıncıda koruma onu görmez (22 uç nokta).

Erken kırmanın sınırı bu tablodadır: zincir üçüncü koşula kadar durursa geriye hiçbir kalem
kalmaz. Dördüncü koşuldan sonra durmak, uç noktada bir kalemin bulunduğu ve bir incelemenin
gerektiği anlamına gelir. **73 ile 22 arasındaki 51 uç nokta bu aradaki bölgedir**: zincir
tamamlanmamıştır, ama diske bir kalem yazılmıştır ve o kalemin bulunması, sınıflandırılması ve
temizlenmesi gereken bir iş kalemi doğar.

Bu ayrım savunma raporlarında sık kaybolur. "Bulaşma olmadı" cümlesi 22 sayısına bakar;
gerçek iş yükü 73 sayısındadır. İlk üç koşulu kıran bir savunma bu iş yükünü hiç doğurmaz,
son iki koşulu kıran bir savunma ise doğurur ve bunu yaparken "başarılı" görünür. Kursun
üçüncü sütunu — geç kırmanın bedeli — tam olarak bu farkı yazmak için vardır.

Tam kuruluşta iki sayı da sıfırdır: ne diske yazma kalır ne de tamamlanan zincir. Bu kuruluşun
maliyeti 55 meşru birimdir ve aynı sonucu 9 birim veren iki kalemle almak da mümkündür — fark,
koşul oranları değiştiğinde ortaya çıkacaktır.

## Özet

- Sürükle–bırak indirmesi bir VE zinciridir: altı koşulun altısı da tutmalıdır. Tek tek
  koşullar seyrek değildir (221 ile 482 uç nokta arası), kesişim seyrektir: 600 uç noktanın
  22'si, yani %3,7'si.
- Birikimli sayı 362, 262, 118, 73, 63, 22 diye iner; en büyük düşüş en dar koşulda olur.
  VE zincirinde sonucu en dar koşul belirler.
- Tek başına dağıtılan savunmalarda sıralamayı kırılan koşul değil kapsam belirler: kapsamı
  0,90 olan kalem 22'yi 1'e indirir, kapsamı 0,30 olan ve iki koşul birden kıran kalem 16'da
  bırakır.
- İki savunma 9 birim meşru bedelle kalanı 0'a indiriyor; yedi savunmanın toplam bedeli 55 ve
  ek olarak düşürdüğü uç nokta sayısı 0. Yedek katmanların işlevi bugünkü sayıyı değil, koşul
  oranı değiştiğinde oluşacak sıçramayı karşılamaktır.
- İlk üç koşulda hiçbir iz kalmaz; dördüncü koşuldan sonra kalem diske yazılmıştır. Savunmasız
  filoda 73 uç noktada kalem yazılmış, 22'sinde zincir tamamlanmıştır — aradaki 51 uç, zincirin
  tamamlanmadığı ama yine de bir temizleme işi doğurduğu bölgedir.

## Sonraki Adım

Bu ders bir kalemin uç noktaya ulaşmasını saydı ama o kalemin **ne olduğunu** hiç sormadı.
Savunmanın elinde çoğu zaman yalnız o kalem vardır: kaynağı yok, belgesi yok, yazarı bilinmiyor.
Sonraki ders bu soruyu ölçer — bir ikiliden hangi göstergeler çıkarılabilir, hangileri hiçbir
biçimde çıkarılamaz ve karşı önlemler kaç kalemi gizler. O ders aynı zamanda kursun
kapanışıdır: yirmi iki dersin zincir adımı, kırılabilen halkası ve geç kırma bedeli tek bir
tabloda toplanır.
