SEBS Global

MODÜL 1 — Koddan Makineye: C → Assembly → Binary

MODÜL 1 — Koddan Makineye: C → Assembly → Binary

Modül Teması

Kod → Binary

Derleyici/linker'ın bıraktığı yapısal izleri analiz planına dönüştürmek.

Kontrol/Veri Akışı

Koşul, döngü ve çağrı örüntülerini davranışla eşlemek.

Karşı Kanıt

Decompiler estetiğine değil, akış tutarlılığına dayanmak.

Kaynak kodun olmadığı bir dünyada, "ne amaçlandı?" sorusu ile "gerçekte ne çalıştı?" sorusu arasındaki mesafe büyür. Bu modül, o mesafeyi tahminlerle kapatmak yerine; derleyici ve bağlayıcının ikili dosyada bıraktığı izlerden, kontrol/veri akışı üzerinden doğrulanabilir çıkarımlar üretmeyi öğretir. Hedef; assembly satırlarını ezberlemek değil, bir davranış hipotezini kanıt zinciri ile sınayıp raporda yeniden üretilebilir şekilde anlatabilmektir.

Bu Modülde Hedeflenen Kazanımlar

  • Derleme ve linkleme sürecinin ikili dosyada bıraktığı yapısal izleri okuyup analiz planına dönüştürmek
  • Sembol ve debug bilgisinin varlığında/yokluğunda yaklaşım seçip, "adı var diye doğrudur" tuzağına düşmemek
  • Koşul, döngü ve çağrı örüntülerini assembly seviyesinde tanıyıp davranış — kod eşlemesini sağlamlaştırmak
  • Calling convention ve stack frame mantığıyla parametre/veri takibini doğru kurmak; yanlış tip/yanlış argüman riskini yönetmek
  • Optimizasyonların decompile çıktısını nasıl kaydırabildiğini görüp, hibrit okuma ve karşı kanıt aramayla güvenilirliği yükseltmek

1) Derleme ve linkleme: İkili dosyanın "anatomi"sini okumak

C kodu, çalıştırılabilir hale gelirken yalnızca talimatlara "çevirilmez"; aynı zamanda işletim sisteminin onu nasıl yükleyeceğine dair bir düzen de inşa edilir. Derleyici kaynak kodu nesne dosyalarına (.o/.obj) dönüştürür; bağlayıcı (linker) bu parçaları ve kütüphaneleri birleştirerek nihai yürütülebilir dosyayı üretir (platforma göre PE/ELF gibi biçimler).

Bu süreci analiz açısından bir üretim hattı gibi düşünmek işe yarar: her istasyonda bazı bilgiler kaybolur (değişken isimleri gibi), bazıları eklenir (bölüm düzeni, relocation kayıtları gibi). İleri analistin yaptığı iş, kaybolanı "hikâye uydurarak" geri getirmek değil; kalan izlerden doğrulanabilir sonuç çıkarmaktır.

1.1. Semboller ve debug bilgisi: Hızlandırır ama garanti vermez

Semboller (symbols), fonksiyon/nesne isimleri ile adres ilişkisini taşıyan isimlendirme dünyasıdır. Debug bilgisi (debug info) ise kaynak seviyesindeki bazı anlamların (satır eşlemesi, tipler, değişken adları gibi) ikiliye eklenmiş halidir. Yayın derlemelerinde çoğu zaman temizlenir (stripping), ama bazen kurumsal paketlemelerde, hatalı build zincirlerinde veya yanlışlıkla yayımlanan sürümlerde kalıntılar görülebilir.

Neden önemli? Çünkü sembol/debug bilgisi, decompiler'ın varsayım yükünü azaltır; hipotez kurmayı hızlandırır. Ancak bu bilgi var diye "doğru yorum" otomatik gelmez: isimler yanıltıcı olabilir, yeniden kullanılan bileşenler eski isimleri taşıyabilir, hatta bilerek aldatıcı etiketleme görülebilir.

Yöntem seçimi (sembol/debug varken — yokken):

  • Bilgi varsa: hızlı yön bulma, çağrı grafiği üzerinde önceliklendirme, kritik işlevleri daha çabuk aday gösterme.
  • Risk: "isim doğruysa işlev de doğrudur" refleksi.
  • Bilgi yoksa: kontrol akışı + veri akışı + yan etkiler (dosya/ağ/bellek) üzerinden daha disiplinli ilerleme.
  • Risk: daha fazla zaman; ama rapor kanıt standardı genellikle daha sağlam kurulur.

Örnek: Bir fonksiyonun adı "decode" gibi görünüyor diye rapora "şifre çözüyor" yazmak güvenli değildir. Giriş/çıkış verisinin biçimi, çağrı bağlamı ve sonraki kullanım (örneğin metne dönüşüm, tablo indeksleme, ağ isteğinde header üretimi gibi) aynı sonuca işaret ediyorsa ifade güçlenir; aksi durumda daha temkinli bir dille yazılır.

Decode Claim Validation - Example
$ re-lab # Aday fonksiyonun giriş/çıkış biçimi
$ python inspect_fn_io.py --fn sub_140012A30
input_type=byte_buffer
output_type=byte_buffer
len_relation=preserved

$ re-lab # Çıkış nerede tüketiliyor?
$ python trace_xrefs.py --from sub_140012A30 --depth 2
sink_1=table_lookup
sink_2=header_builder
text_render_usage=0

$ re-lab # Rapor dili: temkinli yorum
$ echo "assessment=transform_function; decode_confidence=low-medium"
assessment=transform_function; decode_confidence=low-medium

İpucu: Sembol/debug yokken bile "en az varsayım" ilkesini kullan. Kontrol akışı ve veri akışı aynı yorumu destekliyorsa rapora taşınan cümle kırılgan olmaz.

2) C yapılarının assembly'deki yüzü: koşul, döngü, çağrı

Bu bölümde amaç "assembly'yi C'ye çevirme" değil; assembly'nin davranışa dair taşıdığı sinyalleri okumaktır. Decompiler'ın sunduğu C-benzeri görünüm, çoğu zaman iyi bir haritadır; ama haritanın doğru olup olmadığını araziyle (disassembly ve akış) sınamak gerekir.

2.1. Koşullar: karşılaştırma + dallanma

Koşullar, assembly'de bir karşılaştırma (CMP/TEST benzeri) ve ardından koşullu dallanma (JZ/JNE/JG... benzeri) olarak görünür. Decompiler bunu okunur bir if gibi sunar; fakat optimizasyonlar veya dönüşümler nedeniyle koşul ters çevrilmiş, birleştirilmiş ya da farklı bloklara dağılmış olabilir.

Neden önemli? Zararlı davranışın "ne zaman devreye girdiği" çoğu zaman koşullarla belirlenir: ortam uygunsa çalışma, hata olursa geri çekilme, belirli bir işaret varsa farklı yol izleme gibi.

Doğrulama refleksi (karşı kanıt arayarak):

  • Karşılaştırılan değerin kaynağı neresi (parametre mi, global mi, bir çağrının dönüşü mü)?
  • Dallanma sonrası iki yolun yan etkileri neler (dosya erişimi, bellek ayırma, ağ çağrısı, süreç oluşturma vb.)?
  • Alternatif yol gerçekten alternatif mi, yoksa erişilemeyen/temizlenecek bir parça mı?

Örnek: Decompiler bir yerde "x == 0 ise başarısız ol" gibi bir yapı gösteriyorsa, x'in gerçekten "sıfır olması gereken bir durum" olup olmadığını x'in üretildiği çağrı sözleşmesiyle ve sonraki kullanım biçimiyle sınarsın. Eğer x bir hata kodu ise, işaretin anlamını ters okumak kolaydır; karşı kanıt aramak bu yüzden kritiktir.

2.2. Switch/jump table: "çok kollu" kararların izi

Bazı çok dallı karar yapıları, jump table (zıplama tablosu) gibi düzenlerle uygulanabilir. Decompiler bazen bu dalları eksik veya hatalı temsil eder.

Yöntem seçimi: Decompiler görünümü "çok temiz" ama davranışın kapsamı şüpheliyse, kararın gerçekten kaç kola ayrıldığını kontrol akışı üzerinde doğrulamak daha güvenlidir. Burada hız — doğruluk dengesi kurulur: önce harita, sonra kritik bölgede sınır kontrolü.

Dikkat: "Okunaklı decompile" bir doğruluk sertifikası değildir. Rapor cümlesi, decompiler'ın estetiğine değil; akışın tutarlılığına dayanır.

2.3. Döngüler: geri dönüş (back-edge) + veri dönüşümü

Döngüler çoğu zaman geriye doğru dallanma ile tanınır; ancak optimizasyonlar döngüyü "tanınmaz" hale getirebilir (örneğin loop unrolling gibi). O yüzden yalnızca "burada geri zıplama var" demek, döngünün ne yaptığını kanıtlamaz.

Neden önemli? Döngüler genellikle tarama, kopyalama, dönüştürme, tablo gezinme, veri çözümleme gibi davranışların taşıyıcısıdır. Döngüyü yanlış yorumlamak; "kaç öğe işlendi?", "hangi sınır var?", "hangi koşul döngüyü kırıyor?" gibi kritik soruları bozar.

İki yaklaşım ve seçim mantığı:

  • Kontrol akışı odaklı: Hangi blok tekrar ediyor? Hangi koşul geri dönüyor?
  • Artısı: hızlıdır. Eksisi: optimizasyonla yanıltılabilir.
  • Veri akışı odaklı: Her turda hangi değer değişiyor? Hangi adres ilerliyor? Hangi uzunluk/sayaç etkili?
  • Artısı: daha sağlam kanıt üretir. Eksisi: daha zahmetlidir.

İpucu: Döngüyü rapora taşırken "döngü var" demek yerine, sayaç/indeksin nerede tutulduğunu ve her turdaki veri dönüşümünün izini anlat. Bu, yeniden üretilebilirliği belirgin artırır.

2.4. Fonksiyon çağrıları: niyetin düğüm noktası

Bir CALL gördüğünde tek soru "ne çağrıldı?" değildir. "Hangi argümanlarla, hangi bağlamda, hangi dönüş değeriyle, hangi yan etkiyle?" soruları birlikte cevaplanır.

Neden önemli? Bir davranışı savunabilmek için yalnızca "şu API çağrılıyor" demek yetmez; argüman kaynakları ve çağrı sonrası etkiler, kanıt zincirini oluşturur.

Kanıt üretimi: gözlem — yorum ayrımı

  • Gözlem: Argümanların hangi bellek bölgesinden geldiği, çağrı sırası, dönüş değerinin nasıl kullanıldığı, kritik adres/offset referansları
  • Yorum: Bu gözlemlerin hangi davranışa işaret ettiği, belirsizlik payı, alternatif açıklamalar

Örnek: Bir çağrının ilk argümanı bir buffer adresi gibi görünüyorsa, o buffer'ın nerede doldurulduğunu ve daha sonra metin olarak mı işlendiğini yoksa ikili blob gibi mi taşındığını sınarsın. "Buffer var" gözlemdir; "konfigürasyon taşıyor" yorumdur ve gerekçeyle birlikte yazılır.

3) Calling convention ve stack frame: parametre takibinin omurgası

Calling convention, fonksiyon parametrelerinin nasıl taşındığını, dönüş değerinin nasıl iletildiğini ve çağrı sonrası temizliğin nasıl yapıldığını belirleyen sözleşmedir.

Neden önemli? Parametreyi yanlış yerde ararsan, fonksiyonun yaptığı işi de yanlış tarif edersin. Bu, hatalı tespit önerilerine ve yanlış IOC/IOA üretimine kadar gidebilir.

3.1. x64 (Windows ABI): ilk dört argüman yazmaçlarda

Windows x64'te varsayılan çağrı düzeninde ilk dört argüman yazmaçlarda taşınır: tamsayı/pointer türleri için sırasıyla RCX, RDX, R8, R9; kayan nokta argümanları için XMM yazmaçları kullanılır. Bu düzen, analizde "ikinci parametre nerede?" gibi soruları netleştirir.

Bu bilgi, "decompiler bana iki argüman gösterdi" gibi belirsizliği azaltır: doğru yerde bakarsın; yanlış yerde arama ihtimali düşer.

3.2. x86 dünyası: çağıran — çağrılan temizliği ve hatalı okuma riski

x86 tarafında cdecl/stdcall gibi düzenlerde parametrelerin yığın üzerinden geçmesi ve yığının kim tarafından temizlendiği değişebilir. Örneğin __cdecl'de temizliği çağıran, __stdcall'de çağrılan taraf yapar. Bu fark, özellikle "kaç argüman var?" ve "çağrıdan sonra yığın nasıl değişti?" sorularını yanıltmaya açık hale getirir.

3.3. Stack frame: fonksiyonun çalışma masası

Stack frame'i, bir teknisyenin masası gibi düşünebilirsin: hangi araç nereye konduysa, iş bitince iz bırakır. Fonksiyonun yerel değişkenleri, kaydedilmiş yazmaçlar ve dönüş adresi belirli bir düzende durur. Bu düzen, parametrelerin ve yerel verinin nerede olduğuna dair ölçülebilir kanıt sağlar.

Doğrulama: pointer mı, handle/değer mi? Decompiler bir argümanı pointer gibi gösterebilir; ama o değer hiç dereference edilmiyorsa, belki de bir handle/değer taşınıyordur. Karşı kanıt aramak burada çok nettir: değer daha sonra bellek erişiminde mi kullanılıyor, yoksa yalnızca çağrılar arasında mı aktarılıyor?

Dikkat: Fonksiyon prologue/epilogue desenleri genellikle stack frame yorumunu kolaylaştırır; fakat optimizasyonlar veya elle yazılmış assembly, bu düzeni "beklenmedik" hale getirebilir. Beklenmedik gördüğünde, varsayımı büyütmek yerine kanıtı sıkılaştır.

4) Optimizasyonlar: "ikna edici ama yanlış" decompile tuzağı

Modern derleyiciler performans için kodu yeniden şekillendirir: küçük fonksiyonları içeri alabilir (inlining), erişilemeyen yolları temizleyebilir (dead code elimination), döngüyü açabilir (loop unrolling) veya değişkenleri tamamen yok edebilir.

Neden önemli? Çünkü optimize edilmiş ikililerde decompiler'ın ürettiği C-benzeri yapı "çok temiz" görünebilir; ama bu temizlik, gerçek niyetin doğru yansıtıldığı anlamına gelmez.

Yöntem seçimi (strateji üçlüsü):

  • Decompiler odaklı okuma: hızlı harita çıkarır; risk, yanlış güven duygusudur.
  • Disassembly odaklı okuma: daha sağlam sınar; risk, zaman maliyetidir.
  • Hibrit: decompiler ile harita, disassembly ile kritik bölgelerde sınır kontrolü. İleri seviyede en dengeli yaklaşımdır.

Örnek: Kaynakta tek bir döngü varken, loop unrolling sonrası decompile "arka arkaya çok sayıda benzer işlem" gibi görünebilir. Burada veri akışıyla sayaç/indeks davranışını aramak, yanlış çıkarımı engeller.

5) "Decompile güvenilirliği": doğrulama, karşı kanıt, kanıt paketi

Decompiler çıktısını bir sonuç değil, bir hipotez olarak ele almak ileri seviye okuryazarlığın çekirdeğidir. Hipotezi güçlendiren şey, birden fazla bağımsız sinyalin aynı yorumu desteklemesidir.

5.1. Güvenilirlik sorusunu üç yönden sormak

Bir parça decompile'a baktığında şunlar birlikte cevaplanır:

  • Kontrol akışı bu yorumu destekliyor mu?
  • Veri akışı (kaynak → dönüşüm → kullanım) tutarlı mı?
  • Yan etkiler (dosya/ağ/bellek/süreç) bu yorumu güçlendiriyor mu?

Bu üçlüden biri boşsa, rapor dili "kesin" olmaktan çıkar; belirsizlik alanı net yazılır.

5.2. Karşı kanıt arama: analisti hatadan koruyan refleks

Doğrulama yalnızca kanıt toplamak değildir; yanlış olabilecek noktayı da aramaktır.

Karşı kanıt örnekleri:

  • Decompiler pointer dereference gösteriyor ama disassembly'de o değer hiç dereference edilmiyor.
  • "String compare" gibi görünen şey aslında uzunluğu değişken ikili bir blob.
  • "x > 0" gibi görünen koşul, gerçek hata kodu sözleşmesiyle ters anlam taşıyor.

Örnek: Decompiler bir değişkene "len" havası veren bir kullanım çiziyor. Sen, bunun gerçekten uzunluk olup olmadığını buffer işlemlerinde ölçülebilir şekilde kullanılıp kullanılmadığıyla sınarsın. Eğer yalnızca API'ler arasında taşınan bir tanıtıcı gibi davranıyorsa, isimlendirme yanlıştır; rapora da "muhtemel uzunluk" gibi temkinli ifade girer.

5.3. Raporlanabilir kanıt paketi: yeniden üretilebilirlik standardı

Yayınlanabilir bir ileri analiz çıktısı, "ne buldum?" kadar "nasıl emin oldum?" sorusunu da taşır. Pratik bir kanıt paketi şu omurgayla kurulur:

  • Gözlemler: adres/offset referansları, çağrı sırası, argüman kaynakları, kritik basic block açıklaması
  • Yorum: davranış çıkarımı + belirsizlik notu
  • Doğrulama: hangi alternatif açıklama elendi, hangi karşı kanıt arandı
  • Artefakt: kısa akış şeması kırıntısı, çağrı grafiği özeti, veri akışı özeti
  • Yeniden üretilebilirlik: hangi varsayımlar altında aynı sonuç çıkar, hangi koşullar değişirse yorum zayıflar

İpucu: Kesin ifade kullanacağın her cümlede, kendine "bunu çürütebilecek karşı kanıt ne olurdu?" diye sor. Cevap veremiyorsan, cümleyi ya yeniden formüle et ya da kanıtı güçlendirecek ek kontrol ekle.

Terimler Sözlüğü

Terim Açıklama
Binaryİkili çalıştırılabilir dosya; makine talimatlarını içerir
CompilerDerleyici; kaynak kodu makine talimatlarına dönüştürür
LinkerBağlayıcı; modülleri/kütüphaneleri birleştirir, sembolleri çözer
SymbolSembol; isim–adres ilişkisi ve ilgili meta veriler
Debug infoHata ayıklama bilgisi; satır, tip, değişken gibi ek meta veri
StrippingSembol/debug bilgilerinin temizlenmesi
DecompilerMakine kodundan C-benzeri temsil üreten yorumlayıcı
Control flowKontrol akışı; bloklar arasında yürütme geçişleri
Data flowVeri akışı; verinin kaynaktan hedefe taşınma/dönüşüm yolu
BranchDallanma; koşula bağlı kontrol akışı geçişi
Calling conventionÇağrı sözleşmesi; argüman taşıma ve dönüş düzeni
Stack frameYığın çerçevesi; fonksiyonun yerel alan ve çağrı bağlamı düzeni
Prologue / EpilogueFonksiyon giriş/çıkışında yığın düzenini kuran/temizleyen kısımlar
InlineFonksiyon çağrısının gövdeye gömülmesi
Dead code eliminationErişilemeyen kod yollarının derleyici tarafından kaldırılması
Loop unrollingDöngü içeriğinin performans için “açılarak” koda yayılması
Jump tableÇok dallı karar yapılarında adres tablosu üzerinden dallanma

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Bir ikilide fonksiyon isimleri görünür durumda. En güvenilir yaklaşım hangisidir?

A) İsimler doğruysa decompile çıktısı genellikle doğrudur.

B) İsimler yön bulmayı hızlandırır; ama veri akışıyla doğrulama yine gerekir.

C) İsimler varsa disassembly’ye bakmaya gerek yoktur.

D) İsimler varsa optimizasyon etkileri ihmal edilebilir.

E) İsimler varsa raporda kesin ifadeler kullanılmalıdır.

  • Doğru: B
  • Gerekçe: İsimler ipucu verir; kanıt yerine geçmez. A/C/D/E aşırı güven üretir.
  1. 2) Decompiler bir koşulu “x == 0” gibi gösteriyor. İlk doğrulama hamlesi en güçlü hangisidir?

A) Koşulu doğrudan rapora kesin yazmak

B) x’in kaynağını (parametre/global/çağrı dönüşü) izlemek

C) Decompiler’ın değişken ismini “doğru tip” saymak

D) Koşulu değiştiren yolları göz ardı etmek

E) Koşulun tersini varsaymak

  • Doğru: B
  • Gerekçe: Koşulun anlamı, değerin nereden geldiğiyle sınanır. Diğerleri varsayıma dayanır.
  1. 3) Optimize edilmiş bir ikilide decompiler çok “temiz” döngüler gösteriyor. En doğru yorum hangisidir?

A) Temiz görünüyorsa kesin doğrudur

B) Döngüler optimize edilmez, güvenle kabul edilir

C) Kontrol + veri akışıyla döngü varsayımı sınanmalıdır

D) Sadece sembol isimleri yeterlidir

E) Döngüler raporda hiç yazılmamalıdır

  • Doğru: C
  • Gerekçe: Optimizasyonlar yapıyı bozabilir. A/B/D aşırı güven; E gereksiz kaçınma.
  1. 4) Calling convention bilgisinin analizdeki kritik katkısı hangisidir?

A) Hash üretimini hızlandırması

B) Parametre takibini doğru kurup davranış–kod eşlemesini sağlamlaştırması

C) IOC’leri otomatik üretmesi

D) Ağ trafiğini şifrelemesi

E) Packer tespit etmesi

  • Doğru: B
  • Gerekçe: Argümanların nerede olduğuna karar verdirir; diğerleri konu dışı.
  1. 5) Windows x64’te ikinci argümanı arayan bir analist, ilk bakışta hangi yazmacı kontrol etmelidir?

A) RCX

B) RDX

C) R8

D) R9

E) RSP

  • Doğru: B
  • Gerekçe: Windows x64’te ilk dört tamsayı/pointer argümanı RCX, RDX, R8, R9’dadır. Diğerleri farklı konum/amaç.
  1. 6) “Karşı kanıt arama” kültürüne en iyi örnek hangisidir?

A) Decompiler böyle dedi, öyle yazmak

B) Bir çıkarımı yazmadan önce alternatif açıklamayı dışlamaya çalışmak

C) Sadece sezgiyle karar vermek

D) Tek göstergeden kesin hüküm çıkarmak

E) Belirsizliği rapordan tamamen kaldırmak

  • Doğru: B
  • Gerekçe: Alternatif açıklamayı test etmek doğrulamayı güçlendirir; diğerleri kırılgandır.
  1. 7) Bir argümanın pointer mı yoksa handle/değer mi olduğuna karar vermede en sağlam yöntem hangisidir?

A) Decompiler tipini kesin kabul etmek

B) Değerin daha sonra dereference edilip edilmediğini ve kullanım bağlamını incelemek

C) Argüman adı “ptr” gibi görünüyorsa pointer saymak

D) Her şeyi pointer saymak

E) Hiç değerlendirmemek

  • Doğru: B
  • Gerekçe: Kullanım davranışı ölçülebilir kanıttır; diğerleri varsayım üretir.
  1. 8) Döngü analizi için hangi yaklaşım daha “sağlam kanıt” üretme eğilimindedir ve neden?

A) Kontrol akışı; çünkü daha hızlıdır

B) Veri akışı; çünkü optimizasyonlar kontrol akışını yanıltabilir, dönüşüm kanıtı daha doğrudandır

C) Kontrol akışı; çünkü veri akışı her zaman yanlıştır

D) İkisi de gereksizdir

E) Sadece debug info yeterlidir

  • Doğru: B
  • Gerekçe: Veri dönüşümü gerçek davranışa daha yakın kanıttır; diğer şıklar yanlış genelleme.
  1. 9) Statik linkleme (static link) tercihinin analiz üzerindeki tipik etkisi hangisidir?

A) Kütüphaneler ayrı kaldığı için analiz çok kısalır

B) Kütüphane kodu ikiliye gömüldüğü için analiz edilecek kod miktarı artabilir

C) Semboller otomatik geri gelir

D) Optimizasyonlar devre dışı kalır

E) Decompiler doğruluğu garanti olur

  • Doğru: B
  • Gerekçe: Daha fazla gömülü kod, daha geniş “gürültü” alanı demektir; diğerleri gerçekçi değildir.
  1. 10) XOR reg, reg sonrası “zero flag” davranışıyla ilgili en doğru ifade hangisidir?

A) Zero flag etkilenmez

B) Sonuç sıfır olduğundan ZF genellikle set olur

C) ZF rastgele değişir

D) ZF yalnızca bellek operandında değişir

E) ZF yalnızca yönetici yetkisinde set olur

  • Doğru: B
  • Gerekçe: XOR sonucu sıfır ürettiğinde ZF set edilir; XOR bayrakları sonuca göre ayarlar.

Bu modülde neler öğrendiniz?

  • Derleme/linkleme sürecinin ikili dosyada bıraktığı izleri “kanıt kaynağı” olarak okuyabilme
  • Sembol/debug varlığını hızlandırıcı görüp, yokluğunda kontrol+veri akışına dayalı disiplinli yaklaşım kurabilme
  • Koşul/döngü/çağrı örüntülerini assembly seviyesinde davranış hipotezi kuracak kadar okuyabilme
  • Calling convention ve stack frame üzerinden doğru parametre takibi yapıp yanlış yorum riskini azaltma
  • Optimizasyonların decompile’ı kaydırabileceğini bilip, hibrit okuma ve karşı kanıt aramayla güvenilir rapor cümlesi kurabilme

Modül 2 — Reverse Engineering Hazırlık

İleri seviye tersine mühendislikte en pahalı hata, "hemen koda dalıp" erken bir hikâyeye inanmak ve sonra o hikâyeyi kanıt gibi rapora taşımaktır. Bu modül, disassembly'nin çıplak gerçekliği ile decompiler'ın rahat ama yorumlayıcı dünyası arasında doğru dengeyi kurmayı; kontrol akışı (CFG) ve veri akışını birlikte okuyarak "kritik fonksiyonları" bilimsel ölçütlerle seçmeyi ve analizi en baştan raporlanabilir, yeniden üretilebilir bir kanıt hattına dönüştürmeyi hedefler.

Bu Modülde Hedeflenen Kazanımlar

  • Disassembly ve decompile çıktısını “harita + sınır kontrolü” disipliniyle birlikte okuyarak doğruluk riskini yönetmek.
  • Kontrol akışını (branch/loop/call ilişkileri) davranış hipotezine bağlayacak netlikte haritalandırmak.
  • Veri akışını kaynak → dönüşüm → kullanım zinciriyle izleyip “karşı kanıt arama” refleksini yerleştirmek.
  • Binlerce fonksiyon içinde “kritik” olanları seçmek için top-down / bottom-up / graf merkezli yaklaşımları koşula göre kıyaslamak.
  • Bulguları gözlem–yorum ayrımıyla paketleyip rapora delil olacak biçimde taşımak (zaman çizelgesi mantığı, artefakt listesi, yeniden üretilebilirlik).

1) Disassembly ve decompile okuma ilkeleri

Tersine mühendislikte iki ayrı mercek kullanırsın: disassembly (işlemcinin gerçekten yürüteceği talimatlar) ve decompile (bu talimatlardan türetilmiş C-benzeri temsil). İleri seviye fark, bu iki merceği birbirinin alternatifi değil, birbirini "denetleyen" bir çift olarak konumlandırmaktır.

Decompile çıktısı büyük ikililerde yön bulmayı hızlandırır: muhtemel fonksiyon sınırları, if/loop benzeri bloklar, değişkenler ve akışın kabaca "neye benzediği"... Disassembly ise tartışmasız gerçekliktir: hangi register'ın ne zaman değiştiği, hangi dalın gerçekten mümkün olduğu, hangi çağrı öncesi hangi argüman hazırlığının yapıldığı oradadır.

Neden önemli? Çünkü decompiler, kaybolan tip bilgisini ve değişken isimlerini "tahmin eder"; optimizasyonlar da bu tahmini daha kırılgan hale getirir. Dolayısıyla decompile çoğu zaman iyi bir hikâye anlatır — ama ileri analist, hikâyeyi rapora yazmadan önce "çürütülebilir mi?" sorusunu sorar ve karşı kanıt arar.

1.1. Harita çıkar, sınır kontrolü yap

Decompile'ı "harita" gibi düşün: hızlıca nerede olduğunu görürsün; ama kritik kavşakta pasaport kontrolü gerekir — yani disassembly ve veri akışıyla doğrulama.

Sınır kontrolünü özellikle tetikleyen durumlar:

  • "Aşırı temiz" görünen akışlar (optimize edilmiş ikililerde bu temizlik yanıltıcı olabilir)
  • Pointer gibi görünen ama hiç dereference edilmeyen değerler (handle / durum kodu olma ihtimali)
  • Decompiler'ın ürettiği anlamlı değişken isimlerine gereğinden fazla güvenme
  • "Fonksiyonun adı var" diye otomatik anlam yükleme (isimlendirme yanlış/eksik/yanıltıcı olabilir)

Doğrulama zihniyeti: Decompile'daki bir iddiayı rapora taşımadan önce en az iki bağımsız işaret ararsın. Örneğin kontrol akışı bu yorumu destekliyor mu + veri akışı aynı sonuca gidiyor mu + (varsa) yan etki (dosya/ağ/bellek) ile uyumlu mu?

Örnek: Decompile, bir fonksiyonu "ayarları ayrıştırıyor" gibi gösteriyor. Rapor cümlesine dönüşmeden önce, fonksiyon çıktısının nerede kullanıldığına bakarsın: bir karar koşulunu mu besliyor, ağ isteğine mi gidiyor, bir tablo indeksini mi belirliyor? Çıktı hiç kullanılmıyorsa "ayrıştırma" iddiası zayıflar; belki de yalnızca hazırlık yapan bir yardımcı bloktur.

Dikkat: "Decompiler böyle gösterdi" bir kanıt türü değildir. Kanıt; kontrol akışının tutarlılığı, veri zincirinin izlenebilirliği ve (varsa) gözlemlenebilir yan etkilerle desteklenmiş, yeniden üretilebilir bir çıkarımdır.

1.2. Disassembly'de okuma disiplini: talimat değil ilişki oku

Ham talimatların tek tek anlamına takılıp kalmak, büyük örneklerde seni "mikro ayrıntıda boğar". Daha verimli olan, ilişkileri okumaktır:

  • Hangi basic block hangi bloğa bağlanıyor?
  • Hangi çağrı, hangi çağrı zincirini tetikliyor?
  • Hangi veri nereden geliyor, nerede dönüşüyor, nerede anlam kazanıyor?

Yöntem seçimi:

  • Zaman baskısı varsa: önce decompile ile harita çıkar, riskli kavşaklarda disassembly ile doğrula.
  • Kanıt standardı yüksek bir çıktı gerekiyorsa (olay müdahalesi, kurumsal rapor, hukuki/uyum etkisi olan senaryolar): kritik iddialarda disassembly doğrulaması "varsayılan" olur.
  • Kütüphane kodu yoğun ikililerde: disassembly'ye erken gömülmek kaybolma riskini artırır; önce kritik fonksiyon seçimi ve akış planı gerekir (Modülün 4. bölümü).

İpucu: Decompile'da "okunaklı görünen" bir akış bulduğunda, hemen anlam yüklemek yerine o akışın hangi yan etkilere bağlandığını işaretle. Yan etkiyi ölçebildiğin (dosya/ağ/bellek/süreç) her yerde rapor cümlesi daha sağlam olur.

2) Kontrol akışı okuma: branch, loop, function çağrıları

Kontrol akışı, programın "hangi yoldan yürüdüğü"dür; tersine mühendislikte bu, yalnızca if/else görmek değil, karar noktalarının davranışla ilişkisini kurmaktır. CFG (Control Flow Graph), basic block'lar arası geçişleri bir grafik olarak göstererek bu ilişkiyi görünür kılar.

Neden önemli? Çünkü şüpheli davranışlar çoğu zaman koşullarla devreye girer, döngülerle tekrarlanır ve çağrı zincirleriyle dış dünyaya etki eder. Akışı yanlış yorumlamak, yanlış davranış cümlesi ve yanlış tespit önerisi demektir.

2.1. Karar noktaları: koşulun anlamı kaynağından anlaşılır

Bir koşulun ne anlattığı, karşılaştırılan değerin kaynağı ile şekillenir: parametre mi, global mi, bir çağrının dönüşü mü, yoksa ara bir değer mi?

Doğrulama ve karşı kanıt arama:

  • Değer bir çağrı dönüşüyse, o çağrının hata/başarı sözleşmesi ile uyumlu mu?
  • Koşulun iki kolunda yan etkiler gerçekten ayrışıyor mu, yoksa biri erişilemez / "gürültü" mü?
  • Decompiler koşulu ters çevirmiş olabilir mi? En güçlü sinyal, dalların sonunda ortaya çıkan davranış farkıdır (hangi dal "iş" üretiyor, hangisi yalnızca temizlik/hata yönetimi?)

Örnek: Bir dal, yüzeyde "başarısız ol ve çık" gibi görünür; ama aslında normal kapanış yolu olup kaynakları kapatır ve standart dönüş değerini ayarlar. Diğer dal ise ağ/dosya/bellek tarafında asıl yan etkiyi üretir. Bu durumda "başarı/başarısızlık" etiketleri yerine, dalların ölçülebilir etkileri üzerinden rapor dili kurmak daha güvenlidir.

2.2. Döngüler: "Ne zaman biter?" sorusu kanıt üretir

Döngüyü görmek yetmez; döngünün çıkış koşulu ve her turda değişen değerler, davranışın sınırlarını verir.

Burada kritik bir nüans var: Disassembly'de "geriye doğru dallanma" (back edge) döngü adayını güçlü biçimde işaret eder; ancak tek başına her zaman "kesin döngü" demek değildir. CFG'de back edge kavramının nasıl tanımlandığı ve analiz bağlamına göre değişebileceği, kontrol akışı teorisinin temel parçalarındandır. Bu yüzden döngüyü rapor cümlesine taşımadan önce şu kanıtları ararsın:

  • Çıkış koşulu nerede ve nasıl kontrol ediliyor?
  • Her turda hangi sayaç/indeks değişiyor (register/stack/global)?
  • Döngü kırılınca hangi yan etki başlıyor (ör. bir çağrı zincirinin başlaması, bir veri yapısının tamamlanması, bir durumun set edilmesi)?

Yöntem seçimi:

  • Kontrol akışı ile iskeleti hızlı çıkarırsın; ama optimizasyonlar döngüyü parçalayabilir.
  • Veri akışı ile sayaç/işlenen blok büyüklüğünü izlemek daha sağlamdır; raporda daha güvenli temel oluşturur.

Dikkat: Döngüye erken "şu kadar tekrar eder" gibi kesin sınırlar yazmak, kanıt standardını yükseltir. Çıkış koşulunu ve sayaç değişimini görmeden sayısal kesinlik eklemek, itiraz edildiğinde kırılganlık yaratır.

2.3. Çağrı grafiği: davranış zincirleri düğümlerden okunur

Fonksiyon çağrıları, davranışın düğüm noktalarıdır. Hazırlık aşamasında amaç "her fonksiyonu okumak" değil; çağrı grafiğinde merkez düğümleri bulmaktır:

  • Dış dünya ile etkileşen (dosya/ağ/süreç/bellek yönetimi) düğümler
  • Çok çağrılan / çok alt çağrı yapan düğümler (hub)
  • Hata yollarını veya mod seçimini yöneten düğümler

Doğrulama: Çok çağrılan bir fonksiyon "kritik" olabilir; ama karşı kanıt şudur: Utility (loglama, string işlemleri, küçük dönüştürücüler) fonksiyonlar da sahte merkez gibi görünebilir. Bu ayrımı, fonksiyonun argüman rolü ve yan etkilerinde ararsın.

İpucu: Çağrı grafiğinde işaretlediğin her "kritik aday" için, kendine şu soruyu zorla: "Bu fonksiyon olmasaydı davranışın ölçülebilir bir parçası eksik kalır mı?" Cevap hayırsa, adayın önceliği düşebilir.

3) Veri akışı takibi: kaynak → dönüşüm → kullanım zinciri

Veri akışı, programın "neyle çalıştığı"dır: veri nereden gelir, nasıl dönüşür, nerede anlam kazanır. Orta seviyede bunun kontrol listesini ayrıntılı işlemiştik; burada ileri analiz açısından kritik nokta, veri akışını kanıt zinciri gibi kurmak ve karşı kanıt aramaktır.

Neden önemli? Çünkü decompiler tipleri ve isimleri "yakıştırabilir". Aynı kontrol akışı, farklı veriyle bambaşka davranış üretir; bu yüzden davranışı çoğu zaman veri belirler.

3.1. Üç temel soru: kaynak neresi, dönüşüm ne, kullanım nerede?

  • Kaynak: Veri sabit mi, hesaplanmış mı, dışarıdan mı (dosya/ağ/pano benzeri), bir çağrı dönüşü mü?
  • Dönüşüm: Birleştirme, ayrıştırma, kodlama/çözme, tablo indeksleme, doğrulama gibi işlemler var mı?
  • Kullanım: Veri bir API argümanında mı, bir karar koşulunda mı, bir yapı alanında mı?

Bu üçlü, raporda gözlem — yorum ayrımının omurgasını kurar.

Örnek: Bir buffer hazırlanıyor, birkaç fonksiyondan geçiyor ve sonunda bir ağ çağrısının argümanına dönüşüyor. "Bu buffer konfigürasyondur" demek yorumdur; gözlem ise "şu blokta oluşturuldu, şu fonksiyonlarda dönüştü, şu çağrının şu argümanında kullanıldı" zinciridir.

3.2. Karşı kanıt arama: veri akışının güvenlik valfi

Veri akışında en sık hata, bir değere erken isim vermektir ("bu kesin anahtar", "bu kesin uzunluk" gibi). İleri seviye disiplin, isimleri ancak ölçülebilir kullanım biçimiyle destekleyince kullanır.

Karşı kanıt örnekleri:

  • Pointer sandığın değer hiç dereference edilmiyor → handle/durum kodu olabilir
  • Uzunluk sandığın değer buffer işlemlerinde görünmüyor → bayrak/durum olabilir
  • String sandığın veri ikili blob → farklı bir kodlama/format olabilir

Bu yaklaşım, analizi "tek bir yoruma kilitlemekten" korur ve raporun denetlenebilirliğini artırır.

Dikkat: Veri akışında yanlış isim verme, domino etkisi yaratır: yanlış isim → yanlış hipotez → yanlış kanıt paketi → yanlış tespit önerisi.

3.3. Source & Sink düşüncesi ve aliasing gerçeği

Veri akışında "source" verinin sisteme girdiği nokta, "sink" ise verinin dışarı çıktığı veya kritik bir işleme sokulduğu noktadır. Bu model özellikle hassas verilerde (kimlik bilgisi, yapılandırma parametresi, kimlik doğrulama materyali) çok faydalıdır; çünkü zinciri baştan sona kurmaya zorlar.

Ancak pratikte bir sorun çıkar: data aliasing. Aynı bellek adresine farklı pointer'lar üzerinden farklı isimlerle erişilebilir; bu da decompiler ekranında "veri kayboldu" yanılsaması yaratır. Bu yüzden veri takibinde "aynı adres, farklı isim" olasılığını sürekli akılda tutmak gerekir.

Örnek: Bir metin parçası bir yerde "p" üzerinden taşınırken, başka bir fonksiyonda aynı bellek "buf" olarak görünür. İki farklı veri değil, aynı veri olabilir. Kanıt olarak, adres/offset sürekliliği ve kullanım desenleri aranır.

4) Kritik fonksiyonları seçme ve analiz planı çıkarma

İleri seviye örneklerde zorluk çoğu zaman "okumak" değil, nereden başlayacağını seçmektir. Kötü başlangıç saatlerce utility kodda oyalanmak demektir; iyi başlangıç davranış iskeletini hızla çıkarır.

Neden önemli? Analiz çıktısı genellikle karar vermeyi besler: etki değerlendirmesi, tespit önerisi, olay müdahalesi aksiyonu... Bu yüzden başlangıç noktası "sezgi" değil, ölçütlerle seçilmelidir.

4.1. "Kritik" kavramını ölçütlerle tanımla

Kritik fonksiyon tipik olarak şu özelliklerden en az birini taşır:

  • Dış etkileşim: dosya/ağ/süreç/bellek yönetimi gibi yan etkilerle ilişki
  • Merkezilik: çağrı grafiğinde birçok yolun üzerinden geçtiği düğüm (hub)
  • Veri değeri: kritik veri üretimi/dönüşümü (parametre setleri, ana karar değerleri)
  • Akış kontrolü: hata yönetimi, durum makinesi, mod seçimi

Bu ölçütleri yazılı hale getirmek planın yeniden üretilebilirliğini artırır: başka bir analist aynı ölçütlerle benzer başlangıcı seçebilmelidir.

4.2. Top-down / bottom-up / graf merkezli stratejiler ve riskleri

Top-down (dış etkileşimden içeri): Dış dünya ile etkileşen çağrılardan başlayıp geriye doğru iz sürmek.

  • Güçlü yanı: Yan etkiler somut kanıt üretir.
  • Risk: Çok sayıda "normal" yardımcı çağrı içinde kaybolma.

Bottom-up (veriden veya OS çağrılarından yukarı): Şüpheli veri dönüşümlerini veya OS etkileşim noktalarını bulup bunları üreten/karar veren üst mantığa tırmanmak.

  • Güçlü yanı: Kritik veri ve karar mekanizmasını erken yakalar.
  • Risk: Yanlış halka seçimi zinciri uzatır.

Graph-centric (çağrı grafiği merkezleri): Çok çağrılan / çok alt çağrı yapan düğümleri hedeflemek.

  • Güçlü yanı: Davranış iskeletini hızlı çıkarabilir.
  • Risk: Utility fonksiyonlar sahte merkez gibi görünebilir.

Doğrulama: Seçtiğin fonksiyonun kritik olduğuna dair karşı kanıt ararsın: yan etki yoksa, sadece veri taşıyorsa veya hep aynı küçük işi yapıyorsa önceliği düşebilir.

4.3. Boilerplate kodu ve bilinen fonksiyonları ayıklama

Derleyici çalışma zamanı (runtime), standart kütüphaneler ve tekrar eden kalıplar (boilerplate) analizde gürültü yaratır. Bu gürültüyü erken yönetmek, asıl davranışa odaklanmanı sağlar.

Burada yardımcı olan kavramlar:

  • Xref (cross-reference): Bir fonksiyonun/verinin nerede kullanıldığını hızlıca görerek etki alanını saptarsın.
  • İmza tabanlı tanıma (örn. FLIRT gibi yaklaşımlar): Bilinen kütüphane fonksiyonlarını etiketleyip "bilinmeyen kullanıcı kodu"na alan açmak, pre-analizi hızlandırır.

İpucu: Önceliklendirmeyi "insan gözüyle okunabilirlik" üzerinden değil, "kanıt değeri" üzerinden yap: dış etkileşim + kritik veri + akış kontrolü birleşiyorsa, o fonksiyon genellikle doğru başlangıçtır.

4.4. Analiz planını raporlanabilir hale getirme

İyi plan, sadece yapılacaklar listesi değildir; kanıt üretimine dönük bir çerçevedir:

  • Test edilebilir hipotezler (hangi koşulda hangi davranış)
  • Kanıt kaynakları (kontrol akışı, veri akışı, yan etkiler, graf ilişkileri)
  • Karşı kanıt stratejisi (hangi alternatif açıklama elenecek)
  • Üretilecek artefaktlar (kritik blok notları, çağrı zinciri özeti, veri zinciri şeması)
  • Yeniden üretilebilirlik notu (hangi varsayımlar altında aynı sonuç beklenir)

"Zaman çizelgesi" mutlaka dinamik log anlamına gelmez; statikte bile "önce hazırlanır → sonra dönüştürülür → sonra kullanılır" sıralaması, kanıt anlatısını güçlendirir.

Terimler Sözlüğü

Terim Açıklama
DisassemblyHam baytların assembly talimatlarına dökümü; işlemcinin yürüteceği gerçek talimat dizisi
DecompileMakine kodundan C-benzeri temsil üreten yorumlayıcı süreç; bir “tahmin” katmanı içerir
HypothesisHipotez; kanıtla sınanabilir analiz iddiası
EvidenceKanıt; gözleme dayalı, denetlenebilir ve yeniden üretilebilir destek
CFG (Control Flow Graph)Kontrol akışı grafiği; basic block’lar arası geçişleri gösteren yapı
Call GraphÇağrı grafiği; fonksiyonların birbirini çağırma ilişkileri
Back EdgeCFG bağlamında “geriye” giden kenar; döngü adayı göstergesi olabilir
Xref (Cross-Reference)Çapraz referans; bir fonksiyonun/verinin nerelerde kullanıldığının listesi
Source / SinkVerinin sisteme girdiği nokta / kritik işlem veya çıkış noktası
Data AliasingAynı bellek bölgesine farklı pointer ve isimlerle erişilmesi; “veri kayboldu” yanılsaması yaratabilir
Boilerplate CodeDerleyici/runtime/standart kütüphane kaynaklı rutin kod; asıl davranıştan gürültü üretir
Utility FunctionDavranış taşımaktan çok yardımcı iş yapan fonksiyon (log, dönüştürme, küçük string işlemleri vb.)
FLIRT (yaklaşım)Bilinen kütüphane fonksiyonlarını imza ile tanıma/etiketleme yaklaşımı (araç/ekosisteme göre değişebilir)

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Decompile çıktısında son derece “temiz” görünen bir mantık bloğu var. En sağlam yaklaşım hangisidir?

A) Temiz görünüyorsa doğrudur, rapora yazılır

B) Sadece sembol isimlerine bakılarak doğrulanır

C) Kritik iddialar için disassembly + veri akışıyla sınır kontrolü yapılır

D) Temiz görünen yerler atlanır, sadece karmaşık yerler incelenir

E) Decompile görsel olarak anlaşılırsa kanıt sayılır

  • Doğru: C
  • Gerekçe: Decompile hipotez üretir; kritik iddia, bağımsız sinyallerle doğrulanmalıdır. A/E aşırı güven, B tek kaynağa bağımlılık, D rastgele önceliklendirmedir.
  1. 2) Bir koşulun (branch) anlamını doğrulamada en güçlü ilk sinyal hangisidir?

A) Decompiler’ın verdiği değişken adı

B) Koşul değerinin kaynağı (parametre/global/çağrı dönüşü) ve kullanım bağlamı

C) Fonksiyonun uzunluğu

D) Adresin düşük olması

E) Yorum satırları

  • Doğru: B
  • Gerekçe: Koşulun “ne anlattığı” kaynaktan ve kullanım bağlamından okunur; A/E çoğu zaman yanıltıcı/yoktur, C/D bağlamsız ölçüttür.
  1. 3) Disassembly’de geriye doğru dallanma gördün. En doğru yorum hangisidir?

A) Kesin döngüdür, başka şeye bakmaya gerek yok

B) Döngü adayı güçlüdür; çıkış koşulu ve sayaç değişimiyle doğrulanmalıdır

C) Kesin hata durumudur

D) Kesin şifre çözmedir

E) Her zaman junk code’dur

  • Doğru: B
  • Gerekçe: Geri dallanma döngü göstergesi olabilir; rapor cümlesi için exit condition ve değişen değer kanıtı aranır. Diğer şıklar aşırı kesinlik içerir.
  1. 4) Çok çağrılan bir fonksiyonun “kritik” olduğuna karar vermeden önce hangi karşı kontrol en doğrudur?

A) Fonksiyon adının anlamlı olması

B) Yan etki üretip üretmediği ve argümanlarının davranış taşıyıp taşımadığı

C) Talimat sayısı çoksa kritiktir

D) Grafikte ortadaysa kritiktir

E) İlk çağrıldığı yerin adresi küçüktür

  • Doğru: B
  • Gerekçe: Utility fonksiyonlar sahte merkez gibi görünebilir; kritikliği yan etki ve veri rolü doğrular.
  1. 5) Döngü analizi rapor için neden “veri akışını da içeren” yorumla güçlenir?

A) Daha hızlıdır

B) Optimizasyonlar kontrol akışını yanıltabilir; veri dönüşümü daha doğrudan kanıt sağlar

C) Decompile her zaman doğrudur

D) Sembol isimleri yeterlidir

E) Veri akışı araçları hatasızdır

  • Doğru: B
  • Gerekçe: Kontrol akışı iskelet verir; veri akışı, sayaç/işlenen aralık gibi sınırları ispatlar. C/D/E aşırı genellemedir.
  1. 6) Veri akışında “erken etiketleme” (bir değere erkenden “anahtar/uzunluk/IP” demek) en çok hangi riski doğurur?

A) Analizi hızlandırır, risk yoktur

B) Yanlış isim → yanlış hipotez → yanlış kanıt paketi zinciri

C) Sadece arayüz karışır

D) Sadece rapor dili etkilenir, içerik etkilenmez

E) Yalnız performans kaybı olur

  • Doğru: B
  • Gerekçe: Yanlış isimlendirme çıkarımı domino gibi bozar; C/D/E tehlikeyi küçümser.
  1. 7) “Harita + sınır kontrolü” yaklaşımının en doğru özeti hangisidir?

A) Decompile yeterlidir; disassembly gereksizdir

B) Disassembly yeterlidir; decompile gereksizdir

C) Decompile ile yön bulunur; kritik iddialar disassembly ve veri akışıyla doğrulanır

D) Sadece hızlı olan seçilir

E) Daha az satır gösteren görünüm daha doğrudur

  • Doğru: C
  • Gerekçe: Hız ve doğruluk dengesi kurar; A/B mutlakçı, D/E kanıt standardını düşürür.
  1. 8) Source–Sink düşüncesi veri akışında neyi kolaylaştırır?

A) Fonksiyon adreslerini ezberlemeyi

B) Verinin giriş noktasından kritik kullanım/çıkış noktasına kadar zincir kurmayı

C) Decompiler hatalarını otomatik düzeltmeyi

D) Paketleme tespitini tek başına yapmayı

E) Kütüphane kodunu tamamen yok saymayı

  • Doğru: B
  • Gerekçe: Source–Sink, zinciri baştan sona kurmaya zorlar; diğer şıklar kapsam dışıdır.
  1. 9) Boilerplate kodu hızlı ayıklamak analiz planında neden önemlidir?

A) Çünkü yasaktır

B) Zamanı asıl davranışa ayırıp “gürültüyü” azaltır

C) Çünkü sadece Windows’ta vardır

D) Çünkü raporu otomatik yazar

E) Çünkü decompile artık gerekmez

  • Doğru: B
  • Gerekçe: Kaynak kısıtlıdır; rutin kütüphane koduna gömülmek davranış iskeletini geciktirir.
  1. 10) “Raporlanabilir analiz planı”nı diğer planlardan ayıran en kritik bileşen hangisidir?

A) Uzun yapılacaklar listesi

B) Sadece ekran görüntüleri

C) Hipotez + kanıt kaynakları + karşı kanıt stratejisi + üretilecek yeniden üretilebilir artefaktlar

D) Fonksiyonları alfabetik sıralamak

E) Sadece sonuç cümleleri yazmak

  • Doğru: C
  • Gerekçe: Plan, kanıt üretimi ve doğrulama mantığıyla rapora dönüşür; A/B/D/E tek başına yetersizdir.

Bu modülde neler öğrendiniz?

  • Decompile’ın yorumlayıcı doğasını, disassembly’nin tartışmasız gerçekliğiyle denetleyerek “harita + sınır kontrolü” disiplini kurmayı
  • CFG ve çağrı grafiği üzerinden kontrol akışını davranış hipotezine bağlamayı; karar noktalarında kaynağı ve yan etkiyi kanıtlaştırmayı
  • Veri akışını kaynak → dönüşüm → kullanım zinciriyle izleyip, karşı kanıt arama refleksiyle erken etiketleme riskini yönetmeyi
  • Kritik fonksiyon seçimini ölçütlerle tanımlamayı; top-down / bottom-up / graf merkezli yöntemleri koşula göre seçmeyi
  • Analizi, gözlem–yorum ayrımıyla paketlenmiş, yeniden üretilebilir rapor çıktısına dönüştürecek bir plan omurgası kurmayı

Modül 3 — CPU, ABI ve Assembly Okuryazarlığı

Bu modül, tersine mühendislikte "kodun ne dediği" ile "CPU'nun gerçekten ne yaptığı" arasındaki boşluğu kapatır. İleri seviyede fark yaratan şey, tek tek talimatları ezberlemekten çok; çağrı sözleşmesini (calling convention) ve ABI'yi doğru okuyarak argümanların/dönüş değerinin izini güvenilir biçimde sürmek, derleyicinin optimizasyonla bıraktığı izleri yanlış yorumlamamak ve her kritik iddiayı rapora taşınabilir kanıta dönüştürmektir. Büyük ikililerde hız kadar önemli olan, bulgunun çürütülemeyecek kadar iyi doğrulanmasıdır.

Bu Modülde Hedeflenen Kazanımlar

  • x86/x64 ekosisteminde çağrı sözleşmesi ve ABI sinyallerini okuyarak fonksiyon argümanlarını ve dönüş değerini güvenilir biçimde takip etmek.
  • Stack frame düzenini analiz ederek yerel değişken/argüman yerleşimini “denetlenebilir” şekilde ortaya koymak; gözlem–yorum ayrımını korumak.
  • Derleyici optimizasyonlarının (FPO, leaf function, inline, döngü dönüşümleri) ürettiği yanılsamaları saptayıp probleme uygun analiz yöntemini seçmek.
  • Switch/jump table, indirect call ve exception/unwind gibi doğrusal olmayan akışları kaçırmadan haritalandırmak; “nadiren seçilen yollar”ın davranış değerini doğru tartmak.
  • Yazmaç/stack durumlarını raporda delile dönüştürecek biçimde paketlemek: adres/ofset bağlamı, zaman çizelgesi, yeniden üretilebilirlik.

1) ABI ve calling convention okuryazarlığı: Argüman nerede aranır?

Calling convention, bir fonksiyonun argümanları nasıl aldığı, dönüş değerini nasıl verdiği ve stack temizliğinin kimde olduğu gibi kuralları belirler. ABI (Application Binary Interface) ise bunu daha geniş çerçeveye taşır: hangi yazmaçların "volatile" sayıldığı, stack hizalaması, çağrı sınırında hangi alanların ayrıldığı gibi kuralların tamamı, ikili seviyede uyumluluğun sözleşmesidir.

Neden önemli? Argümanı yanlış yerde ararsanız fonksiyonun "neyle çalıştığını" yanlış anlarsınız. Bu hata genelde tek bir cümleyi değil, tüm anlatıyı devirecek zincir etkisi yaratır: yanlış parametre yorumu → yanlış veri akışı → yanlış davranış tanımı → raporda zayıf/yanlış kanıt.

İleri analizde pratik gerçek: decompile çıktısındaki C-benzeri imza "ikna edici bir hipotez" olabilir; fakat belirleyici olan, çağrıdan hemen önce değerlerin nereden geldiği ve çağrıdan sonra dönüş değerinin nerede/niçin kullanıldığıdır. ABI okuryazarlığı, decompile'ı körlemesine reddetmek değil; kritik iddiaları CPU gerçekliğiyle sınırlandırmaktır.

1.1. x86 ↔ x64 parametre aktarımı: yazmaç önceliği, stack'in rolü ve "gölge alan"

x64 dünyasında (özellikle Windows x64) standart yaklaşım, ilk argümanların yazmaçlardan geçirilmesidir; ilk dört argüman için RCX/RDX/R8/R9 (tamsayı/pointer) ve XMM0 — XMM3 (kayan nokta) gibi düzenler kullanılır; kalan argümanlar stack'e taşar.

Aynı çağrı, farklı platform/derleyici seçeneklerinde farklı yerleşim üretebilir. Bu yüzden "hangi yazmaç hangi argüman" bilgisi tek başına yeterli değildir; doğrulama disiplini gerekir:

  • Decompiler "2 argüman" diyorsa, çağrı noktasında gerçekten iki değer mi hazırlanıyor, yoksa üçüncü bir değer farklı bir kanaldan (yazmaç/stack) taşınıyor mu?
  • "Pointer gibi" görünen argüman hiç dereference edilmiyorsa, handle/indeks/değer olma ihtimalini canlı tut.
  • Dönüş değeri sadece bir koşulda mı kullanılıyor, yoksa aritmetik/ofset/indeks bağlamlarına da giriyor mu?

Örnek: Bir fonksiyon çağrısı sonrası dönen değer önce "sıfır mı?" diye kontrol ediliyor; bu, durum kodu yorumunu güçlendirebilir. Fakat aynı değer birkaç blok sonra bir tablo indeksinde veya bellek ofset hesabında görünüyorsa, "başarı/başarısızlık" yorumu zayıflar; uzunluk/indeks/kimlik gibi anlamlar daha olası hâle gelir. Rapor cümlesi de kesinlik tonunu buna göre ayarlamalıdır.

Windows x64'te ayrıca çağrı yapan tarafın, callee'nin gerekirse kaydedebilmesi için "dört yazmaç argümanı"na yetecek bir shadow store ayırma zorunluluğu vardır. Bu alan pratikte 4×8 bayt = 32 bayt olarak düşünülür; bazı durumlarda derleyici yazmaçtaki argümanı bu alana geri yazıp (spill) daha sonra buradan okuyabilir. Bu "yankı", özellikle akış içinde yazmaçlar yeniden kullanıldığında argümanın izini güçlendiren bir delil kaynağı olabilir.

Dikkat: "Tek sinyalle karar verme" (sadece decompile imzası, sadece bir yazmaç, sadece bir karşılaştırma) ileri seviyede en yaygın düşüştür. Sağlam doğrulama en az iki bağımsız işaret arar: çağrı hazırlığı + kullanım bağlamı; ya da kontrol akışı + gözlemlenebilir yan etki gibi.

İpucu: Dönüş değerini rapora "durum kodu" diye yazmadan önce, dönüş değerinin sonraki birkaç kullanımını (3 — 5 temas noktası) hızlıca tarayın. Sadece koşullarda kalıyorsa durum kodu ihtimali artar; ofset/aritmetik/indeks bağlamlarına giriyorsa uzunluk/indeks ihtimalini ciddi biçimde masada tutun.

1.2. x86'da "stack temizliği" sinyali: ret imm ve temkinli yorum

x86 ekosisteminde bazı çağrı sözleşmeleri "callee stack temizliği" izini bırakabilir; örneğin dönüşte ret imm benzeri bir desen, çağrılan tarafın belirli bir argüman alanını temizlediğine işaret edebilir. Ancak bu tür ipuçları tek başına "hangi calling convention" sorusunu kesin kapatmaya yetmez: derleyici optimizasyonları, thunk/stub yapıları ve farklı prototip türleri aynı yüzeyi üretebilir.

Bu yüzden yaklaşım şudur: "ret imm gördüm → şu kesin" demek yerine, çağrı sitesinde argümanların nasıl yerleştirildiğini ve çağrı sonrası stack dengesinin nasıl korunduğunu birlikte okuyup hipotezi sınamak; hipotezi çürütecek karşı kanıtları aktif aramak.

2) Stack frame analizi ve parametre takibi: Fonksiyonun çalışma masası

Stack frame, fonksiyonun yerel değişkenleri, kaydedilmiş yazmaçları ve çağrı bağlamını düzenleyen çerçevedir. Analist açısından stack yalnızca "değişkenlerin durduğu yer" değildir; veri yaşam döngüsünün iz bırakabildiği bir yüzeydir: bir değer çağrıdan gelir, yerel alana kopyalanır, dönüştürülür, başka çağrılara taşınır; tüm bu izler raporda delile dönüşebilir.

Neden önemli? Çünkü parametre takibi, sadece "hangi yazmaçta ne var" sorusu değildir. Bir argüman stack'e kopyalanabilir, bir struct/array parçası gibi dilimlenebilir, farklı ofsetlerde yeniden ortaya çıkabilir. Decompiler'ın "var_xx" tahminleriyle gerçek bellek düzeni arasında uyuşmazlık olduğunda, ileri seviye analistin güvenli zemini stack frame okuryazarlığıdır.

2.1. RSP/RBP dinamiği: "gözlem cümlesi" yazabilmek

Stack erişimleri çoğunlukla "taban + ofset" mantığıyla görünür. Bu, rapor dili açısından çok kıymetlidir çünkü denetlenebilir cümle kurdurur: "şu ofsete yazıldı, sonra şu çağrının şu argümanında göründü, sonra şu koşulda kontrol edildi."

Örnek: Bir yerel alana yazılan değer, kısa süre sonra bir veri dönüştürme fonksiyonuna giden yolda kullanılıyor. "Bu kesin anahtardır" demek yorumdur. Gözlem ise şudur: değerin hangi blokta üretildiği, hangi ofsete yazıldığı, hangi çağrıda argüman olarak kullanıldığı ve sonuçta hangi dış etkiye (dosyaya yazım, ağ paketine ekleme, bellek kopyası) bağlandığı. Bu zincir kurulmadan yapılan erken etiketleme, raporun kanıt gücünü düşürür.

Kanıt üretiminde en temiz ayrım:

  • Gözlem: "Fonksiyon girişinden sonra X ofsetine kopyalanıyor; daha sonra Y çağrısının ikinci argümanına taşınıyor."
  • Yorum: "Bu örüntü, değerin uzunluk/kimlik/anahtar olabileceğini düşündürüyor."
  • Karşı kanıt arama: "Eğer uzunluk olsaydı, bellek kopyalama/karşılaştırma noktalarında tutarlı görünmesi beklenirdi; fakat sadece durum kontrolünde görünüyorsa uzunluk yorumu zayıflar."

2.2. Aynı ofset, farklı değişken: optimizasyonun paylaştırma oyunu

Optimizasyon seviyesi yükseldikçe derleyici, yaşam döngüsü çakışmayan değişkenleri aynı stack slot'ta yeniden kullanabilir. Decompiler bunu "karışmış değişken" gibi gösterebilir; analistin de "bu ofset hep aynı değişken" varsayımına kapılması kolaydır.

Neden önemli? Çünkü bu varsayım veri akışı zincirini kırar; aynı ofsetten okunan değerler aslında farklı zamanlarda farklı rol oynayabilir. Sağlam doğrulama için "ofsetin kimliği" değil, "değerin bağlamı ve kullanım örüntüsü" izlenir:

  • Aynı ofsetten okunan değerler aynı dönüşüm zincirine mi gidiyor?
  • Farklı akışlarda farklı çağrılara mı akıyor?
  • Bazı yollarda indeksleme, bazı yollarda durum kontrolü gibi farklı roller mi üstleniyor?

Dikkat: Decompiler'ın ürettiği geçici değişkenlere (var_xx) çok erken "uzunluk/anahtar/IP" gibi isimler vermek, domino etkisiyle tüm analizi yanlış yöne sürükler. İsimlendirme, kanıtın yerine geçmez; kanıtı okunur kılmak için en sonda gelir.

İpucu: Raporu "itiraza dayanıklı" kılmak için her kritik iddiada üçlüyü birlikte verin: (1) gözlemin bağlamı (hangi fonksiyon/blok), (2) yazmaç/ofset referansı, (3) sonraki kullanım noktası (hangi çağrıda/koşulda anlam kazandığı). Bu üçlü, yorumu denetlenebilir hâle getirir.

3) Derleyici optimizasyonları: okunabilirlik illüzyonlarını fark et ve yöntemini değiştir

Derleyici optimizasyonları performansı artırırken, insanın kolay okuduğu yapıları bozabilir: inline, koşul terslemeleri/birleştirmeleri, döngü dönüşümleri (unroll vb.), frame pointer'ın kaldırılması, leaf fonksiyonların stack açmaması... x64 dünyasında ayrıca ABI'nin "volatile/non-volatile" yazmaç ayrımı ve unwind gereksinimleri, prolog/epilog yapısını da belirli kısıtlarla şekillendirir.

Neden önemli? Çünkü optimize edilmiş ikililerde decompile çıktısı "çok temiz" bir hikâye anlatabilir ve bu temelsiz bir güven üretir. İleri seviye analistin hedefi estetik anlatı değil; sınırları açık, çürütülemeyen ve kanıtla taşınan anlatıdır.

3.1. FPO ve leaf function: "stack'e bakma" refleksini yeniden ayarla

Frame pointer kullanılmadığında (FPO), sabit RBP-ofset okuma rahatlığı kaybolur; erişimler daha çok RSP-relative kayar. Leaf fonksiyonlarda ise başka fonksiyon çağrısı olmadığından ve stack alanı minimal olabildiğinden, veri çoğu zaman yazmaçlarda yaşar; stack'te "iz" aramak her zaman verimli değildir.

Yöntem seçimi burada kritikleşir:

  • Hızlı triage: decompile ile genel haritayı çıkar; ama FPO/leaf sinyali görür görmez "decompile değişkenleri"ne aşırı güveni düşür.
  • Kanıt standardı yüksek çalışma: kritik iddialarda veri akışını (yazmaç + bellek) birlikte izleyen, çürütücü karşı kanıtları hedefleyen daha sıkı bir okuma seç.

Bu temelin kontrol listesini Orta Seviye ilgili modülde ayrıntılı işlemiştik; burada ileri analiz açısından kritik olan, optimizasyonu fark eder etmez yöntemini değiştirebilme refleksidir.

3.2. LEA ve aritmetik optimizasyonlar: "karmaşık görünen" her şey karmaşık değildir

Bazı talimat dizileri, decompile'da "garip formül" gibi görünür; oysa derleyici daha hızlı aritmetik üretmek için LEA benzeri talimatları matematikte kullanıyor olabilir. Bu noktada güvenli yaklaşım, "bu kesin obfuscation/crypto" gibi ağır yorumlara atlamadan önce çıktının nereye gittiğini izlemektir.

Örnek: Bir döngü içinde adres hesaplar gibi görünen bir dizinin çıktısı sadece tablo indeksine gidiyorsa, veri dönüşümü/şifreleme yorumu zayıflar. Aynı çıktı, bir tamponu sistematik biçimde değiştirip dış etkileşimden önce son hâlini aldırıyorsa, "dönüşüm" yorumu güçlenir. Buradaki farkı yaratan, talimatın şekli değil, kullanım bağlamıdır.

4) Dolaylı dallanma ve exception/unwind akışları: kaçırılan yollar, saklanan davranışlar

Kod her zaman doğrusal ilerlemez. Switch-case yapıları jump table ile yürüyebilir; çağrılar dolaylı pointer'larla yapılabilir; exception/unwind yolları ise "normal" kontrol akışına paralel, ayrı bir yürütme düzlemi oluşturabilir.

Neden önemli? Çünkü şüpheli davranışlar bazen "nadiren seçilen bir dal"da ya da hata/istisna yolunda saklıdır. Bu yolları atlamak, davranışın kritik parçasını kaçırmak demektir.

4.1. Jump table ve indirect call: hedef belirsizse kanıt dili değişir

Jump table'da bir indeks hesaplanır, bir hedef tablosundan adres seçilir ve akış o adrese yönelir. Indirect call'da ise çağrılacak adres bellekten okunur; hedef, bağlama göre değişebilir.

Doğrulama disiplini:

  • İndeksin kaynağı nedir: parametre mi, global durum mu, hesaplanmış bir değer mi?
  • Hedeflerin hepsi gerçekten ulaşılabilir mi, yoksa bazıları "ölü/yanıltıcı" mı?
  • Dolaylı çağrıda pointer'ın kaynağı farklı akışlarda farklı adreslere mi bağlanıyor?

Kanıt üretimi: "Switch var" demek yerine, seçici değerin üretim zincirini ve hangi koşullarla hangi hedef sınıfına yöneldiğini raporlamak daha güçlüdür. Bu, itiraz geldiğinde "hangi sinyalle bu sonuca vardın?" sorusuna net yanıt verir.

4.2. Exception/unwind akışı: temizlik mi, alternatif davranış mı?

Exception/unwind yolları bazen masum "temizlik"tir: kaynak kapatma, hata kodu standardizasyonu, geri dönüş hazırlığı... Bazen de akışı beklenmedik bir yola taşır ve davranışın kritik kısmı orada yaşar.

Doğrulama ve karşı kanıt:

  • Handler yolunda sadece kaynak kapatma ve kontrollü geri dönüş sinyalleri varsa "temizlik" yorumu güçlenir.
  • Handler yolunda dosya/ağ gibi dış etkileşim üreten çağrılar veya kritik veri dönüşümleri görünüyorsa "alternatif davranış" ihtimali ciddileşir.

Yöntem seçimi: Sadece "CALL/JMP zinciri" ile akış okumak, bazı istisna yollarını görünmez kılabilir. Bu riski azaltan zihinsel model, akışı iki katmanlı düşünmektir: normal yol + istisna yolu. Böylece "ana akış temiz" göründüğünde bile, nadir yollarda davranış saklanma ihtimali gözden kaçmaz.

Dikkat: İstisna akışını otomatik olarak "anti-analiz" diye etiketlemek de hatalıdır. Kanıt standardı, niyeti değil; gözlemlenebilir akışın etkisini ve tekrar üretilebilir izlerini temellendirir.

İpucu: İstisna akışını rapora koyarken iki ankrajı sabitleyin: istisnanın tetiklendiği yürütme noktası (instruction pointer bağlamı) ve kontrolün geçtiği handler yolunun bağlamı. Bu ikili, zaman çizelgesinde "nerede koptu, nerede devam etti" sorusunu kanıtla cevaplar.

Terimler Sözlüğü

Terim Açıklama
CPUMerkezi işlem birimi; talimatları yürüten donanım bileşeni
ABI (Application Binary Interface)İkili düzeyde uyumluluk sözleşmesi; çağrı kuralları, yazmaç/stack düzeni vb.
Calling conventionFonksiyon argüman/dönüş değerinin taşınma ve stack temizliği kuralları
RegisterYazmaç; CPU içinde hızlı geçici veri alanı
StackYığın; çağrı bağlamı ve geçici verilerin tutulduğu bellek bölgesi
Stack frameBir fonksiyon çağrısına ait yerel alan ve düzen
Shadow store / shadow spacex64’te callee’nin yazmaç argümanlarını gerektiğinde kaydedebilmesi için stack’te ayrılan alan
OptimizationPerformans/alan için yapılan derleyici dönüşümleri
Inline (inlining)Fonksiyon çağrısının gövdeye gömülmesi
Leaf functionBaşka fonksiyon çağırmayan; unwind/stack davranışı daha sınırlı olabilen fonksiyon
FPO (Frame Pointer Omission)Frame pointer kullanılmaması; ofset yorumlamayı zorlaştıran optimizasyon
Loop unrollingDöngünün performans için açılarak tekrarların ayrı bloklar hâline getirilmesi
Jump tableSwitch-case benzeri yapılarda hedef adres tablosu
Indirect callHedef adresi bellekten okunan dolaylı çağrı
Unwindİstisna/hata durumunda stack çözülmesi ve alternatif akışın işletilmesi
SEH (Structured Exception Handling)Bazı ortamlarda yapılandırılmış istisna işleme yaklaşımı
Register tracingVerinin yazmaçlar arasında nasıl taşındığını izleme disiplini

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Decompiler iki argüman gösteriyor; fakat çağrı öncesi hazırlıkta üçüncü bir değer de tutarlı şekilde taşınıyor. En güvenli yaklaşım hangisidir?

A) Decompiler imzasını kesin kabul etmek

B) Üçüncü değeri önemsiz saymak

C) Çağrı hazırlığı + dönüş değeri kullanım bağlamı ile imzayı yeniden doğrulamak

D) Sadece fonksiyon adının çağrıştırdığı anlama güvenmek

E) Fonksiyonu analiz dışı bırakmak

  • Doğru: C
  • Gerekçe: C, hipotezi CPU gerçekliğiyle sınar. A/D tek kaynağa aşırı güven; B kanıtı atlar; E gereksiz bilgi kaybıdır.
  1. 2) Bir argüman pointer gibi görünüyor ama sonraki akışta hiç dereference edilmiyor. En doğru yorum disiplini hangisidir?

A) Kesin pointer’dır

B) Kesin pointer değildir

C) Handle/indeks/değer olasılığını koruyup kullanım bağlamıyla karşı kanıt aramak

D) Hız için “buffer” diye adlandırmak

E) Argümanı rapordan çıkarmak

  • Doğru: C
  • Gerekçe: Pointer iddiası davranışla desteklenmelidir. A/B erken kesinlik; D erken etiketleme; E kanıtı yok saymaktır.
  1. 3) Windows x64’te argüman takibinde “shadow store” kavramı neden rapor açısından değerlidir?

A) Fonksiyonları hızlandırdığı için

B) Yazmaç argümanlarının gerektiğinde stack üzerinde iz bırakabilmesini sağlayarak doğrulamayı güçlendirebildiği için

C) Decompiler hatalarını tamamen yok ettiği için

D) Jump table’ları otomatik çözdüğü için

E) Exception akışlarını devre dışı bıraktığı için

  • Doğru: B
  • Gerekçe: Shadow store, argümanın “yankısı” üzerinden denetlenebilirlik sağlar. Diğer şıklar kavramı yanlış geneller.
  1. 4) Aynı stack ofsetinde iki farklı değişkenin görünmesi hangi açıklamayla en iyi örtüşür?

A) Program bozuk derlenmiştir

B) Derleyici yaşam döngüsü çakışmayan değişkenleri aynı slot’ta yeniden kullanmıştır

C) CPU arızası vardır

D) Ağ bağlantısı kesilmiştir

E) Jump table bozulmuştur

  • Doğru: B
  • Gerekçe: Optimizasyonlar slot yeniden kullanımına gidebilir. Diğerleri bağlam dışıdır.
  1. 5) Frame pointer kullanılmayan (FPO) bir fonksiyonda en büyük analiz riski nedir?

A) Fonksiyonun çalışmaması

B) Sabit RBP-ofset varsayımıyla yerel değişken/argüman yerleşimini yanlış okumak

C) Dosya boyutunun artması

D) Decompiler’ın hiç çıktı üretmemesi

E) Switch-case’lerin kaybolması

  • Doğru: B
  • Gerekçe: FPO, rahat ofset okuma varsayımını kırar; yanlış varsayım yanlış zincir üretir.
  1. 6) Bir talimat dizisi karmaşık matematik gibi görünüyor. “Şifreleme/obfuscation” yorumunu rapora taşımadan önce en sağlam kontrol hangisidir?

A) Dizinin uzunluğuna bakmak

B) Çıktının nerede kullanıldığını izlemek: adresleme/indeksleme mi, veri dönüşümü mü?

C) Ekran görüntüsü eklemek

D) Fonksiyon adını değiştirmek

E) Kodun rengini kontrol etmek

  • Doğru: B
  • Gerekçe: Görünüşe değil, kullanım bağlamına bakmak kanıt üretir. Diğerleri delil standardını yükseltmez.
  1. 7) Jump table/indirect branch analizinde en kritik kaçırma riski hangisidir?

A) CPU’nun yavaşlaması

B) Dolaylı hedeflerin otomatik görünmemesi nedeniyle bazı akış yollarının gözden kaçması

C) Dosyanın kesin kendini silmesi

D) İnternetin kopması

E) Hash değerinin değişmesi

  • Doğru: B
  • Gerekçe: Dolaylı hedefler bağlama bağlıdır; bazı yollar “haritanın dışında” kalabilir.
  1. 8) Exception/unwind yolunu “sadece temizlik” diye sınıflandırmak hangi durumda en risklidir?

A) Handler yalnız kaynak kapatıyor gibi görünüyorsa

B) Handler içinde dış etkileşim (dosya/ağ) veya kritik veri dönüşümü sinyalleri varsa

C) Fonksiyon kısa ise

D) Decompiler try/catch göstermiyorsa

E) Program 64-bit ise

  • Doğru: B
  • Gerekçe: Dış etkileşim/dönüşüm, alternatif davranış ihtimalini yükseltir. C/E zayıf; D tek başına karar verdirmez.
  1. 9) Indirect call görüldüğünde raporlama dili neden daha temkinli olmalıdır?

A) Çünkü her dolaylı çağrı kesin zararlıdır

B) Çünkü hedef adres bağlama bağlıdır; tek bir statik gözlemle kesin hedef iddiası risklidir

C) Çünkü CPU dolaylı çağrıları desteklemez

D) Çünkü stack frame tamamen ortadan kalkar

E) Çünkü decompiler her zaman doğru hedefi verir

  • Doğru: B
  • Gerekçe: Hedef pointer’dan okunur; farklı akışlarda farklı hedefe bağlanabilir. A genelleme; C/D yanlış; E aşırı güvendir.
  1. 10) “Register/stack durumunu delil olarak paketlemek” için en kritik unsur hangisidir?

A) Araç adlarını uzun uzun yazmak

B) Gözlemi adres/ofset bağlamıyla sabitleyip sonraki kullanım noktasına bağlamak; alternatif açıklamaları karşı kontrollerle elemek

C) Yalnız sonuç cümlesi yazmak

D) Sadece ekran görüntüsü eklemek

E) Analizi mümkün olduğunca kısa tutmak

  • Doğru: B
  • Gerekçe: Kanıt; bağlam + izlenebilirlik + karşı kanıt yönetimiyle güçlenir. Diğerleri tek başına denetlenebilirlik sağlamaz.

Bu modülde neler öğrendiniz?

  • ABI/calling convention okuryazarlığının, parametre ve dönüş değerini doğru okumada “doğruluk omurgası” olduğunu.
  • Decompile imzasının “hipotez” olduğunu; kritik iddiaların çağrı hazırlığı ve kullanım bağlamıyla doğrulanması gerektiğini.
  • Stack frame okuryazarlığıyla yerel değişken/argüman yerleşimini kanıtlanabilir biçimde izlemeyi; erken isimlendirme tuzağından kaçınmayı.
  • Shadow store gibi ABI detaylarının, yazmaç–stack ilişkisini doğrulama ve kanıt üretimi için nasıl fırsata çevrilebileceğini.
  • FPO/leaf/inline/döngü dönüşümleri gibi optimizasyonların ürettiği yanılsamaları fark edip yöntemi koşula göre seçmeyi.
  • Jump table, indirect call ve exception/unwind yollarında “nadiren seçilen” akışları sistematik biçimde haritalandırmayı.
  • Bulguyu rapora taşırken gözlem–yorum ayrımını koruyup, adres/ofset bağlamı ve yeniden üretilebilirlikle delil standardı kurmayı.

Modül 4 — İşletim Sistemi İç Yapısı ve Yürütme Modeli

Bir zararlı örneği anlamak, yalnızca "hangi dosyaları oluşturdu, nereye bağlandı?" listesini çıkarmak değildir; bu davranışların işletim sisteminin hangi mekanizmaları üzerinden mümkün olduğunu görebilmektir. Bu modülde Windows yürütme modelini tek bir hikâye gibi okuruz: loader'ın (yükleyici) bir imajı adres alanına yerleştirmesinden, süreç ve thread'in "iç kimlik kartları" olan PEB/TEB yapılarına, sanal bellek ve sayfa korumalarına ve en altta ntdll — syscall sınırına kadar. Hedef, sezgiyle hüküm vermek değil; bulguyu doğrulamak, karşı kanıt aramak ve raporda yeniden denetlenebilir bir kanıt zinciri kurmaktır.

Bu Modülde Hedeflenen Kazanımlar

  • Bir sürecin yüklenme zincirini okuyup “hangi modül, hangi bağlamda, ne zaman devreye girdi?” sorusuna kanıta dayalı yanıt verebileceksin.
  • PEB/TEB gibi süreç içi yapıların sağladığı görünürlük ile kör noktaları ayırt edeceksin.
  • Sanal bellek bölge türleri (image/mapped/private) ve sayfa korumaları üzerinden “şüpheli bellek” iddiasını kanıta dönüştürmeyi öğreneceksin.
  • ntdll ve syscall katmanını “gerçek temas noktası” olarak konumlandırıp, sürüm/katman farklarının doğurduğu yanlış yorum riskini yöneteceksin.
  • Aynı sorunu farklı yollarla (statik inceleme, runtime gözlem, telemetri, bellek adli incelemesi) çözme seçenekleri arasında yöntem seçimi yapıp sınırlılıkları rapora taşıyacaksın.

1) Loader davranışı ve modül çözümleme

Bir süreç başlatıldığında Windows, dosyayı "okuyup çalıştırmakla" kalmaz: imajı adres alanına map eder, bağımlılıkları çözer, import bağlamasını yapar, gerekiyorsa relocation uygular ve bazı erken yürütme noktalarını devreye sokar (örneğin TLS callback gibi mekanizmalar, ana giriş noktasından önce çalışabilir). Bu zinciri okumak iki şey kazandırır:

  1. — Davranışın hangi aşamada ortaya çıktığını görürsün.
  2. — Aynı davranışın "normal yükleme" ile mi yoksa "olağandışı bellek/modül örüntüsü" ile mi üretildiğini doğrulamaya başlarsın.

1.1. PE loader'ın pratikte bıraktığı izler

Loader'ın izi tek bir "log satırı" değildir; farklı katmanlarda bir araya gelince güçlenir:

  • İmaj haritalama ve adresleme: ASLR nedeniyle aynı ikili farklı çalıştırmalarda farklı taban adreslere yerleşebilir. Bu yüzden "şu adreste vardı" ifadesi tek başına zayıf kanıttır; güçlü olan, imajın image-mapped karakterini ve zaman bağlamını gösterebilmektir.
  • Import çözümleme (IAT bağlama): Import tablosu loader'ın "alışveriş listesi" gibidir; ama bazı yazılımlar bu listeyi minimumda tutar, bazıları delay-load kullanır, bazıları da runtime'da dinamik çözümleme yapar. Burada kritik refleks: "import yok" sonucunu hükme çevirmeden önce, aynı iddiayı çalışma zamanı sinyalleri ile sınamaktır.
  • Section/koruma mantığı: Loader, bölüm (section) özelliklerine göre sayfa korumaları uygular (kod/data ayrımı). Bir bölge "kod gibi" davranıyorsa ama beklenen bölüm modeliyle uyuşmuyorsa şüphe doğabilir; yine de JIT üreten meşru bileşenler gibi karşı olasılıkları özellikle aramak gerekir.

Örnek: Bir "belge görüntüleyici" işleminde statik importlar sakin görünürken çalışma anında kriptografi ve ağ yığınıyla ilişkili modüller yükleniyor, hemen ardından dış bağlantılar başlıyorsa; "yükleme → bağlantı" sıralamasını aynı zaman penceresinde göstermek rapor için güçlü delil seti üretir.

Yöntem seçimi (bu aşamada neye yaslanırsın?)

  • Sadece dosya varsa: import tablosu + section modeli iyi başlangıçtır; ama nihai hüküm için yeterli değildir.
  • Telemetri (EDR/ETW/SIEM) varsa: modül yükleme olaylarını, thread başlangıçlarını ve ağ/dosya davranışını zaman çizelgesinde korele etmek kanıt gücünü yükseltir.
  • Bellek dökümü varsa: modül listesi ile bellek haritasını birlikte okuyup "disk izi olan imaj mı, yoksa private/mapped bir bölge mi?" ayrımını güçlendirirsin.

Dikkat: "Import tablosu temiz → ağ yeteneği yok" gibi kesin cümleler ileri analizde sık hata üretir. "Görünür import yok" ile "yetenek yok" aynı şey değildir; aradaki boşluğu runtime sinyalleriyle doldurmadıkça kanıt standardı zayıf kalır.

1.2. "Yüklemek" ile "bulmak" aynı şey değildir: modül + sembol çözümleme

Modül çözümlemeyi iki parçalı düşünmek işini kolaylaştırır:

  • Bir DLL'in sürece yüklenmesi
  • Yüklenen modül içinden bir fonksiyonun/isimli sembolün çözülmesi (runtime resolving)

Bir süreçte modül yüklenmesi çoğu zaman meşrudur; şüphe, örün­tü + bağlam + zaman birleşince doğar:

  • UI odaklı bir süreçte kısa sürede çok sayıda sistem DLL'inin yüklenmesi ve hemen ardından ağ/dosya davranışının başlaması gibi zincirler,
  • "Kullanıcı etkileşimi yokken" belirli API ailelerine yönelim gösteren modül yükleme paternleri.

Doğrulama refleksi (karşı kanıt arama):

  • "Beklenmedik" dediğin modül gerçekten beklenmedik mi? Uygulamanın eklenti sistemi, güncelleme bileşeni, yazıcı sürücüsü entegrasyonu veya güvenlik ajanı gibi meşru nedenleri özellikle kontrol et.
  • Modül yükleme iddiasını mümkünse iki perspektiften doğrula: süreç içi modül görünümü + telemetri veya bellek haritası gibi.

Kanıtı rapora paketleme:

  • Sadece "modül listesi" koymak yerine "hangi süreçte, hangi zaman aralığında, yükleme öncesi/sonrası davranış farkı ne?" sorularını tek parçaya bağla.
  • Aynı olay tekrar gözlenebildiyse, tetik koşullarını yaz (dosya açılması, belirli bir süre sonra tetiklenme, kullanıcı etkileşimi olup olmaması). Bu, raporu denetlenebilir kılar.

2) PEB/TEB ve süreç içi veri yapıları

Telemetri "dışarıdan gözlem" sunar; PEB/TEB ise sürecin/thread'in işletim sistemi tarafından tutulan iç meta verisini verir. PEB (Process Environment Block) süreç düzeyinde; TEB (Thread Environment Block) thread düzeyinde kritik ipuçları taşır. Bu iç bakış, özellikle "süreç aslında nasıl başladı?", "hangi modüller gerçekten devrede?" gibi sorularda hızlı hipotez kurdurur.

2.1. PEB: süreç parametreleri ve loader verisi

PEB içinde analist için pratik değeri yüksek alanlar:

  • Süreç parametreleri (komut satırı, çalışma dizini, imaj bağlamı): "Bu süreç burada ne arıyordu?" sorusunu güçlendirir.
  • LoaderData ve modül listeleri: "Modül var mı/yok mu?" tartışmalarında ilk referans noktasıdır.

Örnek: Telemetride görünen başlatma argümanlarıyla süreç içi parametreler uyumlu değilse iki olasılık öne çıkar: telemetri eksiktir ya da süreç içi yapıların manipüle edildiği ihtimali vardır. İleri seviye dil, "kesin manipülasyon" değil, "uyumsuzluk sinyali" diye başlar ve doğrulama adımını açıkça yazar.

2.2. TEB: thread bağlamı, TLS ve istisna zinciri (SEH)

TEB, thread'in kimliği, TLS alanları ve istisna işleme gibi mekanizmalarla ilişkilidir. Bazı davranışlar süreçten çok thread seviyesinde ayrışır: aynı süreçte farklı thread'ler farklı roller üstlenir.

  • Aynı zaman penceresinde başlayan thread'lerin davranışı, "şüpheli yürütme nereden çıktı?" sorusuna yaklaşırken değerlidir.
  • TLS meşru yazılımlarda da çok yaygındır; ancak şüpheli bellek bölgeleriyle birlikte bazı thread'lerin belirli lokal veriyi sürekli taşıması, davranış izini güçlendirebilir.
  • SEH/istisna zinciri ile ilgili anormallikler (beklenmedik istisnalarla kontrol akışı oluşturma gibi) bazen kontrol akışını anlamayı zorlaştırır; burada "API'de görünmüyor" demek yerine, ilgili thread bağlamını açıklayan kanıtlara yönelmek gerekir.

İpucu: PEB/TEB tabanlı bulguları rapora koyarken "gözlem" ile "yorum"u ayır. "Şu yapıdaki alan şu değeri taşıyor" gözlemdir; "bu, manipülasyon olabilir" yorumdur. Yorumun yanına hangi karşı kanıtı aradığını yazmak, raporu profesyonel seviyeye taşır.

2.3. PEB/TEB tek başına neden yetmez?

İleri seviyede kritik refleks şudur: PEB/TEB "içeriden bakış" verir; içeriden bakış her zaman güvenilir kabul edilemez. Bu yüzden yöntem seçimi ve doğrulama birlikte yürür:

  • PEB/TEB hızlı hipotez kurdurur.
  • Bellek haritası/region analizi "dışsal gerçeklik" sunar: "Listede yok ama bellekte var mı?" sorusunu güçlendirir.
  • Telemetri olayın zaman boyutunu taşır: "Ne zaman oldu?" sorusunu delillendirir.

Bu başlıkta sık karşılaşılan bir örüntü de şudur: bazı örnekler analiz ortamını anlamak için süreç içi işaretleri (ör. BeingDebugged gibi bayraklar) okuyabilir. Bunun analiste anlamı "kaçınma tekniği nasıl yapılır?" değil; davranışın bağlamını doğru kurmaktır: "Bu örnek, çalışma ortamı sinyallerine duyarlı olabilir; bu yüzden gözlenen davranışların tekrar üretilebilirlik notu özellikle önem kazanır."

Ek teknik not: TEB, mimariye göre segment tabanlı erişimle ilişkilidir; 32-bit Windows'ta FS, 64-bit Windows'ta GS thread yapısına işaret eder ve PEB işaretçisi TEB içinden alınır.

Dikkat: PEB/TEB verisini "mutlak gerçek" gibi rapora yazmak, yanlış kesinlik üretir. Özellikle yüksek riskli çıkarımlarda en az bir çapraz doğrulama çizgisi ekle (bellek region görünümü, telemetri korelasyonu, bütünlük/anomali sinyalleri gibi).

3) Sanal bellek ve sayfa koruma analizi

Sanal bellek, süreç adres alanının "haritasıdır": image-mapped bölgeler, memory-mapped file bölgeleri, heap/stack ve private allocation aynı evrende yaşar. İleri analizde hata genellikle şuradan doğar: tek bir sinyali görüp (ör. "RWX var") hemen hükme gitmek. Doğru yaklaşım "sinyal + bağlam + karşı kanıt" üçlüsüdür.

3.1. Bölge türleri: image / mapped / private

  • Image-mapped: Genellikle loader'ın bir PE imajını map etmesiyle ilişkilidir.
  • Mapped file: Bir dosyanın belleğe haritalanmasıdır; tarayıcı cache'i, büyük dosya işleme, veritabanı motorları gibi meşru yazılımlarda sık görülür.
  • Private memory: Dosyaya bağlı olmayan ayrılmış bellek. Bazı bellek içi davranışlar burada iz bırakabilir; ama tek başına "kötü" değildir.

Örnek: Bir süreçte executable özellikli private bölgeler görülüyor ve aynı zaman penceresinde beklenmedik thread başlangıçları oluşuyor; üstelik bu thread başlangıç adresleri bilinen bir modülün kod bölümüne değil de bu private bölgeye yakınsa şüphe artar. Buna karşı kanıt olarak, süreçte JIT/çalışma zamanı kod üretimi yapan meşru bileşenlerin olup olmadığı ve bellek örüntüsünün onlarla uyumu aranır.

3.2. Sayfa korumaları: R/W/X, RWX ve guard page

Sayfa korumaları bir bölgenin nasıl kullanılacağını belirler: okunabilir (R), yazılabilir (W), yürütülebilir (X). Önemli nokta, korumaların zaman içinde değişebilmesidir; bazı akışlar "hazırlık → yürütme" izleri bırakır.

  • RWX çok konuşulur çünkü risklidir; ancak tek başına suç değildir. Tarayıcılar, oyun anti-cheat bileşenleri, bazı EDR/sürümleme mekanizmaları ve runtime ortamları sıra dışı ama meşru örüntüler üretebilir.
  • RX kod bölgelerinde beklenen görünümdür.
  • Guard page bazen stack büyümesi ve istisna üretimi gibi amaçlarla devrededir; "tuhaf" görünmesi normaldir.

Bu noktada DEP/ASLR gibi korumaların "ne yaptığı" değil, analist için "ne tür yanılgı ürettiği" önem kazanır: adreslerin değişmesi, anlık snapshot'ın bağlamdan kopması veya meşru runtime'ların "saldırı gibi görünen" bellek modelleri üretmesi.

İpucu: Bellek bulgularını zaman çizelgesine koyduğunda okunurluk dramatik biçimde artar: "Önce yeni executable private bölge → sonra yeni thread → sonra ilk dış bağlantı" sıralaması, tek tek bulguların toplamından daha ikna edicidir ve denetlenebilirlik sağlar.

3.3. "Şüpheli bellek" iddiasını delile dönüştürmek

"Şüpheli region gördüm" rapor cümlesi değildir; delil paketinin bileşenleri olmalıdır:

  • Bölgenin türü (private/mapped/image)
  • Bölgenin koruması (RX/RWX/guard vb.) ve mümkünse zaman içindeki değişim
  • Bölgeyle ilişkili thread davranışı (başlangıç adresi bağlamı, zaman penceresi)
  • Modül yükleme/çözümleme ile korelasyon (yükleme → davranış zinciri)
  • Karşı kanıt araması (JIT/runtime, bilinen bileşen örüntüleri, meşru senaryo uyumu)
  • Sınırlılıklar (eksik log, gözlem penceresi, ortam çeşitliliği)

Dikkat: "RWX gördüm, kesin zararlı" refleksi ileri analizde en sık yanlış alarm (false positive) üreten alışkanlıklardandır. Kanıt gücünü yükseltmeden kesin hüküm yazmak, raporun güvenilirliğini zedeler.

4) Syscall ve ntdll rolü: "gerçek temas noktası"nı görmek

Kullanıcı modunda gördüğün pek çok API çağrısı, daha altta ntdll üzerinden çekirdeğe uzanan bir zincirin üst katmanıdır. ntdll, kullanıcı modu ile çekirdek arasındaki sınırda merkezi bir rol taşır; bu yüzden bazı durumlarda üst katman API'ler eksik görünse bile alt katmanda daha tutarlı sinyaller bulunabilir.

4.1. ntdll neden merkezi?

Önemli olan tek tek fonksiyon isimlerini ezberlemek değil, şunu kavramaktır:

  • Davranış "Win32 API" gibi görünse bile çekirdeğe giden yol çoğu zaman ntdll'den geçer.
  • Bazı meşru yazılımlar performans veya mimari nedeniyle daha düşük seviyeyi kullanabilir; bu, otomatik olarak kötü niyet değildir.

Örnek: Bir süreçte dosya sistemiyle temas eden bir davranış üst katman telemetrilerinde eksik görünürken, alt seviyede tutarlı sinyaller varsa; raporda "görünmüyor" yerine "üst katmanda sınırlı görünürken alt katmanda korele sinyaller bulunuyor" dilini kurmak kanıt gücünü artırır.

4.2. Syscall sınırında doğrulama ve yorum riskleri

Syscall düzeyi güçlüdür çünkü çekirdeğe temas eden "asıl eylem" burada belirginleşir; risklidir çünkü:

  • Windows sürüm farklılıkları,
  • WoW64 gibi uyumluluk katmanları,
  • Telemetri eksikleri

yanlış yorum riskini yükseltir.

Bu yüzden syscall/ntdll ile ilgili iddialarda yöntem seçimi belirleyicidir:

  • Ortam çeşitliliği yüksekse, tek gözleme dayanma; dosya/ağ izleri, bellek korelasyonu ve olay zaman çizelgesini birlikte kullan.
  • ntdll bütünlüğüyle ilgili bir şüphe varsa, dili "kesin manipülasyon" değil "uyumsuzluk sinyali" ekseninde kur; kanıt düzeyine uygun ifadeyi seç.

4.3. "Alt katman bulgusu"nu rapora koymak

Teknik bir ayrıntıyı operasyonel delile çevirmek için:

  • Bulguyu hangi kaynaktan aldığını net yaz (bellek dökümü, telemetri, runtime gözlem).
  • Aynı iddiayı destekleyen ikinci bir sinyal ekle (modül yükleme korelasyonu, dosya/ağ izi, thread bağlamı).
  • Sınırlılıkları açık yaz (sürüm farkı, eksik log, gözlem penceresi).
  • Mümkünse yeniden gözlenebilirlik notu ekle: "hangi koşulda tetiklendi, aynı pencerede tekrarlandı mı?"

Terimler Sözlüğü

Terim Açıklama
LoaderYükleyici; imajı belleğe yerleştirip bağımlılıkları çözen mekanizma
PE (Portable Executable)Windows yürütülebilir/DLL dosya formatı
Mapping / memory mappingBir dosya/içeriğin sanal belleğe haritalanması
Module (modül)Süreç içinde yüklenen DLL/bileşen
Import (IAT)Dış fonksiyonların bağlandığı import adres tablosu
Export tableBir DLL’in dışarı açtığı fonksiyonların listesi
ASLRAdres alanı yerleşimini rastgeleleştirme; taban adreslerin değişmesi
Relocationİmaj farklı adrese yüklenince yapılan adres düzeltmeleri
TLS (Thread Local Storage)Thread’e özel depolama; bazı erken yürütme akışlarıyla ilişkilidir
PEBSüreç ortam bloğu; süreç parametreleri ve loader verisi gibi bilgileri taşır
TEBThread ortam bloğu; thread düzeyi bağlam ve TLS/istisna mekanizmalarıyla ilişkilidir
SEHStructured Exception Handling; istisna işleme modeli
Virtual memorySanal bellek; süreç adres alanının yönetim modeli
Private memoryDosyaya bağlı olmayan süreç içi ayrılmış bellek bölgesi
Memory-mapped fileDosyaya bağlı, haritalanmış bellek bölgesi
Page protection (R/W/X)Sayfa koruması; okuma/yazma/yürütme izinleri
RWXOkunabilir-yazılabilir-yürütülebilir sayfa; bağlama bağlı risk sinyali
Guard pageErişimde istisna üretebilen korumalı sayfa türü
DEPVeri yürütmeyi engelleme; bellek yürütme politikasına ilişkin koruma
ntdllKullanıcı modu–çekirdek sınırında temel sistem kütüphanesi
SyscallSistem çağrısı; kullanıcı modundan çekirdeğe geçiş noktası
WoW6432-bit uygulamaların 64-bit Windows üzerinde çalışmasını sağlayan katman
EDR / ETWUç nokta görünürlüğü ve olay izleme ekosistemi (telemetri)

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Loader davranışını analiz ederken “modül listesi + zaman korelasyonu” birlikte kullanıldığında en güçlü katkı hangisidir?

A) Dosyanın hash’ini otomatik kötü ilan etmek

B) Davranışın hangi aşamada ve hangi modülle tetiklendiğini kanıta bağlamak

C) Sadece import tablosuna bakarak her şeyi kesinleştirmek

D) ASLR’yi devre dışı bırakmak

E) Sadece ekran görüntüsüyle raporu tamamlamak

  • Doğru: B
  • Gerekçe: Zaman korelasyonu, modül yükleme ile davranış başlangıcı arasındaki ilişkiyi denetlenebilir biçimde kurar. Diğer şıklar ya aşırı kesinlik üretir ya da teknik olarak alakasızdır.
  1. 2) “Import tablosu sakin görünüyor → yetenek yok” çıkarımı neden ileri seviye için zayıftır?

A) Import tablosu hiçbir zaman gerçek değildir

B) Bazı yazılımlar/yükler çözümlemeyi runtime’da dinamik yapabilir veya delay-load kullanabilir

C) Ağ yetenekleri yalnız kernel modunda olur

D) ASLR ağ çağrılarını engeller

E) PE formatında import diye bir şey yoktur

  • Doğru: B
  • Gerekçe: Statik görünürlük sınırlı olabilir; hüküm yerine runtime sinyalleriyle doğrulama gerekir.
  1. 3) PEB/TEB temelli bir bulgu için “yanlış kesinlik” riskini en çok düşüren yaklaşım hangisidir?

A) PEB/TEB verisini tek kaynak kabul edip hüküm yazmak

B) PEB/TEB bulgusunu bellek region analizi veya telemetri ile çapraz doğrulamak

C) Sadece komut satırını rapora yazmak

D) Sadece modül sayısını saymak

E) ASLR’yi suçlamak

  • Doğru: B
  • Gerekçe: İç yapılar hızlıdır ama tek başına yeterli olmayabilir; çapraz doğrulama kanıt gücünü artırır.
  1. 4) Aşağıdaki ifadelerden hangisi “PEB/TEB erişimi” konusunda doğru çerçeveyi kurar?

A) PEB/TEB yalnızca tersine mühendislik araçlarının uydurduğu yapılardır

B) Thread bağlamına ilişkin bilgiler mimariye göre FS/GS ile ilişkili olabilir; PEB işaretçisi TEB içinden alınır

C) PEB her zaman telemetriden daha güvenilirdir, karşı kanıta gerek yoktur

D) TEB sadece ağ soketlerini tutar

E) PEB yalnızca imza doğrulama içindir

  • Doğru: B
  • Gerekçe: TEB thread düzeyi bağlamı taşır; mimariye göre segment tabanlı erişim çerçevesi vardır ve PEB ilişkisi buradan kurulabilir.
  1. 5) Sanal bellek analizi yaparken “private + executable” bölge görmenin en doğru yorumu hangisidir?

A) Kesin zararlıdır, doğrudan engellenmelidir

B) Kesin temizdir, görmezden gelinmelidir

C) Risk sinyalidir; meşru JIT/runtime olasılığına karşı bağlam ve karşı kanıt aranmalıdır

D) Yalnızca disk üzerindeki dosyayı temsil eder

E) Sadece sistem servislerinde görülür

  • Doğru: C
  • Gerekçe: Bu kombinasyon şüpheyi artırabilir ama meşru senaryolar çoktur; bağlam ve korelasyon şarttır.
  1. 6) “Şüpheli bellek bölgesi” iddiasını raporda delile dönüştüren en güçlü paketleme hangisidir?

A) “Bence şüpheli” şeklinde yorum yazmak

B) Bölge türü + sayfa koruması + zaman bağlamı + thread davranışı korelasyonu + sınırlılık notu

C) Sadece bellek adresini yazmak

D) Sadece uygulama adını yazmak

E) Sadece tek bir ekran görüntüsü koymak

  • Doğru: B
  • Gerekçe: Çoklu sinyal + zaman korelasyonu + sınırlılık, denetlenebilir kanıt üretir.
  1. 7) Guard page istisnalarının görülmesi en çok hangi tür yorum hatasına yol açabilir?

A) “Mutlaka zararlı” diye kesin hüküm vermeye

B) “Bu bir bellek yönetimi/stack genişlemesi olabilir” olasılığını tamamen yok saymaya

C) “Telemetri gerekmez” diye düşünmeye

D) “ASLR kapatılmalı” sonucuna atlamaya

E) “Modül listeleri anlamsızdır” demeye

  • Doğru: B
  • Gerekçe: Guard page meşru bellek yönetiminde de rol oynar; bağlam kurulmadan kesinleştirmek hatalıdır.
  1. 8) ntdll’in analizde merkezi sayılmasının en doğru nedeni hangisidir?

A) Tüm zararlılar sadece ntdll kullanır

B) Kullanıcı modundan çekirdeğe giden çağrı zincirinde kritik bir köprü rolü taşır

C) Yalnızca grafik arayüz içindir

D) Syscall’lar yalnızca internet bağlantısı kurar

E) Hash doğrulama aracıdır

  • Doğru: B
  • Gerekçe: ntdll, davranışın alt katman temas noktasını anlamayı kolaylaştırır; bu görünürlük rapor kalitesini artırır.
  1. 9) Syscall düzeyinde çıkarım yaparken en önemli risklerden biri hangisidir?

A) Syscall’lar her Windows sürümünde sabit kalır

B) Sürüm/katman farkları nedeniyle yanlış yorum yapma ve hatalı kesinlik üretme

C) Syscall’lar yalnız kullanıcı etkileşimiyle çalışır

D) Syscall’lar yalnız disk erişimi içindir

E) Syscall analizinde telemetri gereksizdir

  • Doğru: B
  • Gerekçe: Sürüm farkları ve WoW64 gibi katmanlar yorum riskini yükseltir; bu yüzden çapraz kanıt şarttır.
  1. 10) Aşağıdaki rapor cümlelerinden hangisi “doğrulama” mantığını en iyi yansıtır?

A) “Bu davranış kesin zararlıdır.”

B) “Gözlenen sinyal şüpheli; meşru runtime olasılığına karşı şu karşı kanıtlar arandı ve şu sınırlılıklar kaldı.”

C) “Modül sayısı fazla, o yüzden zararlı.”

D) “Bellek adresi garip, başka bir şey demeye gerek yok.”

E) “Bu dosya kötü hissettirdi.”

  • Doğru: B
  • Gerekçe: Doğrulama; karşı kanıt arama, sınırlılıkları yazma ve kanıt gücüne uygun dil kurma disiplinidir.

Bu modülde neler öğrendiniz?

  • Loader zincirini “yürütmenin başlangıcı” olarak okuyup modül yükleme ile davranış başlangıcını kanıt zinciri içinde ilişkilendirdin.
  • PEB/TEB üzerinden süreç ve thread bağlamını çıkarırken tek kaynağa kör güvenmek yerine çapraz doğrulama refleksi kazandın.
  • Sanal bellek bölge türleri ve sayfa korumalarını bağlamla yorumlayıp “şüpheli bellek” iddiasını delillendirmeyi öğrendin.
  • ntdll ve syscall sınırını “gerçek temas noktası” olarak konumlandırıp sürüm/katman farklarının yorum risklerini yönetmeyi gördün.
  • Bulguları gözlem–yorum ayrımıyla, zaman çizelgesi ve sınırlılık notlarıyla rapora paketlemeyi pekiştirdin.

MODÜL 5 — İleri Statik Reverse Engineering

Modül Teması

Akış Analizi

CFG, DFG ve çağrı grafiği üzerinden hipotez kurmak.

Sembol & Tip

Sembolsüz ortamda davranış–imza eşlemesini güçlendirmek.

Hibrit Doğrulama

Statik bulguyu disassembly + decompile + dinamik gözlemle sınamak.

Bir zararlı örneği çalıştırmadan, yalnızca ikilinin üzerinde ilerleyerek "ne yapıyor?" sorusuna kanıta dayalı yanıt üretebilmek ileri statik tersine mühendisliğin özüdür. Bu modülde amaç; decompiler çıktısını körlemesine takip etmek yerine, fonksiyon sınırlarını güvenilirleştirmek, grafik okuryazarlığıyla kritik yürütme yollarını seçmek, xref zincirleri ve veri akışı üzerinden semantiği yeniden inşa etmek, konfigürasyon (config) verisini rastgele "string avı" olmaktan çıkarıp doğrulanabilir bir metodolojiyle raporlamak ve tekrarlı işleri scripting ile tutarlı bir analiz hattına taşımaktır.

Bu Modülde Hedeflenen Kazanımlar

  • Fonksiyon sınırlarını ve çağrı ilişkilerini birden fazla statik sinyalle doğrulayıp, grafikte “anlamlı kümeleri” ayırt edebilmek.
  • CFG ve call graph üzerinden “kritik yol” seçimini bağlam odaklı yapıp, karşı kanıt arama refleksiyle hipotezleri güçlendirebilmek.
  • Xref zincirlerini yalnız bulgu değil, tetik koşulu + tüketim (sink) + veri akışı ile delil zincirine dönüştürebilmek.
  • Type/struct çıkarımıyla belirsiz işaretçi dünyasını anlamlandırıp, raporda yanlış kesinlik riskini düşürebilmek.
  • Config extraction’ı “değer listesi” olmaktan çıkarıp “değer–etki” bağını kuran, yeniden üretilebilir bir kanıt paketine dönüştürebilmek.
  • Otomasyonu hız için değil tutarlılık ve rapor kalitesi için konumlandırıp, çıktıları doğrulama + sınırlılıklar eşliğinde delile çevirebilmek.

1) Fonksiyon kurtarma ve grafik analizi: haritayı güvenilir kılmak

Statik reverse engineering'de ilk büyük eşik, ikilinin kontrol akışını "anlamlı bir harita" hâline getirmektir. Bu harita yalnızca bir aracın çizdiği şekillerden oluşmaz; fonksiyon sınırları, basic block ilişkileri, çağrı grafiği, derleyici optimizasyonlarının yarattığı belirsizlik ve obfuscation etkisi birlikte düşünülür. Buradaki kritik gerçek şudur: yanlış fonksiyon sınırı veya yanlış çağrı ilişkisi, en iyi niyetli semantik yorumları bile domino taşı gibi devirebilir.

1.1. Fonksiyon sınırlarını doğrulamak: tek işaretle hüküm verme

Fonksiyon sınırı, "araç burayı fonksiyon dedi" ile güvenilir olmaz; güvenilirlik, bağımsız sinyallerin aynı yerde buluşmasıyla artar. Tipik prolog/epilog kalıpları çoğu zaman yardımcı olur, ama her zaman bulunmaz; optimizasyon, istisna akışları, jump-table/switch yapıları, hatta el ile yazılmış "alışılmadık" çağrı düzenleri bu kalıpları bulanıklaştırabilir.

Fonksiyon sınırı hipotezini güçlendiren pratik doğrulama çerçevesi:

  • Yığın dengesi ve çağrı sözleşmesi tutarlılığı: Bir fonksiyonun giriş/çıkışındaki yığın davranışı, aracın sınır tahmini için güçlü bir sinyaldir. Yığın dengesizliği, "fonksiyon burada bitmiyor" veya "yanlış yerde başladı" hipotezini yükseltir; yine de istisna mekanizmaları ve derleyici stratejileri nedeniyle tek başına mutlak hüküm değildir.
  • Argüman hazırlığı ve dönüş değerinin tüketimi: Çağrıdan önce yapılan hazırlık, çağrıdan sonra dönüş değerinin nasıl kullanıldığı ve kayıtların (register) rol dağılımı; fonksiyonun gerçek bir çağrı hedefi olup olmadığına dair çapraz kanıt üretir.
  • Grafik tutarlılığı: CFG üzerinde "girişten çıkışa" giden yolların mantıksal bütünlüğü bozuluyorsa (çok sayıda "ulaşılamaz" görünen blok, anormal birleşmeler), bu çoğu zaman sınır veya akış yorumunun tekrar kontrol edilmesi gerektiğini söyler.

Örnek: Decompiler tek bir "çok büyük fonksiyon" üretiyor; fakat aynı bölgede sabit kümeleri ayrışıyor, farklı xref kümeleri oluşuyor ve çağrı hedefleri iki ayrı kümeye bölünüyor. Bu durumda hipotez, "mantıksal olarak birden fazla fonksiyon iç içe geçmiş olabilir" şeklinde kurulur. Doğrulama, bu iki kümenin aynı veri yapısını aynı şekilde tüketip tüketmediğine bakarak yapılır: tüketim semantiği ortaksa tek fonksiyon ihtimali güçlenir; ayrışıyorsa sınırların yeniden ele alınması daha olasıdır.

Dikkat: Decompiler'ın "fonksiyon" dediği şey, her zaman semantik bir fonksiyon olmak zorunda değildir. Rapor dilinde "araç fonksiyon olarak işaretliyor" gözlemi ile "bu parça X işini yapıyor" yorumunu ayırmazsan, rapora yanlış kesinlik bulaşır ve en güçlü bulgun bile tartışmalı hâle gelir.

1.2. CFG ve call graph okuryazarlığı: yoğunluk ≠ önem

CFG, tek bir fonksiyon içindeki dallanmaların haritasıdır; call graph ise fonksiyonların birbirini çağırma ilişkisini gösterir. Statik analizde "kritik yol" çoğu zaman grafikte birkaç düğüm üzerinden görünür hâle gelir; ancak bu görünürlük yanıltıcı da olabilir.

  • CFG'de dallanma katmanları: Dallanma sayısı arttıkça veri doğrulama, durum makinesi, anahtar türetme/çözme gibi katmanlar ortaya çıkabilir. Bu, "değerli bölge" ihtimalini artırır; ama her dallanma "kötücül karar" değildir.
  • Call graph'ta tekrar eden desenler: Çok sayıda fonksiyonun aynı birkaç yardımcı fonksiyonu çağırması, çoğu zaman altyapı (hata yönetimi, formatlama, buffer hazırlama) kodunu işaret eder. Buna karşılık az sayıda yerden çağrılan ama çok sayıda yere bağlanan bir düğüm, kritik merkez olabilir; karar vermeden önce girdilerin çeşitliliği, çıktının nasıl tüketildiği ve etrafındaki xref zincirleri incelenmelidir.

İpucu: Grafikte "en kalabalık düğüm" genellikle "en kritik fonksiyon" değildir. Önce semantik rol sinyallerini (hangi veriyi alıyor, hangi yan etkiyi üretiyor) topla; sonra grafikteki yoğunluğu bu semantik ile anlamlandır. Bu yaklaşım, yanlış önceliklendirmeyi ciddi biçimde düşürür.

1.3. Grafikten rapora: delil paketleme standardı

Grafik bulgusu rapora "şekil" diye girmez; denetlenebilir kanıt olarak girer. Bunun için:

  • Fonksiyon kimliği: Sadece adresle yetinme; daha dayanıklı referanslar kullan (RVA/ofset gibi) ve fonksiyonu ayırt eden sabitler/çağrı kümesi/xref zinciri gibi işaretleri ekle.
  • Akış anlatımı: "buradan buraya gidiyor" yerine, hangi koşulla hangi kola ayrılıyor ve hangi yan etkiyi (dosya/ağ/konfigürasyon tüketimi gibi) üretiyor, bunu yaz.
  • Yeniden üretilebilirlik: Aynı ikilide aynı düğümü yeniden bulduracak ipuçlarını (string kümesi, sabit kümeleri, belirgin çağrı deseni) raporda açıkça belirt.

2) Xref zinciri ve kritik yol: veriyi niyete bağlamak

Xref (cross-reference), bir string'in/sabitin/adresin veya fonksiyonun nereden referanslandığını gösterir. Karmaşık ikililerde büyük resmi en hızlı xref zincirleri kurar: artefakt → onu kullanan fonksiyon → onu çağıran yer → tetik koşulu → tüketim (sink).

2.1. Xref zincirinde doğrulama: ileri zincir + geri zincir

Xref, hipotez kurdurur; tek başına doğruluk garantisi değildir. String obfuscation, dinamik çözümleme ve derleyici optimizasyonları xref görünürlüğünü azaltabilir. Bu yüzden iyi bir zincir iki yönlü kurulur:

  • İleri zincir: Veri nerede üretiliyor, nasıl dönüştürülüyor, nereye gidiyor?
  • Geri zincir: Bu yol hangi koşulda tetikleniyor; hangi çağrı ile içeri giriliyor?

Örnek: Bir ikilide example.net benzeri bir alan adı string'i bulunuyor. Bu string'i referanslayan fonksiyonlar zincirlenirken, string'in bir formatlama/derleme akışına girmesi "ham string" ile "oluşturulan son değer" ayrımını zorunlu kılar. Rapor, yalnızca ham string'i not etmek yerine, bu string'in hangi aşamada hangi tüketiciye (ör. ağ isteği hazırlayan katman) argüman olduğunu gösteren zinciri kanıt olarak paketler. Karşı kanıt olarak, aynı string'in yalnız debug/telemetri/log amaçlı kullanıldığı ihtimali araştırılır; eğer sadece log akışında tüketiliyorsa "operasyonel config" iddiası zayıflar.

Dikkat: Tek bir artefakt üzerinden (ör. yalnız string) kritik yol seçmek, seni "yanlış kritik yol"a götürebilir. Debug/test string'leri özellikle sık tuzaktır. Aynı zinciri en az bir bağımsız sinyalle (sabit kümesi, veri erişim örüntüsü, çağrı deseni) desteklemeden "stratejik rol" hükmü yazmak, yanlış alarm üretir.

2.2. Kritik yol seçimi: her yolu eşit görmemek

Gerçek hayatta zaman ve kaynak sınırlıdır; kritik yol analizi, "en yüksek değer üreten yürütme yolunu" seçmektir. Burada yöntem seçimi, analistin olgunluk göstergesidir:

  • Hedef konfigürasyon çıkarımı ise, string/const yoğunluğu yüksek, veri işleyen yollar önceliklenir.
  • Hedef yetenek haritalama ise, sistem etkileşimiyle ilişkilenen katmanları çevreleyen kontrol akışı önceliklenir.
  • İkili kütüphane ağırlıklı ise, önce kütüphane/yardımcı katmanı ayıklayıp iş mantığına odaklanmak daha az hata üretir.

İpucu: "En karmaşık fonksiyon" yerine "en fazla bağlam taşıyan fonksiyon"u hedefle. Bağlam; girdinin kaynağı (source) ile çıktının tüketildiği yer (sink) arasındaki netliktir. Bu netlik, raporun kanıt gücünü doğrudan yükseltir.

2.3. Veri akış analizi ve belirsizlik yönetimi

Kod çok dallanmışsa veya dolaylı çağrılar (ör. hedefi register/işaretçi üzerinden belirlenen çağrılar) varsa, xref zincirini tek tek incelemek verimsizleşebilir. Bu durumda "verinin yaşam döngüsünü" izleyen veri akış analizi yaklaşımı tercih edilir: veri hangi register/stack yolculuğundan geçiyor, hangi dönüşümlerden sonra hangi tüketiciye gidiyor?

Bu teknikler, özellikle "şüpheli bir string/sabit gerçekten davranışa etki ediyor mu?" sorusunda değer üretir. Yine de raporda dil dikkatli kurulmalıdır: veri akışıyla ulaşılan sonuçlar çoğu zaman güçlü bir gözlem, ama her zaman tek başına mutlak yorum değildir; sınırlılık ve karşı kanıt arayışı açık yazılmalıdır.

3) Type ve struct çıkarımı: semantiği yeniden inşa etmek

Type çıkarımı, "değer dizisini" anlamlı bir tipe; struct çıkarımı ise bellek erişimlerini alanlara (field) dönüştürerek semantiği keskinleştirir. Belirsiz işaretçi dünyasında her şey birbirine benzer; type/struct çalışması yanlış okuma riskini düşürür ve "bu bir config kaydı" gibi iddiaları somutlaştırır.

3.1. Type çıkarımında doğrulama: tutarlılık testi

Araçların otomatik tahminleriyle başlanır, ama olgunluk doğrulama ile gelir. En güvenilir çerçeve "tutarlılık"tır:

  • Aynı pointer farklı yerlerde farklı biçimde kullanılıyorsa type hipotezi zayıflar.
  • Bir alan sürekli sınır kontrolü/karşılaştırma/indeksleme bağlamında görünüyorsa "uzunluk/ölçü" rolü güçlenir.
  • Çağrı bağlamı (hangi fonksiyona hangi argüman olarak gidiyor) type hipotezini çapraz doğrular.

Örnek: Bir yapı içinde ardışık iki alan görülüyor: biri sürekli karşılaştırma ve sınır kontrolünde, diğeri string/byte işlemlerinde kullanılıyor. "len + buf" modeli hipotez olur. Karşı kanıt araması, aynı alanların başka fonksiyonlarda ters rol alıp almadığıdır. Ters kullanım varsa hipotez revize edilir; raporda bu revizyon "neden"iyle birlikte yazılır.

3.2. Struct çıkarımıyla rapor dili: "analist adlandırması" gerçeği

Struct çıkarımı, "bu ofsette şunlar var" demeyi bırakıp "bu veri yapısı şu alanları taşıyor" diyebilmektir. Bu, özellikle konfigürasyon blokları, komut tanımları, durum makineleri gibi kavramları görünür kılar.

Ancak burada rapor riski büyüktür: verdiğin struct/alan adları, okur tarafından "gerçek geliştirici isimleri" sanılabilir. Profesyonel rapor dili, adlandırmanın bir analist anlamlandırması olduğunu sezdirir; ayrıca bir alanın tipi/rolü yazılırken hangi gözlemlere dayandığı (kullanım örüntüsü, çağrı bağlamı, xref zinciri) netleştirilir.

Kanıt üretimi için pratik format: Önemli bir struct için raporda küçük bir tabloyla "ofset / boyut / varsayılan ya da tipik değer / kullanım bağlamı" özetlenebilir. Bu, hem yeniden üretilebilirliği artırır hem de ekip içi korelasyonu hızlandırır.

3.3. Yöntem seçimi: her ikilide aynı derinliğe inmemek

  • Hedef config extraction ise, config'in taşındığı şüpheli yapıların type/struct ile netleştirilmesi yüksek getirili olur.
  • Hedef hızlı aile sınıflandırma ise, derin struct yerine ayırt edici sabitler, string kümeleri ve çağrı desenleri daha hızlı sonuç verir.
  • Decompile çıktısı aşırı bozuksa, type/struct çalışması bazen maliyeti yükseltir; bu durumda xref + graph + veri akışı yaklaşımı daha düşük riskli olabilir.

4) Config extraction: "değer" ile "etki" arasında kanıt köprüsü

Konfigürasyon çıkarımı, çoğu vakada yetenek haritalama kadar değerlidir: uç noktalar, zamanlayıcılar, bayraklar, yollar, koşullar ve davranış parametreleri operasyonel profili belirler. Aynı kod, farklı config ile bambaşka davranış üretebilir.

4.1. Config nerede yaşar? Statik sinyallerle arama alanını daraltmak

Config; sabit tablolar, anahtar-değer dizileri, TLV benzeri kayıtlar, kaynak (resource) bölümleri, hatta sıkıştırılmış/şifrelenmiş bloklar olarak bulunabilir. Bazı örneklerde RSRC gibi bölümlerde "yük" değil, config taşıyan veri blokları görülebilir; ama tek başına bölüm adı kanıt değildir.

Arama alanını daraltan sinyaller:

  • String kümeleri: anahtar adları, format dizgileri, hata mesajları, protokol alanları
  • Sabit kümeleri: bayraklar, durum kodları, aralıklar
  • Veri erişim örüntüleri: ardışık okuma, indeksleme, "uzunluk + veri" modeli

Örnek: Bir bölgede "mode / interval / endpoint" gibi anahtarlar ve yanında sayısal sabitler görülür. Hipotez "config tablosu" olur. Doğrulama, bu kümeye giden xref zincirinde gerçek bir "okuma/parsing" tüketiminin bulunup bulunmadığını arar. Karşı kanıt: string'lerin sadece log/formatlama katmanında tüketilmesi ve davranışı değiştiren bir kullanımın görünmemesidir; bu durumda "config" iddiası zayıflar.

Config Hypothesis Check - Example
$ static-triage # Anahtar kümesi etrafındaki xref ağı
$ python xref_cluster.py --keys "mode,interval,endpoint"
cluster_size=14
read_parse_paths=3
log_only_paths=9

$ static-triage # Davranış etkileyen tüketim var mı?
$ python find_control_impact.py --cluster cfg_cluster_03
branch_controlled=2
network_target_set=1
file_behavior_set=0

$ static-triage # Kanıt seviyesi
$ echo "config_hypothesis=supported; confidence=medium"
config_hypothesis=supported; confidence=medium

4.2. Şifreli/karartılmış config: yöntem seçimi ve risk yönetimi

Bazı tehditlerde config düz metin değildir; analizde önemli olan, "nasıl kırarım?" değil "hangi metodolojiyle güvenilir çıkarırım ve doğrularım?" sorusudur. Genel çerçevede iki yaklaşım vardır:

  • Statik simülasyon: Çözme/ayrıştırma mantığı anlaşılır ve nispeten sade ise, algoritmanın mantığını güvenli bir analiz hattında yeniden ifade ederek veri bloklarının anlamlı çıktısını elde etmeyi hedeflersin.
  • Statik emülasyon: Mantık karmaşıksa, çok sayıda dal içeriyorsa veya manuel yeniden ifade etme hata riski doğuruyorsa; kodun yalnız ilgili kısmının, kontrollü ve izole bir emülasyon yaklaşımıyla "çıktı üretir hâle" getirilmesi tercih edilebilir (bu yaklaşım, analistin hatasını azaltmaya yöneliktir).

Bu iki yöntemi seçerken en kritik ölçüt, doğrulama maliyetidir: Hangi yaklaşım, elde edilen çıktıların gerçekten config olduğuna dair daha güçlü çapraz kanıt üretmeyi kolaylaştırıyor?

Not: Windows yükleyici ve düşük seviye API zincirlerinde pek çok yolun NTDLL tarafındaki rutinlere uzanması, statik analizde "hangi katmana bakmalıyım?" sorusunu etkiler; üst katman isimleri görünmese bile alt katman davranış işaretleri görülebilir.

4.3. "Değer — etki" bağı: config bulgusunu delile dönüştürmek

Profesyonel config extraction, "şu değerler var" listesi değildir; "bu alan şu noktada okunuyor ve şu davranışı yönlendiriyor" bağını kurmaktır. Statikte bu bağ şu sorularla kurulur:

  • Alan nerede okunuyor ve hangi veri yapısına bağlanıyor?
  • Okunan değer hangi dallanmada karar verdiriyor veya hangi parametre olarak taşınıyor?
  • Aynı alan farklı yerlerde tutarlı mı kullanılıyor?

İpucu: "Tam liste" takıntısı yerine, davranışı gerçekten yöneten alanlarda kanıt standardını yükseltmek daha değerlidir. Kanıt gücü yüksek bir alt küme + açıkça yazılmış sınırlılıklar, rastgele uzayan bir listeye göre çok daha yayınlanabilir bir sonuç üretir.

Kanıt paketi için rapor standardı:

  • Alan kimliği (string anahtar / enum / tablo indeksi / ofset)
  • Varsayılan veya tipik değer ve kullanım yeri (xref + çağrı bağlamı)
  • Davranış etkisi (kontrol akışındaki ayrım veya parametre taşınması)
  • Yeniden üretilebilirlik işaretleri (string/sabit kümesi, erişim örüntüsü)
  • Sınırlılıklar (statikte görünmeyen runtime oluşumlar, karartma kaynaklı kör noktalar)

5) Scripting ile otomasyon: hızdan önce tutarlılık

İleri statik analizde tekrarlı işler bitmez: fonksiyon envanteri, çağrı deseni etiketleme, string/sabit kümelerini gruplayıp rapor eki üretme, struct adaylarını listeleme... Scripting burada "bir kez tasarla, sürekli aynı kaliteyle uygula" yaklaşımıdır.

5.1. Otomasyonun hedefi: hız değil, kalite standardı

Otomasyonun en büyük kazanımı çoğu zaman hız değil; tutarlılık ve kıyaslanabilirliktir:

  • Aynı tip bulguların aynı formatla rapora taşınması
  • Aynı heuristik ile adayların etiketlenmesi
  • Varyant analizinde bulguların karşılaştırılabilir hâle gelmesi

Örnek: Bir ekip, "ağ ile ilişkili çağrı kümeleri"ni her analizde farklı biçimde adlandırıyorsa, varyant kıyası zorlaşır. Aynı sınıflandırma mantığını otomasyonla standartlaştırmak, ekip içi kaliteyi yükseltir. Doğrulama, otomasyonun ürettiği adayların rastgele olmadığını gösteren örneklem kontrolüyle yapılır: seçilen birkaç fonksiyonun xref ve call graph bağlamı manuel gözden geçirilir; yanlış pozitif oranı rapor notlarına eklenir.

5.2. Ne otomasyona verilir, ne analistin elinde kalır?

  • Kuralları net ve tekrarlı işler otomasyona uygundur: envanter, sınıflandırma, etiketleme, rapor eki üretimi.
  • Semantik yorum ve belirsizlik içeren işler analistin elinde kalmalıdır: kritik yol seçimi, "bu fonksiyonun rolü nedir?" gibi bağlam yoğun kararlar.

Pratik bir sezgi: Bir örüntü dosya genelinde defalarca tekrar ediyorsa ve kuralı açık tanımlanabiliyorsa otomasyon anlamlıdır; ama otomasyonun çıktısı "nihai hüküm" değil "ön bulgu"dur.

Dikkat: Otomasyon, yanlış bir varsayımı çok hızlı yayabilir. Hatalı bir heuristik, yüzlerce fonksiyonu yanlış etiketleyebilir ve raporu yanlış bir yöne kilitleyebilir. Bu nedenle otomasyon kullandığında, örneklem doğrulaması ve sınırlılık notu yazmak profesyonel bir zorunluluktur.

5.3. Otomasyon çıktısını delile çevirmek

Otomasyon çıktısı rapora ham liste olarak değil, delil paketinin bir parçası olarak girer:

  • Araç bağımsız yeniden üretilebilirlik notu (hangi kriterlerle listelendi?)
  • Temsilî örneklerin manuel doğrulama özeti
  • Sınırlılıklar (statik sinyallerin kör noktaları, runtime oluşan değerler)

Terimler Sözlüğü

Terim Açıklama
Function recoveryFonksiyon kurtarma; ikilide fonksiyon sınırlarını çıkarma
Graph analysisGrafik analizi; kontrol akışı/çağrı ilişkilerini grafikte inceleme
CFG (Control Flow Graph)Kontrol akışı grafiği; bir fonksiyon içindeki dallanma ve blok ilişkileri
Call graphÇağrı grafiği; fonksiyonların birbirini çağırma ilişkisi
Basic blockTemel blok; dallanmasız ardışık talimat kümesi
Xref (Cross-reference)Çapraz referans; bir öğeye (string/adres/fonksiyon) nerelerden referans verildiği
Critical pathKritik yol; analizde en yüksek değer üreten yürütme yolu
Source / SinkKaynak / tüketim noktası; verinin üretildiği yer ve etkisinin ortaya çıktığı kullanım noktası
Data flow analysisVeri akış analizi; verinin register/stack üzerinden izlediği yolu inceleme
Type inferenceTip çıkarımı; değişken/parametre tipini kullanımından tahmin etme
Struct recoveryStruct çıkarımı; veri yapısı alanlarını (field) belirleyip anlamlandırma
Semantic labelingAnlamsal etiketleme; fonksiyon/alanlara rol temelli isimlendirme
HeuristicSezgisel kural; kesin kanıt değil, aday üretmeye yarayan yaklaşım
Config extractionKonfigürasyon çıkarımı; davranışı yöneten parametreleri bulma ve raporlama
ReproducibilityYeniden üretilebilirlik; aynı bulgunun aynı kriterlerle tekrar elde edilebilmesi
Static emulationStatik emülasyon; kodun ilgili kısmını izole biçimde emüle ederek çıktı davranışını gözlemleme yaklaşımı
Symbolic executionSembolik yürütme; olası yolları mantıksal ifadelerle temsil ederek analiz etmeye yönelik ileri yaklaşım

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Decompile çıktısında son derece “temiz” görünen bir mantık bloğu var. En sağlam yaklaşım hangisidir?

A) Decompiler çıktısını tek gerçek kabul edip raporu ona göre yazmak

B) Yalnız prolog/epilog kalıplarını arayıp karar vermek

C) Disassembly + CFG + xref kümeleriyle hipotez kurup karşı kanıt aramak

D) Büyük fonksiyonları her zaman önemsiz saymak

E) Adresleri rapora yazmadan geçmek

  • Doğru: C
  • Gerekçe: Çoklu perspektif, yanlış kesinliği azaltır. A ve B tek kaynağa aşırı güvenir; D genellemedir; E kanıt üretimini zayıflatır.
  1. 2) Call graph’ta çok fazla düğüm tarafından çağrılan bir fonksiyon gördün. “Kritik merkez” demeden önce en güçlü karşı kanıt hangisidir?

A) Sık çağrılması tek başına yeterlidir

B) Fonksiyonun log/hata/formatlama gibi yardımcı rol taşıdığına dair semantik sinyaller

C) Fonksiyon adının kısa olması

D) Dosyanın başında yer alması

E) Yorum satırı içermemesi

  • Doğru: B
  • Gerekçe: Yüksek çağrı sayısı yardımcı katmanlarda da görülür. Semantik rol sinyalleri, “kritik merkez değil” hipotezini güçlendirir. Diğerleri zayıf ölçüttür.
  1. 3) “String bulundu → davranış kesin” çıkarımı neden hatalıdır?

A) String’ler ikililerde hiç bulunmaz

B) String yalnız debug/test veya log amaçlı olabilir; tüketim ve tetik koşulu doğrulanmalıdır

C) String her zaman şifrelenir, görülemez

D) String varsa mutlaka ağ davranışı vardır

E) Xref yalnız çekirdek modunda çalışır

  • Doğru: B
  • Gerekçe: Xref hipotez üretir; davranış iddiası için tüketim semantiği ve tetik koşulu gerekir. A/C/D/E gerçekçi değildir.
  1. 4) Kritik yol analizi yaparken “en karmaşık fonksiyon”u hedeflemek hangi nedenle risklidir?

A) Karmaşık fonksiyonlar hiç çalıştırılmaz

B) Karmaşıklık kütüphane/yardımcı katmandan gelebilir; bağlam taşıyan fonksiyonlar daha değerlidir

C) Karmaşık fonksiyonların xref’i olmaz

D) Karmaşık fonksiyonlar statik analizle görülemez

E) Karmaşık fonksiyonlar her zaman config taşır

  • Doğru: B
  • Gerekçe: Karmaşıklık tek başına değer ölçüsü değildir. Source–sink bağlamı yüksek fonksiyonlar daha kanıt üretkendir.
  1. 5) Type çıkarımında bir alanın “uzunluk” rolünde olduğuna dair hipotezi en iyi güçlendiren gözlem hangisidir?

A) Ofsetin küçük olması

B) Alanın sıkça sınır kontrolü/karşılaştırma/indeksleme bağlamında kullanılması

C) Alanın her zaman sıfır olması

D) Bir kez yazılıp hiç okunmaması

E) Yanında bir string bulunması

  • Doğru: B
  • Gerekçe: Kullanım biçimi tip/rol çıkarımında en güçlü kanıttır. Diğerleri bağlama bağlı ve zayıftır.
  1. 6) Struct çıkarımının rapor kalitesine en büyük katkısı hangisidir?

A) Adreslerin hiç değişmemesini sağlar

B) Decompiler’ı her zaman doğru yapar

C) Semantiği güçlendirir; aynı veri yapısının farklı fonksiyonlarda tutarlı kullanımını kanıta dönüştürür

D) Ağ trafiğini otomatik çözer

E) İkiliyi yeniden derler

  • Doğru: C
  • Gerekçe: Struct çıkarımı semantik tutarlılık ve kanıt üretimini güçlendirir. Diğerleri kapsam dışı/yanlıştır.
  1. 7) Config extraction’da “değer” ile “etki”yi bağlamak neden kritiktir?

A) Rapor yalnızca uzun liste ister

B) Aynı değer farklı koşullarda farklı davranış üretmez

C) Konfigürasyonun davranışı yönettiği iddiası, kontrol akışı/parametre taşınmasına bağlanmadan zayıf kalır

D) Config her zaman düz metindir

E) Config yalnızca registry’de olur

  • Doğru: C
  • Gerekçe: Kanıt, yalnız varlık değil etkidir. A/B/D/E yanlış genelleme veya alakasızdır.
  1. 8) Statik analizde config tablosu hipotezi kurdun. Hangi karşı kanıt hipotezi en çok zayıflatır?

A) String kümesi bulmak

B) String’lerin yalnız log/formatlama akışında tüketilmesi ve davranışı değiştiren kullanımın görülmemesi

C) Sabitlerin tabloya yakın olması

D) Xref sayısının yüksek olması

E) Tablonun büyük olması

  • Doğru: B
  • Gerekçe: Tüketim semantiği yoksa “config” iddiası zayıflar. Diğerleri ancak destekleyici sinyal olabilir.
  1. 9) Scripting/otomasyon için en doğru yöntem seçimi hangisidir?

A) Semantik yorum içeren her kararı tamamen otomasyona bırakmak

B) Kuralı net ve tekrarlı işleri otomasyona verip, semantik belirsizliği analistin doğrulamasıyla yönetmek

C) Otomasyonu hiç kullanmamak; her şey manuel olmalıdır

  • Doğru: B
  • Gerekçe: Ölçeklenebilirlik ile doğruluk dengesi kurulur. A ve D yanlış kesinlik üretir; C ölçeklenmez.
  1. 10) Otomasyon çıktısı rapora eklenecek. Kanıt standardını en çok yükselten paketleme hangisidir?

A) Ham listeyi yapıştırmak, açıklama vermemek

B) Üretim kriterlerini (araç bağımsız dille), temsilî manuel doğrulama özetini ve sınırlılıkları birlikte yazmak

C) Yalnız “otomasyon buldu” demek

D) Sadece ekran görüntüsü koymak

E) Detayı kaldırıp adresleri gizlemek

  • Doğru: B
  • Gerekçe: Yeniden üretilebilirlik + doğrulama + sınırlılık, otomasyonu delile dönüştürür. Diğerleri kanıt gücünü düşürür.

Bu modülde neler öğrendiniz?

  • Fonksiyon kurtarma ve grafikleri, araç çıktısı olarak değil doğrulama gerektiren kanıt alanı olarak okumayı
  • Xref zincirleriyle kritik yolu seçerken tetik koşulu ve tüketim semantiğini merkeze almayı, karşı kanıt aramayı
  • Veri akışı, type ve struct çıkarımıyla semantiği yeniden inşa edip yanlış kesinlik riskini düşürmeyi
  • Config extraction’ı “değer–etki” bağıyla raporlanabilir, yeniden üretilebilir delil paketine çevirmeyi
  • Scripting’i hız için değil tutarlılık ve rapor kalitesi için kullanmayı; otomasyon çıktısını doğrulama ve sınırlılıklarla birlikte sunmayı

Modül 6 — Debugging ve Davranış-Kod Eşleme

Statik analiz, bir örneğin "iskeletini" çıkarır; ama bazı kritik cevaplar ancak çalışma zamanında (runtime) ortaya çıkan değerlerde saklıdır. Bu modülde debugging'i bir "durdur--bak" pratiği olmaktan çıkarıp, davranışı belirli bir kod yoluna ve koşula bağlayan, denetlenebilir kanıt üreten bir disipline dönüştürüyoruz. Hedef; statik hipotezleri dinamik gözlemle eşleştirirken doğru yerde ölçmek, ölçtüğünüz şeyi de raporda tekrar üretilebilir bir delil paketine dönüştürmek — üstelik bunu yaparken gözlemci etkisini (analiz ortamının davranışı bozması) yönetebilmektir.

Bu Modülde Hedeflenen Kazanımlar

  • Breakpoint’leri bir durdurma aracı gibi değil, hipotez test eden ölçüm noktaları gibi konumlandırıp stratejik planlamak.
  • Exception tabanlı kontrol akışını yorumlayarak “anti-debug” iddialarını gözlem düzeyinden kanıt düzeyine taşımak.
  • API call tracing’de argüman–dönüş değeri–yan etki ilişkisini kurarak davranış–kod eşlemesini güvenilir yapmak.
  • Bulguları gözlem–yorum ayrımıyla, zaman çizelgesi ve yeniden üretilebilirlik notlarıyla rapora delil olarak paketlemek.
  • Minimal müdahale yaklaşımıyla ölçerken bozmama riskini yönetmek ve bu etkiyi şeffaf biçimde raporlamak.

1. Breakpoint türleri ve stratejik kullanımı

Debugging'de en pahalı hata, yanlış yerde durup doğru yerde duramadığınız için yanlış sonuç çıkarmaktır. Bu yüzden breakpoint seçimi, "hangi aracı kullandın?" sorusundan çok "hangi hipotezi hangi maliyetle test ettin?" sorusuna cevap vermelidir. İyi bir ölçüm noktası üç şeyi birlikte taşır: tetik (ne zaman duracağım), bağlam (durduğum anda neyi toplayacağım), etki (topladığım veri neyi ispatlar/çürütür).

1.1. Yazılımsal breakpoint: görünür ama müdahaleci

Yazılımsal breakpoint'ler genellikle hedef adresteki kod akışına geçici bir kesme talimatı (ör. INT3 / 0xCC) yerleştirilmesi mantığıyla çalışır. Bu yaklaşımın cazibesi hızlı kurulumdur; riski ise "ölçtüğünüz şeyi değiştirme" ihtimalidir. Zamanlama hassas örneklerde veya bütünlük kontrolü (integrity check) yapan yapılarda, bu küçük değişiklik bile davranışın farklı bir dala sapmasına neden olabilir.

  • Ne zaman mantıklı? Hedeflediğiniz nokta nettir ve oraya gidişin "olayla aynı şey" olduğundan emin olabileceğiniz başka işaretler (çağrı zinciri, argüman örüntüsü, yan etki öncesi bağlam) vardır.
  • Doğrulama refleksi: Bir defalık duruşu "tesadüf" olasılığından ayırın. Aynı noktanın farklı koşullarda tetiklenip tetiklenmediğini, çağrı yığını (call stack) ve argüman deseni üzerinden sınayın.
  • Karşı kanıt: Aynı durak, hata toparlama yolu veya telemetri/log yolu gibi farklı amaçlarla da tetikleniyorsa, "tek bir kritik yol" iddiası kurmak zayıflar; raporda ayrım yapılmalıdır.

Örnek: Bir davranış iddiası "belirli bir dosya oluşturuluyor" olsun. Aynı dosya oluşturma çağrısı kimi zaman sadece hata log'u üretmek için de tetiklenebilir. Duruş anında çağrı zincirini (hangi koşul dalından geldiğini) ve dönüş değerinin sonraki adımlarda nasıl tüketildiğini gözlemlemek, davranışın "amaç" kısmını kanıta yaklaştırır.

Dikkat: Breakpoint yoğunluğu, özellikle ağ zaman aşımı/retry gibi zamanla ilgili mantıkları tetikleyerek davranışı bozabilir. Bu nedenle raporda "debug ortamında gözlendi" gibi bağlam notu, bulgunun güvenilirliğini artırır; yazılmazsa yanlış kesinlik riski büyür.

1.2. Donanımsal breakpoint: daha az iz bırakan, daha sınırlı

Donanımsal breakpoint'ler işlemcinin hata ayıklama kayıtlarını (ör. DR0 — DR7) kullanarak izleme yapar; kod üzerinde bayt düzeyinde bir değişiklik gerektirmez. Bu, bazı bütünlük kontrollerinin tetiklenmesini daha az olası kılar; ancak sayıca sınırlı olması ve kullanım senaryolarının kısıtları vardır (pratikte az sayıda izleme noktası).

  • Ne zaman mantıklı? Kod bütünlüğünün kontrol edildiğinden şüpheleniyorsanız veya müdahale riskini düşürmek istiyorsanız.
  • Doğrulama refleksi: Erişim "gürültü" üretiyorsa korelasyon arayın: erişimden hemen sonra hangi dallanma çalıştı, hangi API çağrıları başladı, hangi yan etki görüldü?
  • Karşı kanıt: Aynı adrese runtime/kütüphane kodları da dokunuyor olabilir; "dokunuldu" bilgisini "kim dokundu ve neden?" sorusuna bağlamadan hüküm vermeyin.

1.3. Bellek tabanlı duraklar: erişim ve koruma değişimlerini ölçmek

Bazı örneklerde kritik sinyal "hangi fonksiyon çağrıldı?" değil, bellekte ne değişti? sorusudur. Örneğin bir bölgenin yazılırken hemen ardından yürütülebilir (execute) hale gelmesi veya beklenmedik bir koruma değişimi, in-memory davranış iddialarını güçlendiren sinyaller üretebilir. Bu yaklaşım, "kod yolu belirsiz ama bellek olayı belirgin" senaryolarda daha iyi bir başlangıç noktasıdır.

  • Ne zaman mantıklı? In-memory yürütme iddiası var ama doğrudan "hangi fonksiyon yaptı?" net değil.
  • Doğrulama refleksi: Tek başına bellek olayı, modern runtime'lar nedeniyle yanlış pozitif üretebilir. Olayla eş zamanlı thread başlangıcı, modül yüklenmesi, beklenmedik ağ aktivitesi gibi ikinci bir sinyal arayın.
  • Kanıt üretimi: Önce — sonra bağlamı zaman çizelgesinde toplamak, tek bir ekran görüntüsünden daha güçlü bir delildir.

Not (müfredat içi bağlantı): Paketli/çok aşamalı örneklerde bellek olayları, "asıl kodun görünür hale geldiği eşiği" yakalamaya yardım edebilir. Bu konuyu unpacking metodolojisiyle birlikte daha geniş çerçevede ayrıca ele alacağız; burada hedef, bellek olayını davranış — kod eşlemesi için bir kanıt düğümüne dönüştürmektir.

1.4. Koşullu breakpoint: gürültüyü azaltarak "kanıt anına" odaklanmak

Aynı API/fonksiyon binlerce kez çağrılıyorsa, her seferinde durmak hem zamanlamayı bozar hem de analisti gürültüye gömer. Koşullu duraklar; belirli argüman örüntüsü, belirli çağrı sayısı veya belirli bir bağlam oluştuğunda durarak hipotez testini hızlandırır.

  • Ne zaman mantıklı? Yalnızca küçük bir çağrı alt kümesi sizi ilgilendiriyorsa.
  • Doğrulama refleksi: Koşulu "çok dar" kurup kritik olayı kaçırmamak için önce geniş örüntü çıkarıp sonra daraltmak daha güvenilirdir.
  • Karşı kanıt: Kurduğunuz koşul sadece "beklediğiniz" yolu yakalayıp alternatif dalları kaçırıyorsa, rapor dilini kesinlikten uzak tutun.

İpucu: Debugging planını bir harita gibi düşünün. Önce geniş yakalama noktalarıyla (yüksek seviyeli davranış düğümleri) yön bulun; sonra koşullu/odaklı duraklarla kritik argüman ve koşulu yakalayarak delili sıkıştırın. Bu, yanlış yerde ayrıntıya boğulmayı engeller.

2. Exception tabanlı kontrol ve anti-debug sinyalleri

Exception'lar sadece "hata" değildir; kimi yazılımlar kontrol akışını exception mekanizmaları üzerinden de yönetebilir. Bu yüzden bir exception görmek, otomatik olarak "anti-debug var" demek değildir. İleri seviyede farkı yaratan, exception'ı örüntü olarak okumak ve bunu davranış değişimiyle ilişkilendirmektir.

2.1. Exception: sinyal mi, yan ürün mü?

Aynı exception aynı noktada düzenli tekrarlanıyorsa bu, akış tasarımının bir parçası olabilir. Öte yandan exception sadece debugger altında belirginleşiyor veya sıklığı dramatik artıyorsa, analiz ortamının etkisi olasılığı yükselir. Burada karar verirken şu ayrım işinize yarar:

  • Exception sonrası akış "hata toparlama" mı, yoksa "bilinçli dallanma" mı? Bunu exception sonrası çağrı zinciri ve yan etkilerle bağlayın.
  • Aynı exception tetiklendiğinde bazen davranış gerçekleşip bazen gerçekleşmiyorsa, exception tek başına "tetik" olmayabilir; başka koşullar devrededir.

Örnek: Periyodik exception'lar oluşuyor ve program devam ediyor. Dış bağlantı denemeleri yalnızca exception sonrasında başlıyorsa, exception akışı bir "kapı" gibi çalışıyor olabilir. Karşı kanıt olarak, exception oluştuğu halde bağlantının başlamadığı tekrarlar aranır; varsa "exception tek başına tetik değil" sonucu güçlenir.

2.2. Anti-debug sinyallerini kanıt düzeyine taşımak

Anti-debug sinyallerini rapora taşırken niyet okumaya kaçmak kolaydır. Daha sağlam yaklaşım, sinyali sınıflandırıp davranış farkını gösterebilmektir:

  • Zamanlama sapmaları: yürütme hızına duyarlı karar mekanizmaları (ör. döngüler, ölçüm noktaları)
  • Exception/flow oyunları: beklenen exception'ı akış kapısı gibi kullanmak veya beklenmeyen koşulda farklı davranmak
  • Ortam göstergeleri: analiz ortamında bazı kontrollerin farklı sonuç üretmesi

Burada güçlü rapor dili, "anti-debug var" demek yerine şunu yapar: Hangi koşulda hangi sinyal gözlendi, bu sinyal hangi kontrol dalını etkiledi, sonuçta hangi yan etki değişti?

Dikkat: Exception temelli akışlar meşru yazılımlarda da görülebilir (hata toparlama, korumalı çalışma, bazı optimizasyon örüntüleri). Sinyali davranış değişimiyle bağlamadan kesin hüküm yazmak, ileri analizde en sık yanlış pozitif üreten genellemedir.

2.3. Exception yoğun örneklerde yöntem seçimi

Exception'ların yoğun olduğu bir örnekte, klasik "şu fonksiyona dur" yaklaşımı verimsizleşebilir.

  • Kontrol akışının ana kapısını bulmak istiyorsanız: handler etrafındaki dallanmalar ve handler sonrası kritik çağrılar önceliklenir.
  • Anti-debug sinyalinin etkisini kanıtlamak istiyorsanız: exception öncesi — sonrası davranış farkı zaman çizelgesiyle toplanır.
  • Ortam etkisini azaltmak istiyorsanız: daha az müdahaleci ölçüm noktaları tercih edilir; sık duruş, zamanlama sinyallerini bozabilir.

İpucu: Exception'ları "kırmızı alarm" gibi değil, "yön levhası" gibi okuyun. Exception çoğu zaman kritik eşik adreslerini işaret eder; asıl delil, o eşiğin ardından hangi yan etkinin oluştuğunu gösterebildiğinizde güçlenir.

3. API call tracing ve argüman analizi

API call tracing davranışı görünür kılar; ileri seviyede farkı yaratan, çağrıları listelemek değil, argüman — dönüş değeri — yan etki zincirini kurmaktır. Aynı API farklı argümanlarla tamamen farklı semantik taşıyabilir; bu yüzden argüman analizi davranış — kod eşlemenin belkemiğidir.

3.1. Trace'i olay listesi değil nedensellik zinciri olarak okumak

Her çağrı için şu üç soru, "log"u "kanıt"a yaklaştırır:

  • Girdi nereden geldi? (config, hesaplanan değer, runtime'da çözülen veri)
  • Çıktı ne oldu? (başarılı/başarısız, handle/nesne üretildi mi?)
  • Bu çıktı nerede tüketildi? (sonraki çağrının parametresi mi oldu, bir dalı mı tetikledi?)

Örnek: example.net benzeri bir alan adı trace'de bir bağlantı çağrısına argüman oluyor. Güçlü delil, alan adının dosyada geçmesi değil; aynı değerle çözümleme/bağlantı denemesinin yapılması, dönüş değerinin tüketilmesi ve devamında görülen yan etki zinciridir. Karşı kanıt olarak, aynı değerin yalnızca log/telemetri akışında taşınması ihtimali değerlendirilir; dönüş değeri hiç tüketilmiyorsa "operasyonel kullanım" iddiası zayıflar.

3.2. Argüman analizi: kimliklendirme ve sınıflandırma

Argümanları "değer listesi" gibi değil, "anlam taşıyan kanıt parçaları" gibi sınıflandırmak işinizi hızlandırır:

  • Kaynak argümanlar: dosya yolları, alan adları, örnek IP'ler (198.51.100.0/24 gibi dokümantasyon blokları), registry yolları, mutex isimleri
  • Kontrol argümanları: bayraklar, modlar, erişim hakları, seçenek bitleri
  • Bağlayıcı argümanlar: handle'lar, pointer'lar, context nesneleri

Bir argümanı rapora koyarken tek başına "ne"yi değil, "nasıl oluştu ve neyi değiştirdi"yi de anlatmanız gerekir. Aynı yolun farklı örneklerde tekrar yakalanabilmesi için, argümanın oluşma zinciri (formatlama/çözme/taşıma) önemli bir yeniden üretilebilirlik işaretidir.

3.3. Runtime'da çözülmüş veriyi yakalamak: kanıtın en temiz anı

Birçok örnek, disk üzerinde anlamlı değerleri gizler; değerler API çağrısından hemen önce bellekte çözülür. Bu yüzden "çağrı anı" (calling convention bağlamıyla birlikte) yüksek değerli bir kanıt penceresidir: x64'te bazı argümanlar register'lar üzerinden, devamı stack üzerinden taşınabilir; önemli olan, argümanların o anda "mutlak gerçeklik" olarak görülmesidir.

Örnek: Statik analizde bir ağ fonksiyonuna giden yol var; fakat hedef değer belirsiz. Dinamik izde çağrı anında bellekte çözülmüş hedefin 203.0.113.88 gibi dokümantasyon amaçlı örnek bir IP veya example.net gibi örnek alan adı olarak geçtiğini görmek, tespit/avcılık ekipleri için yüksek güvenli IOC üretebilir. Kanıt paketinde, değerin görüldüğü bağlam (çağrı anı, çağrı yığını, dönüş değeri ve devam eden yan etki) birlikte yer alır.

3.4. Trace yöntem seçimi: görünürlük — müdahale dengesi

Aynı davranış farklı izleme kaynaklarında farklı görünür:

  • Debugger tabanlı izleme: kod — çağrı bağını kurmada güçlü, fakat müdahale ve performans etkisi daha yüksek olabilir.
  • Sistem/telemetri tabanlı izler: daha az müdahaleci olabilir, fakat argüman ayrıntısı sınırlı kalabilir.
  • Hedef odaklı izleme: gürültüyü azaltır; yanlış seçilirse kritik sinyal kaçabilir.

Seçim, hedefinizin "kod bağlamı mı", "zaman çizelgesi mi", "argüman doğruluğu mu" olduğuna göre yapılır. Rapor, seçilen yöntemin sağladığı görünürlüğü ve kör noktalarını açık yazdığında güçlenir.

4. Kanıt üretme ve minimal müdahale yaklaşımı

Debugging hem en güçlü doğrulama aracı hem de en büyük bozulma kaynağıdır. Bu ikisini yönetmek, "hiç dokunma" değil, dokunuyorsan etkisini hesapla ve rapora taşı disiplinidir.

4.1. Gözlem — yorum ayrımı: rapor güvenilirliğinin omurgası

Aynı durum iki farklı cümleyle farklı güven düzeyi taşır:

  • Gözlem: "Çağrı izinde, belirli bir fonksiyonun ardından dosya oluşturma denemesi görüldü; dönüş değeri başarısız."
  • Yorum: "Örnek kalıcılık kurmaya çalışıyor."

Yorum yapmaktan kaçınmak zorunda değilsiniz; ama yorumun gücü, destekleyen sinyallerle doğru orantılı olmalıdır. En az iki bağımsız sinyal (ör. yol + devam eden kullanım + zaman korelasyonu) varsa yorum daha güçlü yazılır; tek sinyalse "olası" dili ve karşı kanıt araması notu daha doğrudur.

4.2. Zaman çizelgesi: delili "an"dan "akış"a taşımak

Debugging bulguları tek tek parçalar gibidir; zaman çizelgesi bu parçaları denetlenebilir bir hikâyeye dönüştürür:

  • Tetik olayı (hangi koşul sağlandı)
  • Geçiş olayı (hangi dal/handler sonrası akış değişti)
  • Yan etki (dosya/ağ/registry)
  • Tutarlılık (tekrarlandı mı, aynı pencerede benzer mi?)

Örnek: "10:12:40'ta exception tetiklendi → 10:12:41'de handler sonrası yeni çağrı zinciri başladı → 10:12:43'te 198.51.100.10 adresine bağlantı denemesi görüldü." Bu tür bir akış, tek tek ekran görüntülerinden daha ikna edicidir ve başka bir analistin aynı pencereyi hedefleyerek doğrulamasını kolaylaştırır.

4.3. Minimal müdahale: ölçerken bozmamak

Minimal müdahale, "az duruşla çok bilgi" hedefler:

  • Hipotezi test etmeyen durakları azaltın; ölçüm noktalarını kanıt ihtiyacına göre seçin.
  • Aynı örneği farklı koşullarda izlemek gerekiyorsa değişkenleri kontrol altında tutun (ağ, saat, sistem yükü, kullanıcı etkileşimi).
  • Debug altında görülen davranış, daha az müdahaleli izde farklıysa bu farkı yok saymayın: farkın kendisi de bir sinyal olabilir ve raporda yer almalıdır.

Dikkat: "Ben böyle gördüm" tarzı raporlar, başka analist aynı sonuca ulaşamadığında hızla değer kaybeder. Tetik koşulu, gözlem penceresi ve sınırlılıklar yazılmadığında, bulgu teknik delil olmaktan çıkar "görüş"e dönüşür.

İpucu: Kanıt paketini üç parçaya bölmek raporu keskinleştirir: (1) ham gözlem (trace/exception/stack bağlamı), (2) bağlam açıklaması (tetik koşulu + argüman/dönüş değeri + çağrı zinciri), (3) yorum ve güven düzeyi (destekleyen sinyaller + aranan karşı kanıtlar + sınırlılıklar). Bu yapı, fazla iddialı cümleleri doğal olarak budar.

Terimler Sözlüğü

Terim Açıklama
BreakpointYürütmeyi belirli bir noktada durduran ölçüm/durak noktası
Software breakpointKod üzerinde geçici değişiklikle kurulan yazılımsal durak (ör. INT3 / 0xCC mantığı)
Hardware breakpointİşlemci hata ayıklama kayıtlarıyla (DR0–DR7) kurulan, kodu değiştirmeyen durak
Memory breakpoint / watchpointBelirli bellek bölgesine erişim (okuma/yazma/yürütme) olduğunda tetiklenen durak türü
Conditional breakpointBelirli koşul sağlandığında tetiklenen durak
Call stackYürütmenin o noktaya hangi fonksiyon zinciriyle geldiğini gösteren çağrı yığını
Registerİşlemcinin hızlı çalışma kayıtları; argümanlar/ara değerler burada taşınabilir
ExceptionHata veya kontrol akışı amaçlı oluşan istisnai durum
SEHWindows’ta yapılandırılmış istisna işleme mekanizması (Structured Exception Handling)
API call tracingAPI çağrılarını zaman sıralı biçimde izleyerek davranış görünürlüğü elde etme
Argument analysisAPI çağrısı argümanlarını (değer/bayrak/handle) semantik olarak yorumlama
Return valueÇağrının sonucu; kontrol akışı ve kanıt üretimi için kritik veri
Side effectDosya/ağ/registry gibi dış dünyaya yansıyan gözlenebilir sonuç
Timing checkYürütme hızındaki sapmaları ölçerek ortam farkını yakalamaya çalışan kontrol
Minimal interventionÖlçerken davranışı bozmamayı hedefleyen, etkiyi yönetip rapora taşıyan disiplin
ReproducibilityAynı bulgunun aynı kriterlerle tekrar elde edilebilir olması

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Aynı API çağrısı çok sık görülüyor; yalnızca küçük bir kısmı iddianızla ilgili. En sağlam yaklaşım hangisidir?

A) Her çağrıda durup tek tek incelemek

B) Koşullu durakla ilgili argüman örüntüsünü hedeflemek ve çağrı zinciriyle doğrulamak

C) Trace’i tamamen bırakıp yalnız statik analize dönmek

D) Argümanlara bakmadan sadece çağrı sayısına göre hüküm vermek

E) Sadece ilk çağrıyı rapora yazmak

  • Doğru: B
  • Gerekçe: Gürültüyü azaltır ve hipotezi doğrudan test eder. A müdahale/zamanlama riskini artırır; C kanıt zincirini zayıflatır; D/E bağlamsızdır.
  1. 2) Debugging sırasında sık exception görülüyor. “Kesin anti-debug var” demeden önce en güçlü doğrulama yaklaşımı hangisidir?

A) İlk exception noktasında raporu bitirmek

B) Exception sonrası akışın davranış değiştirip değiştirmediğini ve bunun tekrar edip etmediğini zaman çizelgesiyle göstermek

C) Exception’ları görmezden gelip sadece hash’e bakmak

D) Exception’ı her zaman “hata” sayıp analizden çıkmak

E) Exception türüne bakmadan “ileri obfuscation” yazmak

  • Doğru: B
  • Gerekçe: Sinyal–yan ürün ayrımını örüntü ve davranış korelasyonu yapar. A/E aşırı kesinlik; C alakasız; D erken vazgeçiştir.
  1. 3) Kod bütünlüğü kontrolü şüphesi varken hangi breakpoint türü daha uygun bir yöntem seçimi olabilir?

A) Yazılımsal breakpoint

B) Donanımsal breakpoint

C) Sadece telemetriye güvenmek, debugger kullanmamak

D) Her yere bellek breakpoint’i koymak

E) Rastgele bir fonksiyonda durmak

  • Doğru: B
  • Gerekçe: Kod baytlarını değiştirmeden izleme yapabilir. A bütünlük kontrolleri açısından daha görünür olabilir; C kod–davranış bağını zayıflatabilir; D aşırı yavaşlatır/bozar; E yöntem değildir.
  1. 4) Bir alan adının “operasyonel kullanım” olduğuna dair en güçlü kanıt paketi hangisidir?

A) Alan adının dosyada string olarak bulunması

B) Alan adının bir bağlantı/çözümleme çağrısına argüman olması + dönüş değerinin tüketilmesi + yan etki zinciri

C) Alan adının dosyada bir kez geçmesi

D) Alan adının yanında hata mesajı bulunması

E) Alan adının uzun olması

  • Doğru: B
  • Gerekçe: Nedensellik zinciri kurulmuştur. Diğerleri tek başına zayıf sinyaldir.
  1. 5) “Minimal müdahale” ilkesinin en doğru yorumu hangisidir?

A) Debugger hiç kullanılmamalıdır

B) Yalnızca ekran görüntüsü almak yeterlidir

C) Ölçüm noktalarını hipotez test edecek kadar seçip, müdahalenin davranışı bozma ihtimalini yönetmek ve rapora yazmak

D) Her adımda durup maksimum veri toplamak

E) Sadece otomatik araç çıktısını rapora yapıştırmak

  • Doğru: C
  • Gerekçe: Minimal müdahale, “az ama etkili ölçüm + etki yönetimi”dir. A/B/E aşırı indirger; D bozulma riskini artırır.
  1. 6) Bir API çağrısı başarısız görünüyor. Bu bulgu ne zaman kanıt olarak güçlenir?

A) Hiç güçlenmez; başarısız çağrılar önemsizdir

B) Başarısızlık kodu/dönüş değeri raporlanır ve bu başarısızlığın hangi kontrol dalını tetiklediği gösterilirse

C) Sadece çağrının adını yazarsanız

D) Sadece çağrı sayısını verirseniz

E) Başarısızlığı “kasıtlı saldırı” diye yorumlarsanız

  • Doğru: B
  • Gerekçe: Dönüş değeri + kontrol akışı etkisi semantiği güçlendirir. A/C/D zayıf; E niyet okumasıdır.
  1. 7) Exception sonrası akış “devam ediyor” görünüyor. Kanıt standardı yüksek rapor dili hangisine yakındır?

A) “Kesin anti-debug var.”

B) “Exception gözlendi; ardından farklı çağrı zinciri ve yan etkiyle korelasyon görüldü; şu sınırlılıklar nedeniyle güven düzeyi budur.”

C) “Exception olunca her şey normaldir.”

D) “Exception’ı sevmiyorum.”

E) “Bu dosya kötü hissettirdi.”

  • Doğru: B
  • Gerekçe: Gözlem–bağlam–sınırlılık disiplinini korur. A aşırı kesin; C genelleme; D/E kanıtsızdır.
  1. 8) Çok dallı bir akışta kritik yolu seçerken en iyi yöntem seçimi hangisidir?

A) En uzun fonksiyonu seçmek

B) En çok çağrılan fonksiyonu seçmek

C) Argüman/dönüş değeri taşıyan ve yan etkiyi tetikleyen düğümleri öncelemek; gerekirse veri akışı bağlamıyla desteklemek

D) Rastgele bir dal seçmek

E) Sadece debug mesajlarını takip etmek

  • Doğru: C
  • Gerekçe: Bağlam taşıyan düğümler kritik yol seçiminde daha güvenilirdir. A/B tek ölçüttür; D/E güvenilmezdir.
  1. 9) Debug altında gözlenen davranış, daha az müdahaleli izleme altında farklılaşıyor. En doğru yaklaşım hangisidir?

A) Farkı görmezden gelip tek sonucu yazmak

B) Farkı bulguya dahil edip olası nedenleri (zamanlama/çevresel etki) ve sınırlılıkları raporlamak

C) “Araç bozuk” deyip raporu iptal etmek

D) Debug altındakini mutlak gerçek saymak

E) Az müdahaleli izdekini mutlak gerçek saymak

  • Doğru: B
  • Gerekçe: Farkın kendisi hem doğrulama hem de ortam duyarlılığı sinyali olabilir. A/D/E yanlış kesinlik; C gereksiz vazgeçiştir.
  1. 10) Bir bulguyu denetlenebilir delile dönüştüren en güçlü paketleme hangisidir?

A) “Bence böyle.”

B) Tek ekran görüntüsü

C) Ham trace listesini açıklamasız eklemek

D) Gözlem + tetik koşulu + argüman/dönüş değeri + yan etki korelasyonu + zaman çizelgesi + yeniden üretilebilirlik notu + sınırlılık

E) Sadece dosya adını yazmak

  • Doğru: D
  • Gerekçe: Çoklu sinyal, zaman bağlamı ve yeniden üretilebilirlik delil standardını yükseltir. A/B/C/E tek boyutludur.

Bu modülde neler öğrendiniz?

  • Breakpoint’leri tür etiketiyle değil, hipotez–maliyet–müdahale dengesiyle seçmeyi
  • Exception’ları “hata” diye kapatmak yerine örüntü ve davranış korelasyonu ile sınıflandırmayı
  • API tracing’de argüman–dönüş değeri–yan etki zinciri kurarak davranış–kod eşlemesini sağlamlaştırmayı
  • Kanıt üretiminde gözlem–yorum ayrımını koruyup zaman çizelgesi ve yeniden üretilebilirlik notlarıyla raporu güçlendirmeyi
  • Minimal müdahale yaklaşımıyla gözlemci etkisini yönetmeyi ve bulguya şeffaf biçimde taşımayı

Modül 7 — Dinamik Enstrümantasyon ve Frida

Dinamik enstrümantasyon, bir ikiliyi "durdurup incelemekten" ziyade, süreç çalışırken kritik temas noktalarından ölçüm alarak davranışı görünür kılar. Statikte belirsiz kalan karar noktalarını runtime'da aydınlatır, verinin kısa süreli "açık hâlini" yakalamayı mümkün kılar ve en önemlisi: "davranış — kod" bağını denetlenebilir kanıta dönüştürür. Bu modülde odak, daha çok veri toplamak değil; doğru görünürlük katmanını seçmek, bulguyu karşı kanıtlarla sınamak ve rapora yeniden üretilebilir bir delil paketi olarak yerleştirmektir.

Bu modülün sonunda yapabiliyor olmanız beklenenler

Bu Modülde Hedeflenen Kazanımlar

  • Dinamik enstrümantasyonun hangi sorulara cevap verdiğini netleştirip gözlemi hipotez testine çevirebilmek.
  • API/fonksiyon etkileşimlerinde argüman, dönüş değeri ve çağrı ritmini birlikte yorumlayarak davranışı güvenilir biçimde ayrıştırabilmek.
  • Şifreli/obfuscate verinin sadece bellek üzerinde kısa süre “kullanıma hazır” hâle geldiği anları yakalamaya yönelik yaklaşım geliştirebilmek.
  • Konfigürasyon çıkarımı için enstrümantasyon temelli otomasyon düşüncesi kurup gürültüyü yönetebilmek.
  • Süreci duraklatmadan hızlı hipotez testleri tasarlarken yanlış kesinlik üretmemek; sınırlılık ve karşı kanıt disiplinini koruyabilmek.
  • Enstrümantasyon çıktılarını zaman çizelgesi, bağlam notu ve yeniden üretilebilirlik bilgileriyle adli bilişim standardına yakın delil paketlerine dönüştürebilmek.

1) Enstrümantasyonun mantığı: "akıș bozulmadan" görünürlük üretmek

Dinamik enstrümantasyon, hedef sürecin adres alanında çalışırken ölçüm noktaları oluşturur. Çoğu pratikte bu, sürece bir betik çalıştırma ortamı enjekte edilerek (çoğunlukla JavaScript ekosistemi üzerinden) yürütmenin belirli fonksiyonlarında "araya girme" (interception/hooking) yapılması fikrine dayanır. Neden önemli? Çünkü klasik debugging, yürütmeyi durdurduğu için (Modül 6'da gördüğümüz gibi) zamanlama duyarlı örneklerde davranışı değiştirme riskini yükseltirken; enstrümantasyon, akış devam ederken yüksek hacimli gözlemi daha ölçeklenebilir hâle getirir.

Bu yaklaşımın pratik çerçevesi üç soruyla kurulur:

  • Nereye bakacağım? (API katmanı, fonksiyon katmanı, veri dönüşümü katmanı)
  • Neyi ispatlamaya çalışıyorum? (davranış iddiası, konfigürasyon iddiası, veri çözme iddiası)
  • Yanılma payım nereden gelir? (kütüphane gürültüsü, test yolları, telemetri, analiz aracının yan etkisi)

1.1. Debugging ile enstrümantasyonun rol ayrımı

Debugging, derin bağlam çıkarmak için "doğru yerde durmayı" sever; enstrümantasyon ise geniş zaman penceresinde "örüntü yakalamayı" sever. İleri analizde genellikle iki yaklaşım birlikte kullanılır: enstrümantasyonla doğru alanı ve ritmi bulup, kritik anlarda debugging ile noktasal doğrulama yapmak çoğu durumda dengeli bir yöntem seçimi sağlar.

İpucu: Analize başlarken "tek bir katmanda ısrar" etmek yerine, hedefinizi yazın: "Raporumda kod — davranış eşlemesi mi gerekiyor, yoksa operasyonel zaman çizelgesi mi?" Bu cümle, hangi katmana bakacağınızı (debugger mı, enstrümantasyon mu, sistem telemetrisi mi) doğal olarak belirler.

1.2. "Kanca" kavramı: neyi yakalar, neyi kaçırır?

Kancalama (hooking), bir çağrının giriş/çıkışında gözlem almak demektir. Bu sayede:

  • çağrının argümanlarını,
  • çağrının dönüş değerini,
  • çağrının zaman içindeki sıklık/ritmini

aynı çerçevede toplayabilirsiniz.

Ama unutulmaması gereken bir sınır var: kanca, seçtiğiniz noktayı aydınlatır; seçmediğiniz noktayı karanlıkta bırakır. "Mutlak gerçek" yanılsaması burada başlar.

Dikkat: Enstrümantasyon çıktısı ikna edici görünür; fakat yalnızca seçtiğiniz ölçüm noktalarının gerçeğidir. Yanlış noktayı izlemek, doğru davranışı yanlış bağlama oturtur. Bu yüzden her kritik bulguda mutlaka bir karşı kanıt sorusu taşıyın: "Aynı değer başka amaçla taşınıyor olabilir mi? Aynı çağrı zinciri alternatif bir dalda da oluşuyor mu?"

2) Görünürlük katmanları: API, fonksiyon ve veri dönüşümü

Dinamik enstrümantasyonda "aynı problemi" farklı katmanlardan izleyebilirsiniz. Seçim, hedeflediğiniz kanıt standardına göre yapılır.

2.1. API katmanı: işletim sistemiyle temas eden davranış

API seviyesinde görünürlük, davranışı "dış dünyaya çıktığı yerden" okur. İleri seviyede fark yaratan şey, API listesini uzatmak değil; her çağrıyı argüman — dönüş değeri — yan etki zincirine bağlamaktır.

Örneğin dosya etkileşiminde tek başına "dosya açma/oluşturma çağrısı" görmek zayıf kalabilir. Aynı çağrıyı:

  • hangi erişim haklarıyla açtı (kontrol argümanları),
  • işlem başarılı mı oldu (dönüş değeri),
  • bu başarı/başarısızlık sonraki akışı nasıl değiştirdi (tüketim ve dal),

sorularıyla okuduğunuzda davranış ayrışır.

2.2. Fonksiyon katmanı: "kara kutu" blokların şeffaflaşması

Statikte anlaşılması zor, yardımcı mı iş mantığı mı olduğu belirsiz fonksiyonlar runtime'da daha net ayrışır. Ancak fonksiyon katmanı en çok gürültüyü de burada üretir: binlerce çağrı aynı anda akabilir.

Burada iyi yöntem seçimi, "her şeyi izleme" yerine şu iki kademeyi kullanmaktır:

  • Geniş yakalama noktaları: ağ, dosya, süreç, bellek koruma değişimi gibi davranış düğümleri
  • Dar doğrulama noktaları: belirli argüman örüntüsü veya belirli dönüş değerinin tüketildiği kritik noktalar

2.3. Veri dönüşümü katmanı: string "bulmak" değil, dönüşüm zincirini okumak

Şifreli/obfuscate verinin statikte görünmemesi çoğu zaman normaldir; veri, çalışırken çözülür ve kısa süre sonra yeniden silinir ya da anlamını yitirir. Burada hedef, "string avcılığı" değil; verinin bir dönüşüm zincirinden geçip kullanıma hazır hâle geldiği anı yakalamaktır.

Örnek: Bir iletişim hedefi (alan adı veya dokümantasyon amaçlı örnek IP blokları) çalışırken kısa süre belirebilir. Bu değerin gerçekten operasyonel kullanıma girdiğini söyleyebilmek için:

  • değerin bir çağrının argümanına fiilen girdiği,
  • çağrı sonucunun (return) sonraki akışta tüketildiği,
  • bunun bir yan etkiyle korele olduğu

gösterilmelidir. Aksi hâlde aynı değer sadece telemetri/log amaçlı taşınıyor olabilir.

3) Runtime'da "çözülen" veriyi yakalama: tüketim noktası mı, çözme noktası mı?

Şifreli veri yakalama stratejisi, algoritmayı "tersine çevirmekten" çok, verinin savunma açısından anlamlı hâle geldiği noktayı bulmaya dayanır. İki ana yaklaşım vardır:

  • Çözme noktasına yakın gözlem: daha erken yakalarsınız; ancak veri ham/parçalı olabilir.
  • Tüketim noktasına yakın gözlem: nihai değer gelme ihtimali daha yüksektir; fakat tüketim noktası çok olabilir, gürültü artar.

Örnek: example.net benzeri bir alan adının bellek üzerinde belirdiğini gördünüz. Bu, tek başına operasyonel kullanım kanıtı değildir. Güçlü kanıt, değerin ağ iletişimiyle ilişkili çağrılara argüman olması ve ardından gelen akışın (ör. yanıt işleme, retry ritmi) bu iddiayı desteklemesidir.

3.1. Yanlış sahiplik ve yanlış rol: en yaygın iki tuzak

  • Yanlış sahiplik: değer bellekten geçmiştir ama analiz ettiğiniz bileşene ait değildir (kütüphane/çerçeve kaynaklı).
  • Yanlış rol: değer vardır ama operasyonel amaçla kullanılmıyordur (debug mesajı, test endpoint, telemetri).

Bu yüzden delil paketi, değeri en az iki bağımsız bağ ile güçlendirmelidir:

  1. — tüketim bağlamı (hangi çağrıda, hangi zincirde),
  2. — yan etki korelasyonu (hangi davranışa bağlandı, neyi tetikledi).

Dikkat: "Şifre çözme" başlığı kolayca kötüye kullanılabilir ayrıntıya kayabilir. Bu modülde amaç; algoritma uygulamak veya atlatma tarifleri vermek değil, savunma için gerekli kanıt standardıyla verinin runtime'da nerede görünür olabileceğini anlamaktır.

4) Davranış görünürlüğünde ritim ve sıklık: "potansiyel yetenek" → "gerçekleşmiş eylem"

Çağrı sıklığı ve ritim analizi, davranışın tesadüfi mi sistematik mi olduğuna dair güçlü bir sinyal üretir. Ancak burada da karşı kanıt gerekir: yüksek sıklık bazen döngü/kütüphane gürültüsüdür.

  • Periyodik ritim: zamanlayıcı/heartbeat olasılığı
  • Patlama (burst): tetik sonrası kısa yoğun aktivite olasılığı
  • Sadece başlangıç: init/ortam hazırlığı olasılığı

Örnek: Bir süreç, klavye durumunu okumaya yönelik API'ları aşırı sık çağırıyorsa bu, davranışsal olarak "girdi gözetimi" şüphesini güçlendirebilir. Yine de kesinlik, çağrıların hangi bağlamda oluştuğu ve verinin nasıl kullanıldığıyla (tüketim ve yan etki) artar; sadece "çağrı var" demek yeterli değildir.

İpucu: Ritim analizi, tek başına hüküm vermek için değil; "hangi pencereyi" ve "hangi katmanı" derinleştireceğinizi seçmek için kullanıldığında en verimli çalışır. Önce örüntüyü bulun, sonra bağlamla doğrulayın.

5) Hızlı hipotez testleri: akış kesilmeden doğrulama, yanlış kesinlik üretilmeden raporlama

Enstrümantasyon, hipotezleri hızlı sınamak için güçlüdür; fakat "hız" yanlış kesinlik riskini büyütür. İleri seviyede hedef, iki şeyi aynı anda yapmaktır:

  • hipotezi hızlı test etmek,
  • yanılma ihtimalini yönetmek (karşı kanıt, sınırlılık, tekrar edilebilirlik).

5.1. Kontrollü deney düşüncesi: neyi değiştirirsen neyi bozarsın?

Enstrümantasyon, bazı durumlarda "çalışma zamanı koşullarını" deneysel amaçla farklılaştırmaya elverişlidir. Savunma açısından değerli olan, bunun bir "atlatma" değil, bir doğrulama aracı olarak konumlandırılmasıdır: belirli bir kontrol dalına geçildiğinde hangi davranışların görüldüğünü gözlemleyip, o dalın raporda nasıl kanıtlanacağını netleştirirsiniz. Bu tür deneylerde rapor dili özellikle şeffaf olmalıdır: hangi koşulda gözlendi, aynı koşul farklı bir gözlem katmanında tutarlı mı, değilse neden olabilir?

5.2. Gürültüyü azaltmak: merkez sinyal tuzağından kaçınmak

Yanlış pozitifleri azaltmanın ileri yolu, tek bir sinyale aşırı anlam yüklememektir:

  • Bir değer yakaladıysanız, tüketimini ve etkisini arayın.
  • Bir çağrı zinciri gördüyseniz, alternatif dallarda da oluşup oluşmadığını kontrol edin.
  • Bir örüntü yakaladıysanız, mümkün oldukça benzer çevre değişkenlerinde tekrar gözlemleyin.

6) Frida/enstrümantasyon çıktılarını delile dönüştürmek: ham log → denetlenebilir bulgu

Enstrümantasyon çıktısı çoğu zaman ham ve dağınıktır. Profesyonel rapor, bu ham veriyi "kanıt paketi"ne dönüştürür. Burada amaç, raporu logla doldurmak değil; logu, denetlenebilir ve yeniden üretilebilir bir iddianın taşıyıcısı yapmak.

6.1. Kanıt paketi standardı

Bir bulgu rapora girerken şu bileşenler birlikte düşünülür:

  • Ham gözlem: zaman damgası, olay türü (giriş/çıkış), ilgili argüman kategorisi (kaynak/kontrol/bağlayıcı), çağrı ritmi notu
  • Bağlam: olayın hangi davranış zincirine bağlı olduğu, tekrar sayısı, belirgin tetik koşulu
  • Yorum + güven düzeyi: hangi bağımsız sinyallerin desteklediği, aranan karşı kanıtlar, görülen sınırlılıklar
  • Yeniden üretilebilirlik: gözlem penceresi, görünürlük seviyesi (API/fonksiyon), kullanılan araç sürümleri ve ortam notları

Örnek: "Ağa bağlandı" demek yerine; belirli bir zaman penceresinde example.net değerinin iletişimle ilgili çağrılara argüman olduğu, çağrı sonucunun nasıl tüketildiği ve devamındaki akışın bu iddiayı nasıl desteklediği yazılır.

6.2. Enstrümantasyonun yan etkisi ve tespit riski

Enstrümantasyon, hedef sürecin bellek yapısını değiştirir. Bazı örnekler kendi belleğini (self-checksum) veya yüklü modülleri kontrol ederek analiz aracına tepki verebilir. Bu durumda iki şey önem kazanır:

  • Bulguları "enstrümantasyon altında gözlendi" şeklinde açıkça bağlama oturtmak
  • Alternatif gözlem katmanlarına dönmek (ör. daha düşük müdahaleli telemetri veya Modül 6'daki daha noktasal doğrulama yaklaşımı)

Dikkat: Analiz aracının varlığı davranışı değiştiriyorsa, "tek sonucu mutlak gerçek" diye yazmak raporu kırılganlaştırır. Farkın kendisi de bir sinyal olabilir; raporda mutlaka yer almalıdır.

İpucu: Rapor eklerinde doğrudan çalıştırılabilir betik paylaşmak yerine, "betiğin mantığı"nı ve ölçüm noktalarını tarif eden kısa bir yöntem özeti vermek çoğu kurumda daha güvenli ve sürdürülebilir kabul edilir. Böylece yeniden üretilebilirlik korunur, kötüye kullanım riski azaltılır.

Terimler Sözlüğü

Terim Açıklama
InstrumentationEnstrümantasyon; çalışan süreçte ölçüm noktalarıyla görünürlük üretme yaklaşımı
RuntimeÇalışma zamanı; programın yürütme sırasında oluşturduğu dinamik durum
HookingKancalama; çağrı/olay noktasından ölçüm almak için araya gözlem katmanı yerleştirme
InterceptionAraya girerek yakalama; çağrı giriş/çıkışında gözlem alma kavramı
Trace / Tracingİz/izleme; olayların zaman sıralı kaydı
ArgumentArgüman; çağrıya giren parametre/değer
Return valueDönüş değeri; çağrı sonucu ve akış üzerindeki etkisi için kanıt kaynağı
Call frequencyÇağrı sıklığı; davranış örüntüsünü ritim üzerinden okuma
Side effectYan etki; dosya/ağ/kayıt defteri gibi dış dünyaya yansıyan sonuç
TelemetryTelemetri; sistem/uygulama olay kayıtlarından davranış görünürlüğü
ReproducibilityYeniden üretilebilirlik; aynı bulgunun benzer kriterlerle tekrar elde edilebilmesi
ShadowingGölgeleme; bir fonksiyon/değişkenin görünür davranışını taklit ederek ölçüm/karşılaştırma yapma fikri
PayloadYük; olayın asıl etkisini taşıyan parça (savunmada genellikle ikinci aşama davranışın odağı)
Anti-instrumentation / EvasionEnstrümantasyon tespiti/kaçınma; analiz aracının izlerini fark edip davranışı saptırma eğilimi

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Enstrümantasyon çıktısı “çok log, az kanıt” üretiyor. En doğru iyileştirme yaklaşımı hangisidir?

A) Daha fazla noktayı izleyip logu büyütmek

B) Logları olduğu gibi rapora ekleyip yorumu azaltmak

C) Hipotezi netleştirip ölçüm noktalarını davranış düğümlerine daraltmak; argüman–dönüş değeri–yan etki zinciriyle kanıt paketi kurmak

D) Enstrümantasyonu bırakıp sadece statik analizle yetinmek

E) Sadece çağrı sayısını rapora yazmak

  • Doğru: C
  • Gerekçe: Kanıt, seçici ölçüm + nedensellik zinciriyle güçlenir. A gürültüyü artırır; B bağlamı kaybeder; D runtime gerçeklerini kaçırabilir; E tek boyutludur.
  1. 2) Aynı API çağrısı hem meşru hem şüpheli amaçla görülebilir. Ayrımı en güçlü yapan kombinasyon hangisidir?

A) Sadece çağrının adı

B) Sadece çağrı sayısı

C) Argüman kategorileri + dönüş değerinin tüketimi + yan etki korelasyonu

D) Dosya adı ve ikon

E) Tek bir ekran görüntüsü

  • Doğru: C
  • Gerekçe: Anlam bağlamdan gelir. A/B zayıf; D alakasız; E tek anı gösterir.
  1. 3) Runtime’da bir değer yakaladınız. Operasyonel kullanım iddiasını yazmadan önce en güçlü karşı kanıt sorusu hangisidir?

A) “Değer bana ilginç görünüyor mu?”

B) “Bellekten geçtiyse kesin kullanılıyordur.”

C) “Bu değer sadece log/telemetri için taşınmış olabilir mi; tüketim ve yan etki zinciri bunu gerçekten destekliyor mu?”

D) “Değer yeterince uzun mu?”

E) “Dosyada kaç kez geçiyor?”

  • Doğru: C
  • Gerekçe: Yanlış rol/yanlış sahiplik riskini yönetir. B yanlış kesinlik; A/D/E kanıt standardı kurmaz.
  1. 4) Çözülen veriyi yakalamada “tüketim noktasına” yakın gözlem almak hangi durumda daha uygun olur?

A) Verinin nihai hâline ihtiyaç varsa ve ham/parçalı olma ihtimali yüksekse

B) Her zaman; başka yaklaşım gereksizdir

C) Asla; sadece çözme noktasına bakılmalıdır

D) Sadece hash biliniyorsa

E) Sadece çağrı sayısı düşükse

  • Doğru: A
  • Gerekçe: Tüketim noktası, verinin “kullanıma hazır” hâlini yakalamaya daha yatkındır. B/C genelleme; D/E alakasız.
  1. 5) Konfigürasyon çıkarımında en yüksek değerli raporlama biçimi hangisidir?

A) Bulunan tüm değerlerin uzun listesi

B) Değerlerin yalnızca nerede görüldüğünü yazmak

C) Davranışı yöneten çekirdek alanlar + her alan için değer→tüketim→kontrol dalı/yan etki bağı + sınırlılıklar

D) Yalnızca “config var” demek

E) Sadece ekran görüntüsü koymak

  • Doğru: C
  • Gerekçe: Değer–etki bağı kurulmadan config raporu kırılgan kalır. A gürültü; B eksik; D/E zayıf.
  1. 6) Çağrı sıklığı/ritim analizi aşağıdakilerden hangisini en iyi destekler?

A) Davranışın tesadüfi mi sistematik mi olduğuna dair örüntü çıkarımını

B) Şifreleme algoritmasının kesin adını

C) Kaynak kodun tamamını geri kazanmayı

D) Aracın tespitini otomatik engellemeyi

E) Dosya boyutunu küçültmeyi

  • Doğru: A
  • Gerekçe: Ritim, tetik mantığını ve davranış örüntüsünü anlamada güçlü sinyaldir. Diğerleri bu modül hedefi değildir.
  1. 7) Enstrümantasyon ile debugging’i birlikte kullanmada dengeli yaklaşım hangisidir?

A) Önce debugging ile her ayrıntıyı çıkarıp sonra enstrümantasyona geçmek

B) Enstrümantasyonla örüntüyü bulup kritik anlarda debugging ile noktasal doğrulama yapmak

C) Sadece debugging kullanmak

D) Sadece enstrümantasyon kullanmak

E) İkisini de kullanmamak

  • Doğru: B
  • Gerekçe: Ölçeklenebilirlik (örüntü) + kesinlik (noktasal ispat) dengesi kurar. A müdahale maliyetini büyütebilir; C/D tek kanallı risk taşır; E anlamsızdır.
  1. 8) Yeniden üretilebilirlik için en kritik bilgi hangisine yakındır?

A) Analistin sezgisi

B) İşletim sistemi temasının rengi

C) Gözlem penceresi, görünürlük seviyesi (API/fonksiyon), tetik bağlamı, araç/ortam notları ve bilinen sınırlılıklar

D) Dosya adının uzunluğu

E) Log dosyasının boyutu

  • Doğru: C
  • Gerekçe: Başka bir analistin aynı bulguyu aynı çerçevede test etmesini sağlar. Diğerleri kanıt üretmez.
  1. 9) Enstrümantasyon altında davranış farklılaşıyor. En doğru rapor yaklaşımı hangisidir?

A) Farkı gizlemek; rapor sadeleşir

B) Sadece enstrümantasyon altındaki sonucu mutlak gerçek saymak

C) Farkı bulgunun parçası yapmak; olası nedenleri ve sınırlılıkları açıkça yazmak

D) Fark varsa analiz geçersizdir deyip raporu atmak

E) Sadece çağrı sayısını vermek

  • Doğru: C
  • Gerekçe: Şeffaflık kanıt standardını yükseltir; farkın kendisi de sinyal olabilir. A/B yanlış kesinlik; D aşırı; E yetersiz.
  1. 10) “Yöntem seçimi”ni en doğru yöneten soru hangisidir?

A) “Hangi araç daha popüler?”

B) “En çok log üreten hangisi?”

C) “Bu bulguyu raporda hangi kanıt standardıyla yazacağım ve bunun için hangi görünürlük katmanı gerekli?”

D) “Hangi yöntem daha karmaşık?”

E) “Hangi yöntem daha eğlenceli?”

  • Doğru: C
  • Gerekçe: Araç seçimi değil, kanıt standardı ve hedeflenen görünürlük katmanı belirleyicidir. Diğerleri ölçüt değildir.

Bu modülde neler öğrendiniz?

  • Dinamik enstrümantasyonu, akış bozulmadan görünürlük üreten bir hipotez test aracı olarak konumlandırmayı
  • API/fonksiyon seviyesinde argüman–dönüş değeri–çağrı ritmi üçlüsüyle davranışı ayrıştırmayı
  • Çözülen veriyi “string bulma” seviyesinde bırakmadan, tüketim ve yan etki zinciriyle kanıta bağlamayı
  • Konfigürasyon çıkarımında “çekirdek alan + etki bağı” yaklaşımıyla gürültüyü azaltmayı
  • Hızlı hipotez testlerinde karşı kanıt ve sınırlılık disiplinini korumayı
  • Enstrümantasyon çıktılarını zaman çizelgesi, bağlam notu ve yeniden üretilebilirlik bilgileriyle delil paketine dönüştürmeyi

MODÜL 8 — Obfuscation ve Deobfuscation

MODÜL 8 — Obfuscation ve Deobfuscation

Modül Teması

Karartma Türleri

String, kontrol akışı, opaque predicate ve VM tabanlı yaklaşımlar.

Deobfuscation

Sembolik yürütme, taint analizi ve hibrit teknikler.

Kanıt Çıktısı

Çözülmüş davranışın çapraz kanıtla raporlanması.

Obfuscation (bulanıklaştırma/karartma), bir ikilinin ne yaptığını saklamak için kodu ve veriyi okunması zor hâle getiren tekniklerin genel adıdır; deobfuscation ise "bulanıklığı tamamen kaldırma" hedefinden çok, savunma tarafının güvenilir davranış kanıtı üretebilmesi için yeterli görünürlüğü sistematik biçimde kazanma disiplinidir. Bu modülde string'lerin saklanması, import'ların gizlenmesi, kontrol akışının bozulması ve yanıltıcı koşulların (opaque predicates) analizde nasıl "sis perdesi" oluşturduğunu; analistin bunu doğrulama + karşı kanıt arama + delil paketleme yaklaşımıyla nasıl yönettiğini ele alıyoruz.

Bu Modülde Hedeflenen Kazanımlar

  • Obfuscation’ı “etiket” olarak değil, hangi analiz riskini ürettiği üzerinden sınıflandırmak.
  • String obfuscation altında verinin ne zaman anlam kazandığını yakalayacak strateji kurmak; hızlı kazanımları kanıt standardına zarar vermeden yönetmek.
  • Dynamic API resolving / import (IAT) gizleme görüldüğünde, “yetenek çıkarımı”nı kanıt gücüne göre derecelendirmek.
  • Control-flow flattening ve junk code içinde kritik yolu seçmek, yanlış patikaya sapmayı azaltmak ve bulguyu delile dönüştürmek.
  • Opaque predicate sinyallerinde “kesin yargı” yerine, tekrarlanabilir gözlem + karşı kanıt disipliniyle raporlamak.
  • Elde edilen çıktıları gözlem–yorum ayrımı, zaman çizelgesi ve yeniden üretilebilirlik notlarıyla yayınlanabilir delil paketine dönüştürmek.

1) String obfuscation: metin görünmezken anlamı yakalamak

String obfuscation, alan adları, dosya yolları, komut satırı parçaları, anahtar adları gibi metinleri ikilide "çıplak" bırakmak yerine dönüştürerek saklama yaklaşımıdır; neden önemli olduğu, birçok triage ve tespit işaretinin metinsel artefaktlara dayanmasıdır. Metin görünmez olduğunda analist iki uç hataya sürüklenebilir: ya "davranış yok" sanıp yeteneği küçümser, ya da rastgele yakaladığı bir metni "operasyonel" zannedip rapora kırılgan kesinlik taşır.

1.1. Statikte obfuscation varlığına işaret eden sinyal kümeleri

Tek bir işaret nadiren yeterlidir; daha çok birlikte görülen örüntüler olasılığı güçlendirir:

  • Okunabilir string sayısı olağandışı düşükken ikilide çok sayıda kısa/anlamsız parça bulunması
  • Benzer boyutlarda bloklar, benzer byte dağılımları, "metin üretimi"ne benzeyen tekrarlar
  • Metin kullanımına giden yolda arabelleğe yazma, birleştirme, kopyalama gibi veri dönüşümü ağırlıklı yardımcı akışların belirginleşmesi
  • "Stack strings" olarak bilinen, metnin karakter karakter çalışma anında kurulmasına işaret eden düzenlilikler (metnin bir kerede değil, adım adım oluşturulduğu hissi)

Burada hedef "hangi algoritma kullanılmış?" sorusuna kilitlenmek değil; metnin nerede, hangi bağlamda anlamlı hâle geldiğini bulmaya yaklaşmaktır.

Örnek: Bir ikilide okunabilir URL/alan adı benzeri izler yoktur; buna karşın benzer uzunlukta, anlamsız görünümlü çok sayıda veri parçası ve bunlara tekrar tekrar uzanan kod referansları bulunur. Bu tablo, "gizlenmiş metinlerin kısa süreli görünürlükle tüketildiği" hipotezini güçlendirir; asıl soru, bu metinlerin hangi davranış düğümünde (ağ, dosya, süreç vb.) kullanıma girdiğidir.

Obfuscated String Runtime Pivot - Example
$ deobf-lab # Statik sinyal: yüksek tekrar + düşük okunabilir string
$ python string_surface_scan.py sample.bin
readable_strings=12
opaque_chunks=186
repeated_decode_refs=27

$ deobf-lab # Çalışma anında kısa görünürlük penceresi yakala
$ python runtime_string_probe.py --proc sample.exe --window 90s
captured_value="hxxps://update-cdn.example.net/api/ping"
capture_count=4
api_sink=winhttp_sendrequest

$ deobf-lab # Davranış düğümüne bağla
$ echo "behavior_node=network_egress; confidence=medium-high"
behavior_node=network_egress; confidence=medium-high

Dikkat String çıkarımı, deobfuscation'ın "en hızlı ödül" alanı gibi görünür ve analisti acele kesinliğe iter. Test string'leri, debug mesajları ve telemetri etiketleri birçok yazılımda yaygındır; bunları operasyonel göstergelerle karıştırmak raporu en kolay çökerten hatalardandır.

1.2. Yöntem seçimi: statik çözümleme mi, çalışma zamanı gözlemi mi?

Aynı problemi çözmenin iki ana yolu vardır; seçim, hedeflediğiniz kanıt seviyesine göre yapılır:

  • Statik çözümleme: Dönüşüm zincirini kod üzerinden takip ederek metni anlamlandırır. Kod yolunu netleştirir; ancak zincir katmanlıysa zaman maliyeti hızla büyür ve analist "tüm metinleri çıkarma" hedefiyle asıl davranış kanıtını geciktirebilir.
  • Çalışma zamanı gözlemi: Metnin "kullanıma hazır" hâlinin kısa süre görünür olduğu anlara odaklanır. Hız kazandırır; fakat bağlam doğru kurulmazsa yanlış sahiplik (değer başka bileşene aittir) veya yanlış rol (log/telemetri metnidir) riski artar.

Orta seviye temel kontrol listesini önceki aşamalarda ele almıştık; burada kritik nokta, hız kazanırken kanıt standardını düşürmemek. Modül 7'nin ölçeklenebilir görünürlük yaklaşımı ve Modül 6'nın noktasal doğrulama refleksi, analisti tek bir kanala mahkûm olmaktan çıkarır.

İpucu Tek bir "çözülen string" görüntüsü yerine, aynı değerin kaç kez, hangi zaman penceresinde, hangi çağrı bağlamıyla görüldüğünü özetleyen kısa bir tablo raporu ciddi biçimde güçlendirir. Bu, tesadüf ihtimalini azaltır ve denetlenebilirliği artırır.

1.3. "String buldum"dan "davranış kanıtı"na: doğrulama ve karşı kanıt

Bir string'i rapora taşırken iki soru her şeyi değiştirir:

  • Bu string hangi bağlamda ortaya çıktı? (hangi çağrı zinciri, hangi tetik, hangi dönüşümün sonunda)
  • Bu string neye hizmet etti? (bir API argümanı oldu mu, bir kontrol dalını etkiledi mi, somut yan etkiyle korele mi)

Örnek: Bir çalıştırmada "example.net" benzeri bir alan adı görülür. Bu tek başına operasyonel hedef kanıtı değildir; aynı değer test mesajı, telemetri etiketi veya hata metni olabilir. Karşı kanıt olarak, bu değerin yalnızca log formatında mı kaldığını, yoksa ağ çözümleme/bağlantı gibi bir tüketim zincirine girip girmediğini ararsınız. Delil gücü, değer → tüketim → yan etki çizgisiyle yükselir.

Mini özet: Metin artefaktı, ancak bağlam + tüketim + yan etki ile "kanıt"a dönüşür; aksi durumda en fazla hipotez üretir.

2) Dynamic API resolving ve import (IAT) gizleme: niyet sinyali mi, davranış mı?

Dynamic API resolving, bir programın ihtiyaç duyduğu API'leri import tablosunda açıkça taşımak yerine çalışma zamanında çözümleyerek çağırmasıdır. Import (IAT) gizleme ise bu yüzden statikten "yetenek okuma"yı zorlaştırır; neden önemli olduğu, analistin çoğu zaman ilk çıkarımı import listesinden yapmasıdır. Liste kasıtlı olarak yoksullaştırıldığında, statik yorumlar hızla spekülasyona dönüşebilir.

2.1. Ne görüyoruz, ne sanıyoruz?

Bu tabloda iki olgu aynı anda gerçekleşebilir:

  • Statikte "az import" görünür; bu az yetenek anlamına gelmez.
  • Çalışma anında fonksiyon adresleri çözülür; fakat "çözüldü" bilgisi tek başına yetenek kanıtı değildir.

Kritik ayrım şudur: Çözümlenen API (niyet sinyali olabilir) ile fiilen çağrılan API (davranış kanıtına yaklaşır) aynı şey değildir. Ayrıca bazı örneklerde çözümleme, yalnızca yaygın yükleyici altyapısının bir parçası olabilir; bu yüzden "kötü niyet" çıkarımı, yalnızca teknik varlığa değil bağlama dayanmalıdır.

Örnek: Bir yazılım çalışma anında çok sayıda API çözümler; fakat bunların yalnızca küçük bir kısmı çağrılır. Bu durumda "geniş yetenek seti var" demek yerine, çağrılan küçük kümenin bağlamını ve yan etkilerini temel almak; çağrılmayanları "potansiyel" olarak işaretlemek daha sağlamdır.

2.2. Yöntem seçimi: hangi kanıt seviyesi, hangi görünürlük katmanı?

Hedef kitleniz ve rapor amacı, yöntem seçimini belirler:

  • Erken triage hedefleniyorsa: Çözümlenen API kümeleriyle (ağ/dosya/süreç/bellek gibi) kaba yetenek alanları işaretlenebilir; fakat dil temkinli olmalı, kesinlik düşük tutulmalıdır.
  • Davranış — kod eşlemesi hedefleniyorsa: "çözümleme haritası" tek başına yetmez; çağrı gerçekleşti mi, hangi argüman örüntüleri var, hangi yan etkiyle korele, tekrar edilebilir mi soruları ikinci katmanı oluşturur.

Burada Modül 7'nin "geniş görünürlük vs dar doğrulama" yaklaşımı işe yarar: bazen geniş bir telemetri görünürlüğü, bazen belirli fonksiyon bağlamında sınırlı ama güçlü doğrulama daha iyi delil üretir. Seçim, operasyonel doğruluk (tespit ekibi) ile kod bağlamı (araştırma ekibi) arasındaki önceliklere göre yapılır.

Dikkat Dynamic resolving meşru yazılımlarda da görülebilir. Sırf "IAT yoksul" diye kesin yetenek listesi çıkarmak, tespit tarafında yanlış önceliklendirme yaratabilir. Kanıt gücünü, çözümlendi → çağrıldı → yan etki üretti zinciriyle derecelendirmek raporu kırılganlıktan kurtarır.

İpucu Çözümleme olaylarını "çözümleme haritası" halinde gruplayın (ağ/dosya/süreç/bellek). Aynı haritada çağrılanları ayrı işaretleyip raporu iki seviyeli kurun: "çözümlenenler (niyet sinyali)" ve "çağrılanlar (davranışa yaklaşan sinyal)". Bu, hem hızlı triage sağlar hem de kesinlik riskini yönetir.

2.3. Kanıt üretimi: "dolaylı çağrı" görüldüğünde delil nasıl paketlenir?

Dynamic resolving tipik olarak dolaylı çağrılar (function pointer üzerinden çağrı) üretir; bu, statik araçların okumasını zorlaştırabilir. Savunma odaklı raporlamada delil paketi şu sorulara cevap vermelidir:

  • Hangi çözümleme rutini, hangi API adını/kimliğini hangi adrese bağladı?
  • Bu adres, hangi çağrı zincirinde ne zaman kullanıldı?
  • Kullanım, hangi gözlenebilir yan etkiyle korele oldu? (ağ isteği, dosya erişimi, süreç etkileşimi vb.)
  • Bu gözlem kaç çalıştırmada, hangi sınırlar altında tekrarlandı?

Mini özet: Çözümleme "var" demek yetmez; çözümleme davranışa bağlandığında rapor dayanıklılığı artar.

3) Control-flow flattening ve junk code: sisin içinden kritik yolu seçmek

Control-flow flattening, normalde okunabilir olan dallanma/çağrı yapısını tek bir "yönlendirici" (dispatcher) akış altında düzleştirerek kontrol akışını anlaşılmaz hâle getiren yaklaşımdır. Junk code ise gerçek iş mantığına hizmet etmeyen, analisti oyalayan ve kontrol akışı sezgisini bozan gürültü parçalarıdır. Neden önemli? Çünkü bu ikisi, decompiler çıktısını ciddi biçimde yanıltarak analistin "hikâye okuma" becerisini hedef alır.

3.1. Flattening'in tipik etkisi: "okunabilir hikâye"nin kaybı

Flattening görüldüğünde sık görülen tablo:

  • Fonksiyon tek parça gibi görünür; anlamlı blok sınırları silikleşir.
  • "Gerçek koşullar" yerine bir durum değişkeni (state variable) etrafında dönen tekrarlar belirir.
  • Akış, karmaşık bir switch/loop yığını gibi sunulur; dispatcher merkezî bir karar noktası hâline gelir.

En pahalı hata, dispatcher akışına takılıp ana iş mantığını kaçırmaktır; çünkü flattening'in amacı tam olarak budur: analisti "çok şey oluyor" yanılsamasında yormak.

3.2. Junk code karşısında gürültü bütçesi: zamanı kanıt değerine göre harcamak

Junk code'un hedefi analistin zamanını tüketmektir. İleri seviye refleks, "her şeyi anlamaya çalışma" yerine gürültü bütçesi koymaktır:

  • Hiç yan etkiye bağlanmayan, veri taşımayan, sürekli aynı sonuca giden bloklar "aday gürültü"dür.
  • Sürekli tekrar eden ama davranış düğümlerine (ağ/dosya/süreç/bellek) bağlanmayan patikalar düşük önceliklidir.
  • Delil üretimine katkısı olan yerler genellikle veri dönüşümü düğümleri ve dış dünya temasına giden zincirlerdir.

Örnek: Bir fonksiyon grafiğinde yüzlerce blok vardır; ancak yalnızca belirli bloklar bir veri dönüşümünü dış dünya temasına taşır. Plan, gürültüyü tek tek deşmek yerine, dış dünya temasına giden zinciri besleyen veri akış düğümlerini önceliklendirmektir.

3.3. Yöntem seçimi: statik sadeleştirme, dinamik doğrulama, sembolik yürütme

Karmaşayı yönetmek için farklı yaklaşımlar vardır; her birinin sınırı ve riski bulunur:

  • Statik sadeleştirme kritik yolu görünür kılabilir; ancak flattening'de "her şey aynı önemde" hissi statik okuma maliyetini artırır.
  • Dinamik doğrulama kritik anları hızlı işaretler; fakat hangi anın kritik olduğunu seçmek için yine hipotez gerekir.
  • Sembolik yürütme (symbolic execution) bazı senaryolarda yol patlaması ve maliyet nedeniyle sınırlıdır; buna rağmen belirli koşullarda "yol seçimindeki belirsizliği" azaltabilir.

Uygulamada güçlü desen şudur: önce statikte yüksek getirili düğümleri seçmek (davranış düğümleri, veri dönüşümü noktaları), sonra dinamikte bu düğümlerin gerçekten tetiklenip tetiklenmediğini doğrulamak. Modül 6'daki "yanlış yerde durma" maliyeti burada görünür olur; Modül 7'nin ölçekli görünürlüğü ise sisin içinden örüntü çıkarmayı kolaylaştırır.

Dikkat "Çok karışık, kesin obfuscation var" türü ifadeler tek başına zayıftır. Raporu güçlendiren, hangi sinyallerin flattening/junk ile uyumlu olduğunu ve bunun hangi analiz riskini doğurduğunu somutlaştırmaktır; aksi hâlde bulgu, denetimde kolay kırılır.

İpucu Rapor eklerinde tek bir dev CFG görüntüsü yerine iki katmanlı anlatım daha etkilidir: (1) ham akıştan seçilmiş kritik düğümler, (2) kritik yolun kısa şeması ve bu yolun hangi davranış düğümüne bağlandığı. Bu, okuyucunun "kanıt zinciri"ni hızla kavramasını sağlar.

4) Opaque predicates: "sahte dallar"ı kanıt düzeyine taşımak

Opaque predicate, görünüşte değişkenlere bağlı gibi duran ama gerçekte sonucu sabit olan (veya çok dar koşullarda değişen) dallanma koşullarıdır. Neden önemli? Çünkü bu koşullar analisti sahte dallara sürükleyerek hem statik akış okumasını bozar hem de "hangisi gerçek yol?" sorusunu pahalı hâle getirir; ayrıca bazı analiz araçları bu belirsizliği "ölü kod" kararıyla yanlış yorumlayabilir.

4.1. "Şüphe"den "kanıt"a: tutarlılık, bağımlılık, etki

Bir koşulun opaque olduğundan şüphelenmek kolaydır; bunu raporda sağlamlaştırmak için disiplin gerekir:

  • Aynı koşulun sonucu farklı yürütme tekrarlarında tutarlı mı?
  • Koşul gerçekten sabit mi, yoksa çevresel bir sinyale (zaman, sistem durumu gibi) bağlı mı?
  • Koşulun sonucu değiştiğinde davranışta anlamlı bir fark oluşuyor mu?

Bu üç soru, "gördüm" ile "kanıtladım" arasındaki farkı yaratır.

Örnek: Bir koşul, her çalıştırmada aynı dala gidiyor gibi görünür. Bu, opaque olabileceği gibi analiz ortamınızda bir çevresel sinyalin sabit olmasından da kaynaklanabilir. Bu yüzden rapor dili, tutarlı tekrar ve anlamlı davranış bağı kurulmadıkça "opaque" kesinliğini yükseltmek yerine "opaque ile uyumlu sinyal" düzeyinde kalır.

4.2. Karşı kanıt araması: çevreye bağlı sahte sabitliği yakalamak

Opaque predicate şüphesiyle sık karışan durum şudur: koşul çoğu analiz koşulunda aynı sonucu verir, ama belirli bir çevrede değişebilir. Karşı kanıt araması, rastgele "farklı koşullar" denemek yerine kontrollü değişkenlerle yürütülür: aynı gözlem penceresi, aynı tetik bağlamı, mümkünse benzer sistem yükü ve kayıt altına alınmış çevre sinyalleri.

Bu yaklaşım, hem yanlış kesinliği azaltır hem de raporun "neden böyle düşündük?" kısmını denetlenebilir kılar.

4.3. Delil paketi: dallanma kararını rapora taşımak

Opaque predicate bulgusu rapora girerken güçlü paket şunları içerir:

  • Koşulun geçtiği bağlam (hangi fonksiyon/akış içinde)
  • Birden fazla çalıştırmada dal sonucu (zaman çizelgesiyle)
  • Dal sonucunun davranışa etkisi (yan etki farkı, çağrı zinciri farkı)
  • Sınırlılıklar (hangi koşullar test edildi, hangileri edilemedi)

Bu sayede "analiz zor" yakınması, tekrarlanabilir ve denetlenebilir bir bulguya dönüşür.

Mini özet: Opaque predicate'te hedef "dalları temizlemek" değil; dallanmanın gerçek/pseudo doğasını kanıt düzeyinde raporlayacak kadar görünürlük kazanmaktır.

Terimler Sözlüğü

Terim Açıklama
ObfuscationBulanıklaştırma/karartma; kod/veriyi kasıtlı olarak okunması zor hâle getirme
DeobfuscationBulanıklığı gidermekten çok, analiz için yeterli görünürlük kazanma ve kanıt üretme disiplini
String obfuscationMetinlerin dönüştürülerek saklanması (şifreleme/encoding/dağıtma vb. yaklaşımlar)
Stack stringsMetnin çalışma zamanında karakter karakter oluşturulmasıyla statik izlerin azaltılması yaklaşımı
Dynamic API resolvingAPI’lerin çalışma zamanında çözülerek çağrılması
Import hiding / IAT hidingImport tablosunu yoksullaştırarak yetenekleri statikten gizleme yaklaşımı
Import table / IATDış fonksiyon bağımlılıklarının ilişkilendirildiği yapı (platforma göre adlandırma değişebilir)
Xref (Cross-reference)Kod/veri referansı; bir veriye hangi kod noktalarının eriştiğini gösteren ilişki
Function pointer / Indirect callAdres üzerinden dolaylı çağrı; statik okuma ve araç analizi zorlaşabilir
CFG (Control Flow Graph)Kontrol akışı grafiği; temel bloklar ve dallanmalar arası ilişki
Control-flow flatteningKontrol akışını dispatcher merkezli bir yapıda düzleştirerek okuma sezgisini bozma
DispatcherFlattening’de akışı yöneten merkezî seçici/yönlendirici yapı
State variableDispatcher’ın hangi bloğu seçeceğini belirlemede kullanılan durum değişkeni
Junk codeAnalizi oyalayan, iş mantığı taşımayan gürültü kodu
Opaque predicateSonucu sabit/çok dar koşullu olan ama değişken gibi görünen dal koşulu
EntropyDüzensizlik ölçüsü; şifrelenmiş/sıkıştırılmış veriye işaret edebilen sinyal
HeuristicSezgisel yöntem; kesin olmayan ama pratik işaretlere dayalı çıkarım
Symbolic executionOlası yürütme yollarını sembolik olarak inceleme yaklaşımı; maliyet/sınırları vardır
Static emulationKodun belirli kısmını kontrollü biçimde “yürütür gibi” inceleyerek görünürlük elde etme yaklaşımı
Patching (dinamik yama)Analiz için kod akışına müdahale etme; bütünlüğü bozma ve yanlış sonuç üretme riski taşır

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Bir ikilide okunabilir string sayısı çok az; buna karşılık benzer boyutlarda anlamsız veri blokları çok fazla. En doğru ilk yorum ve yöntem seçimi hangisidir?

A) “Kesin C2 yok; çünkü string yok.”

B) “String obfuscation olasılığı var; statikte sinyal kümeleri aranır, gerekirse çalışma zamanında tüketim bağlamıyla doğrulanır.”

C) “Dosya bozuk; analiz bırakılır.”

D) “Sadece hash ile karar verilir.”

E) “Bu her programda olur; rapora yazmaya gerek yok.”

  • Doğru: B
  • Gerekçe: String yokluğu yokluk kanıtı değildir; sinyal kümesi + bağlam doğrulaması gerekir. A/D yanlış kesinlik üretir; C/E temelsiz genellemedir.
  1. 2) Çalışma zamanında “example.net” alan adı görülüyor. Bunu “operasyonel hedef” diye yazmadan önce en güçlü karşı kanıt sorusu hangisidir?

A) “Alan adı uzun mu?”

B) “Bu değer yalnız log/telemetri amaçlı taşınıyor olabilir mi; tüketim ve yan etki zinciri var mı?”

C) “Dosya adı şüpheli mi?”

D) “Bir kez göründüyse yeter.”

E) “Alan adının popülerliği nedir?”

  • Doğru: B
  • Gerekçe: Yanlış rol/yanlış sahiplik riskini yönetir; delili tüketim ve yan etkiye bağlar. Diğer seçenekler kanıt standardı kurmaz.
  1. 3) Statik import tablosu çok küçük; buna rağmen çalıştırmada çok sayıda çözümleme olayı gözleniyor. En güvenli rapor dili hangisine yakındır?

A) “Kesin çok geniş yetenek seti var.”

B) “Çözümleme niyet sinyali olabilir; çağrılan API’ler ve yan etkiler doğrulanmadan kesin yetenek listesi yazmak risklidir.”

C) “Import küçükse zararlı olamaz.”

D) “Sadece import listesi rapor için yeterli.”

E) “Hiçbir şey yazmayalım.”

  • Doğru: B
  • Gerekçe: Çözümlenen ≠ çağrılan ayrımı kritiktir. A/C/D yanlış kesinlik üretir; E raporu eksik bırakır.
  1. 4) Dynamic API resolving’in meşru yazılımlarda da görülebildiği düşünülürse, “kötü niyet” iddiasını en çok güçlendiren kanıt paketi hangisidir?

A) “Çözümlenen API sayısı çok.”

B) “Çözümlenen API’lerin bir kısmı çağrılıyor; çağrılar belirli argüman örüntüleriyle yan etkilere bağlanıyor ve tekrar edilebilir gözleniyor.”

C) “Decompile görüntüsü karışık.”

D) “Dosya boyutu büyük.”

E) “İsim şüpheli.”

  • Doğru: B
  • Gerekçe: Bağlam + tekrar edilebilirlik + yan etki korelasyonu delil gücünü yükseltir. Diğerleri zayıf/önyargılı sinyallerdir.
  1. 5) Control-flow flattening şüphesinde analistin en pahalı hatası hangisidir?

A) Davranış düğümlerini öncelemek

B) Dispatcher akışına takılıp dış dünya temasına giden zinciri kaçırmak

C) Gürültü bütçesi koymak

D) Kritik yolu iki katmanlı sunmak

E) Sınırlılıkları rapora yazmak

  • Doğru: B
  • Gerekçe: Flattening’in hedefi analisti dispatcher’da boğmaktır. Diğer seçenekler iyi pratiktir.
  1. 6) Junk code karşısında “gürültü bütçesi” yaklaşımı neyi amaçlar?

A) Her bloğu aynı ayrıntıda incelemeyi

B) Delil değeri düşük patikaları erken saf dışı bırakıp kritik zincire odaklanmayı

C) Sadece ekran görüntüsü toplamayı

D) Hash’e bakıp karar vermeyi

E) Davranış düğümlerini görmezden gelmeyi

  • Doğru: B
  • Gerekçe: Zamanı kanıt değerine göre harcamayı sağlar; diğerleri ya eksik ya da hatalıdır.
  1. 7) Opaque predicate şüphesi için “kanıt”ı en çok güçlendiren yaklaşım hangisidir?

A) Tek çalıştırmada dal sonucunu görmek

B) Farklı çalıştırmalarda dal sonucunu kontrollü değişkenlerle tutarlılık/etki ilişkisiyle göstermek

C) Koşul karışık görünüyorsa “kesin opaque” yazmak

D) Sadece decompiler yorumuna güvenmek

E) Hiç raporlamamak

  • Doğru: B
  • Gerekçe: Tek gözlem kırılgandır; tutarlılık + davranış etkisi kanıt gücünü artırır.
  1. 8) Bir koşul çoğu çalıştırmada aynı dala gidiyor; fakat çevresel sinyale bağlı olma ihtimali var. En doğru rapor dili hangisine yakındır?

A) “Kesin opaque predicate.”

B) “Opaque predicate ile uyumlu sinyal; test edilen koşullar ve sınırlılıklar belirtilerek çevresel bağımlılık karşı kanıtı aranmalıdır/aranmıştır.”

C) “Hiçbir şey önemli değil.”

D) “Zaten her dal aynı.”

E) “Sadece tahmin.”

  • Doğru: B
  • Gerekçe: Temkinli doğrulama dili ve sınırlılık şeffaflığı ileri raporlamanın omurgasıdır.
  1. 9) Aşağıdakilerden hangisi, bir string bulgusunu “delil paketi”ne en iyi yaklaştırır?

A) “String’i gördüm.”

B) String’in geçtiği tek görüntü

C) Zaman penceresi + bağlam + tüketim zinciri + yan etki korelasyonu + tekrar edilebilirlik notu

D) String’i kopyalayıp listelemek

E) “Bence bu C2.”

  • Doğru: C
  • Gerekçe: Denetlenebilirlik ve yeniden üretilebilirlik delili güçlendirir; diğerleri tek boyutlu/kanıtsızdır.
  1. 10) Obfuscation altında yöntem seçimini en doğru yöneten soru hangisidir?

A) “Hangi araç daha popüler?”

B) “En çok çıktı üreten hangisi?”

C) “Bu iddiayı raporda hangi kesinlikle yazacağım ve bunun için hangi görünürlük katmanı gerekli?”

D) “Hangisi daha karmaşık?”

E) “Hangisi daha hızlı görünür?”

  • Doğru: C
  • Gerekçe: Yöntem seçimi, hedeflenen kanıt standardıyla uyumlu olmalıdır; hız/popülerlik tek başına ölçüt değildir.

Bu modülde neler öğrendiniz?

  • Obfuscation’ı, adını koymaktan çok ürettiği analiz riskleri üzerinden okumayı.
  • String obfuscation’da “metni yakalama”yı bağlam + tüketim + yan etki zinciriyle davranış kanıtına dönüştürmeyi.
  • Dynamic API resolving / import gizlemede “çözümlenen” ile “çağrılan” ayrımını rapor kesinliğine yansıtmayı.
  • Control-flow flattening ve junk code içinde kritik yolu seçmeyi, gürültü bütçesiyle analiz verimliliğini artırmayı.
  • Opaque predicate iddialarını tekrarlanabilir gözlem + karşı kanıt + etki analizi ile sağlamlaştırmayı.
  • Bulguları gözlem–yorum ayrımı, zaman çizelgesi, sınırlılıklar ve yeniden üretilebilirlik notlarıyla yayınlanabilir delil paketine dönüştürmeyi.

MODÜL 9 — Packers ve Unpacking Metodolojisi

MODÜL 9 — Packers ve Unpacking Metodolojisi

Modül Teması

Packer Taksonomisi

UPX, ASPack, Themida, VMProtect ve özel packer aileleri.

Unpacking Yolu

Manual, breakpoint, memory dump ve scriptli yaklaşımlar.

OEP & Rebuild

Original Entry Point tespiti ve IAT yeniden inşa.

Packed (sıkıştırılmış/korumalı) ikililer, gerçek işlevsel kodu "dışarıdan bakınca görünmez" hâle getirerek statik analiz akışını bilinçli biçimde bozar. Bu yüzden unpacking, tersine mühendislikte bir "temizlik" adımı değil; kanıt standardını koruyarak görünürlüğü geri kazanma sürecidir. İleri seviye analist için kritik soru şudur: "Dosya packed mı?"dan ziyade "Hangi aşamada hangi içerik açılıyor ve bunu nasıl doğrularım?" Bu modül, packer tespiti için göstergeleri bir arada okuma disiplinini, OEP (Original Entry Point) kavramı etrafında geçiş anını kanıtlamayı, dump sonrası doğrulama ve import/IAT yeniden inşasını, çok aşamalı loader zincirlerinde rol haritalandırmayı yayınlanabilir rapor çıktısına dönüştürecek şekilde işler.

Bu Modülde Hedeflenen Kazanımlar

  • Packer/koruyucu varlığını tek işarete bağlamadan gösterge kümeleri ile değerlendirip yanlış pozitifleri yönetebilmek.
  • OEP’ye dair hipotezi kurup, karşı kanıt arayarak doğrulayabilmek; “yanlış OEP” riskini sistematik elemek.
  • Dump alınmış çıktıların geçerliliğini, bütünlük ve korelasyon kontrolleriyle doğrulayarak analize uygun delil artefaktı üretebilmek.
  • Import reconstruction / IAT onarımını statik–dinamik–hibrit yaklaşımlarla ele alıp, çıktının sınırlılıklarını rapora doğru yansıtabilmek.
  • Çok aşamalı loader zincirlerinde her aşamanın rolünü ve handoff (kontrol devri) noktalarını zaman çizelgesi ve ilişki grafiği ile kanıtlayabilmek.

1) Packer tespiti: göstergeleri "ispat" seviyesine taşımak

Packer, programın gerçek kodunu ve verisini paketleyip çalışma anında açan bir "taşıyıcı katman" üretir; ticari koruyucular (protector) buna ek olarak analiz maliyetini yükseltmek için kontrol akışı karmaşası ve çeşitli anti-analiz sinyalleri barındırabilir. Neden önemli? Çünkü packed örnekte statik bulguların önemli kısmı, asıl niyetten çok taşıyıcı katmanı gösterir; yanlış katmanı incelerseniz raporunuzun kesinlik düzeyi hatalı yükselir.

1.1. Gösterge kümeleri: tek sinyal yerine birlikte okuma

Pratikte "kesin packer" diye tek bir imza her zaman yoktur; modern örneklerde özel (custom) packer/loader katmanları yaygındır. Analist, aşağıdaki sinyalleri birlikte değerlendirir:

  • Section (kesit) anomalileri: Kesit adları, sayısı, boyut dağılımı, alışılmadık hizalamalar; "kod" gibi görünen kesitte beklenmedik düzensizlik.
  • Disk — bellek boyut farkı: "Size of Raw Data" ile "Virtual Size" arasındaki belirgin tutarsızlık, bellekte sonradan doldurulacak/şekillenecek alanlara işaret edebilir. Bu sinyal, özellikle "bellekte şişen" packer katmanlarında anlam kazanır.
  • Entropi ve veri profili: Yüksek entropi sıkıştırma/şifreleme olasılığını artırır; ancak tek başına kanıt değildir (meşru korumada da görülebilir).
  • Import yoksulluğu: Import tablosunun olağandışı küçük olması veya yalnızca sınırlı sayıda temel fonksiyon içermesi, gerçek API'lerin runtime'da çözümleniyor olabileceği hipotezini güçlendirir. (Bu temelin kontrol listesini Orta Seviye ilgili modülde ayrıntılı işlemiştik; burada kritik olan, import yoksulluğunu kanıt seviyesi olarak doğru konumlandırmaktır.)
  • Overlay ve "yük gizleme" işaretleri: Dosyanın sonuna eklenmiş veri (overlay) bazen konfigürasyon, ikinci aşama veya şifreli blok taşır; tek başına hüküm verdirmez ama zincir analizinde değerli olabilir.
  • Stub karakteri ve dönüşüm ağırlığı: Kısa, yoğun döngüler; veri blokları üzerinde dönüşüm; ardından belirgin bir kontrol devri hissi (handoff).

Örnek: Bir ikilide okunabilir string az, import listesi şaşırtıcı derecede küçük ve kod akışı uzun süre veri bloklarını dönüştürüp sonra kontrolü farklı bir adrese devrediyor gibi görünüyorsa, "packed/loader katmanı" hipotezi güçlenir. Bu noktada asıl iş, hipotezi doğrulayacak kanıtları tasarlamak ve "meşru koruma" olasılığını dışlamaya yarayacak karşı kanıtları da aramaktır.

Dikkat "Yüksek entropi + az import" gibi iki-üç işaret, tek başına "zararlı" demek değildir. Bu göstergeler, yalnızca analiz yöntemini değiştirmek gerektiğini söyler. Rapor dilini kanıt seviyesine uygun tutmak ("packed olasılığı yüksek" gibi) ve kesinlik iddiasını ancak doğrulama paketinden sonra yükseltmek gerekir.

1.2. Karşı kanıt: Her packing kötü niyet değildir

Meşru yazılımlar; lisans koruma, fikri mülkiyet koruması veya dağıtım optimizasyonu için packer/protector kullanabilir. Bu yüzden değerlendirme, yalnız "sinyal var" düzeyinde kalmamalı; şu sorularla derinleşmelidir:

  • Aynı ürün ailesinde/sürüm hattında benzer packing davranışı tutarlı mı?
  • Açılan kod parçası, tipik bir uygulama başlangıcına mı benziyor; yoksa çevresel koşullara göre seçilen çok aşamalı bir yükleme zinciri mi kuruyor?
  • Unpack sonrası yürütme yalnız koruma doğrulaması mı yapıyor, yoksa sistem üzerinde ek yan etkiler üreten (dosya/süreç/ağ/bellek) davranış düğümleri mi oluşturuyor?

Burada amaç "iyi-kötü" hükmü vermek değil; hangi iddianın hangi kanıta dayandığını şeffaf biçimde ayrıştırmaktır.

1.3. Yöntem seçimi: imza mı, yapı mı, davranış mı?

Packer tespitinde üç yaklaşım sık görülür; hangi koşulda hangisini seçeceğiniz, hedeflediğiniz çıktıya göre değişir:

  • İmza/heuristic tabanlı tespit: Hızlı triage sağlar; ancak özel packer'larda yanıltıcı olabilir.
  • Yapısal analiz: Kesitler, boyut ilişkileri, import profili, veri dağılımı gibi sinyalleri birleştirir; genelleyicidir.
  • Dinamik gözlem: Unpack anını ve kontrol devrini görünür kılar; fakat ortam etkileri ve farklı yürütme yolları nedeniyle tekrar edilebilirlik tasarımı ister.

Bu üçü arasındaki dengeyi kurarken, "Ben bu örnekte neyi kanıtlamak istiyorum?" sorusu belirleyicidir. Packer varlığını kanıtlamak ile payload'a güvenli biçimde erişip incelemeyi başlatmak aynı hedef değildir.

2) OEP mantığı: kontrol devri nerede gerçekten gerçekleşiyor?

OEP (Original Entry Point), stub'ın işini bitirip kontrolü asıl yürütülebilir koda devrettiği mantıksal geçiş noktasıdır. Neden önemli? Yanlış geçiş anında alınan dump, analize elverişli görünse bile eksik/yanlış olabilir; daha kötüsü, raporunuz "çalışıyor gibi görünen ama gerçekte hatalı" bir artefakt üzerine inşa edilir.

2.1. Geçişin doğası: "Tail jump" ve bağlamın toparlanması

Birçok pakette stub, bellekte çözme/yerleştirme yaptıktan sonra kontrolü yeni bölgeye devreder. Bu devrin yaygın sinyalleri şunlardır:

  • Yoğun veri dönüşümü döngülerinden sonra kontrolün yeni bir yürütme bölgesine taşınması
  • Stub'ın yürütme bağlamını toparlayıp (kayıtlar/stack) daha "uygulama benzeri" akışa geçmesi
  • Yeni bölgede daha tutarlı fonksiyon sınırları ve daha anlamlı kontrol akışı örüntülerinin belirmesi

Burada kritik nokta, OEP'yi bir "adres ezberi" gibi değil, bir geçiş olayı olarak ele almaktır.

Örnek: Stub aşamasında veri blokları üzerinde dönüşüm görülüyor; ardından yürütme, daha stabil bir bölgeye geçip daha çeşitli API etkileşimleri ve daha anlamlı fonksiyon akışı sergiliyor. Bu tablo "OEP'ye yakın olabilir" hipotezini destekler; ancak tek çalıştırma ve tek işaretle kesinleştirmek yerine karşı kanıt aranır.

2.2. Doğrulama ve karşı kanıt: "OEP sandığım yer gerçekten kod mu?"

OEP hipotezini güçlendiren ve zayıflatan işaretleri birlikte okumak gerekir:

  • Güçlendiren işaretler: Yeni bölgede derleyici kaynaklı giriş örüntülerinin veya tutarlı akışın görülmesi, davranış düğümlerinin (dosya/süreç/ağ/bellek) daha "uygulama mantığı" ile bağlanması.
  • Zayıflatan işaretler (karşı kanıt): Ulaşılan bölgede anlamsız veri kalıpları, yoğun "boş" alanlar, yürütülebilirlik tutarsızlığı veya yalnızca analisti oyalayan sahte geçişlerin (fake OEP) izlenimi.

İpucu OEP iddiasını tek gözleme bağlamak yerine, aynı çevrede birden fazla tekrar koşusunda geçiş anının "benzer hikâyeyi" üretip üretmediğini kontrol etmek raporu ciddi biçimde sağlamlaştırır. Tutarlılık artmıyorsa, hipotezi geri almak bir zayıflık değil, doğru analist refleksidir.

3) Dump alma ve dump sonrası doğrulama: "aldım" değil "geçerli mi?"

Dump, bellekte "çözülmüş" hâliyle görünen içeriği statik analize uygun bir artefakta dönüştürme girişimidir. Neden önemli? Çünkü packer katmanı, çözme işlemini tamamlamadan veya bağımlılıklar oturmadan alınan dump, analizi kilitleyen bozukluklar doğurabilir (özellikle import/IAT tarafında).

3.1. Zamanlama: hangi anda dump "delil" olur?

Dump'ın değerini belirleyen, çoğu zaman zamanlamadır:

  • Bazı senaryolarda bağımlılıkların (kütüphaneler/modüller) belleğe yüklenmesi ve çalışma zamanı çözümlemelerin oturması beklenir.
  • Çok erken alınan dump, statik analizde fonksiyon çağrılarının isimlendirilmesini ve akış çözümünü zorlaştırabilir.
  • Çok geç alınan dump ise zincirin "önceki aşamalarını" kaçırıp sahiplik analizini zayıflatabilir.

Bu yüzden ideal yaklaşım, hedef çıktınıza göre zamanlamayı seçmek ve bunu raporda gerekçelendirmektir.

Dikkat "Tek bir doğru dump anı" varsayımı, çok aşamalı zincirlerde kırılgandır. Farklı aşamalar farklı içerik taşır; tek bir dump'a aşırı güvenmek yerine, kanıt paketini aşama bazında kurgulamak çoğu zaman daha doğrudur.

3.2. Dump doğrulaması: bütünlük ve korelasyon

Dump sonrası "analize uygunluk" için ileri düzey doğrulama disiplini şunları içerir:

  • İç bütünlük: Kod ve veri bölgeleri, beklenen sınırlar ve ilişkilerle tutarlı mı?
  • Yürütülebilirlik tutarlılığı: Aynı ortamda tekrarlı gözlemlerde benzer davranış görünürlüğü oluşuyor mu?
  • Artifact korelasyonu: Dump'taki görünür akış/string/config parçaları, dinamik gözlemle tutarlı mı?
  • Sınırlılıkların yazılması: Hangi yürütme yolları tetiklenmedi; hangi çevresel koşullar test kapsamı dışında kaldı?

Bu bölümün çıktısı, "dump dosyası" değil; doğrulanmış bir analiz artefaktı ve onu savunan kanıt zinciridir.

4) Import Reconstruction ve IAT: dump neden "ham" gelir, nasıl anlamlandırılır?

Bellekten dökülen bir dosya çoğu zaman doğrudan çalışmaz; bunun temel nedeni, packer/loader katmanının dış bağımlılıkları (API'ler) çalışma zamanında çözümlemesi ve dump'ın disk formatında bu çözümlemeleri doğal hâliyle taşımamasıdır. Neden önemli? Çünkü import görünürlüğü, hem statik analizde fonksiyon isimleriyle yön bulmayı hem de davranış korelasyonunu ciddi ölçüde kolaylaştırır; ancak yanlış yeniden inşa, analizi yanıltabilir.

4.1. Üç yaklaşım: statik, dinamik, hibrit

  • Statik yaklaşım: Dump içindeki çağrı örüntülerinden ve yapısal ipuçlarından bağımlılıkları çıkarır. Dolaylı çağrılar ve özel resolver mantıkları altında hata riski büyür.
  • Dinamik yaklaşım: Çalışma sırasında gerçekten çağrılan fonksiyonları gözlemleyerek çıkarır. Kanıt gücü artar; fakat gözlem kapsamı, tetiklenen yürütme yollarıyla sınırlıdır.
  • Hibrit yaklaşım: Statik aday liste + dinamik doğrulama ile daha sağlam rapor dili üretir.

Örnek: Statik reconstruction geniş bir aday liste çıkarıyor; dinamik gözlem bu adayların sadece bir alt kümesini doğruluyor. Bu durumda raporda "aday bağımlılıklar" ile "doğrulanan çağrılar" ayrımı, tespit ekibinin yanlış önceliklendirmesini azaltır.

4.2. API Redirection ve belirsiz kalan fonksiyonlar: neyi kanıt sayarsın?

Bazı örnekler, çağrıları doğrudan hedef kütüphaneye değil, araya koyduğu yönlendirme katmanlarına (API redirection) taşıyabilir. Bu durum, yeniden inşa çıktısında "unknown/ambiguous" görünen öğeler doğurabilir. Burada güvenli yaklaşım:

  • "Unknown" görünen çağrıyı otomatik olarak kötü niyet kanıtı saymamak
  • Çağrının bağlamını (hangi davranış düğümüne bağlandığını) ve tekrar edilebilirliğini kontrol etmek
  • Rapor dilinde kesinliği düşürüp kanıt seviyesini doğru konumlandırmak

İpucu: Import/IAT çıktısını tek bir "nihai liste" gibi sunmak yerine, kanıt katmanları oluşturarak sunmak güçlüdür:

  • Statik adaylar (yapısal ipucu)
  • Dinamik doğrulanan çağrılar (gözlem kanıtı)
  • Belirsiz/yönlendirilmiş çağrılar (sınırlılık notu + ek inceleme önerisi)

4.3. Kanıt üretimi: yeniden inşa çıktısını denetlenebilir hâle getirmek

Yayınlanabilir raporda, import reconstruction sonuçları ham metin yığını yerine denetlenebilir bir formda paketlenir:

  • Kütüphane/fonksiyon → doğrulandı mı, aday mı?
  • Doğrulananlar için bağlam: hangi gözlemde, hangi davranış düğümüyle ilişkili?
  • Kullanılan yaklaşımın sınırlılıkları: hangi yollar tetiklenmedi, hangi çevresel koşullar yoktu?
  • Artefakt sürümleme: "dump_v1 / dump_v2" gibi revizyonların neden oluştuğu ve farkı

5) Çok aşamalı loader zinciri: "hangi aşama neyi taşıyor?"

Modern tehditlerde tek dosya tek yürütme mantığı sık bozulur. Loader zinciri, birden fazla aşamada farklı görevler üstlenebilir: çevre kontrolü, unpack, bağımlılık hazırlığı, ikinci/üçüncü aşama yerleştirme, nihai payload'ın bellekte çalıştırılması gibi. Neden önemli? Çünkü savunma çıktısı "nihai payload" ile sınırlı kalırsa, ilk erişim ve analizden kaçınma metodolojisini kaçırabilir; tespit kuralları yanlış bileşene odaklanabilir.

5.1. Aşama ayrımı: sınırlar, handoff ve "anahtar transferi"

Aşama ayrımı çoğu zaman şu ilişkilere dayanır:

  • Kontrol devri (handoff) anları
  • Disk artefaktı → bellek bölgesi → süreç/iş parçacığı gibi taşıyıcıların değişimi
  • Rol değişimi: "açma/taşıma"dan "davranış üretme"ye geçiş
  • Bazı zincirlerde bir aşamanın, diğerini açmak için gerekli veriyi/anahtarı taşıması

Örnek: Uydurma bir senaryoda ilk aşama, dosyanın sonuna eklenmiş (overlay) şifreli bir blok okuyor; bellekte çözüp yeni bir yürütme bölgesine yerleştiriyor ve kontrolü devrediyor. İlişki grafiğinde bu, "Aşama 1: taşıyıcı → Aşama 2: çözücü/yerleştirici → Aşama 3: davranış üreten bileşen" şeklinde gösterilir; her ok, bir gözlem kanıtına bağlanır.

5.2. Yöntem seçimi: parçalı analiz mi, uçtan uca korelasyon mu?

  • Parçalı analiz: Her aşamayı ayrı ele alır; açıklanabilirlik yükselir. Risk: zincir korelasyonu zayıf kalırsa davranış sahipliği yanlış yazılabilir.
  • Uçtan uca korelasyon: Zaman çizelgesi + süreç/bellek artefaktları birlikte okunur; sahiplik isabeti artar. Risk: veri hacmi büyür; kanıt paketlemeyi disiplinli yapmak gerekir.

Seçim, rapor hedefinize bağlıdır: olay müdahalesi için operasyonel doğruluk ve hız; araştırma için ayrıntılı bileşen ayrımı.

Dikkat: Bazı örnekler dump/analiz esnasında "analiz farkındalığı" sinyalleri üretebilir (ör. beklenmedik akış sapmaları, kısa ömürlü davranış). Bu tür sinyaller, Modül 6'da ele alınan anti-debug/anti-analiz ciddiyetiyle raporlanmalı; ancak rapor dili "nasıl aşılır" çizgisine kaymadan, gözlem ve etkisini kayıt altına almalıdır.

İpucu: Çok aşamalı zincirlerde "en çok gürültü üreten" aşama her zaman "en kritik" aşama değildir. Önceliği, dış dünya temasına bağlanan davranış düğümlerine (dosya/süreç/ağ/bellek) verip her düğümü aşama sahipliğiyle eşlemek, hem zamandan kazandırır hem de tespit çıktısının kalitesini artırır.

Terimler Sözlüğü

Terim Açıklama
PackerKodu/veriyi paketleyip çalışma anında açan taşıyıcı katman
ProtectorAnalizi zorlaştırmak için ek koruma/anti-analiz unsurları içerebilen koruyucu katman
Packingİkili içeriğini sıkıştırma/şifreleme/örtme gibi yöntemlerle gizleme
UnpackingPaketli içeriğin çalışma anında açılma sürecini analiz ederek görünürlüğü geri kazanma
StubUnpack sürecini başlatan/taşıyan küçük başlangıç kodu
OEP (Original Entry Point)Taşıyıcı katmandan gerçek program akışına geçişi temsil eden mantıksal giriş noktası
Tail jumpStub’ın işi bitirip kontrolü başka bölgeye “son geçiş” ile devretmesine dair yaygın geçiş örüntüsü
Dump / DumpingBellekteki çözülmüş içeriğin disk üzerinde bir artefakt olarak alınması
Import reconstructionDump sonrası dış bağımlılıkların (kütüphane/API) yeniden görünür kılınması
IAT (Import Address Table)İçe aktarılan fonksiyon adreslerinin ilişkilendirildiği tablo/yapı
EntropyVeri düzensizliği ölçümü; sıkıştırma/şifreleme olasılığına işaret edebilir
OverlayDosya sonuna eklenmiş veri bölgesi; bazen şifreli blok/konfigürasyon taşıyabilir
Loader chainÇok aşamalı yükleyici zinciri; her aşama farklı rol üstlenebilir
HandoffKontrol devri; bir aşamanın diğerine yürütmeyi devretmesi
StagerGenellikle hafif ilk aşama; ortamı yoklar ve sonraki aşamayı hazırlar
API redirectionAPI çağrılarını araya giren yönlendirme katmanlarına taşıyan örüntü; yeniden inşayı zorlaştırabilir
HeuristicKesin olmayan ama pratik işaretlere dayalı sezgisel değerlendirme

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Bir örnekte yüksek entropi görülüyor. En doğru çıkarım hangisidir?

A) Kesin zararlı olduğunun kanıtıdır.

B) Packing olasılığını artıran bir sinyaldir; tek başına hüküm verdirmez, diğer göstergelerle birlikte değerlendirilmelidir.

C) Dosyanın bozuk olduğunu kanıtlar.

D) Import reconstruction gereksizdir.

E) OEP otomatik olarak bulunmuştur.

  • Doğru: B
  • Gerekçe: Entropi tek başına kesinlik sağlamaz; yapısal/davranışsal sinyallerle birlikte okunmalıdır. Diğer şıklar aşırı kesin veya konuyla ilgisizdir.
  1. 2) “Size of Raw Data” ile “Virtual Size” arasında belirgin fark görülmesi teknik olarak en çok neyi destekler?

A) Dosyanın yalnızca 32-bit sistemde çalışacağını

B) Bazı kesitlerin bellekte dinamik biçimde doldurulacağı/şekilleneceği hipotezini

C) Dosyanın yalnızca görsel içerdiğini

D) Hash değerinin sabit kalacağını

E) Anti-analiz olmadığına dair kanıtı

  • Doğru: B
  • Gerekçe: Diskte küçük görünen ama bellekte şişen alanlar, unpack/yerleştirme mantıklarına işaret edebilir. Diğerleri doğrudan çıkarım değildir.
  1. 3) Import tablosunun olağandışı küçük olması hangi ifadeyle en doğru raporlanır?

A) “Dosya kesin zararlı.”

B) “Dosya kesin packed; %100 ispat.”

C) “Runtime çözümleme ihtimalini güçlendiren bir göstergedir; ek doğrulama gerekir.”

D) “Analiz burada bitmiştir.”

E) “IAT her zaman bozulur.”

  • Doğru: C
  • Gerekçe: Import yoksulluğu güçlü sinyal olabilir ama kesinlik için doğrulama gerekir. A/B aşırı kesin, D/E yanlış genellemedir.
  1. 4) OEP hipotezini güçlendiren en sağlıklı yaklaşım hangisidir?

A) Tek çalıştırmada görülen bir akış değişimini kesin kabul etmek

B) Geçiş anını belirleyip, aynı çevrede tekrar ederek tutarlılık ve karşı kanıt araması yapmak

C) Sadece imza/heuristic sonucuna göre OEP yazmak

D) OEP’yi rapora hiç dahil etmemek

E) OEP’yi yalnızca “sezgisel” diye belirtip kanıt vermemek

  • Doğru: B
  • Gerekçe: OEP bir geçiş olayıdır; tutarlılık ve karşı kanıt araması raporu denetlenebilir kılar.
  1. 5) Ulaşılan “OEP olduğu düşünülen” bölgede anlamsız/boş veri kalıpları görülüyorsa en doğru yorum hangisidir?

A) “Analiz başarıyla tamamlandı.”

B) “Bu bölge büyük olasılıkla geçerli yürütme akışı değil; hipotez revize edilmeli ve alternatif açıklamalar düşünülmeli.”

C) “Bu, dosyanın meşru yazılım olduğunun kanıtıdır.”

D) “Import reconstruction artık mümkün değildir.”

E) “Zincir tek aşamalıdır.”

  • Doğru: B
  • Gerekçe: Bu durum, yanlış geçiş anı veya sahte geçiş ihtimalini güçlendirir. Diğer şıklar temelsizdir.
  1. 6) Dump sonrası doğrulamada “artifact korelasyonu” neyi anlatır?

A) Dump dosyasının uzantısının doğrulanmasını

B) Dump içeriği ile dinamik gözlem bulgularının birbirini destekleyip desteklemediğini

C) Sadece hash’in hesaplanmasını

D) Sadece import listesinin çıkarılmasını

E) Sadece dosya boyutunun ölçülmesini

  • Doğru: B
  • Gerekçe: Korelasyon, farklı kanıt kaynaklarının aynı hikâyeyi doğrulamasıdır.
  1. 7) Import reconstruction çıktısının “kanıt değeri”ni artıran raporlama biçimi hangisidir?

A) Tek bir nihai liste verip kesin hüküm yazmak

B) Statik adayları ve dinamik doğrulananları katmanlayıp sınırlılıkları belirtmek

C) Sadece araç isimleri vermek

D) Sadece ekran görüntüsü koymak

E) Import listesini hiç yazmamak

  • Doğru: B
  • Gerekçe: Kanıt katmanları + sınırlılık şeffaflığı denetlenebilirlik sağlar.
  1. 8) API redirection gibi yönlendirme katmanları en çok hangi riski doğurur?

A) Entropiyi düşürür

B) Yeniden inşa araçlarının ürettiği bağımlılık listesinin belirsiz/yanıltıcı olmasına yol açabilir

C) OEP’yi otomatik olarak sabitler

D) Overlay’i ortadan kaldırır

E) Dosyayı meşru hâle getirir

  • Doğru: B
  • Gerekçe: Yönlendirme katmanları çağrı hedeflerini dolaylılaştırır; bu da reconstruction çıktısını belirsizleştirebilir.
  1. 9) Çok aşamalı loader zincirlerinde “Aşama 1” için en tipik rol hangisidir?

A) Nihai davranışların tamamını üretmek

B) Ortamı yoklamak/hazırlamak ve sonraki aşamayı taşımak/yerleştirmek

C) Import tablosunu kalıcı olarak bozmak

D) Sadece görsel arayüz göstermek

E) Entropiyi düşürmek

  • Doğru: B
  • Gerekçe: İlk aşama çoğunlukla hafif bir taşıyıcı/stager rolündedir; sonraki aşamayı hazırlar.
  1. 10) Yeniden üretilebilirlik (reproducibility) açısından hangisi en az gerekli bilgidir?

A) OEP hipotezinin dayandığı gözlem ve karşı kanıt özeti

B) Dump’ın hangi aşamaya ait olduğuna dair zaman çizelgesi

C) Kullanılan yaklaşımın sınırlılıkları (hangi yollar tetiklenmedi)

D) Artefakt sürümleme notları (v1/v2 farkı)

E) Analistin kullandığı bilgisayarın markası

  • Doğru: E
  • Gerekçe: Donanım markası genellikle metodolojik tekrar üretilebilirliğe doğrudan katkı sağlamaz; diğerleri kanıt zincirinin parçasıdır.

Bu modülde neler öğrendiniz?

  • Packer tespitini tek işarete bağlamadan, yapısal ve davranışsal sinyalleri birlikte okuyarak kanıt seviyesini doğru yönetebilme
  • OEP’yi bir adres değil, geçiş olayı olarak ele alıp hipotezi karşı kanıtla sınayabilme
  • Dump’ı “alınmış dosya” değil, bütünlük ve korelasyon kontrolleriyle doğrulanmış analiz artefaktı hâline getirebilme
  • Import reconstruction/IAT konusunu statik–dinamik–hibrit yöntem seçimiyle ele alıp, çıktıyı kanıt katmanları ve sınırlılıklar ile raporlayabilme
  • Çok aşamalı loader zincirlerinde aşama sahipliğini zaman çizelgesi ve ilişki grafiğiyle göstererek, tespit/IR çıktılarının doğruluğunu artırabilme

Modül 10 — In-Memory Teknikler ve Injection Analizi

Modern tehditler, disk üzerinde yakalanabilecek izleri azaltmak için yürütmeyi giderek daha fazla bellek içine taşır; bu da "dosya + imza" eksenli tespit ve tersine mühendislik akışlarını kırılgan hâle getirir. Bu modülde, bir sürecin "meşru görünmesine" rağmen belleğinde yabancı yürütme barındırdığı durumları nasıl anlayacağınızı; injection ve "module-less" yürütme örüntülerini doğrulama — karşı kanıt disipliniyle nasıl sınayacağınızı ve bulguları adli kanıt standardında raporlanabilir biçimde nasıl paketleyeceğinizi ele alacağız. Ayrıca debugging ile dinamik enstrümantasyonu birlikte kullanırken, hedef soruya göre yöntem seçimi yapmanın ve müdahale riskini yönetmenin pratiğini işleyeceğiz.

Bu Modülde Hedeflenen Kazanımlar

  • In-memory yürütmenin tipik izlerini (RWX bölgeleri, module-less code, şüpheli thread başlangıçları) tek sinyal yerine sinyal kümeleriyle değerlendirebilmek.
  • Process hollowing örüntülerini tespit edip “meşru süreç kimliği” ile “bellekte yürütülen içerik” arasındaki tutarsızlığı kanıtlayabilmek.
  • Thread injection ve reflective loading (özellikle reflective DLL injection) şüphesini, bellek artefaktları ve çalışma zamanı telemetrisiyle haritalandırabilmek.
  • Hooking ve instrumentation kavramlarını, “kötücül manipülasyon” ile “meşru gözlem/koruma” arasında kanıt temelli ayırabilmek.
  • Debugging + enstrümantasyonu hibrit stratejiyle kullanıp bulguları zaman çizelgesi, gözlem–yorum ayrımı ve yeniden üretilebilirlik notlarıyla delile dönüştürebilmek.

1) In-memory yürütme: görünürlük nereden geri kazanılır?

In-memory teknikler, yürütmeyi "dosya üzerinde" değil; bellek haritası, thread bağlamı, çağrı zincirleri ve çalışma zamanı API davranışları üzerinden şekillendirir. Bu yüzden başarı, tek bir IOC'ye yaslanmaktan çok, birbiriyle tutarlı kanıt parçaları üretmeye dayanır. Orta seviyede bellek — süreç telemetrisinin temel kontrol listesini ayrıntılı işlemiştik; burada kritik olan, aynı sinyalleri yanlış pozitifleri yönetebilecek biçimde ileri düzeyde okumaktır.

1.1. Module-less code ve bellek haritasında anormallikler

"Module-less code", yürütmenin işletim sisteminin "yüklü modüller" envanterinde görünmeyen, sürecin kendi private bellek bölgelerinde gerçekleşmesidir. Tipik uygulamalarda thread başlangıçları ve çağrı yığınları çoğu zaman bir modül içinde anlamlı bir yere oturur; buna karşılık module-less yürütme, iz sürmeyi zorlaştırır ve "bu akış nereden geldi?" sorusunu olay müdahalesinin merkezine taşır.

Sinyal kümeleriyle okunan başlıca göstergeler:

  • Bellek izinleri ve zaman içindeki geçişler: Yazılabilirlik/yürütülebilirlik bayraklarının davranışla birlikte değişmesi (özellikle kısa aralıklarla izin dönüşümleri)
  • Bölge türü korelasyonu: "Image" eşlemeleri ile "private" bölgelerin hangi davranış düğümüyle (ağ, yeni süreç, kalıcılık denemesi) eşleştiği
  • Thread start address bağlamı: Başlangıç noktasının modül aralığında olup olmadığı ve hangi bellek bölgesine düştüğü
  • Call stack tutarlılığı: Başlangıç adresi ilk bakışta meşru görünse bile, yığındaki çerçevelerin "normal başlatma akışı" ile uyumu

Örnek: Bir tarayıcı sürecinde beklenmedik bir thread başlıyor; start address, modül listesiyle ilişkisiz "private + yürütülebilir" bir bölgeye düşüyor. Aynı zaman penceresinde kısa süreli ağ temasları görülüyor. Bu tablo, in-memory yürütme hipotezini güçlendirir; karşı kanıt olarak da "tarayıcıların JIT derleyicileri yürütülebilir bellek üretebilir" olasılığı aynı anda masada tutulur.

Dikkat "Private executable" veya RWX benzeri göstergeler tek başına mahkûm edici değildir. JIT çalışma zamanları, codec/GPU bileşenleri, kurumsal güvenlik ajanları ve gözlem katmanları benzer izler bırakabilir. Bu yüzden bellek bulgusunu mutlaka thread başlangıcı + call stack + zaman çizelgesi + yan etki ile birlikte doğrulayın.

1.2. Doğrulama disiplini: karşı kanıtı baştan tasarlamak

İleri analizde doğrulama, yalnız "destekleyici" delil toplamak değildir; bulgunun yanlış olabileceği senaryoları kurup test etmektir. In-memory alanında yanlış pozitif maliyeti yüksek olduğundan, rapor dili de kanıt seviyesine uygun kurulmalıdır.

Karşı kanıtı güçlendiren sorular:

  • Bu örüntü, ilgili yazılım ailesinde normal olabilir mi (JIT, sandbox, erişilebilirlik eklentileri, EDR sensörleri)?
  • Aynı anormallik benzer sürüm ve kullanımda tutarlı mı, yoksa belirli tetikleyicilerde mi oluşuyor?
  • Anormallik dış dünya temasına (ağ, yeni süreç, kalıcılık izi) bağlanıyor mu, yoksa lokal ve etkisiz mi kalıyor?

İpucu Hızlı doğrulama için "temiz referans" yaklaşımını kullanın: aynı uygulamanın benzer sürümünde, benzer yük altında bellek haritası ve thread başlangıç örüntüsü nasıl görünüyor? Bu karşılaştırma, tek bir ekran görüntüsünden çok daha güçlüdür.

2) Process hollowing ve yapısal örüntüler: "güvenilir gövde, şüpheli içerik"

Process hollowing, dışarıdan bakıldığında meşru görünen bir süreç gövdesi içinde, bellekte yürütülen içeriğin beklenmedik biçimde farklılaşmasıyla karakterize edilen bir örüntü ailesidir. Pratikte süreç, "askıya alınmış" başlatma gibi ara evrelerden geçebilir; asıl kritik nokta, süreç kimliğinin iddia ettiği içerikle bellek içeriğinin uyuşmamasıdır. Bu teknik, olay müdahalesinde sık kullanılan "süreç adı/konumu/ebeveyn" gibi yüzey sinyallerini hedef aldığı için önemlidir.

2.1. "Skin-walker" süreçleri anlamak: yüzey ile içeriğin ayrışması

Bir sürecin "meşru gibi" görünmesi, bellekte gerçekten o ikilinin çalıştığı anlamına gelmez. Hollowing şüphesinde odak, disk üzerindeki dosya bilgisiyle bellek görüntüsü arasındaki farka kayar.

Güvenilir sinyal kümeleri:

  • Zamanlama ve süreç yaşam döngüsü sapmaları: Süreç doğar doğmaz bellek izinlerinin alışılmadık değişimi, beklenmeyen erken ağ teması gibi göstergeler
  • Bellek haritası tutarlılığı: Ana yürütme alanlarının beklenen image eşlemesiyle uyumu
  • Thread başlangıç bağlamı: Ana thread'in başlangıç noktası ve "normal başlatma rutini"yle uyum
  • Süreç içi yapı tutarlılığı: Süreç çevresel yapı bilgileriyle (ör. süreç ortam blokları ve image temel adresiyle ilgili alanlar) bellek haritasının birbirini destekleyip desteklemediği

Örnek: Bir ofis uygulaması süreci açılıyor; doğuşundan hemen sonra kısa aralıklarla bellek koruma değişimleri ve modül listesiyle ilişkisiz yürütülebilir bölgeler görülüyor. Aynı pencerede ağ teması başlıyor. Bu tablo "meşru süreç içinde yabancı yürütme" hipotezini güçlendirir; karşı kanıt olarak da eklenti yöneticileri veya güvenlik denetleyicilerinin benzer izler üretip üretmediği kontrol edilir.

2.2. Doğrulama: "bellekteki gerçek içerik" ile "diskteki iddia" uyumlu mu?

İleri doğrulama, "hangi teknikle yapıldı?"yı ezberlemekten çok, şu soruyu kanıtlamaya odaklanır: Bu süreç gerçekten iddia ettiği içeriği mi çalıştırıyor?

Bunu savunma bakışıyla kanıtlamak için pratik tariflere kaçmadan şu prensipler kullanılır:

  • Bellekteki yürütme bölgelerinin image/private niteliğini ve bölge sınırlarını belgelendirme
  • Thread başlangıçlarının düştüğü bölgeleri modül envanteriyle çapraz kontrol etme
  • Süreç içi bazı yapı alanlarının (ör. image temel adresiyle ilişkili göstergeler) bellek haritasıyla tutarlı olup olmadığını sınama
  • Aynı senaryoyu tekrar koşup anormalliklerin tekrarlanabilirliğini not etme

Dikkat "Şu değer uyuşmuyor, o hâlde tartışmasız hollowing" gibi kesinlik, pratikte risklidir. ASLR, meşru enstrümantasyon veya güncelleme/hotpatch mekanizmaları benzer sapmalar oluşturabilir. Bu yüzden tek bir yapısal sapmayı değil, birden çok bağımsız sinyali ve bunların zaman çizelgesindeki korelasyonunu kullanın.

2.3. Kanıt üretimi: rapora taşınacak minimum paket

Hollowing şüphesini raporda denetlenebilir kılan minimum paket:

  • Zaman çizelgesi: süreç oluşturma → anormal bellek değişimi → dış dünya teması (varsa)
  • Haritalama kanıtı: thread start address ↔ bellek bölgesi türü ↔ modül envanteri uyumu
  • Gözlem — yorum ayrımı: "ne görüldü" ve "ne anlama geldi" ayrı yazılır
  • Yeniden üretilebilirlik: kaç tekrar, hangi koşullar, tutarlılık düzeyi
  • Sınırlılıklar: tetiklenemeyen yürütme yolları, ortam bağımlılığı ihtimali

3) Thread injection ve reflective loading: yürütme bağlamını "başka yerde başlatmak"

Thread injection, hedef sürecin içine yeni bir yürütme birimi eklenmesiyle kodun o süreçte çalışmasına yol açan örüntüler ailesidir. Reflective loading (özellikle reflective DLL injection), standart yükleyici akışları yerine, bir bileşenin bellek içinde "yüklenmiş gibi" hazırlanmasını ifade eder. Bu iki yaklaşım, "modül listesinde görürüm / diskte yakalarım" varsayımını zayıflatır.

3.1. Remote thread injection örüntüleri: çalışma zamanı telemetrisi mi, bellek artefaktı mı?

Bazı vakalarda injection, süreçler arası bellek ayırma — yazma — uzaktan yürütmeyi başlatma gibi bir çağrı deseniyle görünür hâle gelir. Bu deseni saldırı tarifi gibi kullanmak değil, savunma açısından "neye bakmalıyım?" sorusuna cevap vermek önemlidir: belli fonksiyon ailelerinin ardışıklığı (örn. bellek ayırma, bellek yazma, uzaktan thread başlatma) hem canlı telemetride hem de sonradan adli incelemede iz bırakır.

Yöntem seçimi burada belirgindir:

  • Canlı analiz / triage: çalışma zamanı çağrı telemetrisi ile "hangi süreç kime dokunuyor?" sorusu hızlı yanıtlanır.
  • Geriye dönük analiz: hedef sürecin bellek görüntüsü ve thread start address'leri üzerinden "yürütme nerede başladı?" sorusu derinleştirilir.

Bu seçim, hedefinizin "olayı durdurmak" mı yoksa "kanıt üretmek" mi olduğuna göre yapılır; çoğu olayda ikisi birlikte gerekir.

İpucu Canlı telemetri geniş alanı hızlı süzer; bellek artefaktı ise "nerede başladı?" sorusunu netleştirir. Triageda geniş, kanıt üretiminde dar ve derin ilerleyen hibrit yaklaşım, zaman ve doğruluk dengesini en iyi kurar.

3.2. Reflective loading ve module-less PE izleri

Reflective loading'de, bileşen standart yükleyici mekanizmalarıyla görünür bir "yüklü modül" olarak kaydedilmeyebilir. Savunma açısından güçlü bir kanıt, modül envanterine bağlı olmayan bir bellek bölgesinde PE başlık izleri (ör. "MZ" imzası ve PE header yapısı) görülmesiyle başlar; fakat bu bulgu da tek başına hüküm değildir: bazı meşru paketleyiciler, sanal dosya sistemleri veya güvenlik ürünleri benzer yapıların bellek içi kopyalarını oluşturabilir.

Kanıtı güçlendiren doğrulama yaklaşımı:

  • PE başlık izlerinin bulunduğu bölgenin private/image niteliği
  • Bu bölgeye düşen thread start address veya bu bölgeyi çalıştıran akışın call stack bağlamı
  • Bölgenin davranışla korelasyonu (ağ, yeni süreç, kalıcılık)

Örnek: Bir metin düzenleyici süreci normal görünürken, kısa bir zaman penceresinde modül listesiyle ilişkisiz bir bellek bölgesinde PE başlık izleri görülüyor ve yeni bir thread'in başlangıcı bu bölgeye düşüyor. Aynı dakikada 192.0.2.44 adresine bağlantı denemesi kaydediliyor. Bulgular, "injection → yürütme başlangıcı → dış temas" sıralamasıyla rapor zaman çizelgesine işlenir; karşı kanıt olarak kurumsal ajan/eklenti davranışları elenir veya sınırlılık olarak not edilir.

3.3. Yanlış pozitifleri yönetmek: meşru injection ekosistemi

Kurumsal ortamlarda meşru injection kaynakları yaygındır: EDR sensörleri, overlay yazılımları, erişilebilirlik araçları, uygulama izleme ajanları. Bu yüzden karar, "injection var" demekten çok, sahiplik ve amaç kanıtlamaya kayar.

Sorulması gerekenler:

  • Davranış, kurumun yazılım envanteriyle uyumlu mu?
  • Farklı makinelerde aynı ajanla tutarlı mı?
  • Şüpheli bileşen, dış dünya teması veya kalıcılık gibi ek düğümlerle birlikte mi geliyor?

4) Şüpheli bellek bölgeleri ve RWX analizi: "riskli izin"i delile çevirmek

RWX (Read — Write — Execute), bir bellek bölgesinin hem yazılabilir hem yürütülebilir olmasını ifade eder. Güvenli tasarım ilkelerinde "W^X" (yazılabilir ve yürütülebilir izinlerin aynı anda verilmemesi) hedeflenir; fakat pratikte bazı çalışma zamanları ve performans odaklı bileşenler RWX benzeri durumlar üretebilir. Bu nedenle RWX, bir "alarm"dır; hüküm değildir.

4.1. RWX'i anlamlı kılmak: "var" değil, "ne zaman ve neyle birlikte?"

RWX'i değerlendiren ileri seviye yaklaşım, şu korelasyonları arar:

  • RWX ne zaman oluştu (süreç doğuşu mu, çalışma ortası mı)?
  • RWX ile aynı pencerede yeni thread başladı mı? Start address nereye düşüyor?
  • Bölge private mı, modül envanteriyle ilişkisiz mi?
  • RWX oluşumu, ağ teması veya yeni süreç gibi dış düğümlere bağlanıyor mu?

Örnek: Bir çalışma zamanında RWX benzeri bölgeler her çalıştırmada benzer anda oluşuyor ve call stack, bilinen çalışma zamanı modüllerine işaret ediyor. Buna karşılık ikinci senaryoda, RWX bölgesi oluşur oluşmaz hedef süreçte yeni thread başlıyor ve başlangıç bu bölgeye düşüyor; ardından ağ teması görülüyor. İkinci tablo, doğrulama önceliğini yükseltir.

Dikkat RWX'i tek bir "kare" üzerinden değerlendirmek, in-memory analizde en sık düşülen tuzaktır. En güçlü kanıt, RWX'in zaman içindeki evrimi ve davranış düğümleriyle korelasyonudur; raporda bunu zaman çizelgesiyle göstermek, denetlenebilirliği belirgin artırır.

4.2. RWX'in meşru kaynaklarını elemek: çağrı zinciri ve bağlam

Bir RWX bölgesinin JIT gibi meşru bir kaynaktan mı yoksa şüpheli bir enjeksiyondan mı geldiğini anlamada en güvenilir yaklaşım, bölgenin "kimin tarafından" ve "hangi akışla" tetiklendiğini göstermektir. Burada call stack ve çapraz referans mantığı (Xref) değerlidir: kodun nereye çağrıldığını değil, hangi zincirle oraya gelindiğini anlatır.

5) Hooking ve instrumentation: müdahale mi, gözlem mi?

Hooking, bir çağrıyı başka bir noktaya yönlendirme veya araya katman ekleme yaklaşımıdır; instrumentation ise çalışma zamanında davranışı görünür kılmak için çağrı izleme ve bağlam toplama gibi gözlemsel teknikler bütünüdür. Tehditler hooking ile API sonuçlarını manipüle ederek gizleme veya kontrol elde etme peşinde olabilir; aynı zamanda güvenlik ürünleri de gözlem/koruma için hooking veya benzeri teknikler kullanabilir. Bu ikili gerçeklik, bulgunun yorumunda karşı kanıt aramayı zorunlu kılar.

5.1. Inline hooking tespiti: bellek ile disk arasındaki "sapma"yı okumak

Inline hooking'de, bir fonksiyonun girişindeki ilk baytların yönlendirme kalıbına dönüşmesi sık görülen bir işarettir. Savunma açısından "ispat" dili, genellikle bellek içi fonksiyon giriş baytlarıyla diskteki referans kopya arasında byte seviyesinde karşılaştırma yapabilmeyi ve sapmanın davranış etkisini gösterebilmeyi gerektirir.

Doğrulama burada iki eksende yürür:

  • Sapma gerçek mi? Diskteki referansla bellek farkı var mı?
  • Sapma neye hizmet ediyor? Bu yönlendirme hangi davranış düğümüne bağlanıyor?

Bu noktada yanlış pozitif yönetimi kritiktir: hotpatch mekanizmaları, güvenlik ajanları veya uyumluluk katmanları da benzer sapmalar üretebilir. Bu yüzden "sapma gördüm" cümlesi değil, "sapma + etki + sahiplik" paketi raporu güçlü kılar.

Örnek: Bir sistem çağrısının sonucu değişmiş gibi görünüyor ve belirli dosyalar listelenmiyor. Bellekte ilgili fonksiyon girişinde sapma saptanıyor. Karşı kanıt olarak güvenlik ajanlarının aynı sistemde benzer yönlendirmeler yapıp yapmadığı kontrol ediliyor; sapma yalnız belirli süreçlerde ve belirli zaman pencerelerinde ortaya çıkıyorsa şüphe artıyor.

5.2. Instrumentation'ın rolü: "etkiyi" yakalamak, kanıtı genişletmek

Dinamik enstrümantasyon (önceki modüllerdeki yaklaşım) burada iki şeye yarar:

  • Şüpheli yürütmenin hangi çağrıları tetiklediğini ve bunun davranışla ilişkisini görünür kılmak
  • Hook şüphesini yalnız statik farkla değil, çalışma zamanındaki etki ile desteklemek

İpucu: Enstrümantasyon bulgusunu tek koşuda kesinleştirmeyin. Bazı örnekler gözlem altında farklı yollara sapabilir; bazı meşru yazılımlar da performans/uyumluluk nedeniyle davranışı değiştirir. Karşılaştırmalı tekrar ve sınırlılık notu, raporu "denetlenebilir" kılar.

6) Debugging + enstrümantasyon hibrit stratejisi: hedef soruya göre yöntem seçimi

Bu modülde yöntem seçimi, "hangi araç daha güçlü?" sorusundan çok "hangi soruya cevap arıyorum?" üzerinden yapılır:

  • Kırılma anını (handoff, thread start, bellek izin değişimi) kanıtlamak için debugging güçlüdür.
  • Davranışın kapsamını (hangi çağrılar, hangi bağlamlar) hızlı haritalamak için enstrümantasyon güçlüdür.
  • En sağlam yaklaşım çoğu vakada hibrittir: biri olayı yakalar, diğeri olayın etkisini genişletir.

6.1. Hibrit akışın rapora taşınması: kanıt standardı

Hibrit analiz çıktısını delile dönüştürmek için raporda şu yapı "hissedilir" olmalıdır:

  • Zaman çizelgesi: süreç/thread telemetrisi + bellek değişimleri + çağrı izleri aynı hikâyeyi destekler
  • Gözlem — yorum ayrımı: "şu görüldü" ile "bu şu anlama gelir" ayrı yazılır
  • Yeniden üretilebilirlik: koşullar ve tutarlılık (kaç tekrar, hangi sonuç)
  • Sınırlılıklar: tetiklenemeyen yollar, gözlemin davranışı etkileme ihtimali, ortam bağımlılığı

Terimler Sözlüğü

Terim Açıklama
In-memory executionKodun disk izi minimum olacak şekilde bellek içinde yürütülmesi
InjectionKodun başka bir süreçte/bağlamda yürütülmesine yol açan yerleştirme örüntüleri
Process hollowingMeşru süreç görünümü altında bellek içeriğinin yabancı yürütmeye evrilmesi örüntüleri
Suspended stateBir sürecin oluşturulup yürütmeye başlamadan önceki askıya alınmış evresi
UnmappingBir image eşlemesinin bellekten kaldırılması/yeniden düzenlenmesiyle ilgili işlemler sınıfı
PEB (Process Environment Block)Süreç hakkında kritik bilgileri tutan Windows veri yapısı
ImageBaseBir modülün belleğe eşlendiği temel adresle ilişkili kavram/alan
Reflective loadingStandart loader akışı dışında, bileşenin bellek içinde “yüklenmiş gibi” hazırlanması
Reflective DLL injectionBir DLL’in standart yükleyici izleri sınırlı olacak şekilde bellekten hazırlanıp yürütülmesi örüntüleri
Module-less codeYüklü modüller listesinde karşılığı görünmeyen, private bölgelerde yürüyen kod
PE headerPE biçimine ait başlık yapısı; bellek içinde görüldüğünde bağlama göre anlam kazanır
RWXOkuma–yazma–çalıştırma izinlerinin aynı bölgede bulunması
W^XYazılabilir ve yürütülebilir izinlerin aynı anda verilmemesi hedefi (güvenli tasarım ilkesi)
Thread start addressİş parçacığının yürütmeye başladığı adres; bellek bölgesiyle korelasyonu kritiktir
Call stackÇağrı yığını; yürütmenin bağlam zincirini gösterir
Xref (cross-reference)Kod parçaları arasındaki referans ilişkisi; bağlamı güçlendirir
Inline hookFonksiyon girişinin yönlendirme/müdahale kalıbına dönüştürülmesi örüntüsü
Byte comparisonBellek ve disk kopyaları arasında bayt düzeyinde karşılaştırma yaklaşımı
InstrumentationÇalışma zamanında çağrıları/veriyi gözlemleyerek görünürlük sağlama yaklaşımı
TriageGeniş alanı hızlı süzüp önceliklendirme yaklaşımı
ReproducibilityYeniden üretilebilirlik; aynı koşullarda benzer sonucun elde edilebilmesi

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) RWX bulgusunu tek başına “zararlı” diye raporlamak neden risklidir?

A) RWX yalnızca eski sistemlerde görülür

B) RWX bazı meşru çalışma zamanlarında da görülebilir; korelasyon gerekir

C) RWX hiç riskli değildir

D) RWX yalnızca disk üzerinde oluşur

E) RWX yalnızca ağ trafiğiyle anlaşılır

  • Doğru: B
  • Gerekçe: RWX meşru senaryolarda da görülebilir; kanıt gücü zaman çizelgesi, thread başlangıcı ve yan etki korelasyonuyla yükselir. A/C/D/E genelleme veya hatalıdır.
  1. 2) “Module-less code” şüphesini en çok güçlendiren sinyal kümesi hangisidir?

A) Süreç adının alışılmadık olması

B) Private yürütülebilir bölge + thread başlangıcının bu bölgeye düşmesi + call stack tutarsızlığı

C) Dosyanın dijital imzasının olması

D) CPU kullanımının düşük olması

E) Pencere başlığının değişmesi

  • Doğru: B
  • Gerekçe: Bellek bölgesi türü + thread başlangıcı + call stack birlikte güçlü korelasyon sağlar. Diğerleri zayıf veya dolaylıdır.
  1. 3) Process hollowing benzeri bir şüphede “en sağlam doğrulama” yaklaşımı hangisine yakındır?

A) Süreç adı meşruysa incelemeyi bırakmak

B) Tek bir ekran görüntüsüyle raporu tamamlamak

C) Bellek haritası + thread başlangıçları + zaman çizelgesini birleştirip temiz referansla karşılaştırmak

D) Sadece ağ trafiğine bakmak

E) Sadece imza taramasına güvenmek

  • Doğru: C
  • Gerekçe: In-memory örüntülerde doğrulama çoklu kanıt ve karşılaştırmalı referansla güçlenir. A/B/D/E tek boyutludur.
  1. 4) Process hollowing şüphesinde “tek bir yapısal sapma” ile kesin hükme gitmek neden sakıncalıdır?

A) Çünkü sapmalar hiç görülmez

B) ASLR, hotpatch veya meşru enstrümantasyon benzer sapmalar üretebilir; çoklu sinyal gerekir

C) Çünkü bellek haritası her zaman aynıdır

D) Çünkü süreç adı her şeyi kanıtlar

E) Çünkü call stack işe yaramaz

  • Doğru: B
  • Gerekçe: Tek sinyal yanlış pozitif üretir; çoklu bağımsız sinyal ve korelasyon gerekir. A/C/D/E yanlış veya zayıf genellemedir.
  1. 5) Reflective loading şüphesinde “en güçlü teknik delil” hangi bulguya en yakındır?

A) Diskte yeni bir dosya oluşması

B) Modül envanteriyle ilişkisiz bir bölgede PE başlık izleri + bu bölgeyle korele thread başlangıcı/akış

C) CPU sıcaklığının artması

D) Pencere başlığının değişmesi

E) Sadece “MZ” görülmesi

  • Doğru: B
  • Gerekçe: PE izleri tek başına yeterli olmayabilir; akış ve thread bağlamıyla birleşince delil gücü yükselir. E tek başına zayıftır.
  1. 6) “Süreçler arası injection” şüphesini en çok güçlendiren kanıt paketi hangisidir?

A) Hedef süreçte CPU artışı

B) Süreçler arası olağandışı erişim telemetrisi + yeni thread’in modül dışı yürütülebilir private bölgeye düşmesi

C) Kullanıcının şikâyeti

D) Dosya yolunun kısa olması

E) Sadece ağ trafiği

  • Doğru: B
  • Gerekçe: Süreçler arası etkileşim + thread başlangıç konumu birlikte injection hipotezini güçlendirir. Diğerleri dolaylıdır.
  1. 7) Inline hooking’i kanıtlamak için en kritik doğrulama yaklaşımı hangisidir?

A) Yazılımın sürüm bilgisine bakmak

B) Bellekteki fonksiyon giriş baytlarını disk referansıyla karşılaştırıp sapmanın davranış etkisini göstermek

C) RAM miktarını ölçmek

D) Ekran çözünürlüğünü kontrol etmek

E) Sadece “JMP gördüm” demek

  • Doğru: B
  • Gerekçe: Kanıt, “sapma var” ve “sapma neye hizmet ediyor” sorularını birlikte yanıtlamalıdır. E tek başına yetersizdir.
  1. 8) Bir RWX bölgesinin meşru JIT kaynağı mı yoksa şüpheli bir yürütme mi olduğunu ayırt etmede en güvenilir ipucu hangisine yakındır?

A) Sadece bölgenin boyutu

B) Call stack bağlamı ve tetikleyici zincirin bilinen çalışma zamanı modülleriyle uyumu

C) Dosya uzantısı

D) Monitör markası

E) Antivirüs puanı

  • Doğru: B
  • Gerekçe: Bağlam zinciri, “kim tetikledi?” sorusunu yanıtlar. A/E tek başına zayıftır, C/D alakasızdır.
  1. 9) Hibrit analizde (enstrümantasyon + debugging) yöntem seçimini en doğru yöneten kriter hangisidir?

A) Hangi araç daha popüler

B) Daha hızlı görünen yöntem

C) Yanıtlanacak soru: kırılma anını mı kanıtlayacağım, davranış kapsamını mı haritalayacağım?

D) Dosya uzantısı

E) Ekran çözünürlüğü

  • Doğru: C
  • Gerekçe: Yöntem seçimi hedef soruya göre yapılır; popülerlik veya hız tek başına doğru ölçüt değildir.
  1. 10) Aşağıdakilerden hangisi raporun denetlenebilirliğini en çok artırır?

A) Çok sayıda kesin hüküm cümlesi

B) Zaman çizelgesi + gözlem–yorum ayrımı + yeniden üretilebilirlik notu + sınırlılıklar

C) Uzun araç listesi

D) Tek bir ekran görüntüsü

E) Sadece sonuç paragrafı

  • Doğru: B
  • Gerekçe: Denetlenebilirlik, kanıt zinciri ve tekrarlanabilirlik ile oluşur. A/C/D/E raporu kırılgan bırakır.

Bu modülde neler öğrendiniz?

  • Bellek içi yürütmeyi, tek bir işarete yaslanmadan sinyal kümeleri ve korelasyon ile okumayı
  • Process hollowing, thread injection ve reflective loading şüphesini doğrulama–karşı kanıt disipliniyle sınamayı
  • RWX ve module-less bulgularını “var/yok” yerine zaman çizelgesi ve bağlam ile anlamlandırmayı
  • Hooking bulgularında “sapma + etki + sahiplik” paketini kurarak kanıt standardını yükseltmeyi
  • Debugging ve enstrümantasyonu hibrit stratejiyle kullanıp bulguları raporlanabilir adli delile dönüştürmeyi öğrenmiş olacaksınız.

MODÜL 11 — Shellcode ve Post-Exploitation Artefaktları

MODÜL 11 — Shellcode ve Post-Exploitation Artefaktları

Modül Teması

Shellcode Anatomisi

Position-independent kod, encoder/decoder ve API çözümleme.

In-Memory Yükler

Reflective DLL, process hollowing, doppelgänging.

Artefakt İzleri

Bellek, disk ve ağ üzerinde post-ex parmak izleri.

Bir saldırı zincirinde "en gürültüsüz" görünen bölüm çoğu zaman istismar sonrası yürütmenin bellek içinde şekillendiği aşamadır. Shellcode bu noktada, tek başına "asıl zararlı" olmaktan çok, sonraki bileşenleri sahneye çıkaran kısa ömürlü bir taşıyıcı gibi davranır. Bu yüzden ileri seviye bir analistin önceliği, "ne yapıyor?"dan önce "gerçekten shellcode mu; yoksa shellcode'a benzeyen meşru bir runtime davranışı mı?" sorusunu kanıtla netleştirmektir. Modül boyunca; konumdan bağımsız kod (PIC) işaretleri, self-decoding (kendi şifresini çözen) akışların bıraktığı izler, polymorphism altında imza ezberinin neden işe yaramadığı, ROP'un (Return-Oriented Programming) analist perspektifinden nasıl "hissedildiği" ve exploit sonrası zincirde exploit — shellcode — (stager) — payload ayrımını rapor denetimine dayanacak delil standardında nasıl kuracağın ele alınır.

Bu Modülde Hedeflenen Kazanımlar

  • Shellcode olasılığını tek bir belirtiye bağlamadan; veri profili, yürütme bağlamı ve kontrol devri sinyallerini birlikte okuyarak doğrulayabilmek.
  • PIC mantığını ve self-decoding döngülerini “gözlem–yorum” ayrımıyla değerlendirmek; yanlış pozitifleri karşı kanıt arayışıyla azaltabilmek.
  • Polimorfik örüntülerde değişken yüzeyleri ayıklayıp daha kalıcı akış/davranış ortaklıklarını kanıt seviyesinde gösterebilmek.
  • ROP şüphesini yığın (stack) ve istisna/kaza bağlamı üzerinden analiz edip, “izlenim” ile “ispat” sınırını doğru çizmek.
  • Post-exploitation zincirinde katmanları (exploit, stage 0 shellcode, stage 1 stager, final payload) teknik rapor standardında ayırıp ilişkilendirebilmek.
  • Bulguları zaman çizelgesi, yeniden üretilebilirlik notları ve sınırlılıklarla paketleyerek tespit/müdahale kararlarına doğrudan hizmet edecek şekilde raporlayabilmek.

1) Shellcode tanıma: PIC ve decoder stub perspektifi

Shellcode, işletim sisteminin standart yükleyicisine bel bağlamadan belleğin farklı noktalarında çalışabilen saf ikili koddur. "Neden önemli?" çünkü disk üzerinde dosya izi zayıf olduğunda veya yürütme meşru bir sürecin içinde gizlendiğinde görünürlük, dosyadan değil bellek haritası, thread bağlamı ve kontrol devrinden geri kazanılır.

1.1. PIC (Position-Independent Code) işaretleri: "kendi adresini bilmek zorunda"

PIC, kodun sabit adres varsaymadan çalışabilmesidir. Shellcode'un tipik ihtiyacı, çalışma anında "ben neredeyim?" sorusuna yanıt bulmaktır; bu nedenle kendi adresini elde etmeye yönelik motifler (ör. CALL/POP benzeri akışlar veya bazı mimarilerde durum kaydından adres türetme yaklaşımları) görülebilir. Ayrıca ithal tablo (IAT) gibi konforlar yoksa, sistem kütüphanelerine ulaşmak için süreç içi yapılara (PEB/LDR gibi) "dolaylı" dokunuşlar da gözlenebilir.

Bu tip işaretler tek başına hüküm kurdurmaz; kanıt gücü, bağlamla yükselir:

  • Kodun bulunduğu bölgenin veri profili (kısa, yoğun, az anlamlı sabit veri)
  • Thread'in nereden başladığı ve çağrı yığınının "doğal uygulama akışı" ile tutarlılığı
  • Aynı zaman penceresinde kontrol devri, bellek izin geçişleri ve yan etkiler (ör. ağ teması, yeni süreç)

Örnek: Bir belge görüntüleyici sürecinde kısa bir süre için yoğun işlem yapan küçük bir bellek aralığı görülüyor; akış, bu aralığa yakın bir noktaya devrediyor ve hemen ardından beklenmedik bir dış bağlantı denemesi aynı zaman penceresinde beliriyor. PIC/shellcode hipotezi makul görünür; fakat karşı kanıt olarak meşru eklenti, JIT bileşeni veya güvenlik ajanı davranışı temiz referansla kontrol edilmeden "kesin" dil kullanılmaz.

Dikkat: PIC işaretleri "ara — bul — etiketle" mantığıyla güvenilirleşmez. Aynı motifler, hatalı kod yolları, runtime optimizasyonları veya izleme ajanları nedeniyle de görülebilir. PIC iddiası, mutlaka kontrol devri + yürütme bağlamı + zaman çizelgesi ile desteklenmelidir.

1.2. Decoder stub ve self-decoding döngüler: "çöz — devret" hikâyesini kanıtlamak

Self-decoding shellcode, taşınma sırasında şifreli/sıkıştırılmış halde bulunup, baştaki küçük bir decoder stub ile bellekte çözülür. "Neden önemli?" çünkü analist burada iki farklı gerçeklik görür: çözülmemiş veri ve çözülmüş yürütülebilir içerik. Yanlış zamanda yorum yapmak, yanlış IOC/konfigürasyon çıkarımına ve raporun denetimde kırılmasına yol açar.

Güçlü doğrulama, hipotezi iki taraftan sınar:

  • Destekleyen delil: Aynı bellek aralığında ardışık dönüşüm izleri ve hemen ardından kontrol devri; dönüşüm sonrası akışın daha "yapılandırılmış" görünmesi (daha anlamlı kontrol akışı, daha belirgin işlevsel bloklar); tekrar koşularında benzer zaman penceresi.
  • Karşı kanıt araması: Bu, zararlı bir decoder stub mı; yoksa meşru bir koruyucu/packer stub'ı veya runtime davranışı mı? Çözüm sonrası davranış yalnız yerel bir kontrol/işleme mi yapıyor, yoksa dış dünya temasına bağlanıyor mu?

Burada yöntem seçimi, sorunun niteliğine göre yapılır:

  • Emülasyon yaklaşımı (statik emülasyon motorlarıyla decoder kısmını izole etme fikri): Hızlı triage için iyi bir seçenektir; yürütmeyi gerçek sisteme "az müdahaleyle" görünür kılmayı hedefler.
  • Çalışma anı izleme yaklaşımı (debugger / dinamik izleme): Doğru bağlamı yakaladığında daha açıklayıcıdır; fakat yürütmeyi etkileme riski daha yüksektir ve bulguların sınırlılıkları raporda açıkça yazılmalıdır.

Örnek: Şüpheli blokta ilk bakışta düzensiz görünen içerik, kısa bir döngüsel dönüşümden sonra daha tutarlı bir akışa evriliyor ve kontrol devri gerçekleşiyor. Emülasyon yaklaşımı, "çözülmüş hâli" hızlıca görünür kılmak için uygun; çalışma anı izleme ise bu dönüşümün hangi thread bağlamında ve hangi yan etkilerle gerçekleştiğini kanıtlamak için daha değerlidir.

İpucu: Decoder stub analizinde en sağlam delil çoğu zaman "tek kare" değil, önce/sonra farkıdır. Aynı bellek aralığının dönüşüm öncesi ve dönüşüm sonrası durumunu zaman penceresiyle birlikte rapora koymak, yorumun dayanağını görünür kılar.

1.3. Shellcode şüphesini güçlendiren sinyal kümeleri: "tutarlı hikâye"

Tek başına "yüksek düzensizlik/entropy" veya "garip baytlar" ispat değildir. Güçlü yaklaşım, birbiriyle tutarlı sinyalleri bir araya getirmektir:

  • Boyut ve yoğunluk profili: Kısa aralıkta yüksek işlem yoğunluğu, az sabit veri, belirgin bir amaç hissi (çoğu zaman "hazırla — çöz — devret").
  • Kendi kendini dönüştüren izler: Aynı aralığa ardışık yazmalar ve ardından o aralığa/yanına kontrol devri.
  • Dolaylı bağımlılıklar: Açık isimler yerine dolaylı çözümleme eğilimleri; API resolving fikriyle uyumlu davranış kümeleri.
  • Yürütme bağlamı: Thread başlangıcı, call stack tutarlılığı, bellek izin geçişleri ve yan etkilerle korelasyon.

Dikkat: "Rastgele görünen baytlar = shellcode" refleksi, ileri analizde en pahalı hatalardan biridir. Birçok meşru bileşen (JIT, codec, güvenlik ajanı) benzer izler bırakabilir. Bu nedenle shellcode iddiası, bağlam ve zaman çizelgesiyle kanıtlanmadıkça yalnızca hipotez düzeyinde tutulmalıdır.

1.4. Kanıt üretimi: raporda "shellcode" demenin asgari standardı

Raporun denetlenebilir olması için "shellcode" ifadesi, şu iskelete oturmalıdır:

  • Gözlem — yorum ayrımı
  • Gözlem: hangi süreçte, hangi thread bağlamında, hangi bellek aralığında; dönüşüm ve kontrol devri hangi zaman penceresinde görüldü?
  • Yorum: bu gözlemler, decoder stub + PIC/shellcode hipoteziyle ne ölçüde uyumlu?
  • Zaman çizelgesi: dönüşüm başlangıcı → kontrol devri → (varsa) yan etki (ağ, yeni süreç, kalıcılık işareti)
  • Yeniden üretilebilirlik notu: kaç tekrar koşusu, hangi koşullarda tutarlılık?
  • Sınırlılıklar: gözlemin yürütmeyi etkilemiş olma ihtimali, tetiklenemeyen yollar, ortam bağımlılığı

2) Polymorphism: değişken yüzey altında kalıcı ortaklıklar

Polymorphism, shellcode'un her bulaşmada/paketlemede farklı bir bayt dizisiyle görünmesini sağlayan mutasyon yaklaşımıdır. "Neden önemli?" çünkü statik imza tabanlı savunmalar, değişken decoder stub ve anahtar değişimleri nedeniyle hızla etkisizleşir. Analistin avantajı, yüzeyi değil işlevi ve akışı yakalamaktır.

2.1. Dinamik mutasyonun tipik resmi

Polimorfik yapılarda çoğu zaman şu görülür:

  • Decoder stub biçimi ve register tercihleri değişir
  • Şifreleme anahtarı ve "gürültü" talimatları (anlamsız aritmetik/akış oyalamaları) değişir
  • Buna karşın deşifre sonrası ortaya çıkan işlevsel çekirdek veya sonraki bileşenin davranış düğümleri benzer kalabilir

Burada yöntem seçimi, hedefe göre belirlenir:

  • Statik benzerlik aramak hızlıdır ama kırılgandır; kaçırma riski yüksektir.
  • Davranış/akış odaklı analiz daha dayanıklıdır; iyi zaman çizelgesi ve kanıt paketleme ister.
  • Hibrit yaklaşım çoğu vakada en güvenlisidir: statik ipuçları adayları daraltır, dinamik/bağlamsal kanıt doğrular.

Örnek: İki olayda görülen bellek içi yürütme parçaları bayt düzeyinde belirgin biçimde farklı; ancak her ikisinde de "dönüşüm → kontrol devri → hemen ardından dış dünya teması" sırası aynı zaman pencerelerinde tekrar ediyor. Bu durum, aynı kampanya/aile olasılığını artırır; raporda kesinlik, karşı kanıtlar elendikçe yükseltilir.

2.2. Kanıt üretimi: "polimorfik" iddiasını raporlayabilir kılmak

"Bu polimorfik" demek, ancak karşılaştırmalı kanıtla anlam kazanır. Denetlenebilir bir paket şunları içerir:

  • Farklı örneklerde decoder stub akışlarının yapısal farklarının (rol ve akış açısından) yan yana gösterimi
  • Deşifre sonrası ortaya çıkan çekirdeğin/sonraki bileşenin daha kalıcı bir göstergeyle eşleştirilmesi (ör. SHA-256 gibi kriptografik özetle veya davranışsal imzayla), fakat bu göstergenin tek başına hüküm olmadığının not edilmesi
  • Karşı kanıt: benzer mutasyon davranışı üreten meşru packer/koruyucu veya runtime senaryoları var mı?

İpucu: Polimorfizm analizinde "aynı görünüyor" kadar "aynı işi yapıyor mu?" sorusu da kritiktir. Raporu güçlendiren şey, değişken yüzeyi anlatmak değil; değişken yüzeyin altında kalan kalıcı rol ve etkiyi kanıtlamaktır.

3) ROP: DEP/NX ve ASLR gölgesinde "iz" okumak

Modern işletim sistemlerinde NX/DEP, veri bölgelerinde kod yürütmeyi zorlaştırır; ASLR ise adres öngörüsünü belirsizleştirir. ROP, bu tür kısıtlar altında meşru kod parçacıklarını (gadgets) zincirleyerek kontrol akışı kurma yaklaşımıdır. Bu modülde amaç, ROP'un "nasıl icra edildiğini" öğretmek değil; olay anında ortaya çıkan istisna/kaza bağlamı ve yığın anomalilerinden hangi kanıtların üretilebileceğini anlamaktır.

3.1. Gadget zinciri ve stack pivoting: analist için anlamı

Gadget'lar genellikle kısa, sonu "geri dönüş" mantığıyla tamamlanan kod parçalarıdır. Stack pivoting ise yığın işaretçisinin beklenen yığın alanı dışına taşınmasıyla, kontrol edilen bir belleğe "yeni yığın" gibi davranılmasıdır. "Neden önemli?" çünkü pivot, ROP şüphesini güçlendiren çok kuvvetli bir sinyaldir; ancak yine de bağlam ve karşı kanıtla ele alınmalıdır (bazı çökme senaryolarında yığın bozulması benzer izler üretebilir).

Doğrulama yaklaşımı "tek işaretle hüküm" yerine şunu hedefler:

  • İstisna/kaza zamanı: olay hangi koşulda tetiklendi, hangi thread bağlamında oluştu?
  • Yığın tutarlılığı: dönüş adresleri ve çağrı zinciri, beklenen uygulama akışıyla uyumlu mu?
  • Yığın sınırları: işaretçi beklenen aralıkların dışına taşmış mı, bu taşma hangi davranış düğümüyle korele?

Yöntem seçimi baskısı olduğunda (zaman kısıtı, triage):

  • Zinciri "tek tek çözmek" her zaman en verimli yol değildir.
  • Daha operasyonel yaklaşım, zincirin "amacını" kanıtlayacak izleri öncelemektir: örneğin bellek izinleriyle ilişkili kritik çağrıların ortaya çıkışı ve bunun zaman çizelgesindeki yeri. Burada amaç, kötüye kullanımı tarif etmek değil; kanıtı doğru sınıflandırmaktır.

Örnek: Bir uygulama belirli bir girdide istisna veriyor; yığın, normal fonksiyon çağrısı görüntüsünden sapmış ve akış beklenmedik biçimde "dolaylı" dönüşlerle ilerliyor. Bu ROP hipotezini gündeme getirir. Eğer temiz referansta aynı girdi aynı sapmayı üretiyorsa, bu karşı kanıt "uygulama hatası/uyumsuzluk" olasılığını güçlendirir ve rapor dilini kesinlikten uzaklaştırır.

Dikkat: ROP "izlenimi" ile ROP "ispatı" aynı şey değildir. Yalnızca bir yığın görüntüsüne dayanarak kesin hüküm vermek, denetimde en kolay kırılan rapor hatalarındandır. İddia, bağlam, tekrar edilebilirlik ve alternatif açıklamaların elenmesiyle güçlenmelidir.

4) Post-exploitation zinciri: exploit — shellcode — stager — payload ayrımı

Bir olayda karşına çıkan veri yığını, çoğu zaman iç içe geçmiş katmanlardan oluşur. Analistin görevi, bu katmanların anatomisini ayırıp birbirine bağlamaktır; "neden önemli?" çünkü savunma açısından "nasıl girildi?" (exploit) ile "ne yapıldı?" (payload) ayrımı, hangi koruma katmanının nerede başarısız olduğunu ve hangi tespit yüzeylerinin güçlendirileceğini belirler.

4.1. Katmanlı anatomi ve rol tanımları

  • Exploit: zafiyeti tetikleyen kısım (ör. özel hazırlanmış bir veri akışı veya dosya içeriği)
  • Stage 0 (Shellcode): bellek içinde ilk yürütülen PIC odaklı taşıyıcı; çoğu zaman görünürlük azaltma ve bir sonraki aşamayı başlatma rolünde
  • Stage 1 (Stager): daha büyük ana bileşeni getiren/kurmaya hazırlayan ara katman; çoğu vakada ağ teması veya yeni içerik edinimiyle korele olur
  • Final payload: asıl davranışı üreten bileşen (bilgi toplama, uzaktan komut yürütme, kalıcılık vb.); burada amaç "ne yaptığı"nı kanıtlayıp müdahale kararına bağlamaktır

Bu ayrımı raporlamak için, "handoff" (kontrol devri) noktaları kritik önemdedir:

  • Kontrol devri hangi zaman penceresinde oldu?
  • Hangi thread/bellek aralığı devraldı?
  • Handoff'tan sonra hangi davranış düğümü (ağ, süreç, kalıcılık) ortaya çıktı?

Örnek: Önce kısa ömürlü bir bellek akışı "hazırlık" yapıyor; ardından farklı bir bölgede daha uzun süre çalışan bir bileşen ortaya çıkıyor ve ağ teması bu ikinci bileşenle zamansal olarak örtüşüyor. Raporda ilk parça "stage 0 taşıyıcı", ikinci parça "stage 1 / final'e geçiş" olarak sınıflandırılır; ayrım, kontrol devri ve zaman çizelgesiyle ispatlanır.

İpucu: Shellcode analizinde bazı "taşıma kısıtları" (ör. belirli baytların veri akışında sorun çıkarması) görülebilir; bu, saldırganın hedeflediği zafiyet türünü öğretmek için değil, analistin "taşıma yolu" ve "paketleme davranışı" hakkında daha temkinli yorum yapması için bir sinyaldir. Blue team odağı, bu sinyali hangi sistem çağrıları/işlevsel düğümler takip ediyor sorusuna bağlamaktır.

Terimler Sözlüğü

Terim Açıklama
Shellcodeİstismar sonrası erken aşamada çalışan, çoğu zaman kısa ömürlü ve sonraki bileşeni başlatmaya odaklı saf makine kodu
Post-exploitationİlk yürütmenin ardından gelen; bileşen yerleştirme, görünürlük azaltma ve davranış üretme aşamalarını kapsayan süreç
PIC (Position-Independent Code)Konumdan bağımsız kod; bellekte farklı adreslerde çalışabilen kod yapısı
Decoder stubŞifreli/sıkıştırılmış içeriği çalışma anında çözüp kontrolü çözülen kısma devreden başlangıç akışı
Self-decodingKodun kendi içeriğini çalışma anında çözmesi/dönüştürmesi yaklaşımı
PolymorphismKodun her varyantta farklı bayt dizileriyle görünmesi; imza tabanlı tespiti zorlaştırır
ROP (Return-Oriented Programming)Meşru kod parçacıklarını zincirleyerek kontrol akışı kuran istismar yaklaşımı; burada “iz” ve “kanıt” perspektifiyle ele alınır
GadgetROP zincirinde kullanılan kısa kod parçacığı
Stack pivotingYığın işaretçisinin beklenen yığın alanı dışına taşınmasıyla kontrol edilen bellek üzerinden akış kurulması
NOP sledShellcode’a ulaşmayı kolaylaştırmak için, yürütmeye etkisi olmayan talimatlarla oluşturulan “kızak” benzeri ön dizi
DEP/NXVeri bölgelerinde kod yürütmeyi zorlaştıran yürütme engelleme mekanizması
ASLRAdres alanı düzenini rastgeleleştirerek adres öngörüsünü zorlaştıran koruma
StagerDaha büyük ana bileşeni getiren/kurmaya hazırlayan ara aşama bileşen
Final payloadAsıl işlevsel davranışı üreten ana bileşen
HandoffKontrol devri; yürütmenin bir bağlamdan/katmandan diğerine geçtiği kırılma anı
ReproducibilityYeniden üretilebilirlik; bulguların benzer koşullarda tutarlı biçimde tekrar gözlenebilmesi
SHA-256Örnekler arası eşleştirme ve bütünlük kontrolünde kullanılan kriptografik özet türü

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Bir bellek dökümünde küçük bir aralıkta yoğun dönüşüm izleri ve hemen ardından kontrol devri görülüyor. En güvenli ilk yorum hangisidir?

A) Kesin shellcode; rapora “zararlı” yazılır

B) Decoder stub olasılığı vardır; bağlam ve karşı kanıtlarla doğrulanmalıdır

C) Bu her zaman meşru JIT davranışıdır

D) Bu kesinlikle yalnız bir packer’dır; post-exploitation ile ilgisi yoktur

E) Tek bir gözlem yeter; tekrar koşusu gereksizdir

  • Doğru: B
  • Gerekçe: Dönüşüm + kontrol devri decoder stub hipotezini güçlendirir; ancak meşru runtime/packer gibi alternatifler karşı kanıtla sınanmalıdır. A/E aşırı kesinlik; C/D tek açıklamaya saplanmadır.
  1. 2) PIC/shellcode olasılığını en sağlam biçimde güçlendiren kanıt paketi hangisine yakındır?

A) Sadece yüksek entropy

B) Sadece “garip baytlar” gözlemi

C) Yürütme bağlamı + kontrol devri + zaman çizelgesi + (varsa) yan etki korelasyonu

D) Sadece süreç adı

E) Tek bir ekran görüntüsü

  • Doğru: C
  • Gerekçe: In-memory iddialar çoklu ve tutarlı kanıtla güçlenir. Diğer seçenekler tekil ve denetlenebilirliği zayıf göstergelerdir.
  1. 3) Decoder stub analizinde yanlış pozitifi en hızlı düşüren karşı kanıt sorusu hangisidir?

A) “Bu kodu nasıl hızlandırırım?”

B) “Temiz referansta benzer dönüşüm/akış düzenli olarak görülüyor mu?”

C) “Dosya adı neden uzun?”

D) “Ekran çözünürlüğü kaç?”

E) “CPU kullanımı düşük mü?”

  • Doğru: B
  • Gerekçe: Meşru runtime veya koruyucu stub davranışı, temiz referansla kıyaslanarak hızlıca sınanabilir. Diğerleri ya alakasız ya da kanıt değeri düşüktür.
  1. 4) Polimorfik yapılarda imza tabanlı tespitin zorlanmasının temel nedeni nedir?

A) Kod hiç değişmez, sadece isim değişir

B) Decoder stub ve anahtar/“gürültü” bölümleri değişerek bayt dizisini sürekli farklılaştırır

C) Polimorfizm sadece metin dosyalarında olur

D) Polimorfizm yalnızca ağ trafiğiyle anlaşılır

E) Polimorfizm tespit edilemez

  • Doğru: B
  • Gerekçe: Polimorfizm yüzeyi değiştirir; sabit bayt dizilerine dayalı imzalar hızla eskir. C/D/E genelleme veya yanlış çıkarımdır; A tersidir.
  1. 5) “Kod polimorfiktir” iddiasını denetlenebilir kılacak en güçlü yaklaşım hangisidir?

A) Tek örneği inceleyip aile adı vermek

B) Decoder stub’ların yapısal farklarını karşılaştırmak ve deşifre sonrası daha kalıcı göstergelerle (özet/davranış) ilişkilendirmek

C) Sadece dosya boyutlarını kıyaslamak

D) Sadece AV skorunu yazmak

E) Sadece IOC listesi vermek

  • Doğru: B
  • Gerekçe: Polimorfizm yüzeyi değiştirir; kanıt, karşılaştırma ve kalıcı rol/etki üzerinden kurulmalıdır. Diğerleri kırılgandır.
  1. 6) ROP şüphesinde “izlenim” ile “ispat” arasındaki sınırı en doğru yöneten rapor dili hangisidir?

A) “Yığın garip, kesin ROP”

B) “Yığın anomalileri ROP olasılığını düşündürüyor; bağlam, tekrar edilebilirlik ve alternatif açıklamalar elenmeden ispat denemez”

C) “ROP varsa her şey açıklanır”

D) “ROP’la ilgili hiçbir şey yazmayalım”

E) “Süreç adı meşruysa ROP yoktur”

  • Doğru: B
  • Gerekçe: Kanıt seviyesiyle uyumlu, denetlenebilir ve temkinli bir dildir. A/C/E aşırı ve kırılgan; D eksiktir.
  1. 7) Stack pivoting gözlemi neden analist açısından değerlidir?

A) Her zaman meşru çalışmayı gösterir

B) Yığın işaretçisinin beklenen sınırların dışına taşması, ROP benzeri akışların güçlü bir sinyali olabilir; yine de bağlamla doğrulanmalıdır

C) Sadece performans sorunlarını açıklar

D) Sadece log dosyasında görülür

E) Yalnızca disk üstünde gerçekleşir

  • Doğru: B
  • Gerekçe: Pivot, kontrol akışının olağandışı kurulmasına işaret edebilir; ancak “kesin” demeden bağlam/karşı kanıt gerekir. A/C/D/E yanlış genellemelerdir.
  1. 8) Exploit–payload ayrımı raporda neden kritiktir?

A) Raporu uzatmak için

B) “Nasıl girildi?” ile “ne yapıldı?”yı ayırarak hangi savunma katmanının nerede başarısız olduğunu netleştirmek için

C) Sadece görsel düzen için

D) İşlemci sıcaklığını kanıtlamak için

E) Analistin kimliğini gizlemek için

  • Doğru: B
  • Gerekçe: Savunma stratejisi, giriş vektörü ile etkiyi ayrı ele almayı gerektirir. Diğer seçenekler alakasızdır.
  1. 9) Reproducibility (yeniden üretilebilirlik) notları hangi durumda raporu en çok güçlendirir?

A) Tek koşuda çıkan sonucu kesin hükme taşırken

B) Bulguların hangi koşullarda tekrarlandığını ve hangi koşullarda tetiklenmediğini açıkça yazarak

C) Sadece araç isimlerini listeleyerek

D) Sadece sonuç paragrafı yazarak

E) Sadece ekran görüntüsü ekleyerek

  • Doğru: B
  • Gerekçe: Tekrarlanabilirlik ve sınırlar, denetlenebilirliği artırır. Diğerleri kanıt standardını tek başına yükseltmez.
  1. 10) Post-exploitation zincirinde “bileşen ayrımı”nı operasyonel olarak en değerli kılan unsur hangisidir?

A) Her bileşeni teorik olarak uzun anlatmak

B) Handoff noktalarını zaman çizelgesinde gösterip, her katmanın rolünü dayanak kanıtla ilişkilendirmek

C) Sadece süreç adlarını yazmak

D) Sadece tek bir bellek görüntüsü paylaşmak

E) “Temizlendi” demek

  • Doğru: B
  • Gerekçe: Savunma ekibine değer katan şey “hangi parça neyi yaptı?” sorusunu kanıtla yanıtlamaktır; diğerleri ilişki ve rol ayrımını zayıf bırakır.

Bu modülde neler öğrendiniz?

  • Shellcode/PIC olasılığını tek işaretle değil; bağlam, kontrol devri ve zaman çizelgesiyle doğrulamanın disiplinini kazandın.
  • Self-decoding/decoder stub akışlarını “önce–sonra” farkı üzerinden kanıtlamayı ve yanlış pozitifleri temiz referans/karşı kanıtla yönetmeyi pekiştirdin.
  • Polimorfizm altında değişken yüzeyleri ayıklayıp kalıcı rol ve etki ortaklıklarını raporlanabilir düzeye taşımayı öğrendin.
  • ROP şüphesini yığın ve istisna bağlamından okuyup, “izlenim” ile “ispat” arasındaki sınırı doğru çizmeyi benimsedin.
  • Exploit–shellcode–stager–payload ayrımını handoff noktalarıyla ilişkilendirerek saldırı zincirini teknik kanıtlarla haritalandırmayı yapılandırdın.
  • Bulguları gözlem–yorum ayrımı, yeniden üretilebilirlik ve sınırlılık notlarıyla denetlenebilir rapor standardında paketlemeyi öğrendin.

MODÜL 12 — Memory Forensics (Bellek Adli İnceleme)

MODÜL 12 — Memory Forensics (Bellek Adli İnceleme)

Modül Teması

Bellek Edinimi

Canlı sistemden bütünlüğü korunmuş image alma yöntemleri.

Yapı Analizi

EPROCESS, VAD, handle table ve kernel nesneleri.

Anomali Avcılığı

Hidden process, code injection ve hooking tespiti.

Diskte "temiz" görünen bir vakada bile asıl hikâye çoğu zaman RAM'de saklıdır: kısa ömürlü loader parçaları, belleğe enjekte edilmiş kod bölgeleri, geçici ağ bağlantı bağlamları ve çalışma anında şifre çözülmüş yapılandırmalar... Bu modül, bellek adli incelemeyi yalnızca "liste aldım" seviyesinden çıkarıp; bulguyu doğrulama, kanıtı rapora taşınabilir hale getirme ve birden çok yöntem arasından doğru seçimi yapma disiplinleriyle ele alır. Amaç, bellek artefaktlarını tekil işaretler olarak değil; zaman çizelgesine oturan, karşı kanıtı da hesaba katan ve denetimde ayakta kalan bir kanıt zinciri olarak kurabilmektir.

Bu Modülde Hedeflenen Kazanımlar

  • Bellek dökümü almanın teknik gerekçelerini doğru kurmak; vakaya uygun döküm yaklaşımını seçmek.
  • Enjekte edilmiş bellek bölgelerini ve “gizli süreç” izlerini yapısal tutarsızlıklar ve çapraz doğrulama ile sınamak.
  • Handle ve ağ soketi artefaktlarıyla zararlının sistem üzerindeki etki alanını haritalandırmak.
  • Bellekte yakalanan şifre çözülmüş metin/anahtar/config parçalarını güvenli ve denetlenebilir biçimde ayıklamak; sınırlılıkları doğru yazmak.
  • Bulguları yeniden üretilebilir, itiraz edilebilirliği düşük bir “teknik kanıt paketi” haline getirmek.

1) Bellek dökümü: gerekçeler ve yöntemsel yaklaşım

Bellek dökümü, çalışan sistemin o ana ait "anlık fotoğrafı"dır; neden önemli dersen, dosya temelli incelemenin kaçırdığı in-memory davranışları (module-less yürütme, geçici şifre çözümleri, kısa süreli bağlantılar) çoğu zaman sadece bu fotoğraf yakalar. Ancak bellek dökümü her zaman "en doğru" hamle değildir; yanlış zamanda veya yanlış kapsamla alındığında hem olayı etkileyebilir hem de kanıt değerini zayıflatabilir.

1.1. Neden bellek analizi?

Dosyada gördüğün ikili paketli/şifreli olabilir; fakat işlemcinin kodu yürütebilmesi için içerik çalışma anında RAM'de "açık" hale gelmek zorundadır. Bu, bellek dökümünün bazı vakalarda günler sürebilecek çözümleme işini ciddi biçimde kısaltabileceği anlamına gelir: diskteki katmanlar "tam çözülmeden" bile, bellek tarafında fonksiyonel parçalar görünür olabilir.

Örnek: Bir finans uygulamasında kısa aralıklarla anormal CPU sıçramaları ve çok kısa ömürlü ağ denemeleri görülür; disk üzerinde yeni bir ikili yoktur. Bellek dökümü gerekçesi "çalışma anında ortaya çıkan geçici bileşen var mı?" hipotezini test etmektir. Karşı kanıt arayışı olarak aynı uygulamanın temiz kurulumunda benzer davranış pencereleri oluşup oluşmadığı planın parçası yapılır.

1.2. Yöntem seçimi: canlı gözlem mi, offline analiz mi? Tam döküm mü, süreç bazlı mı?

Aynı hedefe giden birden fazla yol vardır ve seçim üç risk üzerinde yapılır:

  • Müdahale riski: Canlı inceleme de döküm alma da sistemi etkiler. Bazı vakalarda "daha sınırlı ve ölçülebilir" müdahale, hızlıca döküm alıp offline çalışmaktır; bazı vakalarda ise hizmet sürekliliği yüzünden önce minimum canlı gözlem tercih edilir.
  • Zaman riski: Uçucu artefaktlar (anahtar/config, kısa ömürlü bağlantılar) gecikmeyle kaybolabilir.
  • Kanıt kalitesi riski: Offline analiz tekrar edilebilirlik sağlar; canlı gözlemde "kayıt altına alınmamış" kritik bir ayrıntı kaçabilir.

Kapsam seçimi de aynı mantığa bağlanır:

  • Tam sistem dökümü daha geniş bağlam sağlar; kernel-mode şüphesi, çoklu süreç korelasyonu veya rootkit benzeri senaryolarda daha anlamlı olabilir (bu çizgi doğal olarak Modül 13'e bağlanır).
  • Süreç bazlı döküm hedef süreç netleştiğinde hız kazandırır; fakat bağlam daraldığı için "kaçırılan ilişki" riski artar.

İpucu: Karar verirken "en çok neyi kaybetmek istemiyorum?" sorusu işe yarar. Uçucu bir anahtar/config parçasını kaçırmak en büyük riskse geniş kapsamlı döküme eğilim artar; sistem kritik bir hizmet veriyorsa ve müdahale maliyeti yüksekse, önce minimum müdahaleli kanıt paketi (zaman bilgisi, süreç görünürlüğü, temel telemetri) toplanıp döküm planı daha kontrollü kurulabilir.

1.3. Doğrulama ve kanıt paketleme: dökümün kendisi de kanıttır

Bellek dökümünde "bulgu" kadar, dökümün bütünlüğü ve analiz edilebilirliği de kanıt değerini belirler. Bu yüzden:

  • Dökümün değişmediğini gösterecek bütünlük özeti (ör. SHA-256) ve zincir kayıtları (kim aldı, ne zaman, hangi koşulda) raporla uyumlu tutulur.
  • Analiz aracı/çerçevesinin işletim sistemi sürüm bağlamını doğru yorumladığına dair temel tutarlılık kontrolleri yapılır. Buradaki amaç "araç çalıştı" demek değil; yanlış profil/yanlış adres çevirimi gibi hataların bulguyu yanlış yere götürmesini engellemektir.
  • Rapor dili gözlem — yorum ayrımını korur: "Döküm şu koşulda alındı" gözlemdir; "Bu koşul, şu sınırlılığı doğurur" yorumdur.
  • Yeniden üretilebilirlik için işaretleme yapılır: Hangi süreç bağlamı, hangi bellek bölgesi türü, hangi artefakt sınıfı... (Ham adres detaylarına boğulmadan, bağımsız inceleyenin aynı sonucu bulabilmesini sağlayacak kadar.)

Dikkat: Bellek dökümü "gerçeği sabitlemek" gibi görünse de, toplama sırasında sistem üzerinde etkisi vardır. Bu nedenle "döküm aldık, kesin gerçeği yakaladık" yaklaşımı güvenli değildir; her bulgu, döküm koşullarının getirdiği sınırlılıklarla birlikte sunulmalıdır.

2) Injected region, VAD anomalileri, gizli süreç izleri ve handle analizi

Bellekte gizlenmek, ileri seviye tehditlerin temel refleksidir. Bu gizliliği bozmanın yolu; veri yapılarındaki tutarsızlıkları yakalamak, tek bir işarete yaslanmamak ve mutlaka karşı kanıt aramaktır.

2.1. Enjekte edilmiş bellek bölgelerini okuma: "harita" tutarlılığı

Enjekte edilmiş bölge, bir sürecin adres alanında normal yükleme akışına uymayan yürütülebilir içerik barındırmasıdır; neden önemli dersen, birçok in-memory teknik diskte iz bırakmadan çalışmayı hedefler ve izler RAM'de kalır.

Bu noktada süreç adres alanının "haritasını" temsil eden yapılar (Windows dünyasında VAD ağaçları gibi) çok değerlidir: hangi aralıkların hangi izinlerle ayrıldığını, hangi bölgelerin dosyayla eşleştiğini ya da "özel/anonim" kaldığını anlamaya yarar.

Analist için anlamlı sinyal kümeleri:

  • Dosyayla eşleşmeyen yürütülebilir sayfalar (module-less içerik şüphesi)
  • Yazılabilir + çalıştırılabilir gibi nadir görülen izin kombinasyonları (tek başına hüküm değil; güçlü bir önceliklendirme sinyali)
  • Thread başlangıç bağlamının "normal modül sınırları" dışında görünmesi
  • Haritalama tutarsızlıkları: modül listelerinde yok ama bellek bölgelerinde PE benzeri bir yapı/başlık taşıyor olması
  • Zaman korelasyonu: şüpheli bölge oluşumu ile ağ teması / yeni süreç / kalıcılık denemesi gibi düğümlerin örtüşmesi

Örnek: Bir tarayıcı sürecinde dosyayla eşleşmeyen yürütülebilir bellek bölgesi görülür ve aynı zaman penceresinde kısa süreli dış bağlantılar oluşur. Bu tablo enjeksi­yon hipotezini güçlendirir. Karşı kanıt olarak, yoğun JIT aktivitesi veya güvenlik ajanlarının benzer bellek izleri üretip üretmediği temiz profille kıyaslanır; rapor dili "kesin" yerine kanıt gücüyle orantılı kurulmalıdır.

Dikkat: "RWX gördüm = enjeksi­yon" refleksi, bellek adli incelemede en sık yanılgılardan biridir. Bazı meşru bileşenler de benzer izin izleri bırakabilir. Kanıt gücü; süreç bağlamı, zaman çizelgesi ve bağımsız artefaktlar birlikte olduğunda yükselir.

2.2. Gizli süreç izleri: tek görünürlük kaynağına güvenmeyen çapraz doğrulama

"Gizli süreç" pratikte çoğu zaman şunu anlatır: süreç görünürlüğü sağlayan bazı listeler/bağlı yapılar ile bellek üzerindeki imza/kalıntı aramaları birbiriyle uyuşmaz. Neden önemli? Çünkü sadece "klasik süreç listesi"ne bakmak, bazı manipülasyonlarda seni kör bırakabilir.

Yöntem seçimi burada iki yaklaşımı dengeler:

  • Liste tabanlı görünürlük hızlıdır; triage için uygundur ama manipülasyona daha açıktır.
  • Bellek taraması/kalıntı temelli görünürlük daha dayanıklıdır; ancak yanlış pozitif ve "eski kalıntı" riski taşır.

Doğrulama sorusu nettir: "Bulduğum iz aktif çalışan bir süreci mi temsil ediyor, yoksa bellek kalıntısı mı?" Bu ayrımı güçlendiren çapraz kontroller:

  • Sürecin ağ soketi / handle ilişkileri var mı?
  • Şüpheli injected region veya modül tutarsızlığı ile zaman çizelgesinde örtüşüyor mu?
  • Aynı tip sapma, temiz profilde oluşuyor mu?

Bu sınıfta adı sık geçen kavramlardan biri DKOM (çekirdek nesne manipülasyonu) gibi tekniklerdir. Burada kritik olan, "nasıl yapılır" değil; hangi tür tutarsızlıkların bu yönde şüphe doğurduğu ve bu şüpheyi hangi karşı kanıtların zayıflatabileceğidir. Bazı durumlarda tutarsızlık, saldırıdan değil; sistem kararlılığı sorunlarından veya yakalama koşullarından da kaynaklanabilir.

İpucu: Çapraz doğrulamayı raporda küçük bir "görünürlük matrisi" ile sunmak denetim gücünü artırır: liste tabanlı görünürlükte var/yok, bellek taramasında var/yok, ağ soketi korelasyonu var/yok, handle korelasyonu var/yok... Böylece tek bir "var" sinyaliyle kesin hüküm kurulmadığı görünür hale gelir.

2.3. Handle analizi: dokunaçları haritalandırma

Handle, bir sürecin sistem nesnelerine (dosya, registry anahtarı, senkronizasyon nesnesi, süreç, thread, bellek bölümü/section vb.) tuttuğu referanstır; neden önemli dersen, "hangi şeye erişti?" sorusunu çoğu zaman loglardan daha net yanıtlar.

Handle analizi değerini üç soruda gösterir:

  • Süreç hangi nesne sınıflarına yoğun erişmiş? Bu profil meşru çalışma modeline uyuyor mu?
  • Hedef nesneler ve erişim düzeyleri olağan mı? Özellikle başka süreç nesnelerine "çok yüksek yetkili" erişimler, bellek manipülasyonu/enjeksi­yon hipotezlerini destekleyebilir.
  • Handle ilişkileri, ağ soketi ve bellek bölgesi anomalileriyle tutarlı bir hikâye kuruyor mu?

Örnek: Bir ofis uygulamasının sürecinde, beklenmeyen ölçüde başka süreç nesnelerine yoğun erişim görülür; aynı zaman penceresinde şüpheli thread başlangıç izleri vardır. Bu tablo "şüpheli süreçler arası etkileşim" hipotezini güçlendirir. Karşı kanıt olarak, meşru eklentilerin veya güvenlik ajanlarının benzer ilişki kurup kurmadığı değerlendirilir.

Ek bir artefakt sınıfı olarak mutex (karşılıklı dışlama nesnesi) de sık görünür: bazı zararlılar "aynı anda ikinci kez çalışmamak" veya kampanya işaretlemek için karakteristik mutex isimleri kullanır. Bu, aile/varlık avcılığı için pratik bir IOC olabilir; ancak her mutex IOC değildir — meşru yazılımlar da benzer desenler kullanabilir.

3) Ağ soketleri, modül listeleri ve süreç içi artefaktlar

Bellekteki ağ soketleri ve modül görünürlükleri, olayın "o anki topolojisini" verir. Disk loglarıyla çelişki olduğunda mesele "hangisi doğru?" tartışmasına sıkışmamalı; çelişkinin neden oluştuğu açıklanmalıdır.

3.1. Ağ soketleri: bağlantıyı süreçle ve zamanla bağlamak

Ağ soketi, bir sürecin ağ iletişimine dair çalışma zamanı nesnesidir; neden önemli dersen, kısa süreli veya loga düşmeyen bağlantılar RAM'de iz bırakabilir ve süreç — bağlantı bağını kurmana yardım eder.

Kanıt gücünü artıran korelasyonlar:

  • Soketin hangi süreç bağlamıyla ilişkili olduğu
  • Zaman çizelgesinde soketin, injected region veya modül tutarsızlığıyla örtüşmesi
  • Uzak uç ve port kalıplarının normal uygulama profiliyle uyumu/uyumsuzluğu

Örnek: Bir güncelleme hizmeti sürecinde beklenmeyen bir uzak uçla bağlantı izi görülür (ör. 203.0.113.110 gibi dokümantasyon IP bloğundan uydurma bir örnek). Aynı süreçte modül listesi tutarsızlığı ve dosyayla eşleşmeyen yürütülebilir bölge de varsa, ağ bulgusu "tek başına" değil, bileşik kanıtın parçası olarak yazılır. Karşı kanıt olarak kurumsal proxy/telemetri katmanının bu süreci farklı uçlara yönlendirip yönlendirmediği değerlendirilir.

3.2. Modül listeleri ve module-less kod: "yüklü görünen" ile "haritada duran" farkı

Modül listeleri, bir süreçte "yüklenmiş" görüntüleri temsil eder; neden önemli dersen, bazı teknikler modülleri standart loader akışını kullanmadan belleğe yerleştirerek (yansıtmalı/reflective yükleme gibi) klasik listelerde görünürlüğü azaltabilir. Bu nedenle:

  • Loader tabanlı görünürlük hızlıdır ama manipülasyona açıktır.
  • Bellek haritası taraması, modül listesinde olmayan PE benzeri görüntüleri yakalamada güçlüdür; fakat meşru haritalamalarla karışabilir.

Bu çelişkilerde, loader'ın iç yapılarında kalan kırıntılar (örneğin ntdll tarafındaki bazı hash tabanlı tablolar gibi) bazen dolaylı izler bırakır. Burada amaç "tek bir iç yapı her şeyi çözer" iddiası değil; çoklu görünürlük kaynağı ile doğrulama disiplinidir.

3.3. Süreç içi artefaktlar: komut satırı, ortam ve bellek kalıntıları

Süreç içi artefaktlar, sürecin çalışma zamanı kimliğini (komut satırı, environment, bazı yapılandırma parçaları) taşıyabilir. Neden önemli? Çünkü saldırı zinciri bazen "hangi parametreyle çağrıldı?" veya "hangi yapılandırmayla çalıştı?" sorusuyla çözülür.

Bu bulguları rapora taşırken iki çizgi korunur:

  • Artefaktın gerçekten ilgili sürece ait olduğunun doğrulanması (yanlış eşleşme riskini azaltmak)
  • İçerikte hassas veri olabileceği için raporda "gereken kadar göster" ilkesinin uygulanması (maskeli, asgari, savunma kararına hizmet eden biçimde)

Dikkat: Bellek üzerinde "eski oturumdan kalmış" kirli veriler (free pages kalıntıları) bulunabilir. Bu yüzden bir string'i rapora taşımadan önce, aktif süreç bağlamıyla ilişkisini ve bulunduğu bellek bölgesinin güvenilirliğini doğrulamak gerekir.

4) Decrypted string, anahtar ve config çıkarımı

Bellek, şifreli verinin kısa bir süreliğine açık hale geldiği yerdir: decrypted string çözülmüş metin parçasıdır; key material kriptografik işlemlerde kullanılan geçici anahtar materyalidir. Neden önemli? Disk üzerinde şifreli duran yapılandırma/iletişim parametreleri çalışma anında bellek üzerinde okunabilir hale gelebilir.

4.1. "Bu gerçekten config mi?": doğrulama stratejisi

En sık hata, rastgele veriyi "anahtar" sanmak veya tek bir string parçasını "C2" diye etiketlemektir. Güvenli doğrulama yaklaşımı:

  • Çevre bağlam: veri, bir yapılandırma anahtar — değer örgüsünün içinde mi? tekrar eden formatlar var mı?
  • Zaman tutarlılığı: aynı veri farklı anlarda tutarlı biçimde tekrar ortaya çıkıyor mu?
  • Davranış korelasyonu: ağ teması, dosya erişimi veya süreç içi API davranışlarıyla uyumlu mu?

4.2. Yöntem seçimi: bellekten mi yakalarsın, runtime gözlemi mi seçersin?

Aynı hedefe iki ileri yol vardır:

  • Bellek adli inceleme: anlık fotoğraftan çıkarım yapar; offline tekrar edilebilirlik sağlar ama "anlık" olmanın sınırını taşır.
  • Dinamik enstrümantasyon (Modül 7): çözümleme anını ve bağlamı görmede güçlüdür; ancak gözlemin yürütmeye etkisi ve operasyonel riskleri gözetilmelidir.

Vaka bağlamı seçimi belirler: sistem artık canlı değilse bellek dökümü tek gerçekçi yoldur; veri aşırı uçucuysa runtime gözlemi daha anlamlı olabilir. Bazı senaryolarda süreci/sistemi "daha kararlı bir an"a getirmek (ör. kısa süreli duraklatma gibi) verinin silinmeden yakalanmasına yardımcı olabilir; fakat bu tür hamleler hizmet sürekliliği ve müdahale riski nedeniyle dikkatle gerekçelendirilmelidir.

İpucu: "Bir yöntem seçtim" demek yetmez; raporda seçimin gerekçesi görünmelidir: hangi hipotezi test ettin, hangi karşı kanıtı aradın, hangi riskleri (müdahale/zaman/kanıt kalitesi) nasıl yönettin?

4.3. Bilimsel arama yaklaşımları: regex, entropi ve "bilinen sabitler"

Bellek dökümünde yapılandırma/anahtar ararken, aramayı rastgele gezintiden çıkarıp odaklı hale getiren yaklaşımlar vardır:

  • Regex/biçim ipuçları: JSON benzeri bloklar, belirli anahtar adları, tekrar eden ayrıştırılabilir yapılar
  • Entropi odaklı yaklaşım: kriptografik anahtarlar ve şifreli bloklar çoğu zaman yüksek rastgelelik taşır; bu, arama alanını daraltmada yardımcı olur
  • Bilinen sabitler (magic constants): bazı kripto uygulamalarının karakteristik tabloları/dizileri bellek üzerinde ayırt edici olabilir; bu, "anahtar burada olabilir" türünden teknik bir işaret üretir — tek başına kanıt değildir, doğrulama ister.

Bu noktada etik çizgi nettir: amaç anahtarları ifşa etmek değil; anahtar materyalinin varlığını ve davranış bağlamını kanıtlayıp tespit/önleme önerisini güçlendirmektir.

Terimler Sözlüğü

Terim Açıklama
Memory forensicsBellek adli inceleme; RAM üzerinde artefakt çıkarımı ve korelasyon yaklaşımı
Memory dumpBellek dökümü; RAM’in belirli anda alınmış görüntüsü
Live responseCanlı sistem üzerinde olay müdahalesi ve kanıt toplama yaklaşımı
Offline analysisSistemden bağımsız, döküm/çıktı üzerinden tekrar edilebilir analiz yaklaşımı
VAD (Virtual Address Descriptor)Süreç adres alanındaki bellek aralıklarının özelliklerini temsil eden yapı/ağaç mantığı (platforma göre karşılıkları değişebilir)
Injected regionEnjekte edilmiş bellek bölgesi; normal yükleme akışına uymayan yürütülebilir içerik alanı
RWXOkuma–yazma–çalıştırma izin kombinasyonu; tek başına kanıt değil, güçlü bir önceliklendirme sinyali
Module-less codeHerhangi bir disk dosyasına bağlı görünmeyen bellek içi kod; reflective yükleme/enjeksi­yon gibi senaryolarla ilişkilenebilir
Reflective loadingStandart loader akışını kullanmadan bellek içine görüntü yerleştirme yaklaşımı; modül görünürlüğünü azaltabilir
HandleSürecin sistem nesnelerine erişim referansı/tanıtıcısı
SocketSüreçlerin ağ bağlantı uç noktası nesnesi
Cross-viewBir artefaktı birden fazla görünürlük kaynağıyla çapraz doğrulama yaklaşımı
DKOMÇekirdek nesne manipülasyonu; süreç/modül görünürlüğünde yapısal tutarsızlıklar doğurabilen bir kavram sınıfı
EPROCESSWindows çekirdeğinde süreç nesnesini temsil eden yapı adı; bellek taramalarında “süreç izi” tartışmalarında referans olur
Inline hookBir fonksiyonun girişinin yönlendirilmesi/manipülasyonu; bellek incelemede davranış sapması göstergesi olarak ele alınır
Guard pageÖzel korumalı sayfa; erişimde istisna tetikleyebilir (kontrol/anti-debug veya bellek yönetimi senaryolarında görülebilir)
Entropy analysisRastgelelik/dağılım ölçümü; kriptografik veri ve yüksek rastgelelik taşıyan blokları odaklamak için kullanılır
MutexSenkronizasyon nesnesi; bazen kampanya/aile avcılığı için IOC niteliğinde ayırt edici isimler taşıyabilir
ReproducibilityYeniden üretilebilirlik; bulgunun aynı veri üzerinde bağımsız biçimde tekrar bulunabilmesi
LdrpHashTableWindows loader iç yapılarında adı geçen bir tablo sınıfı; bazı modül görünürlük tutarsızlıklarında dolaylı iz tartışmalarında anılır
KPCR / DTBKernel bağlam ve adres çevirimiyle ilişkili işaretleyiciler; yanlış bağlam, analiz hatasına yol açabileceğinden tutarlılık kontrollerinde önemlidir

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Bellek dökümü alma kararını en güçlü hale getiren yaklaşım hangisidir?

A) Her olayda otomatik döküm almak

B) Döküm almayı “en az müdahale” diye varsaymak

C) Dökümü belirli hipotezleri test etmek için seçip müdahale–zaman–kanıt kalitesi risklerini raporda açıkça yönetmek

D) Döküm alınca disk incelemesini tamamen bırakmak

E) Sadece ağ trafiği varsa döküm almak

  • Doğru: C
  • Gerekçe: Hipotez ve risk yönetimine bağlanan seçim denetlenebilirlik sağlar. Diğer şıklar genelleme veya yanlış ikamedir.
  1. 2) Tam sistem dökümü ile süreç bazlı döküm arasında seçim yaparken en doğru düşünce hangisidir?

A) Tam döküm her zaman daha iyidir

B) Süreç bazlı döküm her zaman yeterlidir

C) Kernel-mode şüphesi ve çoklu süreç korelasyonu varsa tam kapsam; hedef süreç net ve hız kritikse süreç bazlı yaklaşım tercih edilebilir

D) Seçimi sadece analistin alışkanlığı belirler

E) Seçim donanım markasına göre yapılır

  • Doğru: C
  • Gerekçe: Seçim vaka bağlamı ve hedeflenen kanıt türüne göre yapılır.
  1. 3) RWX izinli bir bellek bölgesi görmek neden “tek başına” kesin hüküm kurdurmamalıdır?

A) RWX hiçbir zaman tehlikeli değildir

B) Bazı meşru bileşenler de benzer izin izleri bırakabilir; bağlam ve çapraz kanıt gerekir

C) RWX sadece Linux’ta olur

D) RWX sadece ağ sorunudur

E) RWX, hash’i otomatik değiştirir

  • Doğru: B
  • Gerekçe: RWX güçlü bir sinyal olabilir ama yanlış pozitif riski yüksektir; bağlam şarttır.
  1. 4) “Module-less” kod şüphesinde en iyi doğrulama yaklaşımı hangisine yakındır?

A) Süreç adını meşru görünce şüpheyi bırakmak

B) Modül listesinde görünmüyorsa kesin zararlı demek

C) Modül görünürlüğü ile bellek haritası görünürlüğünü birleştirip PE-benzeri yapı/bağlam ve davranış korelasyonu ile kesinlik seviyesini ayarlamak

D) Sadece ekran görüntüsü eklemek

E) Sadece CPU grafiğine bakmak

  • Doğru: C
  • Gerekçe: Çoklu görünürlük ve korelasyon, denetlenebilir sonuç üretir.
  1. 5) “Gizli süreç izi” iddiasını güçlendiren en doğru kanıt çerçevesi hangisidir?

A) Tek bir süreç listesinde görünmemesi

B) Bellek taramasında iz çıkmasıyla kesin hüküm

C) Liste tabanlı görünürlük ile bellek taraması arasında uyuşmazlık + ağ/handle/bellek anomalisi korelasyonu + temiz profille karşılaştırma

D) Süreç adı tanıdık değilse kesin gizlidir

E) RAM kapasitesi düşükse gizlidir

  • Doğru: C
  • Gerekçe: Uyuşmazlık tek başına yetmez; korelasyon ve karşı kanıt gerekir.
  1. 6) Handle analizinde bir sürecin başka süreç nesnelerine “yüksek yetkiyle” erişmesi en çok hangi hipotezi destekler?

A) Ekran parlaklığı ayarı

B) Süreçler arası bellek manipülasyonu/enjeksi­yon niyeti olasılığı

C) Yazıcı kuyruğu sorunu

D) Dosya uzantısı hatası

E) Sadece performans optimizasyonu, başka hiçbir şey

  • Doğru: B
  • Gerekçe: Yüksek yetkili süreç nesnesi erişimleri, bellek düzeyinde müdahale senaryolarıyla daha tutarlıdır (yine de karşı kanıt aranır).
  1. 7) Ağ soketi bulgusunu raporda en güçlü hale getiren unsur hangisidir?

A) Sadece uzak IP’yi yazmak

B) Sadece portu yazmak

C) Soketi süreç bağlamına ve zaman çizelgesine bağlayıp bellek/modül/injected region bulgularıyla birlikte değerlendirmek

D) “Şüpheli trafik var” demek

E) Sadece IOC listesi vermek

  • Doğru: C
  • Gerekçe: Bağlam ve korelasyon, “kanıt zinciri” oluşturur.
  1. 8) Bellekte bulunan bir string parçasını “config” diye raporlamadan önce en doğru doğrulama yaklaşımı hangisidir?

A) Tek sefer görüp kesin yazmak

B) Çevresel bağlam, tekrar/tutarlılık ve davranış korelasyonunu aramak; temiz profil karşı kanıtını düşünmek

C) Sadece uzunluğuna bakmak

D) Sadece harf türüne bakmak

E) Sadece “yüksek entropi” diye config saymak

  • Doğru: B
  • Gerekçe: Bağlam + tutarlılık + korelasyon, yanlış pozitif riskini azaltır.
  1. 9) Entropi odaklı yaklaşımın bellek analizinde ana faydası nedir?

A) Virüsü otomatik silmek

B) Kriptografik veri/anahtar olasılığı yüksek blokları odaklayarak arama alanını daraltmak

C) İnternet hızını artırmak

D) Sadece 32-bit sistemlerde çalışmak

E) Döküm dosyasını küçültmek

  • Doğru: B
  • Gerekçe: Yüksek rastgelelik taşıyan bloklar, kripto ile ilişkili olabilecek alanları işaretleyebilir; yine de doğrulama gerekir.
  1. 10) Guard page gibi özel koruma bayraklarına sahip sayfalar için analistin en doğru yaklaşımı hangisidir?

A) Sayfayı “zararlı” diye etiketleyip geçmek

B) Sayfayı silmeye çalışmak

C) Bu bayrağın istisna/izleme veya bellek yönetimi bağlamında rol oynayabileceğini bilerek, davranış ve bağlam korelasyonuyla temkinli yorumlamak

D) Sadece donanım arızası saymak

E) Yalnızca görmezden gelmek

  • Doğru: C
  • Gerekçe: Özel korumalar hem meşru hem şüpheli senaryolarda görülebilir; bağlam ve kanıt zinciri şarttır.

Bu modülde neler öğrendiniz?

  • Bellek dökümünü “neden–ne zaman–hangi kapsam” sorularıyla gerekçelendirip, müdahale/zaman/kanıt kalitesi risklerini yönetebilecek bir analiz disiplini kurdun.
  • Injected region ve module-less yürütme şüphelerinde tek göstergeden kaçınmayı; VAD/bellek haritası mantığı, thread bağlamı ve zaman korelasyonuyla bulguyu doğrulamayı öğrendin.
  • Gizli süreç izlerinde cross-view yaklaşımının değerini, yanlış pozitif riskini ve karşı kanıt arayışının rapor diline nasıl taşınacağını oturttun.
  • Handle ve ağ soketi artefaktlarıyla “dokunaç haritası” çıkararak, bellek bulgularını olayın çalışma zamanı topolojisine bağladın.
  • Decrypted string/anahtar/config çıkarımında bellek adli inceleme ile runtime gözlemi arasında yöntem seçimini ve bulguları yeniden üretilebilir kanıt paketine dönüştürmeyi pratiğe döktün.

MODÜL 13 — Kernel-Mode Analiz Yolu

MODÜL 13 — Kernel-Mode Analiz Yolu

Modül Teması

Kernel Mimarisi

SSDT, IRP, IOCTL ve driver yaşam döngüsü.

Rootkit Teknikleri

DKOM, hook, callback abuse ve bootkit izleri.

Tespit & Karşı Önlem

PatchGuard, DSE ve modern kernel savunmaları.

Kernel-mode seviyesinde çalışan bir bileşen, işletim sisteminin en ayrıcalıklı katmanında "trafik akışını" şekillendirebilir: dosya I/O zincirini etkileyebilir, ağ paketlerinin yolunu değiştirebilir, süreçler arası ilişkileri perdeleyebilir. Bu güç aynı anda iki sonucu doğurur: etkisi çok yüksek olduğundan hata payı küçüktür; görünürlük kaynakları yanıltılabildiği için "temiz görünüyor" yargısı kolayca kırılganlaşır. Bu modül, kernel sürücü (driver) mimarisini analist gözüyle okuma, rootkit düşünce biçimini doğrulanabilir sinyal kümelerine çevirme ve kernel debugging yaklaşımını canlı/offline risk dengesiyle seçip kanıta dönüştürme disiplinini bir arada ele alır.

Bu Modülde Hedeflenen Kazanımlar

  • Kernel-mode ile user-mode sınırının “görünürlük” ve “müdahale riski” açısından ne ifade ettiğini, vaka bağlamına göre yorumlayabilmek.
  • Sürücülerin I/O akışında (IRP/dispatch/callback) nerelere temas ettiğini anlayıp, bu temasları “kanıt üretimi” diline çevirebilmek.
  • Rootkit sınıfı davranışlarda tek sinyale yaslanmadan cross-view doğrulama ve karşı kanıt arayışıyla kesinlik seviyesini doğru ayarlayabilmek.
  • SSDT/IDT/DKOM gibi çekirdek yapılarına ilişkin “manipülasyon iddialarını” delil standardında ispatlayacak veri türlerini (bellek/crash dump, kernel telemetrisi, driver artefaktları) doğru seçebilmek.
  • Kernel debugging çıktısını gözlem–yorum ayrımı, zaman çizelgesi ve yeniden üretilebilirlik notlarıyla denetime dayanıklı bir kanıt paketine dönüştürebilmek.

1) Driver mimarisi ve kernel çalışma modelini analist gibi okumak

Kernel-mode driver, çekirdeğin içinde çalışan ve donanım ile kritik OS servislerine doğrudan erişebilen bileşendir. Neden önemli? Bu konum meşru dünyada donanım sürücüleri, dosya sistemi filtreleri, güvenlik ürünleri ve ağ bileşenleri için zorunluyken; kötü niyetli dünyada aynı kapı "görünürlüğü azaltma" ve "gerçeği çarpıtma" için cazip hale gelir. Orta seviyedeki işletim sistemi temellerini daha önce kontrol listesiyle ele almıştık; burada odak, bu mimariyi "hangi iz nerede beklenir?" sorusuna cevap verecek şekilde analiz diline çevirmektir.

1.1. Kernel-mode / user-mode sınırı: görünürlük ve müdahale maliyeti

User-mode süreçler kendi sanal adres alanlarında izole çalışır; kernel-mode kod ise sistemin herhangi bir parçasına erişebilir. Neden önemli? User-mode odaklı telemetri, kernel'deki bazı etkileri ancak dolaylı görür; bu da "log yoksa olay yoktur" yanılgısını doğurur. Aynı zamanda kernel katmanına dokunan her gözlem yaklaşımı, sistem kararlılığı ve hizmet sürekliliği açısından daha yüksek risk taşır.

Örnek: Bir kurum bilgisayarında belirli klasörlerde dosyalar kısa süre görünüp kayboluyor gibi raporlanıyor. User-mode olay günlüklerinde belirgin bir işlem yok. Bu noktada hipotez, dosya I/O zincirine eklenen bir filtre sürücüsünün seçici davranışı olabilir. Karşı kanıt arayışı, sistemde yüklü güvenlik ürünlerinin meşru filtre davranışlarının benzer semptom üretip üretmediğini ve "temiz profil" bir sistemde aynı iş yüküyle bu davranışın görülüp görülmediğini kapsar.

Dikkat: Kernel katmanında "görmüyorum" çoğu zaman "yok" demek değildir; ama "şüpheleniyorum" da tek başına "var" demek değildir. Bu modülde sürekli uygulayacağımız çizgi, görünürlük kör noktalarını kabul edip kesinlik seviyesini kanıt sayısıyla yükseltmektir.

1.2. Driver türleri: davranış yüzeyi nerede genişler?

Driver mimarisini "hook nerede?" sorusuna indirgemek analizi sığlaştırır. Analist açısından asıl değer, sürücünün hangi akışlarda doğal olarak devreye girebileceğini bilmek ve o akışlardan beklenen artefaktları aramaktır:

  • Genel amaç kernel sürücüleri: çekirdek servislerine erişim, cihaz iletişimi, süreç/iş parçacığı etkileşimlerine dolaylı temas.
  • Dosya sistemi filtreleri (minifilter/filer stack katmanları): dosya I/O zincirinde güçlü görünürlük ve müdahale kapasitesi; "hayalet dosya" ve seçici gecikme gibi semptomlarla kendini belli edebilir.
  • Ağ katmanı bileşenleri: paket/bağlantı akışına etki; uygulama profiliyle uyuşmayan bağlantı örüntülerine zemin hazırlayabilir.
  • Güvenlik ürünü bileşenleri: derin telemetri ve politika uygulama için benzer düzeyde yetkiler kullanabilir; bu yüzden yanlış pozitif riski yüksektir.

Doğrulama mantığı, sürücü kökeni (provenance), yüklenme bağlamı, sistem rolü ve zaman çizelgesi korelasyonunu birlikte değerlendirir; tek bir sinyal "mahkûmiyet" üretmez.

1.3. Yüklenme ve kalıcılık bağlamı: "varsayım" değil "kanıtlı bağ"

Bir driver'ın sisteme "nasıl geldiği" her zaman net olmayabilir; ancak rapor, niyet okuması değil kanıt bağı kurmak zorundadır. Bu bağı güçlendiren eksenler:

  • Zaman çizelgesi: sürücünün görünür olmaya başladığı pencere ile semptomların (performans düşüşü, anormal I/O, ağ sapmaları) çakışması
  • Yüklenme türü: önyükleme sırasında mı, talep üzerine mi, servis/kurulum akışıyla mı ilişkili?
  • Bütünlük sinyalleri: imza ve bütünlük verisi "bir sinyaldir"; tek başına masumiyet garantisi değildir, ama kanıt dilini doğru kurmayı sağlar.

İpucu: "Görünür zincir" kurarak yaz: sürücünün ilk görüldüğü kayıt/telemetri → semptom artışının başladığı zaman → aynı sürücünün temiz referans sistemlerde bulunup bulunmadığı → alternatif açıklamalar (meşru güncelleme, güvenlik ürünü değişimi) ve bunların karşı kanıt sonuçları.

1.4. IRP, dispatch ve callback: kernel akışlarını kanıt diline çevirmek

IRP (I/O Request Packet), kullanıcı modu ile çekirdek arasındaki I/O isteklerinin taşındığı yapıdır; sürücünün dispatch (MajorFunction) girişleri bu istekleri karşılar; callback mekanizmaları ise belirli sistem olaylarında sürücüye bildirim yapılmasını sağlar. Neden önemli? Bir sürücünün hangi IRP sınıflarını ele aldığı, hangi olaylarda devreye girdiği ve hangi nesnelerle ilişkilendiği, davranışı "kanıtlanabilir" hale getirir.

Örnek: Yalnızca belirli uygulamalar çalışırken dosya erişimlerinde gecikme oluşuyor. Dosya I/O zincirine eklenen bir filtre sürücüsü hipotezi kurulduğunda, aynı uygulamaların benzer sürüm ve eklenti setiyle temiz bir sistemde davranışı karşılaştırılır. Temiz sistemde semptom yoksa hipotez güçlenir; varsa meşru etkileşim ihtimali büyür ve rapor dili daha temkinli kurulur.

2) Kernel malware davranış örüntüleri: "etiket" değil doğrulanabilir sinyal kümeleri

Kernel malware her zaman "çok sofistike" olmak zorunda değildir; ama etkisi yüksek olduğundan yanlış kararın bedeli büyüktür. Bu bölümde hedef, saldırı tarifi vermek değil; davranış örüntülerini ölçülebilir ve karşı kanıtla test edilebilir sinyallere dönüştürmektir.

2.1. Kalıcılık ve yerleşme: hangi bağımsız kanıtlar bunu destekler?

Kernel seviyesinde kalıcılık iddiaları genellikle sürücünün yüklenmesini garanti altına alan bir düzenle ilişkilendirilir. Analist açısından kritik soru "kalıcılık var mı?" değil; "kalıcılık iddiasını hangi bağımsız kanıtlarla destekliyorum?" olmalıdır:

  • Kurulum/yüklenme izleri ile semptomların zaman korelasyonu
  • Sistem rolüyle uyumsuz sürücü profili (örneğin yalnızca muhasebe iş yükü olan bir sistemde beklenmeyen I/O filtre katmanları)
  • Birden fazla benzer sistemde aynı sürücünün benzer semptomlarla görülmesi (kampanya ihtimali)

Örnek: Depo yönetimi kullanılan bir sunucuda, yalnızca gece vardiyasında belirli dosya erişimleri gecikiyor. Sürücü yüklenme penceresi semptom başlangıcıyla çakışıyorsa hipotez güçlenir; karşı kanıt olarak aynı gün yapılan meşru güncellemelerin değişiklik listeleri ve aynı model sunucularda normal profil davranışı incelenir.

2.2. Gizleme ve manipülasyon: "görünmüyor" iddiasını nasıl doğrularsın?

Rootkit düşünce biçiminin merkezinde, standart listeleri ve görünürlük kaynaklarını yanıltma vardır. Burada iki hata türü aynı anda pusudadır:

  • Yanlış pozitif: meşru güvenlik ürünleri ve karmaşık yazılımlar benzer "tuhaflıklar" üretebilir.
  • Yanlış negatif: tek kaynağa bakarsan gerçekten gizleneni kaçırabilirsin.

Bu yüzden cross-view yaklaşımı esastır: yüklü modül görünürlüğü, bellek haritası işaretleri, kernel nesne ilişkileri, dosya/ağ semptomları gibi farklı kaynaklar bir araya getirilir. Bir bulgu gizleme iddiasına gidiyorsa, temiz profil karşı kanıtı zorunlu hale gelir: aynı OS sürümü ve benzer yazılım yığınıyla bu tutarsızlıklar normalde oluşuyor mu?

Dikkat: Kernel düzeyinde "hook/manipülasyon var" demek, raporda en ağır iddialardan biridir. Tek işaretle kurulan hüküm denetimde kırılır; bağımsız kanıt sayısı ve karşı kanıtın zayıflığı kesinlik seviyesini belirlemelidir.

2.3. Yetki kötüye kullanımı ve veri akışı: dolaylı sinyallerle hikâye kurmak

Kernel bileşeni süreçler arası etkileşimde "hakem" gibi davranabildiğinden, bazı davranışlar kendini dolaylı belli eder:

  • Beklenmeyen thread/süreç davranışlarıyla eş zamanlı kernel anomali sinyalleri
  • Uygulama "normal profili" ile uyuşmayan bağlantı örüntüleri (özellikle user-mode logları sessizken)
  • Dosya I/O'da seçici etkiler (belirli uzantı/dizinlerde anlık donma, gecikme veya görünürlük sapmaları)

Örnek: Bir kullanıcı bilgisayarında yalnızca belirli belge türleri açılırken kısa süreli donma yaşanıyor. User-mode loglar belirsiz. Aynı belgeler temiz bir sistemde aynı uygulama sürümüyle sorun üretmiyorsa kernel hipotezi güçlenir; rapor dili "olası"dan "yüksek şüphe"ye, kanıt sayısı artınca taşınır.

3) Kritik çekirdek yapıları: SSDT/IDT/DKOM ve modern korumaların etkisi

Bu modülde hedef "şunları nasıl değiştirirler?" değil; "bu tür bir değişiklik iddiasını hangi delillerle ayırt ederiz?" sorusudur.

3.1. SSDT ve IDT: "sistem gerçeğini" çarpıtma iddiasını ispatlamak

SSDT, sistem çağrılarının yönlendirme katmanıyla; IDT ise kesme/istisna yönlendirme katmanıyla ilişkilidir. Neden önemli? Bu sınıf yapılar etkilenirse, dosya açma/okuma, süreç oluşturma veya kesme akışı gibi temel olaylar "yanlış raporlanabilir" ya da farklı bir yola yönlenebilir. Bu tür iddialar çoğu zaman statik bir bakışla netleşmez; bellek/crash dump ya da kontrollü debugging gibi runtime bağlamı gerektiren kanıt türlerine ihtiyaç duyar.

Kanıt üretimi açısından güçlü yaklaşım, "sistem durumu farkı" üzerinden yazılır: hangi kritik yapıda, hangi tutarsızlığın görüldüğü; bunun hangi semptomlarla zaman çizelgesinde çakıştığı; alternatif açıklamaların (meşru güvenlik ürünü, yetkili hot patch'ler, uyumsuz sürücü) nasıl elendiği.

3.2. DKOM: çekirdek nesneleri üzerinde manipülasyon kavramı

DKOM, çekirdek veri yapılarının (örneğin süreç izleme yapıları) manuel manipülasyonu kavram sınıfıdır. Neden önemli? Standart süreç listeleri "temiz" görünürken bellek tabanlı taramalarda tutarsızlıklar ortaya çıkabilir; bu, gizleme hipotezini besler. Ancak burada da karşı kanıt zorunludur: bellek kalıntıları, sürüm uyumsuzluğu veya araç yorum hatası benzer tutarsızlıklar üretebilir.

Örnek: İş istasyonunda yönetim aracı süreç listesini "normal" gösterirken, bellek dökümünde ek süreç nesnesi izleri bulunuyor. Bu tek başına kesin hüküm değildir; aynı OS sürümü ve benzer yazılım yığınıyla temiz profilde bu tür "fazladan izlerin" oluşup oluşmadığı kontrol edilir; ayrıca semptomlarla (ağ sapması, seçici I/O) korelasyon aranır.

3.3. PatchGuard, VBS ve "kanıt dili"ne etkileri

Modern Windows x64 sistemlerde çekirdeğin yetkisiz biçimde yamalanması engellenir; kritik yapıların değiştirilmesi kernel seviyesinde bozulma tespitlerine ve sistemin durmasına kadar gidebilir. Neden önemli? Bir yandan bazı rootkit sınıflarının uygulanabilirliğini sınırlar; öte yandan kernel analizinde "gözlemin kendisi" veya uyumsuz sürücüler, kritik bozulma sinyalleri üretebilir. VBS gibi sanallaştırma tabanlı güvenlik yaklaşımları da bazı manipülasyonların koşullarını değiştirir; bu nedenle rapor, ortamın güvenlik duruşunu (ör. VBS açık/kapalı gibi) kanıtın yorum sınırı olarak not etmeyi gerektirir.

İpucu: "Korumalar var, o halde rootkit olamaz" gibi kesin cümlelerden kaçın. Doğru yaklaşım: korumaların hangi sınıf davranışları zorlaştırdığını ve hangi kanıtları daha anlamlı hale getirdiğini yazmak; belirsizliği "ölçülü" şekilde yönetmektir.

4) Kanıt türleri ve yöntem seçimi: aynı soruya farklı yollar

Kernel incelemede en sık hata, "en güçlü yöntem" diye tek yönteme saplanmaktır. Oysa her kanıt türünün maliyeti, kör noktası ve rapora yansıyan sınırlılığı vardır.

4.1. Hangi veri hangi soruyu yanıtlar?

  • Driver ikilileri ve meta verileri: kimlik, dağıtım bağlamı, bütünlük sinyalleri, uyumluluk göstergeleri.
  • Bellek dökümü / crash dump: runtime ilişkiler (yüklü modül işaretleri, callback zincirleri, driver nesne bağları) için güçlü; Modül 12'deki bellek adli yaklaşımıyla doğal olarak birleşir.
  • Kernel telemetrisi ve olay kayıtları: bazı etkileri dolaylı yakalar; ama kernel'deki manipülasyonlar bu görünürlüğü zayıflatabilir.
  • EDR/ajan kayıtları: korelasyon için güçlü olabilir; ancak kernel bileşeniyle etkileşim, gözlemin davranışı etkileme riskini artırır.

Yöntem seçimi örneği: Hizmet kritik ve sistem canlıysa, önce düşük müdahaleli kanıt paketi (zaman çizelgesi, mevcut sürücü envanteri, sınırlı telemetri) ve uygun anda bellek/crash dump planı; sistem artık erişilemezse, eldeki dump üzerinden offline doğrulama.

4.2. Sınırlılık yazmak: "bilmiyorum" demek yerine "ne kadar biliyorum?"

Kernel analizinde sınırlılıkları şeffaf yazmak, raporu zayıflatmaz; güçlendirir. Tipik sınırlılıklar:

  • Sürüm/sembol uyumsuzluğu: yanlış eşleşme, yanlış yorum riskini büyütür.
  • Kısmi dökümler: her dump her şeyi içermez; uçucu ilişkiler kaçabilir.
  • Gürültü kaynakları: tarayıcılar, ofis yazılımları, oyun motorları ve güvenlik ürünleri meşru kernel etkileşimleriyle "anomali benzeri" izler üretebilir.
  • Müdahale etkisi: canlı gözlem/analiz, olayın doğal akışını değiştirebilir.

Bu sınırlılıklar raporda, her kritik bulgunun yanında "kanıt gücü"nü ayarlayan bir çerçeve olarak yer almalıdır.

4.3. Hipotez → doğrulama → kanıt zinciri: dayanıklı akış

Kernel vakalarında sağlam yaklaşım, "şüpheli driver" gibi tek cümlelik sonuçlardan kaçınır:

  1. — Belirtiyi zaman çizelgesine oturt (gözlem)
  2. — Belirtiyi açıklayan kernel hipotezini kur (yorum)
  3. — Hipotezi test edecek veri türlerini seç (yöntem seçimi)
  4. — Alternatif açıklamaları ve karşı kanıtı planla (meşru filtre, güvenlik ürünü, yetkili hot patch, uyumsuz sürücü)
  5. — Sonuç dilini kanıt gücüne göre katmanla (olası → yüksek şüphe → güçlü kanıt)

5) Rootkit analizi ve kernel debugging: ne zaman, nasıl kanıta dönüşür?

5.1. Rootkit'i "etiket" olmaktan çıkaran soru seti

Rootkit tartışması çoğu zaman "gizleme" etrafında döner; analist için ise şu iki soru daha değerlidir:

  • Hangi görünürlük kaynakları etkilenmiş olabilir?
  • Bu etkiyi gösterecek birbirinden bağımsız hangi artefaktlar var?

Örnek: Standart modül listeleri temiz görünürken, bellek/dump tabanlı incelemede beklenmeyen yürütülebilir işaretler ve anormal callback ilişkileri kümeleniyor. Bu, rootkit hipotezini besler; karşı kanıt olarak aynı sürüm OS ve aynı güvenlik yazılımı yığınıyla temiz profilde bu kümelerin oluşup oluşmadığı araştırılır.

5.2. Kernel debugging: canlı mı, offline mı?

Kernel debugging, çekirdeğin çalışma zamanını yüksek görünürlükle izlemeyi sağlar; bazı ilişkiler yalnızca runtime bağlamıyla netleşir. Neden önemli? Kernel düzeyi analiz, yanlış kararlarla sistemi durdurabilecek kadar "keskin" bir alandır; bu yüzden canlı/offline seçimi gerekçelendirilmelidir.

  • Canlı debugging: daha fazla bağlam yakalayabilir; fakat sistemi kararsızlaştırma ve olay akışını değiştirme riski taşır.
  • Offline (crash dump / bellek dökümü) analizi: daha güvenli ve tekrar edilebilir; ancak "anlık" ilişkileri kaçırabilir.

Microsoft'un kernel debugging yaklaşımı da user/kernel ayrımında host — target mantığını ve kernel-mode debugging'in daha ayrıcalıklı/riskli doğasını vurgular.

Dikkat: Canlı kernel debugging kararı, üretim ortamında "varsayılan" bir tercih değildir. Gerekçe, risk analizi ve alternatiflerin değerlendirilmesi olmadan yapılan canlı müdahale; hem operasyonel kesintiye hem de kanıtın tartışmalı hale gelmesine yol açabilir.

5.3. Debugging çıktısını delil standardına taşımak

"Gördüm" demek yerine, denetlenebilir bir paket oluşturulur:

  • Gözlem — yorum ayrımı: hangi yapı/ilişki gözlendi; bu hangi hipotezi güçlendiriyor?
  • Zaman çizelgesi: bulgu hangi semptom penceresinde ortaya çıktı?
  • Yeniden üretilebilirlik: aynı dump/oturumda bağımsız analistin bulguyu bulmasına yetecek bağlam (sürüm, sembol uyumu, artefakt sınıfı)
  • Sınırlılıklar: kısmi döküm, uyumsuzluk, gürültü kaynakları, müdahale etkisi

Ayrıca, çekirdek bozulması türlerini işaret eden bug check sınıfları (ör. kritik yapı değişiklikleri) bu kanıt dilini destekleyen "sistem düzeyi sinyaller" sağlayabilir; ancak tek başına niyet ispatı değildir.

Terimler Sözlüğü

Terim Açıklama
Kernel-modeÇekirdek kip; en yüksek ayrıcalıkla çalışan yürütme seviyesi
User-modeKullanıcı kip; daha sınırlı ayrıcalıklı, izole yürütme seviyesi
Ring 0 / Ring 3Yetki halkaları; kernel (Ring 0) ve user-mode (Ring 3) kavramsal ayrımı
Driver (.sys)Çekirdekte çalışan sürücü bileşeni (Windows ekosisteminde yaygın uzantı .sys)
IRPI/O isteklerini taşıyan çekirdek veri yapısı
Dispatch routine / MajorFunctionSürücünün belirli IRP sınıflarını karşılamak için kullandığı giriş işlevleri
CallbackBelirli sistem olaylarında sürücüye yapılan bildirim mekanizması
Minifilter / Filter driverDosya I/O zincirine eklenen filtre sürücü sınıfı; veri akışını dinleyebilir/manipüle edebilir
RootkitGörünürlüğü azaltma/manipülasyon odaklı kötü niyetli kernel bileşenleri sınıfı
DKOMÇekirdek veri yapılarının manuel manipülasyonu kavramı
SSDTSistem çağrılarının yönlendirme katmanıyla ilişkili çekirdek tablo kavramı
IDTKesme/istisna yönlendirme tablosu kavramı
PatchGuard / KPPÇekirdeğin kritik bölgelerinin yetkisiz değişimini sınırlayan koruma yaklaşımı
VBSSanallaştırma tabanlı güvenlik; bazı saldırı yüzeylerini ve kanıt yorumunu etkileyebilir
Symbol (PDB)Debug sembol bilgisi; doğru sürüm eşleşmesi analiz doğruluğu için kritiktir
Crash dumpÇökme dökümü; çekirdek/bellek görüntüsü üzerinden offline analiz imkânı
Kernel debuggerKernel runtime görünürlüğü sağlayan hata ayıklayıcı araç sınıfı
BSOD / Bug CheckÇekirdek seviyesinde kritik hata sonucu sistemin durması (mavi ekran)

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Kernel-mode analizinde yöntem seçimini en iyi tarif eden yaklaşım hangisidir?

A) Her vakada doğrudan canlı kernel debugging yapılmalıdır

B) Her vakada sadece disk artefaktlarına bakmak yeterlidir

C) Hizmet sürekliliği, müdahale riski ve hipotezin gerektirdiği kanıt türüne göre canlı/offline dengesini kurmak gerekir

D) Yöntem seçimi analistin alışkanlığına bırakılmalıdır

E) RAM miktarı yüksekse canlı debugging şarttır

  • Doğru: C
  • Gerekçe: C, riski ve kanıt ihtiyacını birlikte yönetir. A/B tek boyutludur; D keyfîdir; E alakasızdır.
  1. 2) “İmzalı bir driver bulundu” bulgusunu ileri seviye raporda en sağlıklı nasıl yorumlarsın?

A) İmzalıysa kesin meşrudur, inceleme biter

B) İmzalıysa kesin zararlıdır

C) İmza bir sinyaldir; köken, zaman çizelgesi ve davranış korelasyonu ile birlikte değerlendirilmelidir

D) İmza sadece ağ trafiğini etkiler

E) İmza yalnızca eski sistemlerde anlamlıdır

  • Doğru: C
  • Gerekçe: İmza tek başına masumiyet/mahkûmiyet üretmez; kanıt zincirine oturtulmalıdır.
  1. 3) “Gizleme” hipotezini güçlendiren en dayanıklı kanıt yaklaşımı hangisidir?

A) Tek bir modül listesindeki anomaliyle kesin hüküm kurmak

B) Tek bir bellek işaretiyle kesin hüküm kurmak

C) Cross-view tutarsızlıkları gösterip temiz profil karşı kanıtını da değerlendirerek kesinlik seviyesini ayarlamak

D) Süreç adı tanıdık değilse gizlidir demek

E) CPU yüksekse gizleme vardır demek

  • Doğru: C
  • Gerekçe: Çoklu kaynak + karşı kanıt, yanlış pozitif/negatif riskini azaltır. Diğerleri tek sinyale aşırı yüklenir.
  1. 4) IRP/dispatch/callback kavramları analist için neden değerlidir?

A) Saldırı geliştirmeyi kolaylaştırdığı için

B) Sürücünün hangi olaylarda devreye girip hangi nesnelerle ilişkilendiğini kanıtlamaya yardım ettiği için

C) Diskte otomatik hash ürettiği için

D) İnternet hızını artırdığı için

E) Sadece kullanıcı arayüzünü güzelleştirdiği için

  • Doğru: B
  • Gerekçe: Analist açısından değer, davranışın “ne zaman ve neyle” ilişkili olduğunun gösterilebilmesidir.
  1. 5) Canlı kernel debugging’in en kritik riski hangisidir?

A) Hiç riski yoktur, her zaman önerilir

B) Sistemi kararsızlaştırma ve olayın doğal akışını değiştirme ihtimali

C) Sadece raporu uzatması

D) Disk alanını artırması

E) Yalnızca e-posta trafiğini kesmesi

  • Doğru: B
  • Gerekçe: Kernel düzeyi gözlem, kararlılık ve müdahale riski taşır; yöntem seçimi bu yüzden kritiktir.
  1. 6) Offline analiz (crash dump/bellek dökümü) için en güçlü argüman hangisidir?

A) Canlı sistemde hiçbir şey yakalanamaz

B) Tekrar edilebilirlik ve bağımsız inceleme imkânı sunması

C) Ağ bağlantısını otomatik kesmesi

D) Raporu görsel olarak güzelleştirmesi

E) Her zaman tüm artefaktları içerdiğinin garantili olması

  • Doğru: B
  • Gerekçe: Offline yaklaşımın gücü denetlenebilirliktir. E yanlıştır; dökümler kısmi olabilir.
  1. 7) Kernel analizinde sınırlılıkları açık yazmanın en doğru nedeni hangisidir?

A) Bulguyu belirsiz göstermek

B) Raporu uzatmak

C) Kanıtın hangi koşullarda zayıflayabileceğini şeffafça gösterip denetimde ayakta kalmak

D) Analizi yavaşlatmak

E) Kesin cümleler varken buna gerek yoktur

  • Doğru: C
  • Gerekçe: Sınırlılıklar, kanıtın güvenilirlik sınırını doğru çizer. E, adli/kurumsal raporlamada kırılgandır.
  1. 8) Dosya sistemi filtre sürücüsü şüphesinde doğrulamayı en iyi güçlendiren yaklaşım hangisidir?

A) Filtre sürücüsü görür görmez “zararlı” yazmak

B) Sadece kullanıcı şikâyetine dayanmak

C) Zaman çizelgesi + semptom korelasyonu + temiz profilde benzer semptomun oluşup oluşmadığını test etmek

D) Sadece sürücü adının uzunluğuna bakmak

E) Sadece RAM kapasitesine bakmak

  • Doğru: C
  • Gerekçe: Korelasyon ve karşı kanıt, meşru filtre etkileşimlerini ayırmada kritiktir.
  1. 9) SSDT/IDT sınıfı manipülasyon iddiasında “kanıt üretimi”ni güçlendiren ifade tarzı hangisine daha yakındır?

A) “Sistem yalan söylüyor, kesin rootkit”

B) “Bir şeyler garip, ama ne olduğunu bilmiyoruz”

C) “Belirli kritik yapıda tutarsızlık gözlendi; zaman çizelgesindeki semptomlarla çakışıyor; alternatif açıklamalar şu karşı kanıtlarla zayıflatıldı”

D) “Kullanıcı bilgisayarın yavaşladığını söyledi”

E) “Sürücünün adı şüpheli görünüyor”

  • Doğru: C
  • Gerekçe: C, gözlem–yorum ayrımı ve karşı kanıt disiplinini kurar. A aşırı kesin; B zayıf; D/E dolaylı ve yetersizdir.
  1. 10) “Rootkit” kavramını analist için işe yarar kılan çerçeve hangisidir?

A) Rootkit demek kesin saldırı demektir

B) Rootkit sadece user-mode’da olur

C) Görünürlük kaynaklarını etkileyen bir davranış sınıfı olarak ele alıp çoklu kanıtla doğrulamaya zorlaması

D) Rootkit yalnızca ağ portlarını değiştirir

E) Rootkit yalnızca dosya uzantılarını değiştirir

  • Doğru: C
  • Gerekçe: Rootkit bir etiket değil; doğrulanabilir manipülasyon/gizleme davranışları sınıfıdır. Diğer seçenekler dar ve hatalı genellemelerdir.

Bu modülde neler öğrendiniz?

  • Kernel-mode ile user-mode ayrımını, görünürlük kör noktaları ve müdahale maliyeti üzerinden analiz etmeyi
  • Driver mimarisini “hangi iz nerede beklenir?” sorusuna cevap verecek şekilde okumayı; IRP/dispatch/callback akışlarını kanıt diline çevirmeyi
  • Rootkit sınıfı gizleme/manipülasyon iddialarında cross-view doğrulama ve temiz profil karşı kanıtıyla kesinlik seviyesini yönetmeyi
  • SSDT/IDT/DKOM gibi kritik çekirdek yapılarına dair iddiaları, doğru veri türlerini seçerek (dump/telemetri/artefakt) delil standardında ifade etmeyi
  • Kernel debugging’i canlı/offline seçenekleriyle, operasyonel riskleri gözeten yöntem seçimi disipliniyle rapora taşımayı

Modül 14 — IoT ve Cloud-Native İleri Analiz

IoT cihazları ve cloud-native iş yükleri, klasik uç nokta (endpoint) analizinden farklı bir "sahne düzeni" ile çalışır: birinde kaynaklar kısıtlı, dosya sistemi alışılmadık ve mimari çeşitlidir; diğerinde ise bileşenler kısa ömürlü, katmanlı imajlar üzerinden dağıtılır ve davranış izleri çoğu zaman kontrol düzlemi loglarına yayılır. Bu modül, IoT tarafında ELF örneklerinde mimari farkındalıkla analiz, gömülü konfigürasyon/C2 çıkarımı, firmware artefaktlarıyla kalıcılık okuma ve botnet komut — telemetri örüntülerini; cloud-native tarafında container imaj/katman analizi, Kubernetes çalışma zamanı artefaktları ve audit temelli korelasyonla kalıcılık örüntülerini savunma odaklı kanıt standardında ele alır.

Bu Modülde Hedeflenen Kazanımlar

  • IoT ekosisteminde ELF malware analizini mimari farkındalıkla yürütebilmek ve yanlış yorum riskini karşı kanıt arayışıyla azaltabilmek.
  • Gömülü konfigürasyon ve C2 çıkarımını, “bulgu → doğrulama → delil” zincirinde metodolojik olarak paketleyebilmek.
  • Firmware artefaktları üzerinden kalıcılık ve davranış analizi yaparken sınırlılıkları görünür kılabilmek.
  • IoT botnet davranış modelini komut ve telemetri örüntüleriyle okuyup, tespit önerisine dönüşen kanıt seti üretebilmek.
  • Cloud-native ortamda container imaj/katman ve Kubernetes çalışma zamanı artefaktlarını ayrıştırarak şüpheli bileşenleri izole edebilmek.
  • Cloud logları (özellikle audit yaklaşımı) ve runtime sinyalleriyle cloud-native persistence örüntülerini doğrulayıp raporlayabilmek.

1) IoT İleri Analiz: ELF, mimari farkındalık ve firmware bağlamı

IoT dünyasında "aynı davranışın" farklı cihazlarda farklı izler bırakması normaldir; çünkü işlemci mimarisi, libc varyantları, dosya sistemi düzeni ve servis yöneticileri değişkendir. Bu nedenle IoT analizinde en büyük hata, bir bulguyu tek bir gözlemle genelleyip "evrensel" sandığından emin olmaktır. Burada amaç saldırı tarif etmek değil; bulgunun gerçekten ne olduğunu doğrulamak, hangi karşı kanıtın bulguyu zayıflatacağını bilmek ve raporu denetlenebilir hale getirmektir.

1.1. ELF malware analizi ve mimari farkındalık

ELF (Executable and Linkable Format), Linux tabanlı sistemlerde ikili dosyaların standart biçimidir; neden önemli dersen, IoT tehditlerinin büyük kısmı Linux türevlerinde ve farklı CPU mimarilerinde (ARM/MIPS gibi) ELF olarak karşımıza çıkar. Mimari farkındalık, yalnızca "hangi platformda çalışır?" sorusu değildir; aynı zamanda disassembly/decompile yorumunun doğruluğunu belirler.

  • Mimari uyumu doğrulama: Bir örneğin hedeflediği CPU mimarisi, ikilinin başlık bilgileri ve iç sembol/derleme izleriyle tutarlı olmalıdır. Tutarsızlık, ya çoklu hedefleme stratejisi ya da analiz ortamında yanlış varsayım olasılığını doğurur.
  • Kütüphane ve derleyici izleri: Statik analizde görülen kütüphane çağrıları ve string ipuçları, cihazın kullanıcı alanı (userland) profiliyle uyumlu mu sorusu mutlaka sorulmalıdır. Uyumsuzluk, "örnek burada çalışmaz" demek de olabilir; "başka bir cihaz sınıfı hedefleniyor" demek de.
  • Davranış — kod eşlemesinde seçicilik: IoT örnekleri sıkça minimal ve görev odaklı olduğundan, kritik fonksiyonları seçmek (Modül 5'teki planlama yaklaşımını hatırla; burada ileri analiz açısından kritik olan, mimari uyumsuzlukların doğurduğu yanlış fonksiyon çıkarımı riskidir) analizi hızlandırır.

Örnek: Bir ağ cihazından alınan şüpheli ELF ikilisinde "uzaktan komut" çağrışımı yapan stringler var. İlk hipotez "komut alıyor" olabilir; karşı kanıt olarak stringlerin log mesajı mı, test modu mu, yoksa gerçekten ağdan gelen girdiyi işleyen bir akışın parçası mı olduğu, çağrı grafiği ve veri akışı üzerinden sınanır. Aynı stringlerin kullanılmasına rağmen girdi doğrulama ve ağ okuma fonksiyonlarıyla bağ kurulamıyorsa, hipotez zayıflar ve rapor dili buna göre ayarlanır.

Dikkat: IoT analizinde "mimariyi yanlış varsaymak", en pahalı hatalardandır. Yanlış mimaride yapılan decompile yorumları çoğu zaman ikna edici görünür ama hatalıdır; bu yüzden bulguyu yazmadan önce mimari uyumu destekleyen en az iki bağımsız işaret aramak, raporun güvenilirliğini ciddi biçimde artırır.

1.2. Embedded konfigürasyon ve C2 çıkarımı metodolojisi

Embedded konfigürasyon, ikili içine gömülmüş çalışma parametrelerini (sunucu adresleri, portlar, kampanya kimlikleri, modlar) ifade eder; neden önemli dersen, IoT tehditlerinde dışarıdan "konfigürasyon indirme" yerine gömülü parametreler sık görülür ve tespitte doğrudan kullanılabilecek ipuçları üretir. C2 (Command and Control) ise komutların alındığı ve telemetrinin gönderildiği yönetim altyapısını temsil eder; tespit açısından değerli olan, "tek bir alan adı gördüm" değil, o altyapının nasıl kullanıldığını doğrulayabilmektir.

Bu modülde komut/skript düzeyinde tariflere girmeden, analist yaklaşımı şu üç ayak üzerinde kurulur:

  • Bulgu sınıflandırma: Gördüğün şey gerçekten konfigürasyon mu? Örneğin sabit bir URL, yalnızca bir güncelleme kontrolü olabilir; C2 iddiası, veri akışı ve ağ çağrılarıyla desteklenmeden ağır kalır.
  • Doğrulama soruları:
  • Bu parametre hangi fonksiyon akışında okunuyor?
  • Okunan değer, ağ iletişimi başlatan çağrılarla aynı yürütüm yolunda mı?
  • Alternatif açıklama var mı (diagnostic ping, zaman senkronizasyonu, cihaz yönetim paneli)?
  • Karşı kanıt arayışı: Temiz firmware sürümünde aynı parametreler bulunuyor mu? Aynı cihaz ailesinde meşru servisler benzer endpoint'lere gidiyor mu?

Örnek: Bir ikilide example.net benzeri bir alan adı gömülü görünüyor. İlk refleks bunu C2 sanmak olabilir. Daha dayanıklı yaklaşım, bu stringin kullanım yerlerini (xref zinciri) takip edip, ağ istek akışında "komut alma/telemetri gönderme" ayrımını gösterecek işaretler aramaktır. Eğer kullanım yalnızca "sürüm kontrolü" gibi tek yönlü bir sorgu ile sınırlıysa, rapor bunu C2 yerine "dış servis bağımlılığı" olarak yazar; C2 iddiası için ek kanıt gerektiğini açık bırakır.

İpucu: Konfigürasyon çıkarımı raporunda, "bulgu listesi" ile "yorum"u birbirine karıştırma. Önce ham değerleri (stringler, sabitler, yapı alanları) kaynak konumlarıyla ver; ardından hangi yürütüm yolunda kullanıldığına dair kanıtı ekle. Bu ayrım, itiraz geldiğinde bulgunun ayakta kalmasını sağlar.

1.3. Firmware artefaktları üzerinden kalıcılık ve davranış analizi

Firmware incelemesi, cihazın "disk imajı" gibi düşünülebilir; ama dosya sistemi düzeni, init sistemi ve servis bileşenleri klasik dağıtımlardan farklıdır. Neden önemli? IoT'ta kalıcılık çoğu zaman kullanıcı hesabı veya klasik servis kayıtlarından ziyade firmware içindeki başlangıç betikleri, servis tanımları ve güncelleme mekanizmalarına tutunur.

Savunma odaklı analizde amaç "nasıl kalıcı olur?"u öğretmek değil; kalıcılık iddiasını doğrulayıp, meşru güncelleme/özelleştirme ile kötü niyetli değişikliği ayıracak kanıt standardını kurmaktır.

  • Firmware'de beklenen yapı ile sapma analizi: Aynı model/seri cihazın bilinen sürümleriyle karşılaştırıldığında hangi dosyalar/servisler "uyumsuz"?
  • Kalıcılık hipotezini güçlendiren sinyaller: Başlangıçta devreye giren servislerde anormal çağrı zincirleri, beklenmeyen ikililer, gereksiz ağ bağımlılıkları.
  • Karşı kanıt: Üretici güncellemeleri veya operatör özelleştirmeleri aynı tür dosyaları ekliyor mu? Değişiklikler "konfigürasyon" düzeyinde mi, "yürütülebilir ekleme" düzeyinde mi?

Örnek: Bir firmware dosya sisteminde, cihazın rolüyle ilgisiz görünen bir ikili tespit ediliyor. İlk hipotez "kötü niyetli ek" olabilir. Karşı kanıt için, aynı cihaz ailesinde resmi uzaktan yönetim ajanlarının da benzer ikililer ekleyip eklemediği ve ilgili ikilinin gerçekten başlangıçta çağrılıp çağrılmadığı incelenir. Başlangıç bağlamıyla ilişki kurulamazsa, bulgu "şüpheli ama doğrulanmamış artefakt" olarak yazılır; doğrulama için gereken ek veri (runtime logları gibi) raporda belirtilir.

Dikkat: Firmware artefaktlarından kalıcılık iddiası çıkarmak, yanlış pozitif üretmeye çok açıktır. Üretici/operatör özelleştirmeleri, özellikle ağ yönetimi ve telemetri için beklenmedik bileşenler içerebilir. Bu yüzden "sapma" bulgusunu mutlaka zaman çizelgesi ve cihaz rolü bağlamıyla birlikte yaz; tek başına "dosya var" demek denetimde zayıftır.

1.4. IoT botnet davranış modeli: komut ve telemetri örüntüleri

IoT botnet davranış modeli, "tek bir kötü ikili"den çok bir yaşam döngüsü anlatır: keşif/katılım, komut dinleme, görev icrası, durum bildirme (telemetri) ve dayanıklılık. Neden önemli? Bu model, tespit tarafında doğru yerde doğru sinyali aramanı sağlar; ayrıca bulguyu rapora taşırken "hangi aşamayı hangi kanıtla destekliyorum?" sorusunu netleştirir.

  • Komut örüntüleri: Komutlar çoğu zaman sınırlı bir sözlükten gelir ve cihaz rolüne göre değişir. Analist açısından kritik olan, komutun "metin olarak varlığı" değil, komutun cihaz davranışına bağlanabilmesidir.
  • Telemetri örüntüleri: Botnet telemetrisi genelde kimlik bilgisi (cihaz türü), çalışma durumu ve görev sonuçlarını içerir. Savunma açısından telemetri, ağ tespit kuralları ve korelasyon için değerlidir.
  • Doğrulama: Komut — telemetri akışı gerçekten iki yönlü mü? Tek yönlü "ping" trafiği veya log gönderimi, botnet telemetrisi sanılmamalıdır.
  • Karşı kanıt: Meşru cihaz yönetim platformları da "komut" ve "telemetri" kavramlarını kullanır; farkı yaratan, protokol/akış bağlamı ve yürütüm yoludur.

Örnek: Bir IoT cihazında periyodik olarak dışarıya küçük paketler gittiği görülüyor. İlk yorum "telemetri" olabilir. Botnet telemetrisi iddiası için, bu trafiğin bir komut yanıtı ile ilişkili olup olmadığı (zaman korelasyonu), cihaz üzerinde hangi sürecin bu trafiği ürettiği ve aynı firmware sürümünde temiz cihazlarda bunun görülüp görülmediği sınanır. Temiz profilde aynı akış varsa botnet iddiası zayıflar; yoksa hipotez güçlenir.

İpucu: Botnet şüphesini raporlarken "aşama haritası" kullan: katılım/komut/telemetri aşamalarının her biri için en az bir gözlem, bir doğrulama adımı ve bir karşı kanıt sonucu yaz. Bu yapı, "hikâye anlatımı" değil "kanıt zinciri" üretir.

2) Cloud-Native İleri Analiz: container katmanları, Kubernetes artefaktları ve audit korelasyonu

Cloud-native dünyada dosyalar ve süreçler kadar "tanım" (manifestler, imaj katmanları, deployment şablonları) da delildir. Neden önemli? Saldırgan davranışı çoğu zaman container içine bir dosya bırakmaktan ziyade, imaj/manifest değişikliği, kısa ömürlü job'lar veya init container gibi yürütüm mekanizmaları üzerinden akar. Buradaki amaç saldırı kurmak değil; şüpheli artefaktları izole etmek, davranışı doğrulamak ve denetlenebilir rapor üretmektir.

2.1. Container imaj ve katman analizi: şüpheli artefakt ayrıştırma

Container imajı, katmanlı bir dosya sistemi gibi çalışır; her katman öncekinin üzerine eklenen değişiklikleri taşır. Neden önemli? Şüpheli bir ikili, bir katmanda eklenmiş olabilir; ya da meşru bir bileşen beklenmedik bir katmanda değiştirilmiş olabilir. Analist için değer, "dosya var" demekten çok, o dosyanın hangi katmanda ve hangi bağlamda geldiğini söyleyebilmektir.

  • Artefakt ayrıştırma yaklaşımı:
  • Beklenen bileşen seti (base imaj, uygulama bağımlılıkları) ile görülen bileşen seti arasındaki farklar
  • Katmanlar arasında değişen dosyalar ve "neden bu katmanda?" sorusu
  • Meşru paket yöneticisi kaynaklı mı yoksa doğrudan kopyalanmış mı izlenimi?
  • Doğrulama: Şüpheli dosya, container çalıştığında gerçekten yürütülüyor mu? Yalnızca build artığı olabilir.
  • Karşı kanıt: CI/CD pipeline çıktılarında veya resmi imaj etiketlerinde aynı değişiklik var mı? Aynı servis için önceki sürümlerde benzer dosya bulunuyor mu?

Örnek: Bir uygulama imajında beklenmeyen bir ELF ikilisi katmanlardan birinde görülüyor. İlk hipotez "eklenmiş zararlı" olabilir. Karşı kanıt olarak, ilgili katmanın hangi pipeline adımına karşılık geldiği, imajın resmi registry kaydındaki açıklamalar ve önceki imaj sürümlerindeki farklar incelenir. Eğer aynı ikili daha önce de var ve meşru bir bağımlılığa aitse, hipotez zayıflar; yoksa "şüpheli ekleme" bulgusu kanıt gücünü artırır.

2.2. Kubernetes çalışma zamanı artefaktları: pod davranışı, init container, job/cron job örüntüleri

Kubernetes'te iş yükleri pod'lar içinde koşar; init container, ana container başlamadan önce çalışan hazırlık adımlarını temsil eder; job/cron job ise tek seferlik veya zamanlanmış işlerdir. Neden önemli? Kalıcılık veya gizli yürütüm, bazen ana uygulamaya dokunmadan init container veya cron job gibi mekanizmalarla "görünürde meşru" bir akışa saklanabilir.

Savunma odaklı analizde dikkat edilen noktalar:

  • Pod davranış profili: Normalde kısa yaşayan bir pod'un aniden sürekli yaşaması; normalde ağ erişimi olmayan bir iş yükünün ağ konuşmaya başlaması gibi sapmalar.
  • Init container örüntüleri: "Hazırlık" amacıyla eklenmiş init container gerçekten hazırlık mı yapıyor, yoksa uygulama dışı bir yürütüm mü taşıyor? Bu iddia, init container'ın yaptığı değişikliklerin ana container davranışıyla ilişkisi üzerinden doğrulanır.
  • Job/CronJob örüntüleri: Zamanlanmış işler, özellikle veri işleme ve bakım görevlerinde meşrudur; şüpheyi doğuran şey, işin rolüyle uyumsuz erişimler ve beklenmeyen sıklık/davranış sapmalarıdır.

Örnek: Bir ortamda her gece çalışan bir cron job görülüyor. İlk yorum "bakım işi" olabilir. Karşı kanıt olarak, job'ın çıktısının gerçekten bakım metriklerine mi hizmet ettiği, yürütüm sırasında beklenmeyen ağ temasları olup olmadığı ve aynı işin önceki haftalarda aynı şekilde tanımlı olup olmadığı incelenir. Sonuç, "meşru bakım" veya "rol uyumsuz, doğrulanmış sapma" şeklinde kanıt gücüne göre yazılır.

Dikkat: Cloud-native analizde en sık tuzak, "manifestte var → meşru" düşüncesidir. Yanlış yapılandırmalar veya zincirleme değişiklikler, meşru tanımlar içine şüpheli yürütümü taşıyabilir. Bu yüzden tanım (deployment/yaml) delildir ama tek başına hüküm değildir; runtime sinyallerle doğrulanmalıdır.

2.3. Cloud ortamlarında log ve olay korelasyonu: audit yaklaşımı ve runtime sinyaller

Cloud log korelasyonu, olayların farklı katmanlara bölünmesi nedeniyle "tek bir log kaynağı yeter" yaklaşımını bozar. Audit yaklaşımı, özellikle kontrol düzlemi eylemlerini (kim, neyi, ne zaman değiştirdi) izlemeyi hedefler; neden önemli dersen, cloud-native persistence çoğu zaman "dosya bırakmak" yerine "yetki ve tanım değişikliği" ile kurulur.

  • Audit odaklı doğrulama: Bir pod davranışı şüpheliyse, bunu doğuran değişiklik hangi audit olayına bağlanabiliyor? Değişiklik zinciri yoksa, hipotez zayıflar ya da veri eksikliği açıkça raporlanır.
  • Runtime sinyaller: Container'ın beklenmedik süreç üretmesi, beklenmedik network temasları, kısa süreli ama tekrarlı iş yükü oluşumu gibi sinyaller, audit ile birleştirildiğinde kanıt gücü artar.
  • Karşı kanıt: Otomasyon sistemleri (CI/CD, autoscaler, operatörler) benzer değişiklikleri meşru biçimde üretebilir. Bu yüzden "değişikliği kim yaptı?" sorusunun cevabı, servis hesapları ve otomasyon paternleriyle tutarlı mı diye sınanır.

Örnek: Bir servis hesabının çok sayıda deployment güncellemesi yaptığı görülüyor. İlk yorum "otomasyon" olabilir. Ancak aynı zaman penceresinde runtime sinyallerinde, beklenmeyen init container eklenmesi ve ağ temasları sapması varsa, otomasyon hipotezi zayıflar; audit zinciri, değişikliğin kaynağını daha sıkı doğrulamak için kullanılır.

İpucu: Korelasyonun raporlanabilir olması için olayları "değişiklik → etkisi → doğrulama → karşı kanıt" şeklinde yaz. Örneğin: "X tanımı değişti (audit) → Y davranışı oluştu (runtime) → Z ile doğrulandı (korelasyon) → alternatif açıklama (otomasyon) şu nedenle zayıf kaldı."

2.4. Cloud-native persistence örüntüleri ve tespit odaklı analiz yaklaşımı

Cloud-native persistence, çoğu zaman platform mekanizmalarının "beklenen" özelliklerini kötüye kullanım olarak değil, "beklenmeyen bağlamda" kullanma şeklinde belirir: beklenmedik ayrıcalıklar, rol uyumsuz zamanlanmış işler, init container üzerinden değişiklik izleri, imaj katmanında sessiz eklemeler... Neden önemli? Tespit odaklı yaklaşım, bu örüntüleri "kural yazılabilir sinyaller" haline getirir.

  • Örüntüleri kanıta dönüştürme:
  • Hangi tanım değişikliği hangi davranışı doğurdu?
  • Bu bağ, başka bir açıklamayla (meşru bakım, autoscaling, sürüm geçişi) kırılabiliyor mu?
  • Sınırlar ve riskler:
  • Her ortamda full audit kapsamı olmayabilir; eksik kapsam, raporda "kanıt gücü"nü düşürür.
  • Kısa ömürlü pod'lar delili hızla yok eder; yöntem seçimi burada "ne kadar hızlı yakalamalıyım?" sorusuna bağlanır.

Dikkat: Cloud-native vakalarda "kanıtın uçuculuğu" (ephemerality) yüksektir. Bir bulgu, yalnızca birkaç dakika görünen bir pod davranışına dayanıyorsa; aynı bulguyu tekrar üretilebilir kılacak audit kaydı, imaj katmanı farkı veya tanım sürümü gibi kalıcı delillerle desteklemeden kesin hüküm kurmak raporu kırılgan yapar.

3) Doğrulama, kanıt üretimi ve yöntem seçimi: IoT ve cloud için ortak disiplin

Bu bölüm, modülün iki dünyasını ortak bir standarda bağlar: aynı bulgu farklı yöntemlerle doğrulanabilir; önemli olan koşula göre doğru yöntemi seçmek ve sonucu delil olacak biçimde paketlemektir.

3.1. Doğrulama: hipotezi test etmek ve karşı kanıtı tasarlamak

Bir bulgu, çoğu zaman bir "işaret" olarak başlar: şüpheli ELF, beklenmedik katman farkı, anormal init container... Doğrulama, bu işaretin gerçekten iddia ettiğin şeye bağlanıp bağlanmadığını sınamaktır.

  • IoT tarafında karşı kanıt çoğu zaman meşru firmware özelleştirmesi veya meşru yönetim telemetrisi olur.
  • Cloud-native tarafta karşı kanıt çoğu zaman otomasyon paternleri (CI/CD, operatörler, autoscaling) ve planlı bakım işleri olur.

Örnek: Bir container imajında beklenmeyen ikili var. "Zararlı" hipotezini test etmek için runtime'da yürütüm bağı aranır; karşı kanıt olarak, aynı ikilinin önceki meşru sürümlerde bulunması veya pipeline artefaktı olması ihtimali değerlendirilir. Sonuç, kanıt gücüne göre katmanlanır: "şüpheli artefakt" → "yüksek şüpheli ekleme" → "davranışla doğrulanmış ekleme".

3.2. Kanıt üretimi: rapora dayanıklı paket nasıl oluşturulur?

Bu modülde kanıt paketi üç parçaya ayrılır:

  1. Gözlem: Ne gördün? (artefakt, fark, olay kaydı, zaman damgası)
  2. Yorum: Bu gözlem hangi hipotezi destekliyor?
  3. Yeniden üretilebilirlik + zaman çizelgesi: Başka bir analist aynı veriden aynı sonuca nasıl gider?

IoT için örnek paket öğeleri:

  • ELF ikilinin kimliği ve mimari uyumu (gözlem)
  • Konfigürasyon/C2 iddiasını destekleyen xref/veri akışı bağı (yorum)
  • Firmware sürümü ve karşılaştırma referansı (yeniden üretilebilirlik)

Cloud-native için örnek paket öğeleri:

  • İmaj katman farkı ve hangi katmanda eklendiği (gözlem)
  • Audit olay zinciri ile runtime sinyali arasındaki bağ (yorum)
  • Tanım sürümü, değişiklik zamanı ve otomasyon bağlamı (yeniden üretilebilirlik)

İpucu: Rapor eklerinde "delil haritası" kullan: her iddia için hangi veri kaynaklarıyla (imaj katmanları, audit log, runtime sinyal, firmware artefaktı) desteklediğini tek sayfada göster. Bu harita, denetimde en hızlı savunma aracıdır.

3.3. Yöntem seçimi: aynı problemi farklı yollardan çözmek

Yöntem seçimi, "en kapsamlı"yı değil, "en uygun ve en az riskli"yi seçmektir.

  • IoT cihaz erişimi kısıtlıysa: Firmware artefaktları ve ikili statik analizi daha gerçekçi olabilir; runtime kanıtı sınırlı kalabilir. Bu sınırlılık rapora yazılır.
  • Cloud ortamda uçuculuk yüksekse: Öncelik audit zinciri ve imaj katmanı gibi kalıcı deliller olabilir; runtime sinyaller kaçabilir. Buna göre kesinlik dili ayarlanır.
  • Kurumsal risk: Üretim sisteminde agresif gözlem yöntemleri davranışı etkileyebilir; "minimal müdahale" yaklaşımını Modül 6'daki prensiplerle uyumlu şekilde burada da sürdürürsün.

Örnek: Bir Kubernetes ortamında şüpheli cron job görüldü. Yöntem seçimi, önce audit üzerinden "kim ekledi, ne zaman, hangi kaynakla" sorusunu cevaplar; sonra runtime sinyallerle davranış sapmasını doğrular; en sonunda imaj/katman farkı ile şüpheli bileşeni izole eder. Bu sırada otomasyon kaynaklı alternatif açıklamalar sürekli karşı kanıt olarak masada tutulur.

Terimler Sözlüğü

Terim Açıklama
IoTNesnelerin İnterneti; gömülü/bağlantılı cihaz ekosistemi
ELFLinux tabanlı sistemlerde yürütülebilir/bağlanabilir dosya biçimi
ARM / MIPSIoT’ta sık görülen CPU mimarileri
UserlandÇekirdek dışındaki kullanıcı alanı yazılım bileşenleri
Embedded configurationİkili/fonksiyon içine gömülü çalışma parametreleri
C2 (Command and Control)Komut alma ve telemetri gönderme altyapısı
FirmwareCihazın sistem yazılımı ve dosya sistemi bileşenleri paketi
BotnetÇok sayıda cihazın komut–telemetri ile yönetildiği ağ
TelemetryDurum/sonuç bildirim verisi; tespit ve korelasyonda kullanılır
Container imageUygulama ve bağımlılıklarını taşıyan container imajı
Layerİmajın katmanları; her katman dosya sistemi değişikliklerini taşır
KubernetesContainer orkestrasyon platformu
PodKubernetes’te bir veya daha fazla container’ın çalıştığı birim
Init containerAna container başlamadan önce çalışan hazırlık container’ı
Job / CronJobTek seferlik veya zamanlanmış Kubernetes iş yükleri
Audit logKontrol düzleminde yapılan eylemleri kaydeden olay günlükleri yaklaşımı
Control planeKüme yönetimi ve planlamadan sorumlu katman
Runtime signalÇalışma zamanında gözlenen süreç/ağ/davranış sinyali
PersistenceKalıcılık; ortamda tekrar tekrar yürütüm garantisi oluşturan örüntüler

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) IoT ELF analizinde “mimari farkındalığın” en kritik çıktısı aşağıdakilerden hangisidir?

A) Her ELF’in her cihazda çalışacağının anlaşılması

B) Disassembly/decompile yorumunun doğruluk sınırlarının belirlenmesi ve yanlış yorum riskinin azaltılması

C) Ağ trafiğinin otomatik şifrelenmesi

D) Kernel debug yeteneğinin zorunlu hale gelmesi

E) Sadece dosya adından sonuca gidilebilmesi

  • Doğru: B
  • Gerekçe: Mimari uyumu, analizin doğruluğunu belirler. A yanlıştır; C/D konu dışı genellemeler; E kanıtsızdır.
  1. 2) Bir ikilide görülen tek bir alan adı (ör. example.net benzeri) neden tek başına “C2 kanıtı” sayılmamalıdır?

A) Alan adları hiçbir zaman anlamlı değildir

B) Alan adı her zaman meşru güncelleme sunucusudur

C) Alan adının komut/telemetri akışına bağlandığını gösterecek veri akışı ve yürütüm yolu kanıtı gerekir

D) Alan adı yalnızca Windows’ta çalışır

E) IoT cihazlarında DNS kullanılmaz

  • Doğru: C
  • Gerekçe: C2 iddiası, kullanım bağlamı ile doğrulanmalıdır. A/B aşırı genelleme; D/E hatalıdır.
  1. 3) Firmware artefaktlarından “kalıcılık” iddiasını güçlendiren en sağlam yaklaşım hangisidir?

A) Şüpheli görünen her dosyayı doğrudan zararlı ilan etmek

B) Tek bir dosya varlığını yeterli görmek

C) Beklenen firmware yapısıyla sapmayı, başlangıç bağlamı ve zaman çizelgesiyle ilişkilendirip meşru özelleştirme karşı kanıtını da değerlendirmek

D) Sadece dosya boyutuna bakmak

E) Sadece cihazın yavaşlamasına dayanmak

  • Doğru: C
  • Gerekçe: C, kanıt zinciri ve karşı kanıt disiplini kurar. A/B zayıf; D/E dolaylı ve yetersizdir.
  1. 4) IoT botnet şüphesinde “telemetri” iddiasını doğrularken en doğru karşı kanıt türü hangisidir?

A) “Telemetri” kelimesinin string olarak geçmesi

B) Temiz profilde aynı firmware ve rol bağlamında benzer telemetri akışının bulunması

C) Cihazın ekranının olmaması

D) CPU sıcaklığının artması

E) Dosya uzantılarının farklı olması

  • Doğru: B
  • Gerekçe: Karşı kanıt, meşru yönetim telemetrisi ihtimalini test eder. A/D/E zayıf; C alakasızdır.
  1. 5) Container imaj/katman analizinde “şüpheli artefakt ayrıştırma”nın en güçlü dayanağı nedir?

A) Katmanların hiçbir zaman değişmemesi

B) Dosyanın yalnızca varlığı

C) Dosyanın hangi katmanda ve hangi build/pipeline bağlamında eklendiğinin gösterilmesi ve önceki sürümlerle karşılaştırma

D) Sadece container adının uzunluğu

E) Sadece RAM kullanım grafiği

  • Doğru: C
  • Gerekçe: Katman + bağlam + karşılaştırma, delili güçlendirir. B tek başına zayıf; A yanlış; D/E alakasız.
  1. 6) Kubernetes’te init container ve CronJob örüntülerinin analizde kritik olmasının nedeni hangisidir?

A) Her zaman zararlı olmaları

B) Ana uygulamaya dokunmadan yürütüm ve değişiklik taşıyabilmeleri; bu yüzden rol uyumu ve runtime doğrulama gerektirmeleri

C) Sadece ağ hızını artırmaları

D) Sadece GUI uygulamalarında kullanılmaları

E) Log tutmamaları

  • Doğru: B
  • Gerekçe: Bu mekanizmalar meşru da olabilir; kritik olan bağlam ve doğrulamadır. A genelleme; C/D/E yanlış.
  1. 7) Cloud ortamında audit yaklaşımının tespit ve doğrulamadaki en büyük katkısı hangisidir?

A) Container içine dosya yazmayı engellemesi

B) Kontrol düzleminde “kim, neyi, ne zaman değiştirdi” zincirini sağlayarak davranış sapmalarını değişikliklerle ilişkilendirmesi

C) Her zaman tüm runtime olaylarını tek başına yakalaması

D) Sadece ağ paketlerini şifrelemesi

E) Sadece disk imajı çıkarması

  • Doğru: B
  • Gerekçe: Audit zinciri korelasyonun omurgasıdır. C aşırı iddia; A/D/E audit’in işlevi değildir.
  1. 8) Cloud-native persistence iddiasını denetime dayanıklı yazmak için en kritik unsur hangisidir?

A) Çok sayıda araç adı yazmak

B) Tek bir anlık runtime gözlemine dayanmak

C) Tanım değişikliği (audit), davranış (runtime) ve kalıcı delil (imaj katmanı/sürüm) arasında yeniden üretilebilir bağ kurmak

D) Sadece kullanıcı şikâyeti eklemek

E) Sadece “yüksek ihtimal” demek

  • Doğru: C
  • Gerekçe: C, delil standardını ve yeniden üretilebilirliği sağlar. B kırılgan; A/D/E yetersizdir.
  1. 9) IoT ve cloud-native analizde yöntem seçimini en doğru ifade eden seçenek hangisidir?

A) Her zaman en kapsamlı ve en müdahaleci yöntem seçilir

B) Her zaman yalnızca statik analiz yeterlidir

C) Ortam kısıtları, uçuculuk, operasyonel risk ve hipotezin gerektirdiği kanıt türüne göre en az riskli–en yüksek kanıt değerli yol seçilir

D) Yöntem analistin alışkanlığına bırakılır

E) Sadece cihazın marka/modeline göre karar verilir

  • Doğru: C
  • Gerekçe: C, risk ve kanıt değerini birlikte yönetir. A/B tek boyutlu; D keyfî; E dar ve hatalıdır.
  1. 10) Bir bulguyu raporda delil olacak biçimde paketlemenin doğru yapısı hangisidir?

A) Yorumları gözlemlerle karıştırıp tek paragraf yazmak

B) Sadece ekran görüntüsü eklemek

C) Gözlem–yorum ayrımı, zaman çizelgesi ve yeniden üretilebilirlik bağlamı ile karşı kanıt sonuçlarını birlikte sunmak

D) Sadece IOC list paylaşmak

E) Sadece “zararlı” demek

  • Doğru: C
  • Gerekçe: Delil standardı; şeffaflık, bağlam ve denetlenebilirlikle yükselir. A/B/D/E tek başına yetersizdir.

Bu modülde neler öğrendiniz?

  • IoT ELF örneklerini mimari farkındalıkla yorumlamayı ve yanlış yorum riskini karşı kanıtla azaltmayı
  • Gömülü konfigürasyon ve C2 çıkarımında “bulgu → doğrulama → delil” zinciri kurmayı
  • Firmware artefaktları üzerinden kalıcılık iddiasını, meşru özelleştirme olasılığını dışlamadan kanıt standardında yazmayı
  • IoT botnet komut–telemetri örüntülerini davranış modeli üzerinden okuyup tespit önerisine dönüştürmeyi
  • Container imaj/katman analizinde şüpheli artefaktları bağlamıyla ayrıştırmayı ve doğrulamayı
  • Kubernetes runtime artefaktlarında (pod, init container, job/cron job) rol uyumu, audit korelasyonu ve runtime sinyallerle cloud-native persistence örüntülerini kanıtlamayı
  • Yöntem seçimini ortam kısıtı, uçuculuk ve operasyonel riskle birlikte ele alıp raporu yeniden üretilebilir kılmayı

MODÜL 15 — AI/ML Tabanlı Malware Analizi ve Modern Evasion

MODÜL 15 — AI/ML Tabanlı Malware Analizi ve Modern Evasion

Modül Teması

ML Pipeline

Özellik mühendisliği, model seçimi ve değerlendirme.

Modern Evasion

LOLBins, living-off-the-land ve adversarial örnekler.

Dengeli Karar

Model çıktısını kanıtla destekleyip yanlış pozitifi yönetmek.

Geleneksel imza tabanlı yaklaşımlar, saniyeler içinde binlerce varyant üretebilen modern tehdit akışında giderek daha sık "geç kalır". Bu modül, yapay zekâ ve makine öğrenmesini bir kara kutu olarak değil; doğru veri temsili, ölçülebilir öznitelikler, sistematik doğrulama ve denetlenebilir kanıt standardı üzerine kurulu bir analiz disiplini olarak ele alır. Analistin hedefi tek bir örneği "etiketlemek"ten öteye geçer: benzer örnekleri kümeler, ortak çekirdeği ayırır, model çıktısını bağımsız kanıtlarla sınar ve raporda itirazlara dayanacak şekilde paketler.

Bu Modülde Hedeflenen Kazanımlar

  • Otomatik obfuscation ve hızlı varyantlaşma altında “ne değişir, ne değişmez?” sorusunu kararlı sinyaller üzerinden yanıtlamak.
  • Büyük hacimli örneklerde davranış benzerliklerini kümelenme mantığıyla ayırmak; “aile” iddiasını karşı kanıtla test etmek.
  • Statik–dinamik–bellek perspektifinde öznitelik (feature) çıkarımını tasarlamak; ölçeklenebilir analiz hattına dönüştürmek.
  • Adversarial ML, model yanıltma ve zehirlenme (poisoning) risklerini saptamak; model çıktısını açıklanabilirlik ile doğrulamak.
  • Kampanya zinciri korelasyonunda (örnek → küme → altyapı/örüntü) kanıt standardını korumak ve yöntem seçimini bağlama göre yapmak.

1) Otomatik obfuscation ve hızlı varyantlaşma örüntüleri

Otomatik obfuscation, aynı niyeti farklı görünümlerle sunarak basit imzaları etkisizleştirir; neden önemli? Analist "bu tamamen yeni" zannederse kapasiteyi tüketir, "zaten gördük" zannederse gerçekten yeni bir davranışı kaçırır. Burada odak saldırganın üretim yöntemleri değil; savunmada hangi sinyallerin kolayca değiştirilebildiğini, hangilerinin görece kararlı kaldığını ayırt etmektir.

1.1. Sentetik kod üretimi ve "polimorfizm 2.0"

Üretken modeller (LLM'ler dahil) kodun işlevini koruyup yüzeyini hızla yeniden düzenleyebilir: isimlendirme, fonksiyon hiyerarşisi, kontrol akışı düzeni ve gömülü metinler sürekli değişebilir. Bu, hash ve basit string imzalarının "kovalamaca"ya dönüşmesine yol açar.

Doğrulama burada "AI üretti" gibi iddialara değil, analiz için işe yarayan sonuçlara dayanır: Bir varyant ailesi olduğunu düşünüyorsan, yüzey benzerliği yerine davranış çekirdeği ve veri akışı bağımlılıkları gibi daha kararlı sinyaller ararsın. "Kod entropisi" veya "stilistik tutarlılık" gibi metrikler bazı durumlarda ipucu verebilir; ancak tek başlarına güvenilir kanıt değildir. Karşı kanıt olarak, aynı metriklerin meşru yazılımlarda (sıkıştırılmış içerik, yoğun kütüphane kullanımı, otomatik üretim pipeline'ları) da benzer değerler üretip üretmediği mutlaka sorgulanır.

Örnek: Kurum içi bir otomasyon aracı güncellemesinde, dosya içeriği sürümler arasında "çok değişmiş" görünür ve entropi yükselmiştir. Bu durum tek başına zararlı işaretlemesi için yeterli değildir; zamanlama (dağıtım penceresi), imzalama/teslim zinciri ve davranış bağlamı gibi bağımsız sinyallerle doğrulanmadıkça "AI kaynaklı şüpheli varyant" sonucu yazılmaz.

1.2. "Değişen yüzeyler" ve "kararlı çekirdek" yaklaşımı

Varyantlaşmada en hızlı değişen katmanlar genellikle yüzeydir: string'ler, bölüm adları, fonksiyon yerleşimi ve bazı kontrol akışı şekilleri. Buna karşı daha kararlı kalanlar çoğu zaman işin çekirdeğine bağlıdır: belirli veri dönüşümleri, konfigürasyon okuma/yazma paternleri, hata toparlama mantığı, ağ iletişim ritmi ve olayların ardışıklığı.

  • Bir bulgu "bu aileye benziyor" diyorsa, bunu tek bir işarete bağlamak yerine en az iki sınıftan sinyalle desteklemek gerekir (ör. davranış akışı + konfigürasyon şeması).
  • Karşı kanıt tasarımında, benzer görünen davranışın meşru yazılımlarda da oluşabileceği kabul edilir; "temiz profil" veya benzer rol/ortam karşılaştırması bu yüzden önemlidir.
  • Rapor dili, "benziyor" cümlesini yalnız bırakmaz; hangi sinyallerin iddiayı güçlendirdiğini ve hangi sinyallerin iddiayı zayıflatabileceğini açıkça belirtir.

Örnek: Dosya erişimleriyle eş zamanlı kısa süreli yoğun ağ trafiği görülür ve daha önceki bir kümeyi çağrıştırır. Doğrulama için ağ davranışının hangi süreç/iş parçacığı bağlamında gerçekleştiği, aynı davranışın meşru bir güncelleme veya yedekleme ajanında da oluşup oluşmadığı kontrol edilir. Benzer meşru profilde de oluşuyorsa, "aile benzerliği" iddiası zayıflar; rapor daha temkinli biçimde yeniden formüle edilir.

İpucu: Obfuscation yoğun örneklerde, hızlı hipotez testi yaklaşımı (önce güçlü sinyali seç → minimum doğrulama seti → kanıtı paketle) çok zaman kazandırır. Buradaki fark, testin odağının "hangi sinyal kararlı?" sorusu olmasıdır.

2) Davranış odaklı analiz ve varyant kümelenmesi

Binlerce örneği tek tek derinlemesine incelemek ölçeklenmez. Davranış odaklı analiz, örneklerin ortak çekirdeğini ortaya çıkarmaya çalışır; neden önemli? Çünkü aynı niyetin varyantları arasında yüzey farklılaşsa da, çoğu zaman benzer bir olay sırası ve benzer bir "iş akışı" korunur. Buna rağmen davranış temelli yöntemler yanlış pozitif üretmeye yatkındır; çünkü meşru yazılımlar da dosya, ağ ve süreç işlemleri yapar.

2.1. Davranışı nasıl temsil edersin?

Davranış yalnızca "ne oldu" değil; "ne zaman, neyin ardından, hangi bağlamda" sorusunun cevabıdır. Temsil derinliği arttıkça ayırt edicilik güçlenir:

  • Özet davranış: Yüksek seviye etiketler (ağ erişimi, dosya işlemi vb.). Triage için hızlıdır ama kanıt gücü sınırlıdır.
  • Sıra/akış davranışı: Olayların ardışıklığı ve bağımlılığı. Aile benzerliğinde daha güçlü sinyal sağlar.
  • Bağlam davranışı: Süreç zinciri, zaman penceresi, izin bağlamı ve çalışma koşulları. Yanlış pozitifleri ayıklamada kritik rol oynar.

Örnek: Aynı gün yüzlerce örnek gelir ve bir küme benzer ağ ritmi gösterir. Özet seviyede hepsi "şüpheli" görünebilir. Bağlam incelendiğinde, bunun beklenen dağıtım penceresinde çalışan kurumsal bir güncelleme aracına ait olduğu anlaşılırsa, küme "malware ailesi" diye etiketlenmez.

2.2. Kümelenme (clustering): hipotez üretir, hüküm vermez

Kümelenme, benzer örnekleri gruplar; neden önemli? Analist, binlerce dosya yerine birkaç temsilci örneğe odaklanarak hızlı önceliklendirme yapabilir. Ancak iki kritik soru her zaman masada kalır:

  1. — Benzerlik hangi özelliklerden geliyor?
  2. — Bu benzerlik kötü niyetli ortak kökeni mi gösteriyor, yoksa çevresel tesadüf mü?

İleri seviye doğrulama disiplini:

  • Çapraz temsil doğrulaması: Küme hem statik hem davranış özelliklerinde tutarlı mı? Yalnız biri tutarlıysa iddia zayıflar.
  • Meşru karışma testi: Kümeye meşru yazılım örnekleri de düşüyor mu? Düşüyorsa eşik/özellik seti yeniden gözden geçirilir.
  • Kesinlik eşiği: "Benzer davranış kümesi" demek ile "aynı aile" demek aynı kanıt eşiği değildir. Rapor dili bunu yansıtmalıdır.

Dikkat: Modelin ürettiği kümeyi "gerçek" sanmak, analizde en pahalı hatalardan biridir. Kümeler hipotez üretir; hipotez, bağımsız kanıt ve karşı kanıtla sınanmadan "aile" etiketi verilmez.

2.3. Temsilci örnek seçimi ve kanıt paketi

Kümeden bir "temsilci" seçmek yöntem seçimidir. Hızlı triage'de en tipik davranışı gösteren örnek seçilebilir; adli raporlamaya giden vakada ise uç davranış (en yüksek riskli alt-örnek) seçmek daha doğru olabilir.

Örnek: 5.000 dosyalık bir kampanyada model, benzer ağ hedefleri ve ortak bir eşzamanlama (mutex benzeri) izi üzerinden bir küme önerir. Analist, kümeden bir temsilci seçer; ancak "tek temsilci = tüm küme" varsayımını doğrudan kabul etmez. Kümenin içinden birkaç sınır örneği daha seçip, çekirdeğin gerçekten ortak olup olmadığını doğrular. Rapor ekinde, küme tanımı (özellikler), temsilci seçme gerekçesi ve karşı kanıt kontrolü (meşru karışma testi) yer alır.

3) Öznitelik çıkarımı (feature extraction) ve otomasyon yaklaşımı

Öznitelik çıkarımı, ham gözlemleri (statik/dinamik/bellek) modelin işleyebileceği temsillere dönüştürmektir; neden önemli? Çünkü yanlış özellik seti, doğru modeli bile yanıltır. İleri düzeyde kritik nokta, özellik tasarımının doğrulama gücünü, kanıt üretimini ve ölçeklenebilirliği belirlemesidir.

3.1. Statik ve dinamik feature setleri: doğru bağlam, doğru yöntem

  • Statik öznitelikler: Yapısal metrikler, bölüm düzeni, import/çağrı örüntüleri, byte tabanlı temsiller (n-gram gibi).
  • Dinamik öznitelikler: Olay sıraları, süreç ilişkileri, ağ/dosya davranış paternleri, zamanlama örüntüleri.
  • Bellek odaklı öznitelikler: Çalışma zamanında ortaya çıkan çözülmüş config/anahtar izleri gibi; kanıt standardı açısından güçlü olabilir.

Yöntem seçimi bağlama göre yapılır: yoğun packing/obfuscation altında statik öznitelikler çoğu zaman yalnız "dış kabuğu" temsil eder ve yanlış negatif riskini artırabilir. Bu durumda dinamik ve bağlamlı davranış özellikleri tercih edilir; adli raporlama için bellek odaklı bulgularla güçlendirmek gerekebilir (bu temelin kontrol listesini Orta Seviye ilgili modülde ayrıntılı işlemiştik; burada ileri analiz açısından kritik olan seçim mantığıdır).

İpucu: "Az ama güçlü" özelliklerle başlamak genellikle daha dayanıklıdır. Her şeyi ölçmek gürültüyü büyütür, modelin yanlış güven üretmesine yol açar. Özellikle davranış özelliklerinde bağlam (zaman penceresi, süreç zinciri) eklemek yanlış pozitifleri belirgin biçimde azaltır.

3.2. Ölçek büyüyünce: tutarlılık, sürümleme, yeniden üretilebilirlik

Analiz ölçeği büyüdüğünde sorun modelden önce pipeline'da ortaya çıkar:

  • Tutarlılık kontrolü: Aynı örnek farklı gün/ortamda işlendiğinde özellikler anlamlı biçimde benzer mi? Değilse modelden önce veri toplama/normalizasyon ele alınır.
  • Sürümleme kanıtı: Model sürümü, feature şeması ve sınıflandırma eşiği (threshold) kayda geçer.
  • Yeniden üretilebilirlik: Aynı veri ve aynı pipeline ile aynı sonuca ulaşılabilmeli; raporun teknik ekinde bu meta-bilgi bulunur.

Örnek: Günlük triage hattında önce hafif bir davranış-özet setiyle kümelenme yapılır. Yüksek şüpheli kümeler için ikinci aşamada daha ayrıntılı akış/bağlam temsiline ve gerekiyorsa bellek odaklı doğrulamaya geçilir. Bu iki aşamalı yöntem, hız ile kanıt standardını dengeler.

4) AI destekli evasion, adversarial ML ve analist karşı stratejileri

Saldırganlar, savunma modellerinin karar mantığını manipüle etmeye çalışabilir. Burada amaç "nasıl yapılır" anlatmak değildir; analistin, model yanıltma işaretlerini nasıl fark edeceğini, hangi karşı kanıtı arayacağını ve model çıktısını nasıl doğrulayacağını sistematikleştirmektir.

4.1. Model yanıltma (adversarial evasion): "temiz görünen" sinyallerle risk saklama

Modeli yanıltma girişimlerinde, meşru yazılımlarda sık görülen öznitelikler veya metin parçalarıyla "masum görünüm" üretilebilir. Neden önemli? Otomasyon, gürültü içinde yanlış rahatlık hissi verebilir.

Doğrulama yaklaşımı, model kararının hangi özniteliklere dayandığını açığa çıkarmaktır: açıklanabilirlik teknikleri (LIME/SHAP gibi) ile "hangi sinyal kararı taşıyor?" sorusu yanıtlanır. Eğer model kararı büyük ölçüde düşük değerli yüzey özniteliklerine dayanıyorsa, bu kararın kanıt gücü düşer ve bağımsız davranış/bellek kanıtı aranır.

Dikkat: "Temiz" etiketi, yalnızca bir model çıktısıdır; kesinlik değildir. Zamanlama hileleri, gecikmeli tetiklenme ve ortam bağımlı davranışlar, kısa gözlem pencerelerinde görünmeyebilir. Bu yüzden raporda gözlem penceresi, ortam profili ve sınırlılıklar açıkça yazılmalıdır.

4.2. Zehirlenme (poisoning) ve güven erozyonu belirtileri

Zehirlenme, modelin eğitim/geri besleme sürecinin manipülasyonu sonucu belirli sınıfları sistematik biçimde yanlış etiketleme eğilimi göstermesidir; neden önemli? Çünkü model "istikrarlı biçimde yanılıyor"sa, otomasyon hattı birikimli zarar üretir.

Analistin aradığı işaretler şunlardır:

  • Belirli bir davranış ailesi için skorların alışılmadık biçimde düşmesi/yükselmesi
  • Açıklanabilirlik çıktılarında kararın düşük değerli yüzey sinyallerine kayması
  • Yeni veriyle performansın hızla bozulması (drift ile birlikte)

Bu tür durumlarda yöntem seçimi değişir: otomasyonun ağırlığı azaltılır, daha yüksek kanıt eşiğiyle insan denetimi artırılır, veri toplama ve feature şeması gözden geçirilir.

4.3. Overfitting ve concept drift: "ezberleyen" model ve değişen tehdit dünyası

Overfitting, modelin geçmiş veriyi "ezberleyip" yeni varyantlara genelleyememesidir; concept drift ise tehdit davranışlarının zamanla kaymasıdır. Neden önemli? Çünkü tehdit ekosistemi dinamik, savunma hattı ise çoğu zaman geçmiş veriye dayanır.

Doğrulama ve bakım disiplininde:

  • Yeni varyantlarla düzenli değerlendirme ve kalibrasyon
  • Drift işaretlerinde feature seti ve eşiklerin gözden geçirilmesi
  • Kritik kümelerde human-in-the-loop yaklaşımının güçlendirilmesi

5) Kampanya zinciri: örnek → küme → altyapı → davranış haritası

AI/ML, kampanya analizinde önceliklendirme ve korelasyonu hızlandırır. Ancak kampanya iddiası, savunma açısından güçlü bir sonuçtur; bu nedenle kanıt standardı yüksek tutulur.

  • "Aynı kampanya" iddiası en az iki bağımsız bağla desteklenmelidir (ör. benzer konfigürasyon şeması + benzer davranış akışı).
  • Ortak altyapı benzerliği, paylaşılan meşru servisler veya barındırma kalıpları nedeniyle yanıltıcı olabilir; bu karşı kanıt ihtimali raporda değerlendirilir.
  • Çıktı paketlenirken, gözlem — yorum ayrımı korunur: modelin kümeleri ve skorları gözlemdir; kampanya yorumu ek kanıt ister.

Örnek: İki örnek benzer yapıdaki bir konfigürasyon şemasına sahiptir ve benzer zaman penceresinde dağıtılmıştır. Karşı kanıt olarak, bu şemanın yaygın bir meşru bileşenin varsayılan formatı olup olmadığı kontrol edilir. Eğer yaygınsa, kampanya bağı iddiası yalnız bu işarete dayandırılmaz; davranış akışı ve bağlam sinyalleriyle güçlendirilir.

Terimler Sözlüğü

Terim Açıklama
AI (Artificial Intelligence)Yapay zekâ; karar/çıkarım otomasyonu sağlayan yöntemler bütünü
ML (Machine Learning)Makine öğrenmesi; veriden örüntü öğrenen modeller yaklaşımı
LLM (Large Language Model)Büyük dil modeli; üretken metin/kod üretiminde kullanılan model sınıfı
VariantVaryant; aynı çekirdeğin farklı paketlenmiş/biçimlenmiş sürümü
ObfuscationBulandırma; okunabilirliği/analizi zorlaştıran dönüşümler
EvasionKaçınma/atlatma; tespit yüzeylerini yanıltma davranışları
Feature extractionÖznitelik çıkarımı; ham gözlemi model temsiline dönüştürme
FeatureÖzellik/öznitelik; modelin kararında kullandığı ölçüm değişkeni
ClusteringKümeleme; benzer örnekleri gruplama (çoğunlukla gözetimsiz)
Behavior profilingDavranış profilleme; olayların bağlamlı temsilini çıkarma
EmbeddingGömme temsili; veriyi vektör uzayında temsil etme yaklaşımı
Ground truthDoğrulanmış gerçek etiket; referans sınıflandırma
False positive / False negativeYanlış pozitif / yanlış negatif; hatalı alarm / kaçırma
CalibrationKalibrasyon; skorların güven/olasılık yorumuna uyarlanması
Concept driftKavram kayması; veri/tehdit dağılımının zamanla değişmesi
OverfittingAşırı öğrenme; modelin ezberleyip genelleyememesi
Adversarial MLHasmane makine öğrenmesi; modelleri yanıltmaya dönük manipülasyonlar
PoisoningZehirlenme; eğitim/geri beslemenin manipülasyonuyla karar mantığının bozulması
Human-in-the-loopİnsan denetimli süreç; otomasyon çıktısının insanla doğrulanması
EnsembleTopluluk yaklaşımı; birden çok model/sinyali birlikte kullanma
ThresholdEşik; sınıflandırma kararını belirleyen sınır değer
N-gramDizide art arda gelen N öğeden türetilen temsil/ölçüm

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Büyük hacimli örneklerde “kümelenme” yaklaşımının temel faydası hangisidir?

A) Dosya hash değerlerini değiştirmek

B) Benzer davranış gösteren örnekleri gruplandırıp analizi birkaç temsilci örneğe indirgemek

C) İşlemci hızını artırmak

D) İmzalı dosyaları otomatik zararlı yapmak

E) Dosya uzantısını doğrulamak

  • Doğru: B
  • Kısa gerekçe: Ölçeklenebilirlik sağlar. A/C/E konu dışı; D hatalı genellemedir.
  1. 2) Yoğun şekilde paketlenmiş bir örnekte yalnız statik özniteliklere dayanmak en çok hangi riski artırır?

A) Modelin yalnız “dış kabuğu” öğrenip gerçek niyeti kaçırması

B) Ağ bağlantısının kesilmesi

C) Disk alanının artması

D) 64-bit uyumsuzluğu

E) Kümelenmenin imkânsızlaşması

  • Doğru: A
  • Kısa gerekçe: Packing statik sinyalleri maskeleyebilir; dinamik/bağlamlı özellikler gerekebilir. Diğer şıklar alakasız.
  1. 3) Bir model “temiz” etiketi verdiğinde ileri seviye analistin ilk refleksi ne olmalıdır?

A) Etiketi kesin hüküm saymak

B) Sonucu tek başına rapora yazmak

C) Kararın hangi özniteliklere dayandığını açıklanabilirlikle inceleyip bağımsız kanıt aramak

D) Dosyayı hemen ortadan kaldırmak

E) Modeli devre dışı bırakmak

  • Doğru: C
  • Kısa gerekçe: Model çıktısı gözlemdir; kanıt zinciri gerekir. A/B risklidir; D/E bağlama göre aşırı tepkidir.
  1. 4) “Kararlı sinyal” yaklaşımı hangi durumda özellikle değer kazanır?

A) Varyantlaşmanın çok hızlı olduğu akışlarda

B) Tek bir örnek ve hiç varyant yokken

C) Sadece dosya adından aile çıkarırken

D) Sadece görsel rapor üretirken

E) Sadece hash karşılaştırması yaparken

  • Doğru: A
  • Kısa gerekçe: Yüzey sürekli değişirken, çekirdek sinyallerle doğrulama gerekir. C/E kırılgan; D konu dışı.
  1. 5) Davranış temsilinde “bağlam” eklemek en çok neyi güçlendirir?

A) Dosya boyutunu küçültmeyi

B) Yanlış pozitifleri ayıklamayı

C) Packer tespitini garanti etmeyi

D) Modelin asla yanılmamasını

E) Otomasyonu tamamen gereksiz kılmayı

  • Doğru: B
  • Kısa gerekçe: Süreç zinciri, zaman penceresi, izin bağlamı benzer görünen meşru davranışları ayırır. C/D/E garanti değildir.
  1. 6) Bir kümeyi “aile” olarak adlandırmadan önce en sağlıklı kontrol hangisidir?

A) Model ürettiyse doğrudur demek

B) Yalnız statik benzerliğe bakmak

C) Statik + davranış gibi çapraz doğrulama ve meşru karışma karşı kanıtı aramak

D) En büyük kümeye isim vermek

E) Skor eşiklerini rastgele yükseltmek

  • Doğru: C
  • Kısa gerekçe: Aile iddiası yüksek kanıt eşiği ister. A/B/D/E metodolojik olarak zayıftır.
  1. 7) “Overfitting” yaşayan bir savunma modelinin analist için en büyük riski nedir?

A) Eski örnekleri tanıyıp yeni varyantları kaçırması

B) İnternet bağlantısını kesmesi

C) Donanımı bozması

D) Dosyaları şifrelemesi

E) Analizi hızlandırması

  • Doğru: A
  • Kısa gerekçe: Ezberleyen model genelleyemez. B–D konu dışı; E risk değil fayda gibi görünse de tek başına anlamlı değil.
  1. 8) Concept drift (kavram kayması) en doğru hangi durumu anlatır?

A) Dosya adlarının alfabetik değişmesini

B) Tehdit davranışları değiştikçe eski veriye göre eğitilen modelin performansının düşmesini

C) RAM’in artmasını

D) Ekran çözünürlüğünün değişmesini

E) Sadece Python hatalarını

  • Doğru: B
  • Kısa gerekçe: Tehdit ekosistemi dinamiktir; modelin güncelliği ve kalibrasyonu gerekir.
  1. 9) Entropiyi tek başına “zararlı” kanıtı saymamak neden doğrudur?

A) Entropi hiç hesaplanamaz

B) Meşru sıkıştırılmış içerikler de yüksek entropi gösterebilir; bağlamla doğrulama gerekir

C) Entropi yalnız Linux’ta vardır

D) Entropi yalnız 32-bit’te çalışır

E) Entropi sadece ağ paketlerinde ölçülür

  • Doğru: B
  • Kısa gerekçe: Yüksek entropi maskeleme göstergesi olabilir ama kötü niyetin ispatı değildir. Diğerleri yanlış.
  1. 10) AI/ML tabanlı analizde “yeniden üretilebilirlik” için rapora eklenmesi en kritik meta-bilgi hangisidir?

A) Analiz cihazının markası

B) Model sürümü, feature şeması ve karar eşiği (threshold) gibi pipeline parametreleri

C) Klavye dili

D) Monitör çözünürlüğü

E) Dosya uzantısı

  • Doğru: B
  • Kısa gerekçe: Aynı veriyle aynı pipeline’ın aynı sonucu üretmesi gerekir; bu meta-bilgi olmadan denetim zayıflar.

Bu modülde neler öğrendiniz?

  • Hızlı varyantlaşma altında yüzey sinyallerini çekirdek sinyallerden ayıran bir analiz refleksi
  • Kümelenmeyi “hipotez üretimi” olarak kullanıp “aile/kampanya” iddialarını karşı kanıtla sınayan bir doğrulama standardı
  • Statik–dinamik–bellek özniteliklerini bağlama göre seçen, gürültüyü büyütmeden ölçeklenebilen feature tasarımı
  • Model skorunu tek başına sonuç saymayan; açıklanabilirlik, bağımsız kanıt ve sürümleme ile raporu dayanıklı kılan bir kanıt paketi yaklaşımı
  • Adversarial ML, zehirlenme, overfitting ve drift gibi risklerde otomasyon–insan denetimi dengesini bilinçli kuran yöntem seçimi

Modül 16 — Supply Chain Saldırı Analizi

Tedarik zinciri vakalarında problem çoğu zaman "tek bir dosya" değildir; bağımlılıklar, derleme hattı ve dağıtım kanalları boyunca biriken küçük güven varsayımları, tek bir kırılma anında büyük ölçekli etkiye dönüşür. Bu modül, şüpheli paket/sürüm geçişlerini yalnız "kötü mü?" diye etiketlemek yerine; hangi aşamada neyi doğruladığınız, hangi delille hangi kesinlik dilini kullandığınız üzerinden ele alır. Meşru bileşenlerin içine gömülen zararlı davranışları ayrıştırmayı, build/artefakt anomalilerini kanıt standardıyla analiz etmeyi ve altyapı — TTP korelasyonu ile olayı daha geniş kampanya resmine güvenli biçimde oturtmayı hedefler.

Bu Modülde Hedeflenen Kazanımlar

  • Bağımlılık ekosistemi, build pipeline ve artefakt depolarındaki riskleri teknik ve denetlenebilir bir tehdit modeline dönüştürmek.
  • Şüpheli paket/sürüm değişimlerinde hızlı triage ile derin doğrulama arasındaki dengeyi doğru kurmak.
  • Meşru bileşen içine gömülü payload benzeri parçaları işlev–akış–veri bağımlılığı ve fark analizi (diffing) ile ayrıştırmak.
  • SBOM ve yeniden üretilebilir derleme (reproducible builds) gibi kavramları “karşı kanıt” ve ispat mekanizması olarak kullanmak.
  • Kampanya korelasyonunda bağımsız kanıt hatları kurmak; ortak altyapı tesadüfü gibi yanıltıcı açıklamaları sistematik biçimde elemek.
  • Bulguları raporda delile dönüştürmek: gözlem–yorum ayrımı, zaman çizelgesi, yeniden üretilebilirlik, sınırlamalar.

1) Bağımlılık, build pipeline ve artefakt repo riskleri

Modern yazılım geliştirme, yüzlerce üçüncü taraf bileşen ve otomatikleştirilmiş üretim bandı üzerinde yükselir. Neden önemli? Çünkü saldırgan, yazılıma doğrudan saldırmak yerine "güvenilir kabul edilen" bir halkayı hedefleyerek tek hamlede çok sayıda hedefe erişim etkisi yaratabilir. İleri seviye analistin görevi, samanlıkta iğne aramak gibi her şeye tek tek bakmak değil; meşru akış içindeki semantik sapmaları (yazılımın "ne yaptığı"nın beklenmedik biçimde değişmesi) bulma disiplinini işletmektir.

1.1. Bağımlılık riski: "kimin kodunu çalıştırıyorum?"

Bağımlılık analizinde güven kaynağını üç katmanda düşünmek pratik olur:

  • Sahiplik ve yayın yetkisi: Projenin bakım modeli, hesap devri riski, imzalama anahtarlarının yönetimi, yayın sürecindeki erişim sınırları
  • Sürümleme ve değişim mantığı: "Küçük güncelleme" iddiasıyla uyumsuz büyük davranış değişimleri, olağandışı hızlı sürüm artışları, ani bakım devri/ani geri dönüşler
  • Dağıtım kanalı güveni: Registry metadata'sı, paket imzası, yayın geçmişi, kaldırılan sürümler, yeniden yayın ve tag/digest tutarlılığı

Doğrulama bakışı burada "saldırıdır" diye kestirmek yerine, aynı anormalliğin masum açıklamalarını da aktif biçimde arar. Tek başına "yeni sürüm çıktı" bir kanıt değildir; ama yeni sürümle birlikte beklenmedik dış erişim, konfigürasyon okuma akışında değişim ve release notu ile uyumsuz modül eklenmesi aynı anda görülüyorsa hipotez güçlenir.

Örnek: Küçük bir patch güncellemesinde paket boyutu belirgin artar. Bu artış, yeni yerelleştirme dosyaları veya test varlıklarıyla açıklanabilir. Karşı kanıt olarak artışın kaynak kontrolündeki değişimle uyumlu olup olmadığı ve güncelleme sonrası çalışma zamanı davranışında yeni bir dış temas/dosya etkileşimi ortaya çıkıp çıkmadığı birlikte değerlendirilir. "Boyut arttı → saldırı" gibi kısa devre çıkarımlardan kaçınmak, yanlış yönlendirmeyi azaltır.

1.2. CI/CD ve build pipeline riski: "kaynak kod temizse ürün de temiz mi?"

Build pipeline; CI/CD ajanları, secret'lar, cache mekanizmaları, bağımlılık çözümleme ve imzalama adımlarıyla "görünmez" ama yüksek etkili bir yüzeydir. Neden önemli? Çünkü kaynak kod denetimleri (code review) düzgün olsa bile, üretim hattı kompromize ise dağıtılan artefakt beklenmedik şekilde farklılaşabilir.

Burada analistin bakacağı kanıt sınıfları:

  • Provenance (köken) kanıtı: Artefakt hangi commit/tag'den, hangi ortam profiliyle, hangi kimlikle üretildi?
  • Sürüm — artefakt tutarlılığı: Aynı kaynaktan üretildiği iddia edilen çıktılar semantik olarak aynı mı?
  • İmzalama ve anahtar hijyeni: İmzalama nerede ve hangi erişim modeliyle gerçekleşiyor?
  • SBOM sürekliliği: Bağımlılık bileşimi sürümden sürüme beklenen biçimde mi değişiyor?

Bu noktada yöntem seçimi, vakaya göre değişir: canlı olay müdahalesinde hızlı karar gerekiyorsa provenance + SBOM sapmalarıyla risk önceliklendirmesi yapılabilir; adli rapora gidecek vakada ise üretim kanıtının derin doğrulaması daha yüksek standartla ele alınır.

İpucu: Üretim hattı şüphesinde "tek bir delil" aramak yerine, provenance tutarsızlığı + SBOM sapması + davranış farklılığı gibi en az iki bağımsız kanıt hattı kurun. Bu yaklaşım, hem itirazlara dayanıklılığı artırır hem de yanlış alarmı azaltır.

1.3. Reproducible builds: üretim hattı şüphesini "kanıt" düzeyine taşımak

Yeniden üretilebilir derleme, aynı kaynak ve deterministik üretim koşulları sağlandığında aynı çıktıya ulaşabilme ilkesidir. Neden önemli? Çünkü kaynak kod temiz görünüp dağıtılan ürün farklıysa, "nerede fark oluştu?" sorusunu spekülasyondan çıkarıp kanıta yaklaştırır.

Savunma odaklı kullanımda amaç; adım adım saldırı tarif etmek değil, iddianın doğrulanabilirlik eşiğini yükseltmektir. Şüpheli artefakt ile kontrollü ortamda üretilen artefakt arasında anlamlı fark bulunuyorsa, rapor dili "muhtemel"den "güçlü şüphe"ye daha sağlam zeminle geçebilir. Tersi durumda da hipotez daralır ve yanlış yönlendirme riski düşer.

Dikkat: Reproducible builds, her ekosistemde "hemen uygulanabilir" olmayabilir (derleme zaman damgaları, farklı toolchain, non-deterministic adımlar). Bu sınırlamalar rapora açıkça yazılmadığında, güçlü gibi görünen sonuçlar denetimde zayıflayabilir.

1.4. Artifact repository riski: "dağıtılan şey gerçekten beklediğimiz şey mi?"

Artefakt depoları (paket registry, container registry, binary depoları) hem dağıtım kanalı hem de tarihçe kaydıdır. Neden önemli? Çünkü saldırgan çoğu zaman doğrulama/denetim boşluklarının olduğu halkayı seçer.

Analizde şu sorular disiplin kazandırır:

  • Artefaktın kimliği ve yayın geçmişi tutarlı mı (tag/digest ilişkisi, beklenen sürüm politikası)?
  • Olağandışı sil — yeniden yayın veya "tag kaydırma" sinyalleri var mı?
  • Aynı isimle farklı kaynaktan yayın ihtimali mevcut mu (typosquatting / dependency confusion sınıfları)?
  • Repository logları "ne zaman, hangi kimlikle, hangi bağlamda" sorularına cevap verecek kadar sağlam mı?

Dikkat: "İmzalı paket" veya "güvenilir repo" etiketi, supply chain vakalarında analizi bitirmek için gerekçe değildir. İmza anahtarları ele geçirilmiş olabilir ya da üretim hattında imzalanan şey, beklenmeyen biçimde farklılaşmış olabilir. Kesinlik, etiketten değil kanıt zincirinden doğar.

2) Şüpheli paket/sürüm triage ve davranış analizi

Triage'ın amacı tam analiz yapmak değil, doğru sıraya koymaktır. Neden önemli? Çünkü supply chain olaylarında aynı anda birçok sürüm, bağımlılık ve tüketici ürün etkilenebilir; yanlış sıraya koymak, hem zaman kaybettirir hem de kaçırma riskini artırır.

2.1. Triage sinyalleri: neyi "önce" ele alırsın?

Sinyalleri üç grupta toplamak pratik olur:

  • Sürüm/metadata anormallikleri: "Küçük güncelleme" ile uyumsuz değişim, tutarsız release açıklaması, olağandışı yayın temposu
  • Kod/işlev anormallikleri: İlgisiz modüllerde yoğun değişim, başlangıç akışında beklenmedik yeni adımlar
  • Çalışma zamanı anormallikleri: Yeni dış temaslar, beklenmedik dosya/ayar etkileşimleri, zamanlama paternlerindeki değişim

Doğrulama — kanıt ayrımı burada belirgin olmalı: sinyal "gözlem"dir; "yorum" ise bağımsız kanıt eklenene kadar temkinli kurulur. Karşı kanıt olarak, aynı anormalliğin masum sebepleri (telemetri eklenmesi, lisans taraması, hata raporlama, refactor) değerlendirilir.

Örnek: Güncellemeden sonra uygulama her başlatılışta kısa bir ağ teması kurar. Bu telemetri olabilir. Karşı kanıt arayışı; hedef sınıfının ürünün bilinen servisleriyle uyumu, davranışın belirli ortamlara bağlı olup olmadığı ve zaman penceresinin normal operasyonla çakışıp çakışmadığı üzerinden yürür. Böylece "ağ teması var → kötü" gibi zayıf çıkarım yerine, bağlama oturan bir risk anlatısı oluşur.

2.2. Versiyon fark analizi ve diffing: nerede "az okuma, çok görme" işe yarar?

Supply chain vakalarında en verimli yöntemlerden biri, değişimin olduğu yeri daraltmaktır. "Tüm kodu baştan sona okumak" yerine, iki sürüm arasındaki farkın hangi fonksiyon/akışlarda yoğunlaştığını görmek; özellikle küçük ama kritik "zehirli delta"ların yakalanmasında etkilidir.

Yöntem seçimi bağlama göre yapılır:

  • Kaynak diff (varsa): Değişen satırları hızlıca görmek, semantik sapmayı yakalamayı kolaylaştırır.
  • Binary diffing (özellikle kaynak yoksa veya dağıtılan ikili kritikse): Değişen fonksiyonlara odaklanmayı sağlar; analiz alanını dramatik biçimde daraltır.

Örnek: Bir kripto kütüphanesinin yeni sürümünde, rastgelelik üretimiyle ilişkili fonksiyon davranışının beklenmedik biçimde değiştiği tespit edilir. Bu tür sapmalar "performans iyileştirmesi" olarak açıklanmış olsa bile, güvenlik etkisi yüksek olabilir. Raporda burada önemli olan, "arka kapı" gibi ağır etiketleri aceleyle kullanmak değil; değişimin güvenlik varsayımını nasıl zayıflattığını kanıt zinciriyle gösterebilmektir.

İpucu: Diffing bulgularını rapora taşırken "değişti" demek yetmez. Değişimin etkisini (hangi akışı etkiliyor, hangi koşulda tetikleniyor, hangi güven varsayımı bozuluyor) kısa bir akış anlatısıyla eklemek, delil değerini artırır.

2.3. Typosquatting ve dependency confusion: isim benzerliği ve kaynak önceliği tuzakları

Saldırganlar, popüler paket isimlerini taklit ederek (typosquatting) veya kurum içi özel paket isimlerini suistimal ederek (dependency confusion) geliştirme ortamlarına sızmayı hedefleyebilir. Neden önemli? Çünkü bu sınıfta "kurban" çoğu zaman üretim ortamı değil; build zinciridir. Bir kez build hattına giren kötü niyetli bileşen, çok daha geniş ölçekte yayılım etkisi yaratabilir.

Savunma açısından burada kanıt üretimi; "yanlış paket çekildi" iddiasını destekleyecek kaynak çözümleme izi, sürüm/namespace tutarlılığı ve dependency graph kanıtlarıyla güçlenir. Karşı kanıt olarak da benzer isimli paketlerin meşru bir migration/sürümleme kararı olup olmadığı değerlendirilir.

3) Meşru bileşen içine gömülü payload ayrıştırma yaklaşımı

En zor senaryo, zararlı davranışın meşru ve hatta imzalı bir bileşenin içine "fonksiyonelliği bozmadan" gizlenmesidir. Neden önemli? Çünkü analist yalnız "ek dosya" ararsa, asıl tetikleyici mantığı kaçırabilir; doğru soru çoğu zaman "hangi davranış akışı semantik olarak sapmış?" sorusudur.

3.1. Semantik sapma: meşru akış içindeki beklenmedik yönelimler

Semantik sapma, kodun varlığından ziyade kodun anlamının değişmesidir: beklenmedik dış temas, beklenmedik koşul bağımlılığı, beklenmedik veri dönüşümü gibi. Bu modülde amaç, "nasıl enjekte edilir?" değil; nasıl ayrıştırılır ve ispatlanır? sorusunu yönetmektir.

Ayrıştırma için üç soru güçlü bir iskelet sunar:

  • Gözlenen çıktılar neler? (dış erişim, konfigürasyon okuma, beklenmedik modül yüklenmesi)
  • Bu çıktıyı tetikleyen giriş noktası neresi? (başlatma, modül yüklenmesi, belirli kullanıcı akışı)
  • Tetikleyici hangi veriye/koşula bağlı? (feature flag, ortam değişkeni, zaman penceresi, sürüm kontrolü)

Örnek: Bir güncelleme sonrası yalnız belirli saat aralığında kısa bir dış istek görülür. Bu bir ölçüm mekanizması da olabilir. Karşı kanıt arayışı; isteğin hedeflerinin ürünün bilinen telemetri sağlayıcılarıyla uyumu ve tetikleyicinin belgelenmiş bir konfigürasyon anahtarına bağlı olup olmadığı üzerinden yürür. Belgelenmemiş, sürümle birlikte gelen ve açıklanamayan bir koşul bağımlılığı görülürse, "gömülü mantık" hipotezi güçlenir.

3.2. "Gömülü" parçanın kanıtlanması: akışın çalındığını gösteren delil dili

Gömülü manipülasyonda sık görülen problem, raporda "zararlı var" cümlesinin kanıt düzeyine taşınamamasıdır. Burada kanıt üretimi için iki ilke kritiktir:

  • Gözlem — yorum ayrımı: "Fonksiyon akışı beklenmedik bir hedefe yönleniyor" gözlemdir; "bu arka kapıdır" yorumu ise ek kanıt ister.
  • Teknik ispatın biçimi: Akışın beklenmedik şekilde yönlendiği, meşru akışla tutarsız bellek/akış izleriyle desteklenmeli; mümkünse sürümler arası farkla bağlanmalıdır.

Bu bağlamda, "inline hooking" veya "code caves" gibi kavramlar, saldırıyı öğretmek için değil; analistin 'akış neden beklediğim gibi değil?' sorusunu yanıtlayabilmesi için önemlidir. İspat dili, belirli adres/opcode gibi saldırıyı kolaylaştıracak ayrıntılara sapmadan; fonksiyon girişinin yama ile yönlendirildiği, kontrol akışının orijinal olmayan bir bölgeye saptığı ve bu sapmanın çalışma zamanı davranışıyla örtüştüğü gibi doğrulanabilir ifadeler üzerine kurulmalıdır.

Dikkat: "Dosya imzalı" bilgisi, özellikle tedarik zinciri vakalarında güven hissi üreterek analizi erken bitirtir. İmza; dosyanın bir noktada bir anahtarla imzalandığını söyler, fakat üretim hattı ve çalışma zamanı manipülasyonlarını tek başına dışlamaz. Raporda imza, kanıt zincirinin yalnız bir parçası olarak konumlandırılmalıdır.

3.3. SBOM dışı bileşenler ve çalışma zamanı anomalileri

SBOM, yazılımın "resmi bileşen listesi"dir. Çalışma zamanında SBOM'da olmayan bir bileşenin yüklenmesi veya paketlenmesi, her zaman güçlü bir anomali sinyalidir. Neden önemli? Çünkü bu durum; yanlış paket çekilmesi, build hattında enjekte edilmiş artefakt, side-loading benzeri davranışlar veya yanlış yapılandırma gibi farklı kök nedenlere işaret edebilir.

Burada doğrulama, tek bir açıklamaya kilitlenmeden ilerler: anomaly'nin kaynağı sürüm farkı ile mi geldi, build provenancesi ile mi açıklanıyor, yoksa yalnız belirli ortamlarda mı tetikleniyor? Bu sorular hem hipotezi daraltır hem de raporun denetlenebilirliğini artırır.

4) Altyapı ve TTP korelasyonu ile kampanya analizi

Tedarik zinciri saldırıları çoğu zaman tekil olay değildir; daha geniş bir saldırı altyapısının parçası olabilir. Neden önemli? Çünkü korelasyon, savunma ekiplerinin yayılımı sınırlama ve tespit kapsamını genişletme kararlarını doğrudan etkiler.

4.1. Korelasyon iskeleti: bileşen → tüketim noktası → dış sinyaller

Korelasyonun güvenilir olması için tek bir göstergeden kaçınmak gerekir. Güçlü korelasyon, genellikle şu bağımsız bağların birlikte konuştuğu yerde oluşur:

  • Bileşen bağı: aynı dependency graph bölgesi, aynı sürüm aralığı, aynı dağıtım kanalı davranışı
  • Davranış bağı: benzer olay sırası, benzer veri dönüşümleri, benzer tetikleyici koşullar
  • Altyapı bağı: benzer hedef sınıfları (ör. benzer alan adı desenleri/sertifika sınıfları), benzer zamanlama paternleri
  • TTP bağı: davranışın teknik sınıflaması ve tekrarlayan örüntüler

Örnek: Zehirli güncellemenin çekildiği alan adı deseni "update.example.com" yerine "update.example.net" gibi beklenmedik bir varyanta kaymış görünüyor. Bu tek başına kampanya kanıtı değildir; karşı kanıt olarak meşru bir CDN/altyapı değişimi olup olmadığı araştırılır. Eğer aynı zaman penceresinde benzer davranış akışları ve provenance tutarsızlıkları da görülürse, "kampanya" hipotezi daha güvenli zemine oturur.

4.2. Sonuç dilini yönetmek: kesinlik eşiği ve raporun dayanıklılığı

Kampanya dilinde en kritik beceri, kesinlik eşiğini doğru seçmektir:

  • Tek bir ortak işaret: raporda not edilir, sonuç hükmüne taşınmaz.
  • En az iki bağımsız sinyal: "benzer davranış kümesi" gibi temkinli bir dille ifade edilebilir.
  • Bağımsız sinyaller + meşru açıklamayı zayıflatan karşı kanıt: kampanya düzeyi risk anlatısı daha savunulabilir hale gelir.

Kanıt üretimi açısından teknik ekte şunlar net olmalıdır: analiz ortam profili, gözlem penceresi, kullanılan karşılaştırma yaklaşımı (sürüm farkı/graph analizi/davranış profili), yeniden üretilebilirlik notları ve sınırlamalar. Bu disiplin, bir sonraki aşamalarda tehdit istihbaratı eşlemesi ve ölçeklenebilir analiz hattına güçlü bir zemin hazırlar.

Terimler Sözlüğü

Terim Açıklama
Supply chain attackTedarik zinciri saldırısı; üretim/dağıtım/tüketim hattına müdahale
DependencyBağımlılık; üçüncü taraf bileşen/kütüphane
CI/CDSürekli entegrasyon / sürekli dağıtım; üretim bandı otomasyonu
Build pipelineDerleme hattı; kaynak koddan artefakt üretim süreci
Artifact repositoryArtefakt deposu; paket/container/binary çıktılarının tutulduğu yer
ProvenanceKöken kanıtı; artefaktın hangi kaynaktan/hangi ortamdan üretildiği kaydı
Reproducible buildsYeniden üretilebilir derleme; deterministik üretim ilkesi
SBOMYazılım bileşen listesi; resmi bağımlılık/bileşen envanteri
TriageÖn değerlendirme; hızlı sınıflandırma ve önceliklendirme
Binary diffingİkili karşılaştırma; iki derleme/versiyon arasındaki kod farkını bulma
Semantic deviationSemantik sapma; meşru akışta anlamlı davranış değişimi
Typosquattingİsim benzerliğiyle aldatma; yazım hatası üzerinden yanlış pakete yönlendirme
Dependency confusionBağımlılık karışıklığı; kaynak/öncelik suistimaliyle yanlış paketin çekilmesi
Inline hookingÇalışma akışının fonksiyon seviyesinde yönlendirilmesi (tespit/kanıt perspektifi)
Code cavesDosya içinde “boş alan” gibi görünen bölgelerin suistimal edilmesi (tespit perspektifi)
TTPTaktik–Teknik–Prosedür; davranış örüntülerinin sınıflaması
Counter-evidenceKarşı kanıt; iddiayı zayıflatabilecek alternatif açıklama/delil
ReproducibilityYeniden üretilebilirlik; aynı koşullarda aynı sonuca ulaşabilme

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Bir supply chain vakasında “kaynak kod temiz” bulgusu neden tek başına güvence sayılmaz?

A) Çünkü kaynak kod asla incelenmemelidir

B) Çünkü build hattı veya dağıtım kanalı, kaynak koda dokunmadan artefaktı farklılaştırabilir

C) Çünkü imza her zaman sahtedir

D) Çünkü tüm güncellemeler zararlıdır

E) Çünkü sürüm numarası önemsizdir

  • Doğru: B
  • Gerekçe: Tedarik zincirinde kök neden farklı halkalarda olabilir. A/C/D/E ya genelleme ya da yanlış çıkarımdır.
  1. 2) Aşağıdakilerden hangisi hipotez üretmek için değerlidir ama tek başına güçlü saldırı kanıtı sayılmamalıdır?

A) Provenance tutarsızlığı + SBOM sapması + yeni davranış birlikte

B) Bağlamı belirsiz tek bir anormallik (ör. paket boyutu artışı)

C) Meşru açıklamayı zayıflatan karşı kanıtlarla desteklenen tetikleyici koşul analizi

D) Sürüm aralığı + davranış akışı + altyapı sinyali birlikte

E) Yeniden üretilebilir biçimde tanımlanmış tetikleyici koşullar + sürüm farkı özeti

  • Doğru: B
  • Gerekçe: Tekil sinyaller masum sebeplerle oluşabilir. A/C/D/E çoklu kanıt hattı içerir.
  1. 3) Triage’da temsilci sürüm seçimi için en savunulabilir yaklaşım hangisidir?

A) Her zaman en yeni sürümü seçmek

B) Rastgele bir sürüm seçmek

C) Anormalliğin ilk göründüğü sürümü ve en yeni sürümü birlikte referans alarak değişim penceresini daraltmak

D) Sadece en eski sürümü seçmek

E) Sürüm seçmeden doğrudan kampanya sonucu yazmak

  • Doğru: C
  • Gerekçe: Karşılaştırmalı doğrulama, kanıt gücünü artırır. Diğerleri kırılgandır.
  1. 4) “Reproducible builds” yaklaşımının savunma analizinde en doğru katkısı nedir?

A) İnternet hızını artırmak

B) Üretim hattında kaynak kod dışında bir müdahale olup olmadığını kanıt eşiğine yaklaştırmak

C) İmza doğrulamasını gereksiz kılmak

D) Tüm supply chain saldırılarını otomatik engellemek

E) Sadece dosya boyutunu küçültmek

  • Doğru: B
  • Gerekçe: Amaç, spekülasyonu azaltıp doğrulanabilirlik sağlamaktır. C/D/E yanlış; A alakasızdır.
  1. 5) “Binary diffing” yöntemi hangi senaryoda özellikle doğru yöntem seçimi olur?

A) Kaynak kod ve değişim geçmişi zaten eksiksizse her zaman gereksizdir

B) Kaynak kod yoksa veya dağıtılan ikilideki küçük ama kritik değişimi hızlı daraltmak gerekiyorsa

C) Sadece görsel rapor üretmek için

D) Her zaman kampanya korelasyonu yapmak için

E) Yalnız dosya adlarını karşılaştırmak için

  • Doğru: B
  • Gerekçe: Diffing, değişim alanını daraltarak analiz verimini artırır. A/C/D/E hedefi kaçırır.
  1. 6) “İmzalı dosya = temiz” varsayımı supply chain vakalarında neden risklidir?

A) Çünkü imza algoritmaları çalışmaz

B) Çünkü imza yalnız imzalama anını gösterir; üretim hattı/dağıtım veya çalışma zamanı manipülasyonlarını tek başına dışlamaz

C) Çünkü imzalı dosyalar analiz edilemez

D) Çünkü imza yalnız Linux’ta geçerlidir

E) Çünkü imza yalnız dosya boyutunu doğrular

  • Doğru: B
  • Gerekçe: İmza, kanıt zincirinin tek parçasıdır. A/C/D/E yanlış veya alakasızdır.
  1. 7) SBOM listesinde olmayan bir bileşenin çalışma zamanında yüklenmesi hangi yorumu en doğru şekilde tetikler?

A) Mutlaka saldırıdır

B) Tedarik zinciri bütünlüğü açısından güçlü bir anomali sinyalidir; kök neden için ek doğrulama gerekir

C) Her zaman normal güncelleme adımıdır

D) Disk arızasıdır

E) Sadece performans problemidir

  • Doğru: B
  • Gerekçe: SBOM dışı yükleme ciddi sinyaldir; ancak kesin hüküm için karşı kanıt/ek kanıt gerekir. A/C/D/E aşırı veya yanlış.
  1. 8) Typosquatting ve dependency confusion gibi vakalarda analistin “kanıt” üretirken en çok neye ihtiyaç duyması beklenir?

A) Sadece hash listesi

B) Paket çözümleme izi, kaynak/namespace tutarlılığı ve dependency graph kanıtı

C) Yalnız kullanıcı şikayetleri

D) Sadece dosya boyutu

E) Sadece ikon benzerliği

  • Doğru: B
  • Gerekçe: Bu sınıfta iddia, “yanlış kaynaktan çekim” veya “isim benzerliği” mantığıyla ispatlanır. Diğerleri zayıftır.
  1. 9) Kampanya korelasyonunda en riskli kısa devre çıkarım hangisidir?

A) En az iki bağımsız sinyal aramak

B) Ortak altyapı işaretini tek başına “aynı kampanya” diye yorumlamak

C) Karşı kanıt aramak

D) Davranış akışını sürüm farkıyla ilişkilendirmek

E) Zaman penceresini rapora yazmak

  • Doğru: B
  • Gerekçe: Paylaşılan meşru altyapılar yanlış yönlendirebilir. A/C/D/E iyi pratiktir.
  1. 10) Aşağıdaki rapor cümlelerinden hangisi kanıt standardına daha uygundur?

A) “Kesin arka kapı var.”

B) “Model yüksek skor verdi, o yüzden zararlı.”

C) “Şu sürüm aralığında, şu koşullar altında yeni bir davranış gözlendi; meşru açıklamalar değerlendirildi ve şu karşı kanıtlar nedeniyle zayıfladı; bu nedenle risk şu seviyede sınıflandırıldı.”

D) “Paket boyutu arttığı için kampanya var.”

E) “Benzerlik hissettim.”

  • Doğru: C
  • Gerekçe: Gözlem + koşul + karşı kanıt + sınıflandırma dili denetlenebilirlik sağlar. Diğerleri ya aşırı kesinlik ya da zayıf gerekçedir.

Bu modülde neler öğrendiniz?

  • Tedarik zinciri analizinde “güven” varsayımlarını halkalar halinde sökerek, kök neden hipotezini doğru yere konumlandırmayı
  • Triage ve yöntem seçiminde hız–kanıt dengesini yönetmeyi; diffing, provenance, SBOM ve davranış analizini birlikte konuşturmayı
  • Meşru bileşen içine gömülü sapmaları “semantik” bakışla yakalayıp, gözlem–yorum ayrımıyla rapora delil olarak taşımayı
  • Kampanya korelasyonunda tek göstergeden kaçınmayı; bağımsız kanıt hatları ve karşı kanıt disiplinini işletmeyi
  • İmzaya, repoya veya “güvenilir” etiketlere değil; yeniden üretilebilir, denetlenebilir kanıt zincirine dayanan profesyonel çıktı üretmeyi

Modül 17 — Threat Intelligence Entegrasyonu

İleri seviye malware analizi, bir örneğin "ne yaptığını" ortaya çıkarmakla bitmez; elde edilen teknik bulguların tehdit ekosistemindeki yerini belirlemek, benzer vakalarla ilişkilendirmek ve savunma hattına aktarılabilir bir istihbarat paketine dönüştürmek profesyonel bir zorunluluktur. Bu modülde, tersine mühendislik ve dinamik analiz çıktılarının MITRE ATT&CK diliyle ifade edilmesini, aile/küme (family clustering) mantığıyla bağlanmasını ve kanıt standardı + attribution disiplini ile raporun itiraza dayanıklı hale getirilmesini ele alacağız. İleri seviye fark, "etiket koymak" değil; etiketi kanıta ve doğru kesinlik diline bağlayabilmektir.

Bu Modülde Hedeflenen Kazanımlar

  • Analiz bulgularını ATT&CK taktik/teknik düzleminde doğru yere oturtup çalışılabilir bir TTP matrisi üretebileceksin.
  • Eşleme yaparken gözlem–yorum ayrımını koruyarak doğrulama ve karşı kanıt arama disiplinini işletebileceksin.
  • Kod, konfigürasyon ve altyapı benzerliklerini ayrı kanıt sınıfları olarak ele alıp aile/küme kararlarını gerekçelendirebileceksin.
  • Attribution (faili atfetme) iddialarını kanıt seviyesine uygun bir dille yönetip “false flag” riskini sistematik biçimde değerlendirebileceksin.
  • Zaman çizelgesi, güven seviyesi, yeniden üretilebilirlik notları ve paylaşım biçimiyle denetlenebilir istihbarat paketleri oluşturabileceksin.

1) ATT&CK eşleme ve TTP matrisi üretimi

ATT&CK eşleme, bir örneğin "neye benzediğini" söylemekten çok, ne yaptığını ve bunu hangi kanıtla söylediğini netleştirmektir. Savunma ekipleri tespiti bir etikete değil, davranışın gözlenebilir sinyallerine bağlar. Bu yüzden yanlış eşleme, doğrudan yanlış tespit yatırımı ve yanlış önceliklendirmeye dönüşür.

1.1. Davranışı tek bir cümleye indir: TTP'nin omurgası

TTP, taktik — teknik — prosedür üçlüsünün birleşmiş davranış örüntüsüdür. İleri seviyede ilk hamle, ATT&CK ID'sini aramak değil; davranışı "kanıtlanabilir" bir cümleye dönüştürmektir:

  • Ne oldu? (gözlenen çıktı: beklenmedik süreç etkileşimi, beklenmedik ağ teması, yetki/kimlik erişimi sinyali vb.)
  • Nerede oldu? (telemetri kaynağı: EDR olayı, sandbox gözlemi, bellek artefaktı, ağ kaydı)
  • Hangi koşulda oldu? (tetikleyici: başlatma, belirli modül yüklenmesi, belirli yapılandırma anahtarı, zaman penceresi)

Örnek: Bir örnekte, süreç içinde beklenmedik bir modülün "dosyadan iz bırakmadan" devreye girdiği izlenimi ve ardından kısa süreli dış temas görülüyor. Bu görüntü tek başına kötü niyet kanıtı değildir; bazı meşru güvenlik/telemetri bileşenleri de benzer izler bırakabilir. Davranış cümlesi; hangi telemetride, hangi zaman penceresinde, hangi olay sırasıyla görüldüğünde daha güvenilir hale gelir. Bu omurga, ATT&CK eşlemesini rastgelelikten çıkarır.

İpucu: Her bulgu için iki satırlık mini kayıt standardı kullan:
* "Gözlem" (çıplak olay)
* "Yorum/hipotez" (ATT&CK eşlemesi ve hangi ek kanıt gelmeden kesinleşmeyeceği)>

Bu alışkanlık, rapor dilini otomatik olarak denetlenebilir kılar.

1.2. Teknik seçimi: geniş mi dar mı?

Aynı davranış birden fazla tekniğe yakın durabilir. Burada yöntem seçimi, kanıt seviyesine göre yapılır:

  • Geniş teknik seçimi: Kanıt sınırlıyken daha güvenlidir; yanlış eşleme riskini azaltır. Tespit önerileri "genel davranış" düzeyinde kalır.
  • Dar teknik seçimi: Kanıt güçlü ve çoklu kaynaktan geliyorsa daha değerlidir; avcılık (hunting) ve mühendislik aksiyonları daha hedefli olur. Ancak yanlış seçilirse ekipleri yanlış yöne çeker.

Dar tekniğe geçmeden önce karşı kanıtı sistematik aramak gerekir: "Bu davranış meşru bir güncelleme/telemetri/hata raporlama akışıyla açıklanabilir mi?" "İkinci bir bağımsız kanıt hattı var mı?" "Zaman çizelgesi olay sırasına oturuyor mu?"

Dikkat: ATT&CK kodu bir kanıt değil, sınıflamadır. Tek bir log satırını 'teknik kanıt' gibi sunmak, özellikle yüksek etkili tekniklerde raporun güvenilirliğini zedeler. Kanıt, sınıflamanın altında durmalıdır; sınıflama kanıtın yerine geçmemelidir.

1.3. TTP matrisi: savunma ekibinin çalışacağı çıktı

TTP matrisi, farklı ekiplerin aynı olayı ortak dilde görmesini sağlar. Pratikte güçlü bir matris, yalnız "taktik/teknik" değil; kanıtın nereden geldiğini ve güven seviyesini de taşır.

Önerilen alanlar:

  • Taktik / Teknik
  • Kanıt özeti (telemetri referansı + kısa davranış cümlesi)
  • Güven seviyesi (düşük/orta/yüksek)
  • Karşı kanıt notu (masum açıklama ihtimali ve neden zayıfladığı)
  • Zaman penceresi (ilk görüldü — son görüldü)
  • "Tespit sinyali" notu (SOC/EDR açısından hangi davranış izlenebilir?)

Örnek: "Kısa süreli dış temas" bulgusunda yalnız hedefi yazmak yetmez; hedef sınıfının meşru bir servis altyapısı olma ihtimali matriste görünür olmalıdır. Böylece rapor, tek bir altyapı benzerliğine kilitlenmez.

İpucu: Matrise "hangi tespit sinyali üretir?" satırını eklemek, Blue Team entegrasyonunu hızlandırır. Orta seviye modüllerdeki kontrol listeleri burada yeniden anlatılmayacak; kritik olan, sinyali TTP'ye bağlayan delilin kalitesidir.

1.4. Doğrulama: eşleme itiraza dayanıklı mı?

İleri seviyede doğrulama, "gördüm" ile "kanıtladım" arasını disiplinle doldurur:

  • Çapraz kaynak doğrulaması: Aynı davranış iki farklı telemetri sınıfında da var mı?
  • Zaman tutarlılığı: Teknik iddia, olay sırasına oturuyor mu?
  • Çevresel değişkenler: Davranış yalnız belirli ortamlarda mı tetikleniyor? Bu, meşru bir konfigürasyonla açıklanabilir mi?

Bu sorular, "etiket" yerine "kanıt" merkezli düşünmeyi zorunlu kılar.

2) Family clustering: kod, config ve altyapı benzerlikleri

Yeni bir örnek geldiğinde analistin zihnindeki ilk soru genellikle şudur: "Bu daha önce gördüğümüz bir şeye mi benziyor?" Clustering, benzer örnekleri aile/küme altında toplayarak kampanya görünürlüğü sağlar; fakat yanlış kümelenme, yanlış attribution ve yanlış tespit stratejisine dönüşebilir.

2.1. Üç benzerlik hattı: ne zaman hangisi?

Kod benzerliği; fonksiyon akışı, tekrar eden motifler ve semantik yapı üzerinden çalışır. Güçlü yanı davranışın "nasıl yapıldığını" yakalamasıdır; sınırı ise yoğun obfuscation/packing altında yanıltıcı olabilmesi ve ortak kütüphanelerin sahte benzerlik üretmesidir.

Config benzerliği; yapılandırma anahtarları, şemalar, "mod" seçenekleri ve veri düzeniyle ortaya çıkar. Kod değişse bile saldırganın operasyonel alışkanlıkları değişmeyebilir. Sınırı, otomatik üretim araçlarının benzer şemalar çıkarabilmesi ve tek başına aile kanıtı sayılmamasıdır.

Altyapı (infra) benzerliği; alan adı desenleri, sertifika sınıfları, zamanlama paternleri ve (gerektiğinde) dokümantasyon amaçlı örnek IP bloklarıyla değerlendirilir. Hızlı triage sinyali sağlar; ancak paylaşımlı barındırma, yeniden kullanılan altyapı veya ele geçirilmiş meşru altyapı yanıltıcı ortaklıklar üretebilir.

Yöntem seçimi bağlama göre gerekçelendirilmelidir: çok sayıda örnek hızlı sınıflanacaksa config/infra öne çıkar; kalıcı tespit ve adli rapor üretilecekse code + config hattında daha yüksek standart aranır.

Dikkat: "Aynı IP'ye bağlandı → aynı aile" kısa devre çıkarımı kırılgandır. Infra benzerliği çoğu zaman başlangıç sinyalidir; sonuç cümlesi değildir.

2.2. Kod benzerliğinde yöntem seçimi: ham iz mi, semantik iz mi?

Kod benzerliği için farklı yöntem aileleri vardır:

  • Esnek özetleme (fuzzy hashing): Benzer dosyalarda yakın sonuçlar verebilir; hızlı triage için değerlidir.
  • Fonksiyonel imzalama / fonksiyon kimliği: Fonksiyon seviyesinde karşılaştırma yaparak daha rafine sinyal üretebilir.
  • Semantik karşılaştırma: Obfuscation/packing altında ham dosya benzerliği zayıfladığında, decompile/akış düzeyindeki mantıksal yapıya odaklanır.

Burada doğrulama, "çıkan benzerlik puanı" ile bitmez. Karşı kanıt olarak, benzerliğin ortak bir açık kaynak bileşenden veya yaygın bir kütüphaneden kaynaklanıp kaynaklanmadığı sorgulanır.

2.3. Config ve infra örüntüleri: saldırganın "alışkanlıkları"

Kod tamamen değişse bile, saldırganın operasyonel tercihleri çoğu zaman tekrar eder.

Örnek: Bir kümede, yapılandırma bloklarının her sürümde farklı anahtarla ama aynı dönüşüm mantığıyla korunması ve C2 bilgilerinin tutarlı bir şema içinde saklanması gözlenir. Bu, aile atfı için değerli bir davranışsal örüntüdür; ancak tek başına "kesin aile" ilanı yerine, diğer kanıt hatlarıyla birlikte değerlendirilmelidir.

Bu noktada "false flag" riski de gündeme gelir. Bazı saldırganlar analisti yanlış yöne çekmek için bilinen başka grupların yüzeysel izlerini taklit edebilir: kolay değiştirilebilir metaveriler, kasıtlı bırakılmış belirgin ipuçları, yaygın açık kaynak profil/şablonlarının kullanımı gibi.

İpucu: "False flag" şüphesini test etmek için tutarlılık avı yap: yüzeyde çok "bağıran" ipuçları varken, kodun derinindeki karmaşıklık ve operasyonel disiplin o ipuçlarıyla çelişiyor mu? Tutarsızlık, karşı kanıt arayışını tetikleyen değerli bir sinyaldir.

2.4. Benzerlik iddiasını kanıtlamak: ölçüt — eşik — karşı kanıt

"Benziyor" demek yetmez; "hangi ölçütle benziyor?" sorusu raporu profesyonelleştirir.

  • Ölçüt (feature): Hangi sinyaller benzerlik kanıtı sayılıyor?
  • Eşik (threshold): Ne olursa "aynı küme" diyeceksin?
  • Karşı kanıt: Ortak bağımlılık/ortak altyapı gibi masum açıklamalar nasıl eleniyor?

Örnek: İki örnekte aynı config alan adları ve "updates.example.net" benzeri desen taşıyan dış temaslar görülür. Bu, hızlı triage için küme adayıdır. Karşı kanıt arayışı; bu config şemasının yaygın bir bileşenden geliyor olma ihtimalini ve alan adı deseninin meşru bir güncelleme altyapısına ait olma ihtimalini değerlendirir. Eğer kod hattında da tutarlı semantik akış ortaklıkları bulunuyorsa küme iddiası güçlenir; aksi halde rapor dili "benzer davranış kümeciği" gibi daha temkinli kalır.

2.5. Küme çıktısı: isimlendirme ve süreklilik

Kümeler zamanla genişler, bölünür veya revize edilir. Bu yüzden çıktıda:

  • Kesin aile dilinden kaçınan, evrimleşebilir bir isimlendirme
  • "Bu tarihe kadar şu örnekler dahil" şeklinde kapsam notu
  • Yeni örnek geldiğinde hangi ölçütlerle dahil edileceğinin kısa kural seti
  • Yeni kanıt geldiğinde geriye dönük düzeltmeye açık olunduğunun belirtilmesi

Bu yaklaşım, Modül 18'deki ölçeklenebilir analiz hattında otomasyonun en çok ihtiyaç duyduğu şeyi sağlar: tutarlı karar kuralları.

3) Kanıt standardı ve attribution disiplini

Attribution, "kim yaptı?" sorusuna cevap verme iddiasıdır ve en çok hata üreten alandır. Teknik analistin görevi politik yorum yapmak değil; teknik parmak izlerini tarafsız ve denetlenebilir biçimde sunmaktır. Bu modülde attribution, "cesur etiket" değil; kanıt seviyesine uygun kesinlik dili olarak ele alınır.

3.1. Güven seviyeleri: dili kanıtına uydur

  • Düşük güven: Tekil sinyal, sınırlı telemetri; alternatif açıklamalar güçlü
  • Orta güven: En az iki bağımsız kanıt hattı; alternatif açıklamalar kısmen zayıflatılmış
  • Yüksek güven: Çoklu bağımsız kanıt + zaman çizelgesi tutarlılığı + alternatif açıklamalar için güçlü karşı kanıt

Bazı göstergeler manipülasyona daha açıktır: derleme zamanı, dil/saat dilimi, yüzeysel metaveriler gibi. Bunlar not edilir; fakat tek başına fail tayinine taşınmaz.

3.2. Gözlem-yorum ayrımı, zaman çizelgesi ve yeniden üretilebilirlik

İstihbarat çıktısı, başka analistlerin de aynı sonuca ulaşabileceği biçimde paketlenmelidir:

  • Ham gözlemler ve telemetri referansları
  • Eşleme/yorum ve bunun gerekçesi
  • Zaman çizelgesi (önce — sonra ilişkisi)
  • Analiz ortam profili ve gözlem penceresi
  • "Bu sonucun sınırları" (hangi veri eksikleri var, hangi alternatif açıklamalar kaldı)

Bu disiplin, raporun teknik ekini güçlendirir ve itirazlara dayanıklılığı artırır.

3.3. Veri paylaşımı ve operasyonel gizlilik: yöntem seçimi

Tehdit istihbaratı, çoğu zaman paylaşım ve standardizasyona dayanır. Makinelerce okunabilir formatlar (ör. istihbarat paylaşım standartları) kurumsal iş birliğini kolaylaştırır; ancak paylaşımın riskleri de vardır.

  • Hedefli saldırı şüphesinde, dosya/artefaktı çevrimiçi analiz platformlarına yüklemek saldırgana "izlendiğini" hissettirebilir.
  • Bu tür durumlarda yöntem seçimi; mümkünse önce "düşük ifşa" yaklaşımıyla (ör. yalnız özet sorguları, yerel laboratuvar analizi) ilerlemek, sonra kurumsal gizlilik protokolleriyle uyumlu şekilde paylaşımı planlamaktır.

Dikkat: Hedefli saldırı şüphesi olan vakalarda kontrolsüz paylaşım, savunmayı güçlendirmek yerine operasyonel riski büyütebilir. "Daha hızlı sonuç" motivasyonu, gizlilik maliyetini gölgelememelidir.

3.4. "False flag" ve yanıltıcı izler: attribution'da karşı kanıt

Attribution iddiaları, saldırganın bilinçli yanıltma çabalarına açık bir alandır. Burada karşı kanıt aramak, "olabilir" denen şeyin ne kadar dayanıklı olduğunu test etmektir:

  • Yüzeysel izler (metaveri, kolay değişen göstergeler) ile derin teknik izler (tutarlı davranış zinciri, özgün protokol/algoritmik tercih, operasyonel disiplin) birbiriyle uyumlu mu?
  • Bir kanıt sınıfı "fazla iyi oturuyorsa", bunun kasıtlı bir sahneleme olup olamayacağı da düşünülür.

3.5. Zaman içinde evrim: varyant takibi neden önemli?

Aileler zamanla evrilir: yeni kaçınma örüntüleri, yeni hedefler, yeni altyapı tercihleri görülebilir. Varyantların evrimsel takibi; savunmaya proaktif değer katar: "Bir sonraki sürümde ne tür davranış değişimi beklenebilir?" sorusuna daha hazırlıklı cevap verilir.

Terimler Sözlüğü

Terim Açıklama
Threat IntelligenceTehdit istihbaratı; teknik bulguları tehdit bağlamına ve savunma aksiyonlarına dönüştürme disiplini
MITRE ATT&CKSaldırgan davranışlarını taktik/teknik düzleminde sınıflayan bilgi tabanı
TacticTaktik; saldırganın amaç düzeyi
TechniqueTeknik; amaç için kullanılan davranış yöntemi
TTPTaktik–Teknik–Prosedür; davranış örüntüsünün bütünleşik ifadesi
TTP MatrixTTP matrisi; TTP eşlemelerini kanıt ve güven seviyesiyle birlikte toplayan çıktı
TelemetryTelemetri; sistem/ağ/EDR gibi kaynaklardan gelen gözlem verisi
EnrichmentZenginleştirme; bulguyu ek bağlamla güçlendirme (zaman, kaynak, ilişki)
Family ClusteringAile/kümeleme; benzer örnekleri ortak kümeye toplama yaklaşımı
FeatureÖlçüt/özellik; benzerlik veya eşleme kararında kullanılan sinyal
ThresholdEşik; “aynı küme” demek için gereken sınır
Counter-evidenceKarşı kanıt; iddiayı zayıflatan alternatif açıklama/delil
AttributionAtıf; faile/gruba bağlama iddiası ve bunun disiplinli yönetimi
Confidence LevelGüven seviyesi; iddianın kanıt gücüyle uyumlu kesinlik derecesi
False FlagSahte bayrak; analisti başka bir aktöre yöneltmek için bilinçli yanıltma
Fuzzy HashingEsnek özetleme; benzer dosyalarda yakın sonuçlar verebilen özetleme yaklaşımı
SteganographySteganografi; veriyi başka bir taşıyıcı içine gizleme tekniği
STIX/TAXIITehdit verilerini standartlaştırılmış biçimde temsil etme/taşıma yaklaşımları (genel istihbarat paylaşım standardı ailesi)
YARADosya/artefakt tanımlama için kural tabanlı örüntü eşleme yaklaşımı

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) ATT&CK eşlemesinde “önce davranış cümlesi” kurmak neden daha sağlam bir başlangıçtır?

A) Çünkü teknik kodlar her zaman yanlıştır

B) Çünkü davranış cümlesi telemetri + koşul + çıktı ile denetlenebilir bir omurga sağlar

C) Çünkü davranış cümlesi attribution’ı otomatik üretir

D) Çünkü yalnız davranış cümlesi tespit yazmak için yeterlidir

E) Çünkü teknik seçimi önemsizdir

  • Doğru: B
  • Gerekçe: B, eşlemeyi kanıta bağlar. A/E genelleme; C yanlış; D eksiktir.
  1. 2) Kanıt sınırlıyken geniş teknik seçmenin en önemli avantajı hangisidir?

A) Yanlış negatif riskini sıfırlar

B) Yanlış eşleme nedeniyle savunmayı yanlış yöne yatırma riskini azaltır

C) Doğrulamayı gereksiz kılar

D) Attribution’ı kesinleştirir

E) Obfuscation’ı otomatik çözer

  • Doğru: B
  • Gerekçe: Kanıt yetersizliğinde aşırı spesifik iddia kırılgandır. A/C/D/E gerçekçi değildir.
  1. 3) TTP matrisinde “karşı kanıt notu” neden kritik kabul edilir?

A) Matrisin görselliğini artırır

B) Meşru açıklama olasılıklarını görünür kılarak yanlış kesinlik dilini engeller

C) Telemetri toplamayı gereksiz kılar

D) IOC üretimini otomatik yapar

E) Sadece hukuk ekibi için gereklidir

  • Doğru: B
  • Gerekçe: Karşı kanıt notu, raporu denetlenebilir kılar. C/D alakasız; A/E ikincildir.
  1. 4) Aşağıdakilerden hangisi infra benzerliğinin tek başına zayıf olmasının en güçlü nedenidir?

A) IP’ler hiçbir zaman tekrar kullanılmaz

B) Paylaşımlı barındırma/servis altyapıları yanıltıcı ortaklık üretebilir

C) Infra benzerliği sadece laboratuvarda olur

D) Infra benzerliği yalnız belirli işletim sistemlerinde geçerlidir

E) Infra benzerliği code benzerliğinden her zaman üstündür

  • Doğru: B
  • Gerekçe: Paylaşımlı altyapılar “aynı aktör” çıkarımı için kırılgan bir zemin üretir. Diğerleri hatalıdır.
  1. 5) Kod benzerliği analizinde “semantik karşılaştırma”yı seçmeyi en iyi gerekçelendiren durum hangisidir?

A) Dosyalar aynı boyutta ise

B) Obfuscation/packing ham benzerlik sinyallerini bozuyor, fakat mantıksal akış ortaklıkları korunuyor ise

C) İnternet bağlantısı zayıf ise

D) Sadece alan adı benzerliği varsa

E) Zaman çizelgesi çıkarılamıyorsa

  • Doğru: B
  • Gerekçe: Semantik yaklaşım, yüzeyi değil mantığı karşılaştırır. A/C/D/E alakasız veya yetersizdir.
  1. 6) “False flag” şüphesinde en anlamlı karşı kanıt arayışı hangisidir?

A) Dosya adındaki yazım hatalarını incelemek

B) Yüzeysel ipuçları ile derin teknik izlerin tutarlılığını karşılaştırmak

C) Ekran çözünürlüğünü kontrol etmek

D) Dosyayı hemen paylaşmak

E) Sadece tek bir IP’ye bakmak

  • Doğru: B
  • Gerekçe: False flag, yüzeyde “yönlendirici” izler bırakabilir; tutarlılık analizi bunu yakalamada etkilidir. Diğerleri zayıf.
  1. 7) “Yüksek güven” seviyesine yaklaşmak için en sağlıklı yaklaşım hangisidir?

A) Tekil sinyal + güçlü sezgi

B) Sadece altyapı benzerliği

C) Çoklu bağımsız kanıt hattı + zaman çizelgesi tutarlılığı + alternatif açıklamalar için karşı kanıt

D) Dar teknik seçimi + hızlı sonuç

E) Sadece bir etiket/ID yazmak

  • Doğru: C
  • Gerekçe: Yüksek güven, çapraz doğrulama ve karşı kanıtla oluşur. A/B/D/E eksiktir.
  1. 8) Hedefli saldırı şüphesinde çevrimiçi analiz platformlarına yükleme konusunda en doğru yöntem seçimi hangisidir?

A) Dosyayı hemen yüklemek

B) Gizlilik maliyetini değerlendirip düşük ifşa yaklaşımıyla (ör. yerel analiz, sadece özet sorguları) ilerlemek

C) Dosyayı silmek

D) Sadece sosyal medya yorumlarına bakmak

E) İddia yazıp kanıt toplamayı bırakmak

  • Doğru: B
  • Gerekçe: Hedefli vakalarda kontrolsüz paylaşım operasyonel riski büyütebilir. A risklidir; C/D/E savunma açısından zayıftır.
  1. 9) Bir küme/aile iddiasını raporda en çok güçlendiren ifade biçimi hangisidir?

A) “Benzer görünüyor”

B) “Aynı IP’ye çıkıyorlar, o yüzden aynı aile”

C) Ölçüt–eşik–karşı kanıt mantığını yazıp hangi kanıt sınıflarının birlikte konuştuğunu göstermek

D) Sadece dosya boyutunu yazmak

E) Sadece ATT&CK ID’leri listelemek

  • Doğru: C
  • Gerekçe: Denetlenebilir karar, ölçüt ve karşı kanıtla güçlenir. A/B/D/E kırılgandır.
  1. 10) Varyantların evrimsel takibi (zaman içinde değişim) savunma açısından en çok ne kazandırır?

A) Bilgisayarın daha hızlı çalışmasını

B) Saldırganın kapasite ve davranış değişimini öngörerek proaktif tespit/avcılık planlamayı

C) Dosya ikonunu düzeltmeyi

D) Logları azaltmayı

E) Sadece raporu uzatmayı

  • Doğru: B
  • Gerekçe: Evrim takibi, savunmayı “reaktif”ten “öngörülü”ye taşır. Diğerleri alakasızdır.

Bu modülde neler öğrendiniz?

  • Teknik bulguları ATT&CK üzerinde kanıta dayalı biçimde konumlandırmayı ve çalışılabilir bir TTP matrisi üretmeyi
  • Eşleme ve kümeleme kararlarında doğrulama ve karşı kanıt arama disiplinini işletmeyi
  • Kod/config/infra benzerliklerini bağlama göre seçip, ölçüt–eşik mantığıyla denetlenebilir clustering çıktısı üretmeyi
  • Attribution iddialarını güven seviyesiyle uyumlu bir dille yönetmeyi ve “false flag” riskini tutarlılık analiziyle ele almayı
  • İstihbarat paketini zaman çizelgesi, yeniden üretilebilirlik notları ve gizlilik farkındalığıyla savunma hattına entegre etmeyi

Modül 18 — Ölçeklenebilir Analiz ve Otomasyon

Bu modül, tek tek örnekleri "usta işi" analiz etmekten daha zor bir problemi hedefler: aynı kalite standardını koruyarak çok sayıda örneği ve çok sayıda telemetri kaynağını sürdürülebilir biçimde işleyebilmek. Triage'dan başlayıp detonasyon, çıkarım, zenginleştirme ve raporlamaya uzanan hattın tasarımını; tekrar eden RE işlerinin otomasyonla yönetilmesini ve sandbox stratejisinin kurumsal ekosisteme doğru şekilde bağlanmasını ele alır.

Bu Modülde Hedeflenen Kazanımlar

  • Triage → detonation → extraction → enrichment → reporting hattını ölçeklenebilir ve denetlenebilir şekilde tasarlamak.
  • Aynı bulguya giden farklı yöntemler arasında, risk–fayda ve kanıt kalitesi temelli seçim yapabilmek.
  • Otomasyonun güçlü olduğu işleri doğru seçip, analist kararını gerektiren noktalarda “kontrollü dur” mekanizması kurmak.
  • Bulguları kanıt zinciri, zaman çizelgesi ve yeniden üretilebilirlik notlarıyla rapora dönüştürülebilir paketler haline getirmek.
  • Sandbox stratejisini telemetri kalitesi, güvenlik izolasyonu ve kurumsal entegrasyon gereksinimleriyle birlikte yönetmek.

1) Analiz hattı tasarımı: triage → detonation → extraction → enrichment → reporting

Bir analiz hattı, üretim bandına benzer: kalite, tek bir istasyonda değil, istasyonlar arası standart ve aktarım disiplininde kazanılır. Burada amaç "en hızlı" hat değil, yanlış negatif/yanlış pozitif maliyetini kontrol eden ve her adımda bulguyu doğrulayabilen bir hat kurmaktır.

1.1. Triage: hız — derinlik dengesini kurmak

Triage, örneği "önemli/önemsiz" diye etiketlemekten çok, hangi analize ne kadar kaynak ayrılacağını belirleyen bir karar kapısıdır. Neden önemli? Çünkü hat, sınırlı CPU/VM/sandbox süresiyle çalışır; yanlış sınıflama ya pahalı derin analizleri boşa harcar ya da kritik örnekleri kaçırır.

Triage çıktısının iyi bir standardı şunları taşır:

  • Öncelik gerekçesi: hangi sinyaller bu örneği öne çekti?
  • Risk notu: hedefli saldırı şüphesi, veri sızdırma riski, yüksek etki ihtimali
  • Bir sonraki adım kararı: detonasyon profili mi, doğrudan statik/RE kuyruğu mu, bekletme mi?

Örnek: Bir dosya, görünürde "güncelleme aracı" gibi paketlenmiş; ancak içindeki yapılandırma parçaları sıra dışı ölçüde dallanmış ve çalıştırma koşulları çevresel değişkenlere bağlı görünüyor. Bu, triage aşamasında "normal yazılım olabilir" karşı açıklamasını akılda tutarak, detonasyonun birden fazla ortam profiliyle planlanmasını gerektirir.

İpucu: Triage kararlarını "tek sinyal" ile vermek yerine, sinyalleri kanıt sınıflarına ayır: statik bulgular, dinamik sinyaller, çevresel bağlam (kampanya, benzerlik, olay akışı). Aynı sınıftan iki sinyal, iki farklı sınıftan birer sinyal kadar güçlü olmayabilir.

1.2. Detonation: gözlem üretmek mi, kanıt üretmek mi?

Detonasyon (kontrollü çalıştırma), "çalıştı/çalışmadı" demek için değil, savunma açısından anlamlı gözlem seti üretmek içindir. Neden önemli? Çünkü birçok örnek yalnız belirli koşullarda davranış gösterir; yanlış profil seçimi, "temiz" izlenimi vererek hatalı güven duygusu yaratır.

Detonasyon tasarımında yöntem seçimi üç eksende yapılır:

  • Gözlem kapsamı: hangi telemetri türleri şart (süreç, bellek sinyali, ağ davranışı, dosya/registry değişimi vb.)
  • Profil çeşitliliği: tek profil mi, farklı dil/yerel ayar/izin seti gibi profiller mi?
  • Maliyet: geniş gözlem daha pahalıdır; triage puanı düşük örneğe "tam kapsam" vermek hattı kilitleyebilir.

Örnek: Bir örnek, kısa süreli ağ temaslarını yalnız "ilk çalıştırmadan birkaç dakika sonra" yapıyor gibi görünüyor. Bu durumda detonasyon süresi uzatılmadan "temiz" sonucu çıkarmak risklidir; öte yandan her örneği uzun süre koşturmak da ölçeği bozar. Çözüm, triage puanı yüksek örneklerde daha uzun pencereler, düşüklerde daha kısa ama kanıt odaklı pencereler tanımlamaktır.

Dikkat: "Sandbox'ta bir şey yapmadı" sonucu, çoğu zaman bir sonuca değil bir soruya işaret eder: "Hangi koşul eksik olabilir?" Bu karşı kanıtı aramadan "temiz" hükmü kurmak, hattın en sık yaptığı pahalı hatalardandır.

1.3. Extraction: artefakt çıkarımı ve delile dönüştürülebilir ham veri

Extraction, detonasyon ve statik/RE süreçlerinden üretilen ham verinin, sonraki adımlarda tutarlı biçimde işlenebilmesi için normalize edilmesidir. Neden önemli? Çünkü zenginleştirme ve raporlama, ham veriye değil; ham verinin kaynağı belli, zamanı belli, tekrar üretilebilir haline dayanır.

İyi bir extraction standardı şunları içerir:

  • Kaynak bilgisi: hangi sensörden/telemetri sınıfından geldi?
  • Zaman damgası: olayın sırası ve penceresi
  • Bağlam: hangi profil/ortam altında üretildi?
  • Ham — işlenmiş ayrımı: orijinal kayıt + normalize edilmiş özet birlikte saklanır

Bu temelin kontrol listesini Orta Seviye dinamik analiz ve SOC bağlamında ayrıntılı işlemiştik; burada kritik nokta, extraction çıktısının kanıt zinciri taşımasıdır.

1.4. Enrichment: bağlam eklerken "yanlış hikâye" üretmemek

Enrichment, IOC/artefaktları dış ve iç bilgi kaynaklarıyla bağlama oturtma işidir. Neden önemli? Çünkü avcılık ve önceliklendirme kararları, çoğu zaman bu bağlama göre alınır; ama enrichment aynı zamanda yanıltıcı korelasyon riski taşır.

Yöntem seçimi, enrichment kaynağının güvenilirliğine ve güncelliğine göre yapılır:

  • İç kaynaklar: kurumsal olay geçmişi, EDR/SIEM kayıtları, daha önceki analiz arşivi
  • Dış kaynaklar: tehdit istihbaratı notları, bilinen altyapı/sertifika kümeleri, genel reputasyon sinyalleri

Doğrulama disiplinini burada özellikle hissetmek gerekir: bir alan adının "kötü şöhretli" görünmesi, örneğin o alan adıyla gerçekten nasıl etkileştiğini ispatlamaz. Karşı kanıt olarak, altyapının paylaşımlı servis/CDN olma ihtimali veya ele geçirilmiş meşru altyapı olasılığı düşünülür.

Örnek: Bir örnek, updates.example.net benzeri bir ada temas ediyor. Dış kaynaklar bu desene dair olumsuz notlar içeriyor olabilir; ancak bu tek başına yeterli değildir. Trafik paternleri, zamanlama, DNS çözümleme tutarlılığı ve diğer telemetriyle uyum aranır. Uyum yoksa, "enrichment sinyali" raporda temkinli konumlandırılır.

İpucu: Enrichment sonuçlarını "kanıt" ve "bağlam" diye ikiye ayır. Bağlam, kanıtın üzerine inşa edilir; kanıt, bağlamın gölgesinde bırakılmaz. Bu ayrım raporda yanlış kesinliği otomatik olarak azaltır.

1.5. Reporting: sonuç yazmak değil, kanıt paketi üretmek

Reporting, hattın en görünür çıktısıdır; fakat en çok da burada hata yapılır: yorum, gözlem gibi; bağlam, kanıt gibi yazılır. Neden önemli? Çünkü rapor, başka ekiplerin (SOC/DFIR/mühendislik/yönetim) aksiyon aldığı belgedir; dayanıklılık, "iyi yazı"dan değil delil paketinden gelir.

Raporun hat üzerinde üretilen en kritik ekleri:

  • Gözlem — yorum ayrımı: her iddianın dayandığı telemetri referansı açık
  • Zaman çizelgesi: olay sırası, pencereler, profil bilgisi
  • Yeniden üretilebilirlik notu: hangi ortam profili, hangi gözlem kapsamı, hangi sürüm/konfigürasyon
  • Bulgudan aksiyona köprü: tespit önerileri, avcılık hipotezleri, önceliklendirme gerekçesi

Dikkat: "Otomasyon üretti" diye bir bulguyu rapora kesin hüküm gibi koymak, ölçek büyüdükçe güven kaybına yol açar. Otomasyon çıktısı rapora girecekse, yanında mutlaka "hangi veriyle üretildiği" ve "hangi koşulda yanlışlanabileceği" yazmalıdır.

1.6. Hat sağlığı: kuyruklar, tekrar deneme, hata sınıfları

Ölçeklenebilirlik yalnızca işlem gücüyle değil, hatanın yönetimiyle sağlanır. Aynı örnek tekrar geldiğinde aynı sonucu üretmeye yatkın olmak (tutarlılık), adli değeri yükseltir. Hata sınıflarını en baştan tanımlamak, "hattın tıkanmasını" engeller:

  • Geçici hata: kaynak yok, zaman aşımı, ortam hazır değil
  • Veri hatası: bozuk artefakt, eksik telemetri, uyumsuz format
  • Yöntem hatası: yanlış profil seçimi, yanlış önceliklendirme varsayımı
  • Şüpheli sonuç: otomasyon kararsız, karşı kanıt güçlü

Bu sınıflar, yeniden deneme stratejisini ve "analiste escalate" kararını belirler.

2) RE otomasyonu ve tekrarlı işlerin scripting ile yönetimi

Otomasyon, analistin yerine karar vermek için değil; analistin karar vermesini hızlandıracak tekrar eden işleri güvenilir biçimde yapması için vardır. İleri seviye fark, otomasyonu "ne kadar çok yazdığın" değil; nerede duracağını bildiğin noktada ortaya çıkar.

2.1. Otomasyona uygun işler: deterministik olanı makineye ver

RE tarafında otomasyona en uygun işler genelde deterministik veya ölçülebilir çıktı üreten işlerdir:

  • Artefakt indeksleme: fonksiyon/akış düğümleri, referans zincirleri, yapılandırma adayları
  • Tekrarlı çıkarımlar: belirli yapıların normalize edilmesi, benzer örnekler arası karşılaştırma için "özellik" üretimi
  • Rapor ekleri: zaman çizelgesi iskeleti, kanıt referanslarının listelenmesi, çıktı paketleme

Buna karşılık, otomasyonun tek başına iyi yapamadığı alanlar:

  • Belirsiz hipotezler: "bu davranışın amacı ne olabilir?"
  • Çelişkili sinyaller: aynı anda hem meşru hem şüpheli açıklama mümkünse
  • Yüksek riskli atıflar: attribution dili ve güven seviyesi

Bu temelin kritiğini Modül 17'de istihbarat entegrasyonu bağlamında hissetmiştin; burada aynı mantık hattın her adımına yayılır.

2.2. Yöntem seçimi: hızlı heuristik mi, yavaş ama sağlam mı?

Aynı probleme giden iki yol vardır:

  • Hızlı heuristik yaklaşım: ölçeği büyütür, erken sinyal verir; fakat yanlış pozitif maliyeti artabilir.
  • Yüksek doğruluk yaklaşımı: daha pahalıdır, daha az örneğe uygulanır; ama rapor kalitesini yükseltir.

Doğru seçim, triage puanı ve hedeflenen çıktı türüne bağlıdır:

  • Avcılık hipotezi üretmek için hızlı yaklaşım değerlidir.
  • Adli rapor ve kalıcı tespit önerisi üretmek için sağlam yaklaşım gerekir.

Örnek: Bir örnek kümesinde benzerlik sinyalleri hızlıca görülebiliyor, ancak bazı örnekler yoğun karartma altında. Bu durumda hızlı benzerlik sinyalleri "küme adayı" üretir; sağlam yaklaşım, yalnız bu adayların küçük bir alt kümesinde çalıştırılarak yanlış kümelenme riski azaltılır.

2.3. Doğrulama: otomasyon çıktısı nasıl yanlışlanır?

Otomasyonda en kritik soru şudur: "Bu çıktı hangi koşulda yanlıştır?" Yanlışlama kuralı yazılmayan otomasyon, ölçek büyüdükçe güvenilmezleşir.

Doğrulama yaklaşımı:

  • Çapraz kontrol: aynı bulgu farklı veri sınıfında destekleniyor mu?
  • Eşik ve belirsizlik: çıktının güven aralığı veya belirsizlik notu var mı?
  • Karşı kanıt: meşru açıklama ihtimali otomasyon tarafından bayraklanabiliyor mu, yoksa analiste mi bırakılıyor?

İpucu: Otomasyon çıktısına "kırmızı bayraklar" ekle: belirsiz sonuç, eksik telemetri, çelişkili sinyal, profil uyumsuzluğu. Bu bayraklar, analistin zamanını doğru yere harcatır.

2.4. Sürümleme ve test: hatayı büyütmemek

Otomasyonun en tehlikeli tarafı, bir hatayı binlerce örneğe yayabilmesidir. Bu nedenle:

  • Değişiklikler sürümlenir ve geriye dönük kıyas yapılabilir olmalıdır.
  • Test örnek havuzu, farklı aile/format/profil çeşitliliği içermelidir.
  • Çıktılar "aynı girdiye aynı sonuç" tutarlılığı açısından izlenmelidir.

Burada amaç yazılım mühendisliği dersi vermek değil; RE otomasyonunun adli/operasyonel etkisini koruyacak disiplinin kurulmasıdır.

2.5. Kanıt üretimi: loglar ve artefakt izleri

Otomasyonun rapora delil olacak çıktılar üretebilmesi için:

  • Hangi veriyi okuduğu, hangi dönüşümü yaptığı, hangi kaynakta hangi referansı kullandığı kaydedilir.
  • Ham veri saklanır; işlenmiş özet yanında tutulur.
  • Sonucun üretildiği zaman ve ortam profili not edilir.

Bu yaklaşım, raporda "çıktı" ile "çıktıyı doğuran süreç" arasındaki bağı şeffaf hale getirir.

3) Sandbox stratejisi ve kurumsal entegrasyon yaklaşımı

Sandbox stratejisi, tek bir araç seçimi değildir; "hangi riskte hangi gözlem kapsamı" kararları bütünüdür. Kurumsal entegrasyon ise sandbox'ı bir ada olmaktan çıkarıp SOC/DFIR/mühendislik akışına bağlar.

3.1. Sandbox profili: gözlem kalitesi ve güvenlik izolasyonu

Sandbox'ın amacı, örneği güvenle izlemek ve izlenebilir davranış sinyali üretmektir. Neden önemli? Çünkü izolasyon zayıfsa risk büyür; gözlem zayıfsa yanlış negatif artar.

Yöntem seçimi:

  • İzolasyonu artıran yaklaşımlar, gözlemi kısıtlayabilir.
  • Gözlemi artıran yaklaşımlar, maliyeti ve operasyonel karmaşıklığı yükseltebilir.

Bu denge triage puanı ve hedeflenen çıktı türüne göre kurulmalıdır.

3.2. Profil çeşitliliği: tek ortamla genelleme yapmak risklidir

Bazı örnekler yalnız belirli yerel ayar, izin düzeyi veya çevresel koşullarda davranış gösterir. Ölçeklenebilir hat, "her örneğe her profil" yerine:

  • Önce temel profil
  • Sinyal varsa genişletilmiş profil seti
  • Şüphe varsa hedefe uygun özel profil

mantığıyla ilerler.

Doğrulama açısından kritik nokta: bir davranış yalnız tek profilde görülüyorsa, karşı kanıt olarak "profil kaynaklı artefakt" olasılığı düşünülür.

3.3. Telemetri stratejisi: sinyali tespit diline çevirmek

Sandbox telemetrisi, doğrudan rapor değil; raporun hammaddesidir. Kurumsal kullanım için telemetri şu özelliklere sahip olmalıdır:

  • Zaman çizelgesine oturabilirlik
  • Olayların ilişkilendirilebilir olması (aynı örnek, aynı profil, aynı çalışma penceresi)
  • Tespit önerilerine dönüşebilirlik (hangi sinyal hangi kontrol/algılama hattına bağlanır?)

Bu, Modül 19'daki raporlama standardına doğal bir zemin hazırlar: telemetri "güzel bir çıktı" değil, "delil" haline gelir.

3.4. Kurumsal entegrasyon: SIEM/SOAR/EDR ile ortak dil

Sandbox tek başına değer üretmez; değer, çıktının tüketilmesiyle oluşur. Kurumsal entegrasyonda üç hedef öne çıkar:

  • SOC için: avcılık hipotezleri, tespit sinyalleri, önceliklendirme notları
  • DFIR için: olay akışı, kanıt referansları, yeniden üretilebilirlik notları
  • Mühendislik için: kalıcı kontrol önerileri, zayıf nokta analizi, izleme kapsamı

Burada yöntem seçimi, "en çok entegrasyon" değil; "en az sürtünmeyle doğru aksiyon" prensibine dayanmalıdır.

Dikkat: Entegrasyonda "her şeyi aktaralım" yaklaşımı veri gürültüsü üretir. Gürültü arttıkça gerçek sinyal kaybolur. Hattın sağlığı için, hangi verinin kim tarafından nasıl tüketileceği baştan tanımlanmalıdır.

3.5. Gizlilik ve paylaşım disiplini: hedefli vakalarda görünürlük maliyeti

Hedefli saldırı şüphesinde, sandbox çıktılarının dış platformlarla paylaşımı veya kontrolsüz yayılması operasyonel risk doğurabilir. Bu nedenle:

  • Paylaşım seviyeleri belirlenir (iç ekip, sınırlı paydaş, dış paylaşım)
  • Redaksiyon/anonimleştirme kuralları uygulanır
  • "Gizlilik maliyeti" raporun bir parçası olarak değerlendirilir

Bu yaklaşım, hem kurumsal riski azaltır hem de raporun güvenilirliğini artırır.

3.6. Geri besleme döngüsü: hat, kendini iyileştirmelidir

Ölçeklenebilir hatlar statik kalmaz:

  • Yanlış pozitifler ve kaçan örnekler incelenir
  • Triage kuralları ve profil seçimleri revize edilir
  • Otomasyonun yanlışlama kriterleri güçlendirilir
  • Rapor formatı, tüketici ekibin ihtiyaçlarına göre iyileştirilir

Bu döngü kurulmadığında hat, zamanla "çok çalışıyor ama az değer üretiyor" noktasına sürüklenir.

Terimler Sözlüğü

Terim Açıklama
PipelineAnaliz hattı; triage’dan raporlamaya uzanan iş akışı zinciri
TriageÖn eleme ve önceliklendirme; hangi örneğe hangi kaynak ayrılacağını belirleyen karar aşaması
DetonationKontrollü çalıştırma; davranış gözlemi üretmek için izolasyonlu ortamda yürütme
ExtractionÇıkarım; ham telemetriden rapora taşınabilir artefakt üretimi
EnrichmentZenginleştirme; bulguları ek bağlam kaynaklarıyla güçlendirme
ReportingRaporlama; kanıt zinciri ve yeniden üretilebilirlikle birlikte çıktı üretme
TelemetryTelemetri; sistem/ağ/sandbox/EDR kaynaklı gözlem verisi
HeuristicSezgisel/kurala dayalı yaklaşım; hızlı sinyal üretir, belirsizlik taşıyabilir
DeterministicDeterministik; aynı girdiye aynı çıktıyı verme eğilimi
False positiveYanlış pozitif; zararsız bir durumun şüpheli diye işaretlenmesi
False negativeYanlış negatif; şüpheli bir durumun kaçırılması
ReproducibilityYeniden üretilebilirlik; aynı koşullarda aynı gözlemlere ulaşabilme standardı
ProvenanceKöken bilgisi; verinin hangi kaynaktan ve hangi bağlamdan geldiği
Sandboxİzolasyonlu analiz ortamı; kontrollü gözlem üretimi için kullanılan sistem
SIEMGüvenlik bilgi ve olay yönetimi; log/olay korelasyonu altyapısı
SOARGüvenlik orkestrasyonu ve otomasyonu; olay müdahale akışlarını otomatikleştirme yaklaşımı
EDRUç nokta tespit ve müdahale; uç nokta telemetrisi ve müdahale yeteneği

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Ölçeklenebilir bir analiz hattında triage’ın en doğru rolü hangisidir?

A) Örnekleri “zararlı/temiz” diye kesin sınıflamak

B) Hangi örneğin hangi derinlikte işleneceğine dair kaynak ve profil kararlarını vermek

C) Sadece hash üretmek

D) Sadece rapor formatını seçmek

E) Sadece sandbox kurmak

  • Doğru: B
  • Gerekçe: Triage, karar kapısıdır; A aşırı kesinlik içerir. C/D/E triage’ın kapsamını daraltır.
  1. 2) “Sandbox’ta bir şey yapmadı” çıktısı en sağlıklı biçimde nasıl yorumlanmalıdır?

A) Örnek kesinlikle temizdir

B) Örnek kesinlikle zararlıdır

C) Davranışın tetik koşulları veya gözlem kapsamı eksik olabilir; karşı kanıt aranmalıdır

D) Rapor yazmaya gerek yoktur

E) Enrichment her şeyi çözer

  • Doğru: C
  • Gerekçe: Negatif sonuç, koşul/gözlem eksikliğiyle açıklanabilir. A/B hatalı kesinlik, D/E yanlış genellemedir.
  1. 3) Extraction çıktısının “delil” değerini en çok artıran özellik hangisidir?

A) Yalnız özetlenmiş sonuçları saklamak

B) Ham veri + normalize edilmiş özet + kaynak/zaman/bağlam bilgisini birlikte taşımak

C) Zaman bilgisini atmak

D) Profil bilgisini gizlemek

E) Sadece ekran görüntüsü saklamak

  • Doğru: B
  • Gerekçe: Kanıt zinciri kaynak-zaman-bağlamla güçlenir. A/C/D/E denetlenebilirliği azaltır.
  1. 4) Enrichment aşamasında yanlış korelasyon riskini azaltan yaklaşım hangisidir?

A) Dış bağlamı doğrudan kanıt gibi rapora yazmak

B) “Bağlam” ile “kanıt”ı ayrı tutup, bağlamın hangi koşulda yanlışlanabileceğini belirtmek

C) Yalnız tek kaynağa güvenmek

D) Paylaşımlı altyapı ihtimalini görmezden gelmek

E) Zaman çizelgesini rapordan çıkarmak

  • Doğru: B
  • Gerekçe: Bağlam-kanıt ayrımı ve yanlışlama düşüncesi doğrulama disiplinidir. A/C/D/E riskleri büyütür.
  1. 5) Hızlı heuristik analiz ile yüksek doğruluk yaklaşımı arasında seçim en doğru hangi ilkeye göre yapılır?

A) Her zaman en hızlı olan seçilir

B) Her zaman en pahalı olan seçilir

C) Triage puanı ve hedeflenen çıktı türüne (avcılık hipotezi vs adli rapor) göre seçilir

D) Sadece araç lisansına göre seçilir

E) Sadece tekniğin popülerliğine göre seçilir

  • Doğru: C
  • Gerekçe: Ölçek, maliyet ve kanıt standardı birlikte düşünülür. A/B/D/E bağlamdan kopuktur.
  1. 6) Otomasyon çıktısının raporda güvenilir biçimde yer alması için en kritik unsur hangisidir?

A) Çıktının “otomatik” olduğunun yazılması

B) Çıktının hangi veriyle üretildiği ve hangi koşulda yanlışlanabileceğinin belirtilmesi

C) Çıktının uzun yazılması

D) Çıktının görselleştirilmesi

E) Çıktının tek başına sunulması

  • Doğru: B
  • Gerekçe: Denetlenebilirlik, veri kaynağı ve yanlışlama koşuluyla gelir. A/C/D ikincil, E risklidir.
  1. 7) Otomasyonda sürümleme ve test disiplininin temel gerekçesi hangisidir?

A) Otomasyon hatasının etkisi sınırlıdır

B) Otomasyon hatası ölçekle birlikte binlerce örneğe yayılabilir

C) Sadece estetik için gereklidir

D) Yalnız performansı artırır, doğrulukla ilgisi yoktur

E) Sadece raporu uzatır

  • Doğru: B
  • Gerekçe: Ölçek, hatayı büyütür; B bunu yakalar. A/C/D/E gerçekçi değildir.
  1. 8) Sandbox profil çeşitliliğinin en doğru gerekçesi hangisidir?

A) Her örnek her profilde aynı davranır

B) Bazı örnekler yalnız belirli koşullarda davranış gösterir; tek profille genelleme yanlış negatif doğurabilir

C) Sadece raporun daha güzel görünmesi için

D) Profil çeşitliliği izolasyonu azaltır, bu yüzden gereksizdir

E) Profil çeşitliliği enrichment yerine geçer

  • Doğru: B
  • Gerekçe: Koşula bağlı davranış yaygındır. A yanlış, C/E alakasız, D genelleme içerir.
  1. 9) Kurumsal entegrasyonda “her şeyi aktaralım” yaklaşımının en büyük riski hangisidir?

A) Daha fazla veri her zaman daha iyidir

B) Veri gürültüsü sinyali boğar ve tüketici ekiplerin aksiyon üretmesini zorlaştırır

C) Entegrasyon maliyetini düşürür

D) Otomasyonu gereksiz kılar

E) Zaman çizelgesini otomatik üretir

  • Doğru: B
  • Gerekçe: Gürültü arttıkça tespit değeri düşer. A yanlış; C/D/E konu dışı veya hatalıdır.
  1. 10) Ölçeklenebilir bir hattın “kendini iyileştirmesi” en doğrudan hangi mekanizmaya dayanır?

A) Sadece daha fazla VM eklemek

B) Yanlış pozitif/negatif geri beslemesiyle triage, profil seçimi ve yanlışlama kriterlerini revize etmek

C) Raporları kısa tutmak

D) Enrichment’i kaldırmak

E) Sadece tek profil kullanmak

  • Doğru: B
  • Gerekçe: Geri besleme döngüsü kaliteyi artırır. A tek başına kaliteyi garanti etmez; C/D/E risk büyütür.

Bu modülde neler öğrendiniz?

  • Ölçeklenebilir analiz hattının, istasyonlar arası standart ve kanıt zinciriyle güçlendiğini
  • Triage’ın, hız–derinlik dengesini ve profil/işleme kararlarını belirleyen kritik kapı olduğunu
  • Detonasyonun “negatif sonuç”larını karşı kanıt arayışıyla yönetmeden kesin hükme dönüşmemesi gerektiğini
  • Extraction ve enrichment aşamalarında kaynak–zaman–bağlam disiplininin rapor dayanıklılığını belirlediğini
  • Otomasyonda yöntem seçiminin triage ve hedef çıktıya bağlı olduğunu; otomasyon çıktısının yanlışlama koşullarıyla rapora girmesi gerektiğini
  • Sandbox stratejisinin profil çeşitliliği, telemetri kalitesi ve kurumsal tüketim (SIEM/SOAR/EDR) ihtiyaçlarıyla birlikte tasarlanması gerektiğini
  • Hattın kalitesinin, geri besleme döngüsüyle sürdürülebilir biçimde iyileştirildiğini

Modül 19 — İleri Raporlama ve Profesyonel Çıktılar

İleri malware analizi ve tersine mühendislikte gerçek değer, laboratuvarda elde edilen bulguların kurumsal savunmada uygulanabilir kararlara dönüşmesiyle ortaya çıkar. Bu modül; raporun yalnızca "bulgu listesi" değil, kanıt standardı yüksek, denetlenebilir, yeniden üretilebilir bir çıktı olmasını; IOC paketinin ve tespit önerilerinin ise savunma mimarisine oturan operasyonel yol haritaları haline gelmesini hedefler. İleri seviye fark burada görünür: aynı veriyi herkes toplayabilir; ama herkes onu doğru kesinlik diliyle paketleyip, farklı ekiplerin (SOC/DFIR/mühendislik/yönetim) kullanabileceği biçimde teslim edemez.

Bu Modülde Hedeflenen Kazanımlar

  • Teknik ek (appendix) standardına uygun, kanıt odaklı ve denetlenebilir rapor üretmek.
  • Kritik fonksiyonları, akış şemalarını ve çözümleme (decode) notlarını doğru kapsam ve kesinlik diliyle hazırlamak.
  • Davranış odaklı IOC paketleri ve olay zaman çizelgeleriyle bulguları operasyonel korelasyona uygun hale getirmek.
  • Analiz çıktısını Blue Team operasyonlarına entegre edecek kullanım senaryoları (use case) tasarlamak; SIEM/EDR tarafına doğru aktarım yapmak.
  • Yeniden üretilebilirliği ve sürümlemeyi (versioning) raporun ayrılmaz parçası haline getirerek kalite ve denetim standardı kurmak.

1) Profesyonel rapor iskeleti ve "iki okur" problemi

Aynı raporu iki farklı okur tipi tüketir: teknik derinlik arayan uzmanlar ve hızlı karar almak isteyen yöneticiler. Bu nedenle raporlama, tek bir tonla "herkese hitap etme" çabasından ziyade katmanlı bir tasarım ister.

  • Yönetici katmanı, iş etkisini ve öncelikleri taşır; teknik ayrıntıyı boğmaz.
  • Teknik katman, iddiaları kanıtla bağlar; "gözlem — yorum" ayrımını kaybetmez.

Yöntem seçimi burada belirgindir: bazı vakalarda tek bir rapor içinde katmanlandırma yeterlidir; yüksek gizlilikli veya çok paydaşlı süreçlerde ise yönetici özeti ayrı, teknik ek ayrı dağıtılır.

Örnek: Bir kurumda "veri sızıntısı riski" kararının 30 saniyede anlaşılması gerekirken, DFIR ekibi aynı olayın hangi telemetri penceresinde doğrulandığını görmek ister. Katmanlı rapor, iki ihtiyacı aynı anda karşılar.

İpucu: Yönetici özeti yazarken "ne oldu / etkisi ne / şu an risk seviyesi ne / ilk yapılacak 3 şey ne" akışı, raporun kurumsal değerini ciddi biçimde artırır.

2) Teknik ek standardı: kritik fonksiyonlar, akış şemaları, decode notları

Teknik ek, raporun "süs" kısmı değil; iddiaların ispat zeminidir. Neden önemli? Çünkü ileri seviye rapor, "ne oldu" kadar "nasıl biliyoruz" sorusunu da taşır.

2.1. Kritik fonksiyon seçimi: her fonksiyon değil, "kararı taşıyan" fonksiyon

Tersine mühendislikte yüzlerce fonksiyon görülebilir; teknik ek ise seçici olmak zorundadır. Fonksiyon seçimi, raporun hedef çıktısına göre yapılır:

  • Tespit odaklı rapor: davranış sinyali üreten fonksiyonlar (konfigürasyon okuma, iletişim başlatma, kalıcılık tetikleme gibi)
  • Adli rapor: olay akışındaki düğümler (kritik karar noktaları, çözülen verinin kullanıldığı yerler)
  • Korelasyon/istihbarat odaklı rapor: özgünlük taşıyan, varyantlar arası benzerlik kurulabilen parmak izi nitelikleri

Doğrulama disiplininin sorusu nettir: "Bu fonksiyon kritik" iddiası hangi kanıta dayanıyor? Karşı kanıt ararken iki risk sık görülür:

  • Meşru kütüphane davranışını "kötü niyet" sanmak
  • Decompiler çıktısını gerçeğin kendisi gibi kabul etmek

Örnek: "Decoder gibi görünen" bir fonksiyon bazı sıkıştırma/serileştirme kütüphanelerinde de benzer izler bırakabilir. Bu yüzden teknik ekte, fonksiyonun yalnız biçimini değil; çıktısının nerede kullanıldığını ve davranışı nasıl tetiklediğini göstermek, raporu itiraza dayanıklı kılar.

İpucu: Teknik ek için fonksiyon seçerken üç filtre sorusu kullan:

  1. — Bu parça çıkarılırsa ana iddia zayıflar mı?
  2. — Tespit önerisine sinyal üretiyor mu?
  3. — Yeniden üretilebilirlik için referans noktası mı?

2.2. Akış şemaları: okunabilirlikten öte, iddia — kanıt köprüsü

Akış şeması kodun tamamını çizmek değildir; karar düğümlerini, koşula bağlı davranışları ve veri akışını görünür kılmaktır. Neden önemli? Çünkü Blue Team tarafında "hangi koşulda ne oldu?" sorusu çoğu zaman "hangi sinyali nerede arayacağım?" sorusuna dönüşür.

Yöntem seçimi iki uç arasında yapılır:

  • Minimal akış: yalnız ana patika + kritik dallar; hızlı tüketim, düşük gürültü
  • Zengin akış: alternatif tetikleyiciler, hata kolları, çevresel koşullar; daha güçlü doğrulama

Doğrulama açısından iyi bir pratik: şemadaki her düğümün, decompile edilmiş koddaki ilgili karar yapısıyla tutarlı olması beklenir. Eğer bir yol statik olarak ulaşılamaz görünüyorsa, bu durum "karşı kanıt" olarak not edilir ve yöntem seçimi dinamik gözleme kaydırılır.

2.3. Decode notları ve veri yapıları: "sonuç" değil, ispat zinciri

Obfuscation/packing/in-memory karmaşasında çözülen veriler rapora taşınırken en çok hata, "çıktı doğruymuş gibi" davranıldığında oluşur. Decode notu, çözümlemenin tahmin değil ispat olduğunu göstermek için vardır.

Beklenen kanıt standardı:

  • Çözülmüş verinin davranışla tutarlılığı (ör. çalışma modları, konfigürasyon alanları ve gözlenen eylemler uyumlu mu?)
  • Çapraz kanıt (aynı değer farklı telemetri sınıflarıyla destekleniyor mu?)
  • Karşı kanıt arayışı (çıktı rastgele veri, masum string havuzu veya yanlış ayrıştırma olabilir mi?)

Örnek: Bir yapılandırma bloğunda "mod=telemetry" benzeri bir alan görülür. Tek başına kötü niyet kanıtı saymak yerine, bu alanın varlığında süreç davranışında ölçülebilir bir değişim olup olmadığına bakılır; varsa "gözlem — yorum" ayrımıyla raporlanır.

Dikkat: Teknik ekte "mikroskobik ayrıntı" artarken, raporun hedefi unutulursa okur bunu "gösteriş" gibi algılar. Her teknik ayrıntı, mutlaka bir iddiayı kanıtlamalı veya bir tespit önerisini gerekçelendirmelidir.

3) IOC paketi, zaman çizelgesi ve tespit önerileri: listedən mimariye

İleri seviye IOC yönetimi, statik göstergelerin ötesinde saldırganın davranış kalıbını taşır. Bu temelin temel kontrol listesini Orta Seviye SOC modüllerinde ayrıntılı işlemiştik; burada odak, IOC'yi "ek" olmaktan çıkarıp tespit mühendisliğine bağlamaktır.

3.1. Davranış odaklı IOC paketlemesi

Bir saldırganın küçük değişikliklerle (ör. yeniden paketleme) statik göstergeleri geçersiz kılabildiği senaryolarda, kalıcı değer davranışsal imzalardadır. Yöntem seçimi burada nettir:

  • Statik IOC'ler: hızlı triage ve kısa vadeli bloklama için işe yarayabilir, ama kırılgandır
  • Davranışsal göstergeler: daha kalıcıdır; korelasyon ve zaman bağlamıyla güçlenir

Örnek: 192.0.2.45 gibi bir hedefe temas tek başına zayıf bir gösterge olabilir; fakat bu temasın belirli bir iç olay dizisini takip etmesi ve belirli bir zaman penceresinde tekrar etmesi, "zamanlama tabanlı davranış göstergesi" olarak daha anlamlı hale gelir.

3.2. Olay zaman çizelgesi: doğrulama ve operasyonel korelasyon

Zaman çizelgesi, olayları "dizmekten" çok davranışın mantığını görünür kılar. Kanıt üretimi açısından kritik değer şudur: "oldu" demek yerine "ne zaman, hangi kaynakta, hangi sırayla" demek.

İyi bir çizelge:

  • Olayların kaynak bilgisini (EDR/SIEM/host log vb.) taşır
  • Tetikleyici — sonuç ilişkilerini kurar
  • Belirsizlikleri saklamaz (log gecikmesi, zaman senkronu riski)

İpucu: Çizelgede "eşik anları"nı belirginleştir: ilk tetik, ilk dış temas, ilk kalıcılık denemesi, ilk veri hazırlama/çözme. Bu anlar, tespit önerilerinin nerede yoğunlaşacağını doğrudan belirler.

3.3. Tespit önerileri: Sigma/YARA gibi çıktılar için gerekçelendirme

Tespit önerisi, yalnız "şunu yakalayın" demek değildir; sinyalin hangi kontrol katmanında nasıl değerlendirileceğini ve risklerin nasıl yönetileceğini açıklayan bir karar çerçevesidir. Burada Sigma ve YARA gibi çıktılar devreye girdiğinde, raporun kalitesi "kural var" demekle değil; kuralın hangi kanıtla savunulduğuyla ölçülür.

  • Kuralın dayandığı benzersiz nitelik açık olmalıdır (rastgele string değil, davranışa bağlanan ayırt edici parça).
  • Yanlış pozitif riski için karşı kanıt düşünülmelidir (meşru senaryolar neler, hangi bağlam kısıtları uygulanmalı?).
  • Kuralın hangi senaryoda zayıflayacağı belirtilmelidir (ör. varyantlaşma, ortam farkları).

Dikkat: Aşırı spesifik kurallar, kanıt zayıfsa ekibi yanlış yöne sürükler; aşırı genel kurallar ise alarm gürültüsüne yol açar. Kanıt gücü düşükse daha genel davranış sinyalleriyle başlayıp, operasyonel geri besleme ile daraltmak daha güvenli bir stratejidir.

4) Blue Team entegrasyonu: kullanım senaryosu (use case) tasarımı ve paylaşım disiplini

Analiz çıktısı, savunma sistemlerinde çalışacak "kullanım senaryolarına" dönüşmediğinde raporun etkisi düşer. Kullanım senaryosu, ekiplerin "yarın sabah ne yapacağım?" sorusuna cevap verir:

  • Hedef: neyi yakalamaya çalışıyoruz?
  • Gözlem: hangi sinyaller bu hedefi destekliyor?
  • Aksiyon: nerede, hangi sorgu/korelasyon mantığıyla araştırma yapılacak?
  • Başarı ölçütü: hangi bulgu hipotezi doğrular/yanlışlar?

Örnek: Süreç davranışlarında beklenmedik bir yetki kullanımına dair sinyal, tek başına yeterli olmayabilir. Kullanım senaryosu, bu sinyalin hangi zaman penceresinde hangi ek olaylarla birlikte anlam kazandığını tarif ettiğinde, SIEM/EDR tarafında operasyonel karşılığı olan bir alarm tasarımına dönüşür.

Paylaşım disiplini de raporlamanın bir parçasıdır. Tehdit verisinin "kimle, hangi kapsamda" paylaşılacağı netleşmezse, savunma kazanımı gizlilik ve operasyon riskiyle gölgelenebilir. TLP (Traffic Light Protocol) gibi çerçeveler bu nedenle rapor diline entegre edilir.

5) Yeniden üretilebilirlik standardı ve sürümleme notları

Profesyonel bir tersine mühendislik raporu, başka bir analist tarafından okunduğunda aynı bulgulara ulaşılabilecek kadar şeffaf olmalıdır. Neden önemli? Çünkü kalite denetimi, ekip içi devir, uzun vadeli tespit mühendisliği ve hukuki/kurumsal inceleme süreçleri yeniden üretilebilir çıktılara dayanır.

5.1. Yeniden üretilebilirlik: hangi bilgiler raporda "olmazsa olmaz"?

  • Ortam profili: gözlem kapsamı, izolasyon düzeyi, temel yapılandırma
  • Gözlem penceresi: hangi süre içinde hangi telemetri izlendi
  • Veri kaynakları: hangi log/telemetri sınıfları kullanıldı
  • Çıktıların kökeni: ham verinin nerede referanslandığı ve nasıl izlenebilir kılındığı

Hassas vakalarda ayrıntı düzeyi, gizlilik riskini artırabilir. Bu durumda yöntem seçimi, ayrıntıyı "iç ek"e taşımak; ana raporda ise denetlenebilirliği bozmadan kontrollü açıklama yapmak yönünde olur.

5.2. Sürümleme: raporun yaşayan doğası

Analiz ilerledikçe bazı bulgular güçlenir, bazıları zayıflar; kimi hipotezler elenir. Profesyonel sürümleme:

  • Revizyon geçmişini tutar
  • Hangi bulgunun hangi kanıtla değiştiğini açıklar
  • Değişikliğin tespit önerilerine/IOC paketine etkisini belirtir
  • Başarısız denemeleri "negatif sonuç" olarak kısaca not eder (aynı hataların tekrarlanmaması için)

İpucu: Sürüm notlarında yalnız "güncellendi" demek yerine, "hangi iddia değişti / hangi kanıt eklendi / hangi karşı kanıt bulundu" çizgisini izlemek, raporu denetime hazır hale getirir.

Terimler Sözlüğü

Terim Açıklama
Executive SummaryYönetici özeti; iş etkisi ve öncelik odaklı kısa özet
AppendixTeknik ek; raporu destekleyen kanıt ve teknik ayrıntı bölümü
Evidence packageDelil paketi; ham veri + referans + bağlam + zaman çizelgesiyle sunulan kanıt seti
TimelineZaman çizelgesi; olayların kronolojik ve kaynaklarıyla gösterimi
Detection engineeringTespit mühendisliği; sinyali kural/korelasyona dönüştürme disiplini
CorrelationKorelasyon; birden fazla sinyali ilişkilendirerek anlam üretme
Confidence levelGüven seviyesi; iddianın kanıt gücüyle uyumlu kesinlik derecesi
ReproducibilityYeniden üretilebilirlik; aynı koşullarda aynı sonuca ulaşılabilmesi
VersioningSürümleme; rapor/çıktı değişikliklerinin izlenebilir yönetimi
FlowchartAkış şeması; karar düğümleri ve akışın görselleştirilmesi
Decode notesÇözümleme notları; çözülen veri/konfigürasyonun doğrulama ve bağlam notları
Use caseKullanım senaryosu; bulgunun savunma sisteminde uygulanma planı
Sigma ruleLog odaklı tespit için kullanılan kural dili
YARA ruleDosya/artefakt örüntüsü yakalamaya yönelik kural yaklaşımı
TLPTrafik Işığı Protokolü; bilginin paylaşım kapsamını belirleyen standart
Semantic deviationSemantik sapma; beklenen meşru mantıktan sapan şüpheli işleyiş örüntüsü
False positiveYanlış pozitif; meşru davranışın şüpheli sanılması
False negativeYanlış negatif; şüpheli davranışın kaçırılması

Kendini Değerlendir

Aşağıdaki sorular modül kazanımlarını ölçer. Her soru için en iyi cevabı seç.

  1. 1) Teknik ek (appendix) bölümünün rapordaki en temel işlevi hangisidir?

A) Raporu daha uzun göstermek

B) Sonuçların hangi kanıt referanslarına dayandığını ispatlayarak denetlenebilir kılmak

C) Sadece ekran görüntüsü arşivlemek

D) Sadece IOC listesini tekrar etmek

E) Sadece araç isimlerini yazmak

  • Doğru: B
  • Gerekçe: Teknik ek, iddia–kanıt köprüsüdür. A/C/D/E, kanıt standardını taşımaz.
  1. 2) Kritik fonksiyon seçimini en doğru yapan yaklaşım hangisidir?

A) En fazla fonksiyonu eklemek

B) En büyük boyutlu fonksiyonları seçmek

C) Ana iddiayı taşıyan, tespit sinyaline bağlanan ve yeniden üretilebilirliğe katkı veren fonksiyonları seçmek

D) Sadece decompiler’ın “temiz” gösterdiği fonksiyonları seçmek

E) Sadece hata yakalayan fonksiyonları seçmek

  • Doğru: C
  • Gerekçe: Seçim, karar değeri ve kanıt katkısına göre yapılır. A/B/D/E bağlamdan kopuktur.
  1. 3) Akış şemasında “statik olarak ulaşılamaz görünen” bir yol tespit edildiğinde en profesyonel tepki hangisidir?

A) Yolu kesinlikle kötü niyet kanıtı saymak

B) Bu durumu karşı kanıt olarak not edip, yöntem seçimini dinamik doğrulamaya kaydırmak

C) Akış şemasını kaldırmak

D) Yolu görmezden gelmek

E) Sonucu yönetici özetine taşımak

  • Doğru: B
  • Gerekçe: Ulaşılamaz yol, iddiayı zayıflatabilir; karşı kanıt olarak ele alınıp doğrulama stratejisi güncellenmelidir.
  1. 4) Decode notlarında “en güçlü doğrulama” yaklaşımı hangisidir?

A) Sadece çözülen metni yazmak

B) Çözülen verinin davranışla tutarlılığını ve çapraz kanıtını göstermek; alternatif açıklamaları değerlendirmek

C) Yalnız yorum yazmak

D) Yalnız ham veriyi dökmek

E) Çözümleme yöntemini saldırı talimatı gibi ayrıntılandırmak

  • Doğru: B
  • Gerekçe: Tutarlılık + çapraz kanıt + karşı kanıt, yanlış kesinliği azaltır. E kapsam dışı ve risklidir.
  1. 5) Davranış odaklı IOC’leri statik IOC’lere göre daha değerli yapan temel özellik hangisidir?

A) Daha kısa olmaları

B) Küçük varyant değişikliklerine rağmen operasyonel mantığı yakalamaları

C) Sadece belirli işletim sistemlerinde çalışmaları

D) Ücretli olmaları

E) Görsel olarak daha etkileyici olmaları

  • Doğru: B
  • Gerekçe: Statik göstergeler kolay değişebilir; davranış mantığı daha kalıcıdır.
  1. 6) Zaman çizelgesinin rapor kalitesine en büyük katkısı hangisidir?

A) Sayfa sayısını artırmak

B) Olay sırasını kaynaklarıyla gösterip tetikleyici–sonuç ilişkisini doğrulamayı kolaylaştırmak

C) Tespit kuralını otomatik üretmek

D) Statik analiz ihtiyacını ortadan kaldırmak

E) Kanıt ihtiyacını azaltmak

  • Doğru: B
  • Gerekçe: Timeline, doğrulama ve operasyonel korelasyon sağlar. C/D/E gerçekçi değildir.
  1. 7) Sigma/YARA gibi tespit önerilerinde “kanıt standardını” yükselten yaklaşım hangisidir?

A) Kuralı yazıp gerekçe eklememek

B) Kuralın dayandığı ayırt edici niteliği kanıt referansıyla açıklamak ve yanlış pozitif riskini karşı senaryolarla değerlendirmek

C) Her zaman en spesifik kuralı seçmek

D) Her zaman en genel kuralı seçmek

E) Yalnız yönetici özetinde geçmek

  • Doğru: B
  • Gerekçe: Kuralın neden güvenilir olduğu ve nerede zayıfladığı açıklanmalıdır.
  1. 8) Bir kullanım senaryosunu (use case) operasyonel yapan bileşen hangisidir?

A) Uzun terim listesi

B) Hedef–gözlem–aksiyon–başarı ölçütü çerçevesi

C) Araç sürümü listesi

D) Yalnız ekran görüntüsü

E) Yalnız dosya adı

  • Doğru: B
  • Gerekçe: Use case, ekiplerin doğrudan uygulayabileceği aksiyon planını tarif eder.
  1. 9) Yeniden üretilebilirlik (reproducibility) ilkesini en iyi temsil eden rapor içeriği hangisidir?

A) “Bize güvenin”

B) Ortam profili, gözlem penceresi, veri kaynakları ve ham veriye referanslarla aynı sonuca ulaşılabilmesi

C) “Bu tehdit herkesin bildiği bir şey”

D) “Çok sayıda örnek gördük”

E) “Rapor hızlı yazıldı”

  • Doğru: B
  • Gerekçe: Tekrarlanabilirlik, parametrelerin ve referansların açık olmasına dayanır.
  1. 10) Sürümleme notlarının rapor güvenilirliğine katkısı en doğru nasıl ifade edilir?

A) Sadece tarih eklemek yeterlidir

B) Hangi iddianın hangi kanıtla değiştiğini ve bunun IOC/tespit önerilerine etkisini görünür kılmak

C) Sürümleme raporu zayıflatır

D) Sürümleme yalnız yazılım projelerinde gerekir

E) Sürümleme sadece biçimsel bir zorunluluktur

  • Doğru: B
  • Gerekçe: Değişikliğin gerekçesi ve etkisi, denetlenebilirliği artırır; “güncellendi” demek tek başına yetmez.

Bu modülde neler öğrendiniz?

  • Teknik ekin, ileri seviye raporda iddiaları taşıyan ispat katmanı olduğunu
  • Kritik fonksiyon ve akış şeması seçiminin, rapor hedefiyle uyumlu yöntem seçimi gerektirdiğini
  • Decode notlarında tutarlılık, çapraz kanıt ve karşı kanıt arayışının yanlış kesinliği azalttığını
  • IOC paketinin bağlam, güven seviyesi ve zaman çizelgesiyle “liste” olmaktan çıkıp operasyonel değere dönüştüğünü
  • Tespit önerilerinin Sigma/YARA gibi çıktılara dönüşürken kanıtla gerekçelendirilmesi gerektiğini
  • Kullanım senaryosunun bulguyu SOC/DFIR/mühendislik iş akışına bağlayan pratik köprü olduğunu
  • Yeniden üretilebilirlik ve sürümlemenin raporu denetime hazır, sürdürülebilir bir çıktıya çevirdiğini