İçeriğe geç
academia.sh

Ders 11 / 16

Yaşayan Toprakta Saldırı

On dört yerleşik ve imzalı aracın yedi yetenek sınıfı üzerindeki çakışması sayılır: aynı yeteneği ortalama 3,4 aracın taşıması, üç imza kuralının yirmi dört koşumdan sıfırını işaretlemesi ve üç bağlam boyutunun — üst süreç, komut deseni, zamanlama — tek tek, birleşik ve kesişimli değerlendirilmesi; altı şüpheli koşumun beşi ayrılıyor, biri dört boyutta bir meşru koşumla birebir aynı.

İçindekiler

Önceki dersin izin listesi kapatabildiği yolu kapattı ve kapatamadığı yolları adlandırdı: uzak destek akışı kaldırılamazdı. O akışı yürüten araç uçta duruyor, imzalı ve envanterin taban çizgisinde kayıtlı. Bu ders o aracın — ve onun gibi on üç aracın — kötü niyetle çalıştırıldığında tespit tarafında ne olduğunu sayar.

Ölçülen üç şey var. Birincisi çakışmadır: bir işi kaç ayrı yerleşik araç yapabiliyor. İkincisi imza tabanlı kuralın bu koşumlarda kaç kalem işaretlediğidir. Üçüncüsü davranış bağlamının — üst süreç, komut deseni ve zamanlama — kaç şüpheli koşumu ayırabildiği ve karşılığında kaç meşru koşumu işaretlediğidir. Bu derste hiçbir komut, parametre ya da adım dizisi yazılmadı; koşumlar tür ve sayı düzeyinde modellendi. Bu tekniklerin bir sistem üzerinde denenmesi, yazılı yetki ve tanımlı kapsam olmadan hem yasadışı hem meslek dışıdır.

  • UK25. On dört araç, yedi yetenek sınıfı ve yirmi dört koşum kurgusal bölgesel ölçüm ağının bir ucuna aittir. Ölçülen şey node ile kurulan modeldir.
  • UK26. Araçların hepsi yerleşik, imzası geçerli ve taban çizgisinde kayıtlıdır. Bu, dersin varsayımı değil tanımıdır: envanterde olmayan bir araç zaten başka bir derste ölçüldü.
  • UK27. Koşumların gerçek sınıfı modelde bilinir. Gerçekte ancak inceleme sonrası bilinir; bilindiği varsayılıyor ki ayrılan ile yanlış pozitif ayrı sayılabilsin.
  • UK28. Bağlam üç ayrık boyutla modellendi. Gerçekte her boyut sürekli değerlidir ve eşik ister; ayrık değer kuralların sayısını küçültür, birleşimlerin yönünü değiştirmez.
  • UK29. Komut deseni sınıfları içerik değil biçim tanımıdır; hiçbir örnek komut yazılmadı.
  • UK30. Bir koşum ya bir kurala uyar ya uymaz; sıklık, art arda gelme ve aynı uçtaki başka koşumlarla ilişki modellenmedi. Üçü de ayırma gücünü artırır ve üçü de daha çok veri ister.

Aynı İşi Kaç Araç Yapabiliyor

// arac.mjs — uctaki yerlesik ve imzali arac envanteri, yetenekler ve kosum kaydi; model
// arac turu -> tasidigi yetenek siniflari (hepsi yerlesik ve imzali kabul edilir)
export const ARAC = {
  'betik yorumlayicisi': ['kodu yorumlama', 'surec baslatma', 'agdan veri getirme'],
  'kabuk yorumlayicisi': ['kodu yorumlama', 'surec baslatma'],
  'dosya aktarim araci': ['agdan veri getirme'],
  'paket yoneticisi': ['agdan veri getirme', 'surec baslatma'],
  'kurulum motoru': ['agdan veri getirme', 'surec baslatma'],
  'sertifika yardimcisi': ['agdan veri getirme'],
  'uzak yonetim istemcisi': ['uzak makineye baglanma', 'surec baslatma'],
  'yonetim betigi arayuzu': ['uzak makineye baglanma', 'surec baslatma', 'kodu yorumlama'],
  'arsivleyici': ['arsivleme'],
  'yedekleme yardimcisi': ['arsivleme', 'zamanlama'],
  'zamanlayici arayuzu': ['zamanlama', 'surec baslatma'],
  'sistem bilgi araci': ['envanter okuma'],
  'yapilandirma sorgulama araci': ['envanter okuma'],
  'gunluk sorgulama araci': ['envanter okuma'],
};
export const AD = Object.keys(ARAC);
export const YETENEK = [...new Set(Object.values(ARAC).flat())];
export const tasiyan = (y) => AD.filter((a) => ARAC[a].includes(y));
// imza tabanli kural kumesi: her kural bir kosumun hangi alanina bakar
export const IMZA_KURALI = [
  ['bilinmeyen dosya kimligi', (k) => k.kimlik === 'bilinmeyen'],
  ['imzasiz ikili', (k) => k.imza === 'yok'],
  ['tabanda olmayan kalem', (k) => k.taban === false],
];
// kosum: [arac, ust surec sinifi, komut deseni, zaman dilimi, gercek sinif]
export const KOSUM = [
  ['betik yorumlayicisi', 'zamanlayici', 'olagan', 'bakim penceresi', 'mesru'],
  ['betik yorumlayicisi', 'yonetim ajani', 'olagan', 'mesai', 'mesru'],
  ['kabuk yorumlayicisi', 'zamanlayici', 'olagan', 'mesai disi', 'mesru'],
  ['arsivleyici', 'zamanlayici', 'olagan', 'bakim penceresi', 'mesru'],
  ['dosya aktarim araci', 'yonetim ajani', 'olagan', 'mesai', 'mesru'],
  ['dosya aktarim araci', 'zamanlayici', 'dis kaynaktan parametre', 'bakim penceresi', 'mesru'],
  ['uzak yonetim istemcisi', 'kullanici oturumu', 'olagan', 'mesai', 'mesru'],
  ['uzak yonetim istemcisi', 'uzak oturum', 'olagan', 'mesai', 'mesru'],
  ['zamanlayici arayuzu', 'yonetim ajani', 'olagan', 'mesai', 'mesru'],
  ['sertifika yardimcisi', 'servis', 'olagan', 'mesai', 'mesru'],
  ['sistem bilgi araci', 'yonetim ajani', 'olagan', 'mesai', 'mesru'],
  ['yapilandirma sorgulama araci', 'kullanici oturumu', 'olagan', 'mesai', 'mesru'],
  ['gunluk sorgulama araci', 'yonetim ajani', 'uzun tek satir', 'mesai disi', 'mesru'],
  ['yedekleme yardimcisi', 'zamanlayici', 'olagan', 'mesai disi', 'mesru'],
  ['kurulum motoru', 'kullanici oturumu', 'olagan', 'mesai', 'mesru'],
  ['paket yoneticisi', 'yonetim ajani', 'olagan', 'bakim penceresi', 'mesru'],
  ['yonetim betigi arayuzu', 'servis', 'olagan', 'mesai', 'mesru'],
  ['kabuk yorumlayicisi', 'belge uygulamasi', 'olagan', 'mesai', 'mesru'],
  ['betik yorumlayicisi', 'belge uygulamasi', 'kodlanmis girdi', 'mesai', 'supheli'],
  ['kabuk yorumlayicisi', 'uzak oturum', 'uzun tek satir', 'mesai disi', 'supheli'],
  ['dosya aktarim araci', 'kullanici oturumu', 'dis kaynaktan parametre', 'mesai disi', 'supheli'],
  ['arsivleyici', 'servis', 'olagan', 'mesai disi', 'supheli'],
  ['uzak yonetim istemcisi', 'kullanici oturumu', 'olagan', 'mesai', 'supheli'],
  ['zamanlayici arayuzu', 'uzak oturum', 'olagan', 'mesai', 'supheli'],
];
export const kayit = (k) => ({ arac: k[0], kimlik: 'bilinen', imza: 'gecerli', taban: true });
export const BAGLAM = [
  ['ust surec', (k) => ['belge uygulamasi', 'uzak oturum'].includes(k[1])],
  ['komut deseni', (k) => ['kodlanmis girdi', 'dis kaynaktan parametre'].includes(k[2])],
  ['zamanlama', (k) => k[3] === 'mesai disi' && k[1] !== 'zamanlayici'],
];
// kosum1.mjs — ayni yetenegi tasiyan arac sayisi ve imza tabanli kural kumesinin isaretledigi kalem
import { ARAC, AD, YETENEK, KOSUM, IMZA_KURALI, tasiyan, kayit } from './arac.mjs';

console.log(`${AD.length} yerlesik arac, ${YETENEK.length} yetenek sinifi, ${KOSUM.length} kosum kaydi\n`);
console.log(`${'yetenek sinifi'.padEnd(24)} ${'tasiyan arac'.padStart(12)} ${'biri engellenirse kalan'.padStart(23)}`);
for (const y of YETENEK)
  console.log(`${y.padEnd(24)} ${String(tasiyan(y).length).padStart(12)} ${String(tasiyan(y).length - 1).padStart(23)}`);
const cok = YETENEK.filter((y) => tasiyan(y).length > 1);
console.log(`\ntek araca bagli yetenek : ${YETENEK.length - cok.length}/${YETENEK.length}`);
console.log(`birden cok araci olan   : ${cok.length}/${YETENEK.length}, ortalama ` +
  `${(cok.reduce((a, y) => a + tasiyan(y).length, 0) / cok.length).toFixed(1)} arac`);

const supheli = KOSUM.filter((k) => k[4] === 'supheli');
console.log(`\n${'imza tabanli kural'.padEnd(26)} ${'isaretledigi kosum'.padStart(18)} ${'supheli kosumdan'.padStart(16)}`);
for (const [ad, f] of IMZA_KURALI) {
  const isaret = KOSUM.filter((k) => f(kayit(k)));
  console.log(`${ad.padEnd(26)} ${String(isaret.length).padStart(18)} ` +
    `${`${isaret.filter((k) => k[4] === 'supheli').length}/${supheli.length}`.padStart(16)}`);
}
console.log(`\nsupheli kosumlarin kullandigi arac sayisi: ${new Set(supheli.map((k) => k[0])).size}`);
console.log(`bu araclarin kacinin imzasi gecerli ve tabanda kayitli: ` +
  `${[...new Set(supheli.map((k) => k[0]))].filter((a) => AD.includes(a)).length}/${new Set(supheli.map((k) => k[0])).size}`);
14 yerlesik arac, 7 yetenek sinifi, 24 kosum kaydi

yetenek sinifi           tasiyan arac biri engellenirse kalan
kodu yorumlama                      3                       2
surec baslatma                      7                       6
agdan veri getirme                  5                       4
uzak makineye baglanma              2                       1
arsivleme                           2                       1
zamanlama                           2                       1
envanter okuma                      3                       2

tek araca bagli yetenek : 0/7
birden cok araci olan   : 7/7, ortalama 3.4 arac

imza tabanli kural         isaretledigi kosum supheli kosumdan
bilinmeyen dosya kimligi                    0              0/6
imzasiz ikili                               0              0/6
tabanda olmayan kalem                       0              0/6

supheli kosumlarin kullandigi arac sayisi: 6
bu araclarin kacinin imzasi gecerli ve tabanda kayitli: 6/6

Birinci tablo bir savunma hamlesinin neden işe yaramadığını sayıyla veriyor. Yedi yetenek sınıfının hiçbiri tek bir araca bağlı değil; ortalama 3,4 araç aynı yeteneği taşıyor. Süreç başlatabilen yedi araç var; ağdan veri getirebilen beş. Bir aracı uygulama izin listesinden çıkarmak o yeteneği kaldırmaz, yalnız seçenek sayısını bir azaltır — ve kaldırılan araç meşru bir işte kullanılıyorsa o işi de durdurur. Çakışmanın ölçüsü budur: engellemenin kazancı bir, bedeli bir.

İkinci tablo dersin adını taşıyan sonucu veriyor. Üç imza tabanlı kural yirmi dört koşumun sıfırını işaretliyor ve şüpheli altı koşumun sıfırını yakalıyor. Bunun nedeni kuralların kötü yazılmış olması değil, baktıkları alanın bu koşumlarda hep aynı değeri taşımasıdır: dosya kimliği bilinen, imza geçerli, kalem taban çizgisinde kayıtlı. Şüpheli koşumların kullandığı altı aracın altısı da bu üç ölçütü geçiyor. İmza tabanlı tespit yanlış cevap vermiyor; hiç cevap vermiyor, çünkü sorduğu soru burada ayırt edici değil.

Üç Bağlam Boyutu

Ayırt edici olabilecek soru araca değil koşuma bakar: bu aracı ne başlattı, nasıl çağrıldı, ne zaman çalıştı. Üç boyut da uçta zaten kaydedilebilir; üçünün ayırma gücü ayrı ayrı ve birlikte ölçülüyor.

// kosum2.mjs — uc baglam boyutu tek tek, birlesik ve kesisimli; ayrilamayan kosum
import { KOSUM, BAGLAM } from './arac.mjs';

const S = KOSUM.filter((k) => k[4] === 'supheli'), M = KOSUM.filter((k) => k[4] === 'mesru');
const uyan = (k) => BAGLAM.filter(([, f]) => f(k)).map(([a]) => a);
const olc = (kural) => [S.filter(kural).length, M.filter(kural).length];
console.log(`${'baglam kumesi'.padEnd(42)} ${'ayrilan supheli'.padStart(15)} ${'yanlis pozitif'.padStart(14)}`);
for (let m = 1; m < 8; m++) {
  const secili = BAGLAM.filter((_, i) => m & (1 << i));
  const [a, y] = olc((k) => secili.some(([, f]) => f(k)));
  console.log(`${secili.map(([ad]) => ad).join(' veya ').padEnd(42)} ${`${a}/${S.length}`.padStart(15)} ${`${y}/${M.length}`.padStart(14)}`);
}
for (const n of [2, 3]) {
  const [a, y] = olc((k) => uyan(k).length >= n);
  console.log(`${`en az ${n} boyut birden`.padEnd(42)} ${`${a}/${S.length}`.padStart(15)} ${`${y}/${M.length}`.padStart(14)}`);
}

console.log(`\n${'kosum'.padEnd(30)} ${'ust surec'.padStart(17)} ${'desen'.padStart(23)} ${'zaman'.padStart(15)}  uyan boyut`);
for (const k of S)
  console.log(`${k[0].padEnd(30)} ${k[1].padStart(17)} ${k[2].padStart(23)} ${k[3].padStart(15)}  ${uyan(k).join(', ') || '-'}`);

const anahtar = (k) => k.slice(0, 4).join('|');
const ikiz = S.filter((s) => M.some((m) => anahtar(m) === anahtar(s)));
console.log(`\ndort boyutta bir mesru kosumla ayni olan supheli kosum: ${ikiz.length}/${S.length}`);
for (const s of ikiz) console.log(`  ${s[0]} / ${s[1]} / ${s[2]} / ${s[3]}`);
console.log(`hicbir baglam boyutuna uymayan supheli kosum: ${S.filter((k) => uyan(k).length === 0).length}/${S.length}`);
baglam kumesi                              ayrilan supheli yanlis pozitif
ust surec                                              3/6           2/18
komut deseni                                           2/6           1/18
ust surec veya komut deseni                            4/6           3/18
zamanlama                                              3/6           1/18
ust surec veya zamanlama                               5/6           3/18
komut deseni veya zamanlama                            4/6           2/18
ust surec veya komut deseni veya zamanlama             5/6           4/18
en az 2 boyut birden                                   3/6           0/18
en az 3 boyut birden                                   0/6           0/18

kosum                                  ust surec                   desen           zaman  uyan boyut
betik yorumlayicisi             belge uygulamasi         kodlanmis girdi           mesai  ust surec, komut deseni
kabuk yorumlayicisi                  uzak oturum          uzun tek satir      mesai disi  ust surec, zamanlama
dosya aktarim araci            kullanici oturumu dis kaynaktan parametre      mesai disi  komut deseni, zamanlama
arsivleyici                               servis                  olagan      mesai disi  zamanlama
uzak yonetim istemcisi         kullanici oturumu                  olagan           mesai  -
zamanlayici arayuzu                  uzak oturum                  olagan           mesai  ust surec

dort boyutta bir mesru kosumla ayni olan supheli kosum: 1/6
  uzak yonetim istemcisi / kullanici oturumu / olagan / mesai
hicbir baglam boyutuna uymayan supheli kosum: 1/6

Tek boyutlar zayıf: en iyisi altı şüpheli koşumun üçünü ayırıyor. Birleşimler daha iyi ama düzgün toplanmıyorlar. Üst süreç ile zamanlama birlikte beşini ayırıyor ve üç meşru koşumu işaretliyor. Üçüncü boyutu eklemek — komut deseni — ayrılan sayısını hiç değiştirmiyor ve yanlış pozitifi üçten dörde çıkarıyor. Komut deseni tek başına iki koşum ayırıyordu; ikisi de öteki iki boyutun zaten yakaladığı koşumlardı. Katman eklemenin kapattığı yol sıfırsa o katman ölçülmemiş sayılır ve bu kural burada tespit tarafında da geçerlidir.

Kesişim satırları ters yöndeki kazancı gösteriyor. En az iki boyutun birden uyması istendiğinde ayrılan sayı üçe düşüyor ama yanlış pozitif sıfırlanıyor: on sekiz meşru koşumun hiçbiri iki boyutta birden uymuyor. Bu, bakılacak uyarı sayısını üçe indirir ve üçünün üçü de gerçektir. Aradaki seçim önceki derslerdekiyle aynı biçimdedir — beş ayrılan ve dört yanlış mı, üç ayrılan ve sıfır yanlış mı.

Alt liste ayrılamayan koşumu adıyla veriyor ve nedeni ölçülebilir: uzak yönetim istemcisinin bir kullanıcı oturumundan olağan bir desenle mesai içinde çalışması, listedeki bir meşru koşumla dört boyutta birebir aynıdır. Ayıracak bir alan yok. Bu koşumu ayırmanın modeldeki tek yolu dördüncü bir boyut eklemektir — bağlandığı uç, taşınan veri hacmi, aynı kullanıcının o gün yaptığı öteki işler — ve dördüncü boyutun her biri yeni bir telemetri kaynağı, yani üçüncü derste ölçülen pencereden yeni bir kesinti demektir.

Engellemenin İki Sütunu

Ayırmak yerine engellemek de bir seçenektir: şüpheli koşumlarda geçen araçları uygulama izin listesinden çıkarmak. Bu hamlenin kazancı ile bedeli aynı model üzerinde sayılabilir.

// kosum3.mjs — bir araci engellemenin kazanci ve bedeli: duran kosumlar ve kalan alternatif arac
import { ARAC, KOSUM, tasiyan } from './arac.mjs';

const kullanilan = [...new Set(KOSUM.map((k) => k[0]))];
console.log(`${'engellenen arac'.padEnd(30)} ${'duran mesru'.padStart(11)} ${'duran supheli'.padStart(13)} ` +
  `${'ayni yetenekli diger arac'.padStart(24)}`);
let toplamMesru = 0, toplamSupheli = 0;
for (const a of kullanilan) {
  const k = KOSUM.filter((x) => x[0] === a);
  const [m, s] = [k.filter((x) => x[4] === 'mesru').length, k.filter((x) => x[4] === 'supheli').length];
  const alternatif = new Set(ARAC[a].flatMap((y) => tasiyan(y)).filter((x) => x !== a));
  if (s > 0) { toplamMesru += m; toplamSupheli += s; }
  console.log(`${a.padEnd(30)} ${String(m).padStart(11)} ${String(s).padStart(13)} ${String(alternatif.size).padStart(24)}`);
}
const supheliArac = kullanilan.filter((a) => KOSUM.some((x) => x[0] === a && x[4] === 'supheli'));
const devredilebilir = supheliArac.filter((a) => ARAC[a].some((y) => tasiyan(y).length > 1));
console.log(`\nsupheli kosum kullanan arac: ${supheliArac.length}`);
console.log(`hepsini engellemenin bedeli: ${toplamMesru} mesru kosum durur, ${toplamSupheli} supheli kosum durur`);
console.log(`bu araclardan yetenegi baska bir araca devredilebilenler: ${devredilebilir.length}/${supheliArac.length}`);
engellenen arac                duran mesru duran supheli ayni yetenekli diger arac
betik yorumlayicisi                      2             1                        8
kabuk yorumlayicisi                      2             1                        6
arsivleyici                              1             1                        1
dosya aktarim araci                      2             1                        4
uzak yonetim istemcisi                   2             1                        6
zamanlayici arayuzu                      1             1                        7
sertifika yardimcisi                     1             0                        4
sistem bilgi araci                       1             0                        2
yapilandirma sorgulama araci             1             0                        2
gunluk sorgulama araci                   1             0                        2
yedekleme yardimcisi                     1             0                        2
kurulum motoru                           1             0                        8
paket yoneticisi                         1             0                        8
yonetim betigi arayuzu                   1             0                        6

supheli kosum kullanan arac: 6
hepsini engellemenin bedeli: 10 mesru kosum durur, 6 supheli kosum durur
bu araclardan yetenegi baska bir araca devredilebilenler: 6/6

Altı aracın hepsini engellemek altı şüpheli koşumu durdurur ve on meşru koşumu birlikte durdurur: oran birden büyük, yani her kazanılan koşum için birden fazla meşru iş kesiliyor. Sağdaki sütun ise kazancın kalıcı olmadığını gösteriyor. Engellenen her aracın taşıdığı yetenekleri taşıyan başka araçlar uçta duruyor — betik yorumlayıcısı için sekiz, zamanlayıcı arayüzü için yedi, en dar durumda arşivleyici için bir. Altı aracın altısı da yeteneğini başka bir araca devredebiliyor.

Bu tablonun okunuşu kursun iki sütununu bir kez daha ayırıyor. Engelleme burada gerçekten kapatıyor ama kapattığı şey araçtır, yetenek değil; yetenek envanterde kaldığı sürece kapanan bir yol yoktur. Ayırma ise hiçbir şey kapatmaz, yalnız görünür kılar — ve görünür kıldığı beş şüpheli koşuma karşılık dört meşru koşumu da işaretler.

Özet

  • 7 yetenek sınıfının hiçbiri tek araca bağlı değil; ortalama 3,4 yerleşik araç aynı yeteneği taşıyor. Süreç başlatabilen 7 araç var. Bir aracı engellemek yeteneği kaldırmaz, seçeneği bir azaltır ve meşru bir işi durdurur.
  • 3 imza tabanlı kural 24 koşumun 0’ını işaretliyor. Şüpheli koşumların kullandığı 6 aracın 6’sı da bilinen kimliğe, geçerli imzaya ve taban çizgisi kaydına sahiptir; kural yanlış cevap vermiyor, hiç cevap vermiyor.
  • Tek bağlam boyutunun en iyisi 6 şüpheli koşumun 3’ünü ayırıyor. Üst süreç ile zamanlama birlikte 5’ini ayırıyor ve 3 yanlış pozitif üretiyor.
  • Üçüncü boyutu eklemek ayrılan sayısını değiştirmeden yanlış pozitifi 3’ten 4’e çıkarıyor: kapattığı yol sıfır olan katman burada da ölçülmemiş sayılır.
  • En az 2 boyutun birden uyması istendiğinde ayrılan 3’e düşüyor, yanlış pozitif 0 oluyor. 18 meşru koşumun hiçbiri iki boyutta birden uymuyor.
  • 1 şüpheli koşum dört boyutta bir meşru koşumla birebir aynıdır ve hiçbir bağlam boyutuna uymaz. Ayırmak dördüncü bir boyut, yani yeni bir telemetri kaynağı ister.

Sonraki Adım

Bu ders bir aracın kötüye kullanılmasını ayırmanın sınırını sayıyla verdi, ama ölçtüğü şey tek tek koşumlardı. Koşum geçicidir: biter ve arkasında yalnız bir kayıt bırakır. Kalıcı olan, o koşumun uçta yazdığı kalemdir — ilk derste sayılan tutunma noktaları. Konu bu yüzden başladığı yere döner. Sonraki dersin sorusu budur: uçtaki kalıcılık noktası türleri bir envanter olarak kaç kalemdir, beş ayrı denetim bunların kaçını kapatıyor, kaçını yalnız kayda düşürüyor ve hiçbir denetimin ne kapattığı ne gördüğü kaç nokta kalıyor.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat