İçeriğe atla
0 XP 0
14 dkderinleşmeyle 16 dk60 XP7 etkinlik

Kök neden ve delil zinciri

Bu derste
  • Kök nedeni süreç katmanına kadar izler, zaman damgalarını okur, delili uçuculuk sırasıyla toplar ve SHA-256 ile zincir kaydına bağlarsın.
  • Delil zinciri kâğıt işi gibi görünür; mahkemede olayın tek belgesi odur.

Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +60 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.

Saldırganın nereden girdiğini bulmadan olay kapanmaz. Kapanırsa da birkaç hafta sonra yeniden açılır. Bir vakada web kabuğu bulundu, dosya silindi ve olay kapatıldı. On gün sonra aynı kabuk geri geldi, çünkü asıl giriş olan yükleme ucu hiç kapatılmamıştı; ikinci olayın maliyeti üç katına çıktı.

web01 sınırlandı, ama iki soru hâlâ açık: saldırgan içeri nasıl girdi ve bunu bir denetçiye ya da mahkemeye nasıl kanıtlayacaksın? Önce kök nedeni geriye doğru izleyecek, sonra zaman damgalarını okuyup zaman çizelgesi kuracaksın. Ardından delili doğru sırayla toplayacak, bütünlüğünü özet (hash) değeriyle kanıtlayacak ve el değiştirmesini kayda geçireceksin.

Kök neden: geriye doğru yürümek

Kök neden analizi geriye doğru yürür. Elindeki son bulgudan başlarsın ve her adımda tek soru sorarsın: bu nasıl oldu? Yöntemin adı Beş Neden'dir (5 Whys). Adındaki beş bir kural değil, bir hatırlatmadır; gerçek nedene bazen üç, bazen yedi adımda varırsın.

Web kabuğu dosyası nasıl oluştu? Bir yükleme isteğiyle. O istek neden kabul edildi? Dosya uzantısı denetlenmiyordu.

Denetim neden yoktu? Bir sürümde kaldırılmıştı.

Neden kimse fark etmedi? Değişiklik güvenlik gözden geçirmesinden geçmemişti. Zinciri sonuna kadar götür.

Çoğu analist yükleme açığında durur ve onu kök neden ilan eder. Oysa asıl soru denetimin neden yok olduğudur. Cevap çoğu zaman süreçtedir, kodda değil.

Bulgu     : /var/www/altaykargo/uploads/up.php çalışıyor, nc sürecini doğurmuş
Adım 1    : up.php ilk kez 14/Sep 03:04:55 +0300'te çağrıldı, kaynak 198.51.100.77
Adım 2    : Dosya 03:04:52'de POST /kargo/belge-yukle isteğiyle yazıldı
Adım 3    : Aynı adres 03:02:12'de /uploads dizinini keşfetti (301)
Adım 4    : Yükleme ucu dosya uzantısını denetlemiyor
Adım 5    : Denetim, 12 Ağustos sürümünde performans için kaldırılmış
Kök neden : Güvenlik etkisi değerlendirilmeden yayına alınan kod değişikliği
Geriye doğru beş adım. Dördüncü adımda durursan yalnız bir satırı düzeltirsin, süreci düzeltmezsin.

Her bulgu kök neden değildir. Katkıda bulunan etken olayı kolaylaştırır ya da büyütür, ama tek başına olayı doğurmaz.

web01'de mkaya hesabının zayıf parolası böyle bir etkendir: saldırgan SSH ile girmeyi kolay buldu. Ama parola güçlü olsaydı bile web kabuğu yine yüklenirdi. Kök neden ise ortadan kalktığında olayın yaşanmayacağı nedendir. Analizi iki katmanda yaz.

Teknik katman neyin bozuk olduğunu söyler: uzantı denetimi yok. Süreç katmanı neden bozuk kaldığını söyler: güvenlik gözden geçirmesi atlandı. Teknik düzeltme o günkü açığı kapatır. Süreç düzeltmesi aynı açığın başka dosyada, başka tarihte yeniden doğmasını engeller.

Katman  Bulgu                                        Rolü                Düzeltme
------  -------------------------------------------  ------------------  --------------------------------------------
Teknik  Yükleme ucu dosya uzantısını denetlemiyor    kök neden (teknik)  İzin listesiyle denetim, web kökü dışına yaz
Teknik  mkaya hesabının parolası zayıf               katkıda bulunan     SSH'ta yalnız anahtarla giriş
Teknik  SSH internete açık                           katkıda bulunan     SSH'ı VPN arkasına al
Süreç   Değişiklik güvenlik gözden geçirmesiz çıktı  kök neden (süreç)   Yayın hattına zorunlu güvenlik onayı
Süreç   Web dizininde dosya bütünlüğü izlenmiyor     katkıda bulunan     Dosya bütünlüğü izleme ve alarm
Teknik ve süreç katmanı ayrı satırlarda. Kök neden iki katmanda da yazılır; katkıda bulunan etkenler ayrıca düzeltilir.

Kök nedeni bulduğunu düşündüğünde son bir sınama yap: bu neden ortadan kalksaydı olay yine olur muydu? Cevap evet ise daha derine inmen gerekir. Sonra kök nedeni tek cümleye indir. Şablon şöyledir: varlıkta, teknik zayıflık yüzünden saldırı adımı mümkün oldu; zayıflık, süreç eksikliği nedeniyle fark edilmedi.

web01 için cümle şudur: yükleme ucundaki uzantı denetimi, güvenlik gözden geçirmesinden geçmeyen bir değişiklikle kaldırıldı ve web kabuğu bu yoldan yüklendi. Cümle kurulamıyorsa analiz bitmemiştir. Kök neden cümlesi raporun kök neden bölümüne olduğu gibi girer ve düzeltme önerileri ondan türetilir.

Derinleş:Beş Neden fabrikadan gelir

Beş Neden, bilişimden çok önce üretim hattında doğdu. Yöntem Toyota'nın kurucularından Sakichi Toyoda'ya dayanır. Şirketin üretim sistemini kuran Taiichi Ohno da onu yaklaşımının temeli sayardı: bir makine durduğunda neden sorusunu art arda sor, ta ki gerçek nedene varana kadar.

Yöntemin gücü sadeliğindedir; kâğıt ve kalem yeter. Zayıflığı da aynı yerdedir. Tek bir zincir izler, oysa olayların çoğu birden çok nedenin kesişiminden çıkar.

Soran kişinin bildiği alana doğru da kayar: ağ ekibi ağda, yazılım ekibi kodda durur. Bu yüzden olay müdahalesinde Beş Neden tek başına kullanılmaz. Zaman çizelgesiyle birlikte yürür ve her neden çizelgedeki bir kanıta bağlanır.

Kanıtsız halka varsayımdır ve raporda öyle işaretlenir. Birden çok zincir çıktığında balık kılçığı (Ishikawa) diyagramı gibi dallanan yöntemler daha iyi sonuç verir. Hangi yöntemi seçersen seç, durduğun yer bir kişi değil, bir süreç olmalıdır.

Etkinlik 1 / 7

Kök neden analizini geriye doğru sıraya diz.

Sürükleyip doğru sıraya koy.

Bir öğeye odaklan, yukarı ve aşağı ok tuşlarıyla taşı. Home tuşu en üste, End tuşu en alta alır.

  • 1Değişiklik güvenlik gözden geçirmesinden geçmemiş
  • 2Denetim bir sürüm değişikliğinde kaldırılmış
  • 3Yükleme ucu dosya uzantısını denetlemiyor
  • 4Web kabuğu dosyası sunucuda çalışıyor
  • 5Dosya bir POST isteğiyle yüklenmiş

Etkinlik 2 / 7

web01 bulgularını ayır: kök neden mi, katkıda bulunan etken mi?

Önce bir seçeneğe, sonra aşağıdaki uygun kutuya bas. İstersen seçeneği kutuya sürükleyip bırak. Yerini değiştirmek için aynı işlemi tekrarla.

0/5 seçenek yerleşti.

Zaman damgaları ve zaman çizelgesi

Dosya zaman damgaları kök nedene giden en kısa yoldur. Linux'ta bir dosya dört zaman taşır. Erişim zamanı (atime) dosyanın okunduğu andır. Değişiklik zamanı (mtime) içeriğin en son yazıldığı andır.

Durum değişikliği zamanı (ctime) içerik ya da izin, sahip gibi üst veri en son değiştiğinde güncellenir. Doğum zamanı (birth) dosyanın oluştuğu andır; ext4 gibi dosya sistemleri bunu tutar ve güncel stat sürümleri gösterir. Adli analizde bu dörtlüye MACB denir. Aşağıda up.php için stat ve find çıktıları var.

$ stat /var/www/altaykargo/uploads/up.php
  File: /var/www/altaykargo/uploads/up.php
  Size: 1432         Blocks: 8          IO Block: 4096   regular file
Device: 8,1          Inode: 1311234     Links: 1
Access: (0644/-rw-r--r--)  Uid: (   33/www-data)   Gid: (   33/www-data)
Access: 2026-09-14 03:04:55.301118040 +0300
Modify: 2026-09-14 03:04:52.198004511 +0300
Change: 2026-09-14 03:04:52.198004511 +0300
 Birth: 2026-09-14 03:04:52.197551020 +0300

$ find /var/www/altaykargo -newer /var/www/altaykargo/index.php -type f -name '*.php'
/var/www/altaykargo/uploads/up.php

$ find /var/www -mmin -600 -type f -name '*.php'
/var/www/altaykargo/uploads/up.php
stat dört zamanı, find ise komşularından yeni dosyaları gösterir.

Çıktıyı satır satır oku. Uid satırı dosyanın sahibini www-data gösteriyor; dosyayı SSH ile giren biri değil, web sunucusu yazmış.

Birth ve Modify aynı saniyede, 03:04:52: dosya o an oluşmuş ve içeriği bir daha değişmemiş. Bu saat, web logundaki yükleme isteğiyle örtüşür. Access 03:04:55 ise ilk çağrının anıdır. atime'a tek başına güvenme; çoğu sistem relatime seçeneğiyle atime'ı yalnız sınırlı durumlarda günceller, bu yüzden 03:15'teki ikinci çağrı burada görünmez.

İlk find komutu web kökünde index.php'den yeni PHP dosyalarını listeler; komşularından günlerce yeni tek dosya, sonradan bırakılmış bir dosyadır. İkinci komut son on saatte değişen PHP dosyalarını verir. İki komut da aynı sonuca varır.

Saldırgan izini gizlemek için zaman damgası bozabilir; buna timestomping denir. Linux'ta touch -d komutu atime ve mtime'ı geçmiş bir tarihe çekebilir. Ama ctime'ı kullanıcı alanından doğrudan istediğin değere ayarlayamazsın. Çekirdek onu her değişiklikte o anın saatine günceller; touch komutunun kendisi de ctime'ı şimdiye çeker.

Saldırgan bunu ancak sistem saatini geri alarak ya da dosya sistemini bağlı değilken düşük düzeyde düzenleyerek aşar; iki yol da çoğu zaman başka kayıtlarda iz bırakır. Yani mtime'ı 2024'ü gösteren ama ctime'ı dün gece olan bir dosya kurcalanmış olabilir. Windows'ta aynı teknik Sysmon'un 2 numaralı olayıyla görünür: bir süreç dosyanın oluşturma zamanını açıkça değiştirdiğinde bu olay yazılır. ATT&CK bu tekniği T1070.006 olarak listeler.

Bulguları tek bir zaman çizelgesinde topla. Her satırda zaman, kaynak, olay ve kanıt numarası dursun. Bütün saatleri tek saat dilimine çevir.

Nginx +0300 yazar, bir bulut günlüğü UTC yazar; aradaki üç saatlik fark yanlış bir sıralama üretir. Tablo büyüdükçe boşluklar görünür hâle gelir. Görünen boşluk, aramaya devam edeceğin yerdir.

Saldırgan o aralıkta durmuş olabilir, ama kayıt da kesilmiş olabilir. İkisini ayırmanın yolu, aynı aralıkta başka bir kaynağın akıp akmadığına bakmaktır. Güvenlik duvarı akıyor ama web logu susuyorsa sorun kayıttadır.

Etkinlik 3 / 7

stat çıktısındaki zaman alanlarını anlamlarıyla eşle.

Soldan bir tane seç, sağdan eşini seç. Kullanılmış bir seçeneği yeniden seçersen yeni öğeye taşınır.

Uçuculuk sırası ve kendi izin

Delil toplamanın kendi sırası vardır: uçucudan kalıcıya. Bu sıranın standart kaynağı 2002 tarihli RFC 3227'dir. Belgenin 2.1 bölümü tipik bir sistem için şu sırayı verir. En başta işlemci yazmaçları ve önbellek gelir.

Sonra yönlendirme tablosu, ARP önbelleği, süreç tablosu, çekirdek istatistikleri ve bellek gelir; bunlar aynı basamakta durur. Ardından geçici dosya sistemleri, sonra disk gelir. Onları ilgili uzak log ve izleme verisi izler. Sonra fiziksel yapılandırma ve ağ topolojisi, en sonda da arşiv ortamı durur.

Yazmaçları sahada nadiren toplarsın; pratikte iş bellek ve ağ durumuyla başlar. Aynı basamağın içinde sırayı araç belirler. Bellek görüntüsü süreçleri ve açık bağlantıları da içine alır. Bu yüzden araç hazırsa önce belleği alırsın, sonra süreç ve bağlantı listesini komutlarla çıkarırsın.

Bellek görüntüsü en değerli ama en kırılgan delildir. Çalışan süreçler, açık bağlantılar, şifresi çözülmüş anahtarlar ve diske hiç yazılmayan zararlılar yalnız orada durur. Makine kapandığında bu katman tamamen yok olur ve hiçbir disk analizi onu geri getirmez.

web01'deki nc ikilisi diskten silinmişti; tek kopyası bellekteydi. Bellek görüntüsünü nasıl alıp Volatility ile nasıl inceleyeceğini Adli Bilişim yolundaki Bellek Analizi modülünde çalışırsın. Burada bilmen gereken, sıranın mantığıdır: kaybolan katman geri gelmez, kalıcı olan bekleyebilir.

Delil toplarken kendi izini de yaz. Hangi komutu çalıştırdın, hangi dosyaya dokundun? Her komut sistemi biraz değiştirir; bellek aracı bile yeni bir süreç açar.

Analistin bıraktığı iz, sonradan saldırganın izi sanılabilir. NIST SP 800-61 Rev. 3 de RS.AN-06 sonucunda soruşturmada yapılan eylemlerin kaydını ve bu kaydın bütünlüğünün korunmasını ister. Analizi asla özgün delil üzerinde yapma.

İmajın kopyasını al, kopya üzerinde çalış. Özgün kopyayı salt okunur tut ve kasada sakla. Diski bağlarken yazma korumalı adaptör kullan. Doğrudan takılan disk, işletim sistemine üzerinde değişiklik yaptırır ve değişen tek bir zaman damgası bile bütünlük tartışması açar.

Etkinlik 4 / 7

Delil toplama sırasını uçucudan kalıcıya doğru diz.

Sürükleyip doğru sıraya koy.

Bir öğeye odaklan, yukarı ve aşağı ok tuşlarıyla taşı. Home tuşu en üste, End tuşu en alta alır.

  • 1Uzak yedekler ve arşiv kayıtları
  • 2Disk imajı
  • 3Geçici dosyalar ve oturum verisi
  • 4Bellek görüntüsü
  • 5Çalışan süreçler ve açık ağ bağlantıları

Bütünlük: özet (hash) değeri

Toplanan her delilin özet (hash) değeri alınır. SHA-256 dosyanın parmak izidir; tek bitlik değişiklik bile değeri tamamen değiştirir. Algoritmanın dayanağı NIST'in FIPS 180-4 standardıdır. Değeri kopyayı aldıktan hemen sonra hesapla, kaydet ve raporda göster.

Disk imajında bu daha da önemlidir. Özet, imaj alındıktan hemen sonra hesaplanmazsa aradaki sürede ne olduğunu kanıtlayamazsın. Sonra biri dosyanın değiştiğini iddia ederse, özet değeri iddiayı çürütür.

MD5 ya da SHA-1 ile yetinme. İkisinde de aynı değeri veren farklı dosyalar üretilebildiği gösterildi. Karşı taraf bu zayıflığı delilin güvenilirliğine itiraz için kullanabilir.

$ sha256sum up.php | tee up.php.sha256
9f2c4d8b1e...  up.php

$ sha256sum -c up.php.sha256
up.php: OK

PS C:\delil> Get-FileHash -Algorithm SHA256 .\update.exe

Algorithm       Hash                                   Path
---------       ----                                   ----
SHA256          7A1F3C9E2B...                          C:\delil\update.exe
Özeti hesapla, dosyaya yaz, sonra doğrula. Windows'ta aynı işi Get-FileHash yapar.

Satır satır bakalım. İlk komut özeti hesaplar; tee çıktıyı hem ekrana basar hem dosyaya yazar.

İkinci komut dosyadaki değeri yeniden hesaplanan değerle karşılaştırır. OK, dosyanın o andan beri değişmediğini gösterir; değişmişse FAILED yazar. Bu doğrulamayı delil her el değiştirdiğinde tekrarlarsın.

Windows'ta aynı işi Get-FileHash yapar. Değeri büyük harfle yazar; aynı dosyanın Linux'taki değeriyle karşılaştırırken harf büyüklüğüne takılma. Özeti delil kaydına yazarken hangi algoritmayı kullandığını da belirt.

İmaj alırken akış biraz farklıdır. İmaj aracı okuma sırasında özeti kendisi hesaplar ve kaynağın özetini imajın özetiyle karşılaştırır. İki değer eşleşiyorsa imaj, kaynağın bit bit kopyasıdır. Bu değeri delil zinciri formunun özet alanına yazarsın.

Analiz sırasında imajı salt okunur bağlarsın ve iş bitince özeti yeniden hesaplarsın. Değer aynı çıkıyorsa analizin imajı değiştirmediğini kanıtlarsın. Bellek görüntüsünde kaynakla karşılaştırma yapılamaz, çünkü bellek her an değişir. Yine de görüntü dosyasının özeti alındığı anda hesaplanır ve o andan sonrası korunur.

Derinleş:MD5 ve SHA-1 neden emekli oldu

Özet (hash) fonksiyonunun delil için tek görevi vardır: iki farklı dosyanın aynı değeri vermesini pratikte imkânsız kılmak. Buna çakışma direnci denir. MD5 bu direnci 2004'te kaybetti; araştırmacılar aynı MD5 değerini veren iki farklı girdi yayımladı.

Birkaç yıl içinde saldırı, geçerli görünen sahte bir sertifika üretecek kadar olgunlaştı. SHA-1'in sırası 2017'de geldi. Bir araştırma ekibi aynı SHA-1 değerini taşıyan iki farklı PDF dosyası yayımladı.

2020'de seçilmiş önek çakışması da pratik hâle geldi. NIST Aralık 2022'de SHA-1'i emekliye ayırdı ve 31 Aralık 2030'a kadar tamamen bırakılmasını istedi. Delil açısından sonuç açıktır.

Karşı taraf, zayıf bir algoritmayla korunan delilin aynı değeri veren başka bir dosyayla değiştirilebileceğini ileri sürebilir. Bu itiraz pratikte zor olsa bile tartışma açar. SHA-256 bu tartışmayı baştan kapatır. Bazı araçlar geriye uyumluluk için MD5 ve SHA-256'yı birlikte yazar; SHA-256 orada olduğu sürece bu sorun değildir.

Etkinlik 5 / 7

web01 imajından çıkardığın update.exe dosyasının SHA-256 değerini hesapla ve dosyaya yaz.

ogrenci@lab

Etkinlik 6 / 7

Toplanan delilin bütünlüğünü kanıtlamak için SHA-256 ile hesaplanan değere ____ (hash) değeri denir.

Delil zinciri

Delil zinciri, delilin kimden kime geçtiğini yazan kesintisiz kayıttır. RFC 3227 dört soruyu kaydetmeni ister. Delili kim, nerede, ne zaman bulup topladı? Kim, nerede, ne zaman inceledi?

Hangi dönemde kimin elindeydi ve nasıl saklandı? El değiştirdiğinde bu ne zaman ve nasıl oldu? Bir halka eksikse delilin değeri tartışmalı hâle gelir.

Rev. 3 gerçekçi bir not da düşer (RS.AN-07): her olayda resmî delil zinciri işletilmez, çünkü çoğu zararlı yazılım olayı kovuşturmaya dönüşmez. Ama toplanan veri yine de delildir ve bütünlüğü korunur.

Resmî zinciri hangi durumda işleteceğini hazırlıkta yaz. Formu da olaydan önce hazırla; gece üçte sıfırdan form yazan ekip alanları eksik doldurur. Aşağıda doldurulmuş bir kayıt var.

Tespitolay yeriEdinimimaj, özetMuhafazazincir kaydıİncelemekopya üzerindeRaporsavunulabilir
Delilin yolu: tespitten rapora kadar her durak zincir kaydında bir satırdır.
Delil no     : D-07
Tanım        : up.php, web kabuğu dosyası (1432 bayt)
Kaynak       : web01:/var/www/altaykargo/uploads/up.php
Toplayan     : A. Yılmaz (SOC analisti)
Tarih-saat   : 2026-09-14 01:12 UTC (04:12 TSİ)
SHA-256      : 9f2c4d8b1e...
Teslim eden  : A. Yılmaz          Teslim alan : C. Yıldız (adli analiz)
Teslim anı   : 2026-09-14 02:30 UTC, özet yeniden doğrulandı: eşleşti
Amaç         : Statik analiz, kopya üzerinde
Saklama      : SOC-Kasa-1, şifreli USB, mühür no 0457
Doldurulmuş bir delil zinciri kaydı. Her el değişimi yeni bir teslim satırı açar.

Formu satır satır oku. Delil numarası her delili tek kimlikle anar; raporda ve dosya adında aynı numara geçer. Tarih-saat alanı UTC yazılır, yerel saat yanında durur; farklı saat dilimindeki ekipler aynı anı böyle eşler. SHA-256 alanı toplama anındaki değerdir.

Her teslimde yeniden hesaplanan değer bununla karşılaştırılır ve sonuç teslim satırına yazılır. Teslim eden ve alan alanları zincirin halkalarıdır; her el değişimi yeni bir satır açar. Saklama alanı delilin fiziksel yerini ve mühür numarasını verir.

Etkinlik 7 / 7

Delil zinciri kaydında bir halka eksik kalırsa ne olur?

Bu derste bir hata mı gördün? Bildir