---
title: 'Mavi, Kırmızı ve Mor Takımlar'
source: 'https://academia.sh/tr/kurslar/siber-guvenlige-giris/mavi-kirmizi-ve-mor-takimlar'
course: 'Siber Güvenliğe Giriş'
language: tr
updated: '2026-08-17T18:08:38+00:00'
license: 'CC BY-SA 4.0'
---

# Mavi, Kırmızı ve Mor Takımlar

Üç takımın aynı yol kümesindeki farkı: 30 yollu erişim grafiğinde savunmanın bildiği 11 yol, saldırı tarafının bulduğu 15 yol, ikisinin kesişmediği 8 kalem, hiçbirinin görmediği 13 yol; mor çalışmanın bilgi boşluğunu 6'dan 0'a indirmesi, kapanan yolun 17'den 22'ye çıkarken duran meşru isteğin 2.764'ten 2.037'ye inmesi ve kapsam dışı 8 yolun kalması.

Önceki konu altı savunma ilkesini aynı yol kümesinde ölçtü ve her birinin kapattığı yol ile
durdurduğu meşru işi yan yana yazdı. Bütün o ölçümlerde sessiz bir varsayım vardı: **yol kümesinin
kendisi biliniyor.** Kapatılan yol sayılabildiyse, sayılan yol önceden bir yerde yazılıydı demektir.
Bu ders o varsayımı kaldırır ve tek bir soru sorar: bir kurumun bildiği yol kümesi ile gerçekten
var olan yol kümesi arasındaki fark kaç kalemdir, o farkı kim bulur.

Üç çalışma biçimi vardır. **Mavi takım** savunmayı işletir: envanteri tutar, denetimi kurar,
kaydı okur. **Kırmızı takım** aynı varlığa ulaşan yolları yazılı yetki ve tanımlı kapsam içinde
arar; bulduğu her yol savunmanın listesinde olmayan bir kalem olabilir. **Mor takım** ayrı bir
kadro değil, iki tarafın aynı yol kümesi üzerinde birlikte çalışma biçimidir. Bu ders üçünü de
tek bir sayıda ayırır: **aynı yol kümesinde kimin kaç yolu gördüğü.**

## Üç Takım, Tek Yol Kümesi

Örnek, kursun kurgu **bölgesel ölçüm ağı**dır. Aşağıdaki graf bir **modeldir**; gerçek bir ana
bilgisayar, gerçek bir adres ya da gerçek bir servis ucu yoktur.

- **AR1.** Erişim grafiği 12 düğüm ve 20 adımdır; 3 giriş noktası, 2 korunan varlık. **Yol**, bir
  giriş düğümünden bir varlığa giden, düğüm tekrarı olmayan yürüyüştür.
- **AR2.** Savunma bir yolu ancak yolun **bütün** düğümleri varlık envanterinde yazıyorsa bilir.
  Envanterde olmayan tek bir düğüm, o düğümden geçen bütün yolları görünmez yapar.
- **AR3.** Saldırı tarafı bir yolu ancak bütün düğümleri **yazılı kapsamın** içindeyse ve adım
  sayısı **adım bütçesini** aşmıyorsa bulur. Ayrı çalışmada bütçe 4 adımdır.
- **AR4.** Mor çalışmada envanter paylaşılır: kırmızının dokunduğu her düğüm envantere girer ve
  keşif için adım harcanmadığından bütçe 6'ya çıkar.
- **AR5.** Her adım günde belli sayıda meşru istek taşır; sayılar kurgudur.
- **AR6.** Bir yol, üzerindeki bir adım kesilerek kapanır. Savunma **anladığı** bir yolda en az
  meşru istek taşıyan adımı keser.
- **AR7.** Yalnız rapordan öğrenilen, ara düğümleri envanterde olmayan bir yolda savunma
  adlandırabildiği tek adımı — **giriş adımını** — keser.
- **AR8.** Meşru işe bedel, kesilen **ayrık** adım kümesinin taşıdığı meşru istek toplamıdır; aynı
  adım birden çok yolu kapatıyorsa bir kez sayılır.

```js
// takim/ag.mjs — kurgu bolgesel olcum aginin erisim grafi (MODEL). Gercek bir ana bilgisayar,
// gercek bir adres ya da gercek bir servis ucu yoktur; butun sayilar kurgudur.

// dugum: envanter = savunmanin varlik listesinde yaziyor mu;
//        kapsam  = yazili yetkilendirmenin sinirlari icinde mi (ucuncu taraf ucu disaridadir).
export const DUGUM = `
  saha-terminali     giris  evet  evet
  abone-portali      giris  evet  evet
  tedarikci-ucu      giris  hayir hayir
  sube-anahtari      ara    hayir evet
  toplayici          ara    evet  evet
  dogrulayici        ara    evet  evet
  kimlik-dizini      ara    evet  evet
  yonetim-agi        ara    evet  evet
  is-emri            ara    evet  evet
  yedek-ucu          ara    hayir evet
  okuma-deposu       varlik evet  evet
  faturalama         varlik evet  evet`
  .trim().split("\n").map((r) => {
    const [ad, tur, env, kap] = r.trim().split(/\s+/);
    return { ad, tur, envanter: env === "evet", kapsam: kap === "evet" };
  });

// kenar: adim ve o adimdan gunde gecen mesru istek sayisi (kurgu).
export const KENAR = `
  saha-terminali toplayici      420
  saha-terminali sube-anahtari   35
  abone-portali  dogrulayici    900
  abone-portali  kimlik-dizini  760
  tedarikci-ucu  yonetim-agi     18
  tedarikci-ucu  yedek-ucu        6
  sube-anahtari  yonetim-agi     24
  sube-anahtari  toplayici      110
  toplayici      dogrulayici    380
  toplayici      okuma-deposu   540
  dogrulayici    okuma-deposu   610
  dogrulayici    faturalama     290
  kimlik-dizini  yonetim-agi     44
  kimlik-dizini  is-emri        150
  yonetim-agi    toplayici       60
  yonetim-agi    yedek-ucu       12
  yonetim-agi    kimlik-dizini   38
  yedek-ucu      okuma-deposu     9
  is-emri        dogrulayici    130
  is-emri        faturalama      95`
  .trim().split("\n").map((r) => {
    const [a, b, m] = r.trim().split(/\s+/);
    return { a, b, mesru: Number(m) };
  });

const bul = (ad) => DUGUM.find((d) => d.ad === ad);
export const GIRIS = DUGUM.filter((d) => d.tur === "giris").map((d) => d.ad);
export const VARLIK = DUGUM.filter((d) => d.tur === "varlik").map((d) => d.ad);

// Butun basit yollar: giris dugumunden varliga, dugum tekrari olmadan.
export function yollar() {
  const cikis = {};
  for (const k of KENAR) (cikis[k.a] ??= []).push(k.b);
  const hepsi = [];
  const yuru = (d, iz) => {
    if (VARLIK.includes(d)) { hepsi.push([...iz]); return; }
    for (const s of cikis[d] ?? []) if (!iz.includes(s)) yuru(s, [...iz, s]);
  };
  for (const g of GIRIS) yuru(g, [g]);
  return hepsi.map((iz) => ({
    iz,
    adim: iz.length - 1,
    kenar: iz.slice(0, -1).map((_, i) => `${iz[i]}>${iz[i + 1]}`),
  }));
}

export const kenarMesru = (e) => {
  const [a, b] = e.split(">");
  return KENAR.find((k) => k.a === a && k.b === b).mesru;
};

// Savunma bir yolu ancak butun dugumleri envanterinde yaziyorsa bilir.
export const maviBilir = (y) => y.iz.every((d) => bul(d).envanter);
// Saldiri tarafi bir yolu ancak butun dugumleri kapsamdaysa ve adim sayisi butcesini
// asmiyorsa bulur; kapsam disi dugume dokunmak yetkilendirmenin disina cikmaktir.
export const kirmiziBulur = (y, butce) =>
  y.iz.every((d) => bul(d).kapsam) && y.adim <= butce;
```

## Kim Neyi Biliyor

```js
// takim/olc.mjs — ayni yol kumesinde savunmanin bildigi, saldiri tarafinin buldugu ve
// ikisinin de gormedigi yol; sonra kapatmanin mesru ise bedeli.
import { yollar, DUGUM, KENAR, kenarMesru, maviBilir, kirmiziBulur } from "./ag.mjs";

const Y = yollar();
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 ENV0 = new Set(DUGUM.filter((d) => d.envanter).map((d) => d.ad));
const bilir = (y, env) => y.iz.every((d) => env.has(d));
const BUTCE = 4, MOR_BUTCE = 6;   // kurgu: mor calismada kesif adimi harcanmaz

// Mor calisma: kirmizinin dokundugu her dugum envantere girer, kirmizi envanteri okur.
const DOKUNULAN = new Set();
for (const y of Y) if (kirmiziBulur(y, BUTCE)) y.iz.forEach((d) => DOKUNULAN.add(d));
const ENV1 = new Set([...ENV0, ...DOKUNULAN]);

const durum = (env, b) => {
  const m = Y.filter((y) => bilir(y, env)), k = Y.filter((y) => kirmiziBulur(y, b));
  const kes = m.filter((y) => k.includes(y));
  return { m: m.length, k: k.length, ortak: kes.length, ym: m.length - kes.length,
    yk: k.length - kes.length, hic: Y.length - (m.length + k.length - kes.length) };
};
const A = durum(ENV0, BUTCE), M = durum(ENV1, MOR_BUTCE);

console.log(`erisim grafi MODELI: ${DUGUM.length} dugum, ${KENAR.length} adim, ` +
  `${Y.length} basit yol; adim butcesi ayri calismada ${BUTCE}, mor calismada ${MOR_BUTCE}.`);
const T = [-38, 9, 8];
console.log("\n1. ayni yol kumesinde kim neyi biliyor");
yaz(T, "olcu", "ayri", "mor");
for (const [ad, f] of [["savunmanin bildigi yol", (r) => r.m],
  ["saldiri tarafinin buldugu yol", (r) => r.k], ["  ikisinin de bildigi", (r) => r.ortak],
  ["  yalniz savunmanin bildigi", (r) => r.ym],
  ["  yalniz saldirinin buldugu (bosluk)", (r) => r.yk],
  ["hicbirinin gormedigi yol", (r) => r.hic]]) yaz(T, ad, f(A), f(M));

// Kapatma: bilinen yolda en az mesru istek tasiyan adim kesilir; yalnizca rapordan
// ogrenilen yolda savunma adlandirabildigi tek adimi, giris adimini kapatir.
const dar = (y) => y.kenar.reduce((a, e) => (kenarMesru(e) < kenarMesru(a) ? e : a));
const bedel = (kesilen) => ({ adim: kesilen.size,
  mesru: [...kesilen].reduce((a, e) => a + kenarMesru(e), 0) });
const yol1 = Y.filter((y) => bilir(y, ENV0));
const yol2 = Y.filter((y) => bilir(y, ENV0) || kirmiziBulur(y, BUTCE));
const yol3 = Y.filter((y) => bilir(y, ENV1) || kirmiziBulur(y, MOR_BUTCE));
const K1 = new Set(yol1.map(dar));
const K2 = new Set([...yol1.map(dar), ...yol2.filter((y) => !bilir(y, ENV0)).map((y) => y.kenar[0])]);
const K3 = new Set(yol3.map(dar));

const D = [-24, 10, 8, 10, 13];
console.log("\n2. kapatmanin mesru ise bedeli (mesru istek: gun basina, kurgu)");
yaz(D, "calisma bicimi", "kapanan", "kalan", "kesilen", "duran mesru");
for (const [ad, y, k] of [["yalniz savunma", yol1, K1], ["savunma + ayri sinama", yol2, K2],
  ["mor calisma", yol3, K3]]) {
  const b = bedel(k);
  yaz(D, ad, y.length, Y.length - y.length, b.adim, b.mesru);
}
const pahali = [...K2].filter((e) => !K3.has(e))
  .reduce((a, e) => (kenarMesru(e) > kenarMesru(a) ? e : a));
const oYol = yol2.find((y) => y.kenar[0] === pahali && !bilir(y, ENV0));
console.log(`\nayri sinamada en pahali kesme: ${pahali} (${kenarMesru(pahali)} mesru istek),`);
console.log(`  kapattigi yol: ${oYol.iz.join(" > ")}`);
console.log(`  mor calismada ayni yol ${dar(oYol)} kesilerek kapaniyor: ` +
  `${kenarMesru(dar(oYol))} mesru istek.`);
const kapsamDisi = Y.filter((y) => !y.iz.every((d) => DUGUM.find((x) => x.ad === d).kapsam));
console.log(`mor calismadan sonra kalan ${M.hic} yolun ${kapsamDisi.length} tanesi ` +
  `kapsam disi bir dugumden geciyor.`);
```

```
erisim grafi MODELI: 12 dugum, 20 adim, 30 basit yol; adim butcesi ayri calismada 4, mor calismada 6.

1. ayni yol kumesinde kim neyi biliyor
olcu                                       ayri     mor
savunmanin bildigi yol                       11      22
saldiri tarafinin buldugu yol                15      22
  ikisinin de bildigi                         9      22
  yalniz savunmanin bildigi                   2       0
  yalniz saldirinin buldugu (bosluk)          6       0
hicbirinin gormedigi yol                     13       8

2. kapatmanin mesru ise bedeli (mesru istek: gun basina, kurgu)
calisma bicimi             kapanan   kalan   kesilen  duran mesru
yalniz savunma                  11      19         7         1969
savunma + ayri sinama           17      13         9         2764
mor calisma                     22       8        10         2037

ayri sinamada en pahali kesme: abone-portali>kimlik-dizini (760 mesru istek),
  kapattigi yol: abone-portali > kimlik-dizini > yonetim-agi > yedek-ucu > okuma-deposu
  mor calismada ayni yol yedek-ucu>okuma-deposu kesilerek kapaniyor: 9 mesru istek.
mor calismadan sonra kalan 8 yolun 8 tanesi kapsam disi bir dugumden geciyor.
```

Birinci tablonun `ayri` sütunu üç takımın ayrı ayrı çalıştığı düzeni okur. Grafta 30 yol vardır.
Savunma bunların **11'ini** bilir; saldırı tarafı **15'ini** bulur. İki sayı yakın görünse de aynı
yolları göstermezler: kesişim yalnız **9** kalemdir.

Kesişmeyen iki kalem birbirinin aynı değildir. **Yalnız savunmanın bildiği 2 yol** zararsızdır: bu
yollar 5 adım uzunluğundadır ve saldırı tarafının bütçesi 4 adımdır. Savunma onları biliyor ve
kapatabiliyor; sınama bulmadı diye ortadan kalkmıyorlar. **Yalnız saldırı tarafının bulduğu 6 yol**
ise **bilgi boşluğudur**: envanterde yazmayan iki düğümden — şube anahtarı ve yedek ucundan —
geçtikleri için savunmanın listesinde hiç yoktular. Bir kurumun kendi ağı hakkında bilmediği şeyin
sayısı, ancak dışarıdan bir sınama o sayıyı ölçtüğünde yazılabilir.

Son satır iki takımın da göremediğini verir: **13 yol**. Bu sayı toplam yolun neredeyse yarısıdır
ve iki ayrı nedenden doğar. Bir bölümü savunmanın envanterinde olmayan düğümlerden geçer ve saldırı
tarafının bütçesini aşacak kadar uzundur; kalanı ise **kapsamın dışındaki** üçüncü taraf ucundan
başlar. Yazılı yetki ve tanımlı kapsam olmadan bir sistem üzerinde sınama yapmak hem yasadışı hem
meslek dışıdır; kapsam dışı bir düğüme dokunulmamasının nedeni teknik bir engel değil, bu sınırdır.

## Mor Çalışma Neyi Kapatıyor

`mor` sütunu iki değişikliğin sonucudur ve ikisi de bilgi alışverişidir. Savunma, sınamanın
dokunduğu düğümleri envanterine ekler; şube anahtarı ve yedek ucu artık listededir. Sınama tarafı
envanteri okuduğu için keşfe adım harcamaz ve bütçesi 4'ten 6'ya çıkar. Yeni bir denetim
kurulmadı, yeni bir araç alınmadı, grafta tek bir adım değişmedi.

Sonuç dört satırda birden değişir. Savunmanın bildiği yol 11'den **22'ye**, saldırı tarafının
bulduğu yol 15'ten **22'ye** çıkar ve ikisi **aynı 22 yoldur**: kesişmeyen kalem sıfırlanır. Bilgi
boşluğu **6'dan 0'a** iner. Görülmeyen yol 13'ten **8'e** düşer.

Mor çalışmanın ölçülen katkısı budur: iki tarafın da tek başına ulaşamadığı **11 yol** ortak
listeye girer. Bu yolların hiçbiri yeni değildir — 30 yol baştan beri graftaydı. Kapanan şey bir
açık değil, **bir bilgi boşluğudur**.

## Kapatmanın Bedeli

İkinci tablo aynı üç düzeni savunmanın asıl işi cinsinden okur: kaç yol kapanıyor ve karşılığında
kaç meşru istek duruyor.

Yalnız savunma çalıştığında 11 yol kapanır, 19'u açık kalır ve 7 adım kesilerek günde **1.969**
meşru istek durur. Sınama eklendiğinde kapanan yol 17'ye çıkar, ama duran meşru istek **2.764'e**
fırlar: 6 yol daha kapatmanın bedeli 795 istektir, yani yol başına 132. Mor çalışmada kapanan yol
**22**, duran meşru istek **2.037'dir**: sınamalı düzene göre **5 yol fazla kapanıyor ve 727 meşru
istek daha az duruyor**.

Bu ters yön son üç satırda açıklanıyor. Ayrı çalışan bir düzende savunma, raporda okuduğu bir yolu
kapatmak zorundadır ama o yolun ara düğümleri envanterinde yazmaz; adlandırabildiği tek adım giriş
adımıdır. Abone portalından kimlik dizinine giden adımı keser ve günde **760** meşru istek durur.
Aynı yol mor çalışmada yedek ucundan okuma deposuna giden adım kesilerek kapanır: **9** meşru
istek. Kapanan yol aynıdır, bedel **84 kat** farklıdır.

Kural buradan çıkar: **anlaşılmadan kapatılan yol, kapanır ama pahalıya kapanır.** Bir bulgu
listesi hangi yolun açık olduğunu söyler; hangi adımın kesilmesi gerektiğini söylemez. O adımı
seçmek için yolun her düğümünün ne iş yaptığını bilmek gerekir ve o bilgi savunma tarafındadır.
Mor çalışmanın kapattığı boşluk çift yönlüdür: savunma yolun varlığını, sınama tarafı yolun
üzerindeki meşru işi öğrenir.

## Sınamanın Yetmediği Yer

Mor çalışmadan sonra bile **8 yol** kimsenin listesinde değildir ve çıktının son satırı bu 8 yolun
tamamının **kapsam dışı** bir düğümden geçtiğini yazar. Üçüncü taraf ucu ne savunmanın
envanterindedir ne de sınamanın yetkilendirildiği alandadır.

Bu kalan, daha iyi bir sınamayla kapanmaz. Bütçeyi 6'dan 10'a çıkarmak yeni yol bulmaz, çünkü engel
adım sayısı değildir. Envanteri genişletmek de yetmez, çünkü o uç başka bir kurumun elindedir ve
üzerinde sınama yapma yetkisi ayrı bir yazılı anlaşmayla verilir. Yol kümesinin bir bölümü teknik
bir eksiklikten değil, **yetkilendirmenin sınırından** ötürü ölçülmemiş kalır — ve ölçülmemiş bir
yol, kapatılmamış bir yoldur.

## Özet

- 30 yollu grafta savunma 11, saldırı tarafı 15 yol görür; kesişim 9'dur. Kesişmeyen 8 kalemin 2'si
  savunmanın bildiği uzun yol, **6'sı bilgi boşluğudur** — envanterde olmayan iki düğümden geçtiği
  için savunmanın hiç bilmediği yollar.
- Ayrı çalışmada 13 yol iki tarafın da görüş alanının dışındadır; mor çalışmadan sonra bu sayı 8'e
  iner ve bilgi boşluğu 6'dan 0'a düşer. Grafta tek bir adım değişmez, yalnız bilgi paylaşılır.
- Mor çalışma kapanan yolu 17'den 22'ye çıkarırken duran meşru isteği 2.764'ten 2.037'ye indirir:
  daha çok yol, daha az bedel.
- Anlaşılmayan bir yol pahalıya kapanır. Rapordan öğrenilen bir yolda savunma giriş adımını keser
  (760 meşru istek); aynı yol mor çalışmada 9 meşru istek taşıyan adımla kapanır.
- Kalan 8 yolun tamamı kapsam dışı bir düğümden geçer. Bu kalan, bütçeyi büyüterek değil ancak
  yetkilendirmenin sınırını değiştirerek ölçülebilir.

## Sonraki Adım

Bu ders üç çalışma biçimini ayırdı ve aralarındaki farkı tek bir sayıya bağladı: aynı yol kümesinde
kimin kaç yolu gördüğü. Ölçüm bir şeyi göstermiş oldu — savunma bir kadro değil, birbirini
tamamlayan **işlerin** toplamıdır. Envanteri tutan iş ile yolu arayan iş ayrı ellerdedir ve ikisi
konuşmadığında 11 yol ortak listeye hiç girmez.

Yine de "mavi" ve "kırmızı" birer takım adıdır, iş adı değil. Envanteri kim tutuyor, kesilecek adımı
kim seçiyor, kesildikten sonra kalan kaydı kim okuyor, mimarideki kararı kim veriyor? Bir sonraki
ders aynı yol kümesini bu kez **rol** cinsinden böler ve iki sayıyı arar: kaç yol hiçbir rolün
üzerinde değil, kaç yol iki rolün birden üzerinde.
