Kök neden ve delil zinciri
- 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
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
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.
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
Çı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.
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.
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
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.
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.
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
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?
Okumayı istediğin sırayla sürdürebilirsin. Ders, bütün etkinlikleri cevapladığında tamamlanır.