İçeriğe atla
0 XP 0
14 dkderinleşmeyle 15 dk50 XP8 etkinlik

Delil bütünlüğü ve hash

Bu derste
  • Özet fonksiyonunun delil bütünlüğünü nasıl kanıtladığını, SHA-256 ile MD5 farkını ve bir imajın özetini adım adım doğrulamayı öğren.
  • Bu derste fin-pc12 imajının SHA-256 değerini toplama anındaki değerle karşılaştıracak, bozulan bir bölümü parça özetiyle bulacaksın.
  • MD5 neden hâlâ raporlarda görünür, neden tek başına yetmez? Bu sorunun cevabını da bulacaksın.

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

Bütünlük tek bir soruya cevap verir: elimdeki kopya, aldığım andaki hâlle aynı mı? Beş yüz gigabaytlık bir imajı gözle karşılaştıramazsın. Bu işi özet fonksiyonu (hash function) yapar. Özet, delilin parmak izidir.

Tek bit değişirse değer baştan sona başkalaşır. Önce özet fonksiyonunun nasıl çalıştığını ve hangi algoritmanın neden seçildiğini göreceksin. fin-pc12 imajını Linux ve Windows araçlarıyla özetleyecek, MD5 ile SHA-1'in neden tek başına yetmediğini öğreneceksin. Son bölümde bozulan bir bölümü parça özetiyle bulacak, E01 kabının kendi özetini nasıl taşıdığını okuyacak ve özetin laboratuvardaki başka işlerini göreceksin.

Özet fonksiyonu: sabit boy, tek yön

Özet fonksiyonu girdiyi sabit uzunlukta bir değere indirir. Girdi bir bayt da olsa, beş yüz gigabayt da olsa sonuç aynı boydadır. SHA-256 her zaman 256 bit üretir. Bu değer onaltılık yazıldığında 64 karakter tutar, çünkü her onaltılık basamak dört bit taşır.

Fonksiyon tek yönlüdür. Değerden geri dönüp içeriği üretemezsin. Bu yüzden özet, içeriği açığa çıkarmadan kimliğini taşıyan pratik bir etikettir. Kriptografik bir özetten üç direnç beklenir.

Ön görüntü direnci, verilen bir özete uyan girdiyi bulamamaktır. İkinci ön görüntü direnci, elindeki dosyayla aynı özeti veren başka bir dosya üretememektir. Çakışma direnci ise aynı özeti veren herhangi iki dosyayı bulamamaktır.

Algoritma   Tanım          Bit   Onaltılık   Adli işteki yeri
MD5         RFC 1321       128   32          Çakışma pratik, yalnız ek referans
SHA-1       FIPS 180-4     160   40          Çakışma gösterildi (2017), ek referans
SHA-256     FIPS 180-4     256   64          Bütünlük kanıtında esas değer
SHA-512     FIPS 180-4     512   128         Güçlü, bazı laboratuvarların tercihi
Yaygın özet algoritmaları. Onaltılık uzunluk, bit sayısının dörde bölümüdür.

Tabloyu soldan sağa oku. SHA-1 ve SHA-2 ailesi (SHA-256, SHA-512) NIST'in FIPS 180-4 standardında tanımlanır. MD5 ise 1992 tarihli RFC 1321 ile gelir. Bit sayısı büyüdükçe rastgele çakışma olasılığı düşer, ama asıl fark tasarımdadır.

MD5 ve SHA-1 için çakışma üretmek artık bilinen bir iştir. SHA-256 için bilinen pratik bir çakışma saldırısı yoktur. Bu yüzden adli raporda bütünlüğün esas kanıtı SHA-256 olur. Laboratuvar SHA-512 seçtiyse onu da bütün delillerde tutarlı kullanırsın.

Dosya özetini parola özetiyle de karıştırma. Parola özeti tuz ve yavaşlatma kullanır, dosya özeti kullanmaz. İki işin amacı farklı, bu yüzden algoritma seçimi de farklıdır.

Etkinlik 1 / 8

SHA-256 özeti onaltılık yazıldığında kaç karakter olur? ____

Çığ etkisi ve tanıdık değerler

Çığ etkisi (avalanche effect) işin kalbidir. Girdinin tek biti değişince çıktı bitlerinin yaklaşık yarısı değişir. Benzer girdi benzer özet üretmez. Bu yüzden özet karşılaştırması ya tutar ya tutmaz, arası yoktur.

Madalyonun öbür yüzü de önemlidir. Fonksiyon deterministiktir: aynı girdi, hangi makinede ve hangi saatte çalıştırılırsa çalıştırılsın, aynı değeri verir.

Doğrulamanın bütün mantığı bu iki özelliğe dayanır. Aşağıdaki komutları kendi terminalinde de çalıştırabilirsin. printf satır sonu eklemediği için yalnız verdiğin baytları özetler.

$ printf 'altay' | sha256sum
9273141c578a9fe3bdd3f2e3424241860fe777c55e6f7f3d923e914c6c5ec416  -
$ printf 'Altay' | sha256sum
343bf7ea440d51e66f6bcf131b20ed9593b9d822cfc2fb3cf72b274f6d75a2a8  -
$ printf 'altay' | sha256sum
9273141c578a9fe3bdd3f2e3424241860fe777c55e6f7f3d923e914c6c5ec416  -

$ printf '' | sha256sum
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  -
$ printf '' | md5sum
d41d8cd98f00b204e9800998ecf8427e  -
Tek harf farkı bambaşka bir özet verir. Aynı girdi her seferinde aynı özeti verir.

İlk iki komut tek harf farkıyla bambaşka değerler verir. Üçüncü komut ilkini tekrarlar ve aynı değeri üretir. Satır sonundaki tire, girdinin dosyadan değil standart girdiden geldiğini söyler.

Son iki değer ezberlemeye değer. e3b0c442 ile başlayan SHA-256 ve d41d8cd9 ile başlayan MD5 değeri, hiç bayt içermeyen girdinin özetidir. Bir imajın yanında bu değerlerden birini görürsen okunan veri boştur.

Kopyalama hiç başlamamış, yanlış aygıt okunmuş ya da çıktı başka yere gitmiş olabilir. Yani imaj alınamamıştır, özet yalnız boşluğu kanıtlar. echo komutuna da dikkat et. echo varsayılan olarak satır sonu ekler ve özeti değiştirir, -n seçeneği bunu engeller.

Etkinlik 2 / 8

Aşağıdaki komut dizisi ne yazar?

Önce kodu oku, sonra çıktıyı seç.

$ echo -n "rapor" | sha256sum
$ echo -n "Rapor" | sha256sum

Etkinlik 3 / 8

Laboratuvarın doğrulama kaydında imajı hiç alınamamış delilin satırını bul.

Zafiyetli satıra tıkla.

Doğrulama: kaynakta, kopyada, her devirde

Doğrulama üç anda yapılır: imaj alınırken, imaj depoya konurken ve analize başlamadan önce. Her doğrulamayı tarih ve saatle defterine yazarsın. Bir yılı bulan davalarda bu kayıtlar seni korur.

Özeti yalnız imaj alındıktan sonra hesaplamak yetmez. Kaynak diskin özeti de toplama anında alınır, çünkü karşılaştırmanın referansı odur. dcfldd ve ewfacquire bu değeri kopyalama sırasında kaynaktan okur.

İki değer eşleşmezse tartışılan şey kopya değil, okuma sürecidir. Özeti bir dosyaya yazmak işi kolaylaştırır. sha256sum -c bu dosyayı okur, adı geçen dosyayı yeniden özetler ve sonucu tek kelimeyle söyler.

$ sha256sum fin-pc12.dd > fin-pc12.dd.sha256
$ cat fin-pc12.dd.sha256
9f2c1a7b3d5e08c4a6b91d2f7e3c5a80b4d16f29c73e8a05b2c4d9e71f36a8b0  fin-pc12.dd
$ md5sum fin-pc12.dd
3b7e2f91c04a6d58e1b9a7c2f05d8e46  fin-pc12.dd
$ sha256sum -c fin-pc12.dd.sha256
fin-pc12.dd: OK

# Dosya yeniden adlandırılmışsa
$ mv fin-pc12.dd 2026-014-D01.dd
$ sha256sum -c fin-pc12.dd.sha256
sha256sum: fin-pc12.dd: No such file or directory
fin-pc12.dd: FAILED open or read
sha256sum: WARNING: 1 listed file could not be read

# İçerik değişmişse
$ sha256sum -c fin-pc12.dd.sha256
fin-pc12.dd: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match
Özet dosyası ve sha256sum -c ile doğrulama. Aynı komut üç farklı durumda üç farklı sonuç verir.

Çıktıyı satır satır oku. İlk komut özeti ve dosya adını aynı satıra yazar. -c seçeneği bu satırı okur ve dosyayı yeniden özetler. OK, iki değerin bire bir tuttuğunu söyler.

İkinci örnek sık yapılan bir hatadır. Dosyanın adını değiştirirsen özet dosyası eski adı arar ve 'FAILED open or read' der. Bu bir bütünlük hatası değil, ad hatasıdır. Delili yeniden adlandırma; gerekiyorsa özet dosyasını da güncelle ve kayda geçir.

Üçüncü örnekte FAILED yazar ve uyarı satırı tutmayan özet sayısını verir. O zaman panik yapma. Önce okuma hatasını ara: bozuk sektör, gevşek kablo ya da yarım kalan kopyalama en sık nedenlerdir. dcfldd aracının hata kaydı bu ayrımı kolaylaştırır.

PS C:\> Get-FileHash -Algorithm SHA256 E:\eviz\fin-pc12.dd

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          9F2C1A7B3D5E08C4A6B91D2F7E3C5A80B4D16F29C73E8A05B2C4D9E71F36A8B0       E:\eviz\fin-pc12.dd

PS C:\> certutil -hashfile E:\eviz\fin-pc12.dd SHA256
SHA256 hash of E:\eviz\fin-pc12.dd:
9f2c1a7b3d5e08c4a6b91d2f7e3c5a80b4d16f29c73e8a05b2c4d9e71f36a8b0
CertUtil: -hashfile command completed successfully.
Windows'ta aynı imajın iki yerleşik araçla özeti. Değer aynı, yalnız harf büyüklüğü farklı.

Windows tarafında iki yerleşik yol vardır. PowerShell'in Get-FileHash komutu değeri büyük harfle, certutil ise küçük harfle yazar. Harf farkı karşılaştırmayı bozmaz, çünkü onaltılık sayıda A ile a aynı değeri taşır.

PowerShell'in -eq işleci metni harfe duyarsız karşılaştırır ve iki değer için True döner. Karşılaştırmayı gözle değil, araçla yaparsın. 64 karakterlik iki değeri gözle taramak, yer değiştiren iki karakteri kaçırmaya açıktır.

Rapor gövdesinde okunabilirlik için ilk on iki karakteri yazabilirsin. Tam değer ise ekte eksiksiz durur. Doğrulama her zaman tam değerle yapılır.

Etkinlik 4 / 8

fin-pc12.dd dosyasının SHA-256 özetini hesapla ve fin-pc12.dd.sha256 dosyasına yaz.

ogrenci@lab

MD5 ve SHA-1 neden tek başına yetmez

MD5 hâlâ araç çıktılarında görünür, çünkü hızlıdır ve eski raporlarla uyumludur. E01 kabı da MD5 değerini saklar. Ama MD5 çakışma saldırısına açıktır.

Bugün sıradan bir bilgisayar aynı MD5 değerini veren iki farklı dosyayı kısa sürede üretir. RFC 6151 bu yüzden MD5'in çakışma direnci gereken yerlerde artık kabul edilemeyeceğini yazar. Adli işte tehdidi doğru tanımlamak gerekir.

Senin aldığın imajı sonradan aynı MD5'i verecek biçimde değiştirmek ikinci ön görüntü saldırısı ister. Bu saldırı MD5 için bile pratik değildir. Asıl risk, dosyayı hazırlayan tarafın aynı özeti veren iki sürümü baştan üretmesidir. O durumda MD5 hangi sürümün gerçek olduğunu kanıtlayamaz.

SHA-1'in durumu da benzerdir. 2017'de ilk pratik SHA-1 çakışması yayımlandı: görünüşü farklı iki PDF belgesi aynı SHA-1 değerini veriyordu. NIST, SHA-1'i emekliye ayırdığını 2022'de duyurdu ve 31 Aralık 2030'a kadar SHA-2 ya da SHA-3'e geçilmesini istedi.

Windows'un Amcache kaydı gibi bazı artefaktlar dosya özetini hâlâ SHA-1 olarak tutar. Bu değeri rapora yazar ve karşılaştırmada kullanırsın, ama bütünlük kanıtı olarak SHA-256 değerini gösterirsin. Yani SHA-1 değeri eşleştirme için işe yarar, bütünlüğü kanıtlamaya yetmez.

Derinleş:Çakışmaların kısa takvimi

MD5, 1992'de RFC 1321 ile yayımlandı. 2004'te bir araştırma ekibi ilk MD5 çakışmalarını gösterdi. 2008'de başka bir ekip seçilmiş önek çakışmasıyla (chosen-prefix collision) sahte bir sertifika otoritesi sertifikası üretti. Bu teknikte başlangıcı farklı iki belge, sonlarına eklenen hesaplanmış bloklarla aynı özete getirilir.

2012'de bir siber casusluk zararlısı aynı tekniği kullandı. Geçerli görünen bir kod imzalama sertifikası üretti ve bir yazılım güncelleme mekanizmasını istismar etti. SHA-1 için ilk gerçek çakışma Şubat 2017'de geldi. Hesaplama yaklaşık 6.500 işlemci yılı ve 110 GPU yılı sürdü.

2020'de SHA-1 için de seçilmiş önek çakışması pratik hâle geldi. Bu takvim adli laboratuvarlara iki şey öğretti. Algoritmalar yaşlanır, bu yüzden raporda hangi algoritmayı kullandığını açıkça yazarsın. Bugün güvenli sayılan bir değer de yıllar sonra tartışılabilir; iki algoritmayı birlikte kaydetmek bu riske karşı ucuz bir sigortadır.

Etkinlik 5 / 8

Bir imajın MD5 değeri tutuyor ama SHA-256 değeri tutmuyorsa ilk yorumun ne olur?

Etkinlik 6 / 8

Doğru mu, yanlış mı?

İki farklı dosyanın aynı MD5 değerini vermesi pratikte üretilebilir.

Parça özeti, E01 kabı ve laboratuvar düzeni

Büyük imajlarda tek bir özet 'bozuk' der ama nerede bozulduğunu söylemez. Parça özeti bu boşluğu kapatır. dcfldd aracının hashwindow seçeneği imajı sabit boyutlu pencerelere böler ve her pencere için ayrı özet yazar. hashlog seçeneği bu satırları bir dosyaya gönderir.

Pencere küçüldükçe bozulan yer daha kesin bulunur, ama kayıt dosyası da uzar. Aşağıda fin-pc12 diski 1 GiB'lık pencerelerle alınıyor. Aylar sonra laboratuvar deposundaki kopya aynı pencereyle yeniden özetleniyor ve iki kayıt karşılaştırılıyor.

$ sudo dcfldd if=/dev/sdb of=/eviz/fin-pc12.dd bs=4K hash=sha256 hashwindow=1G hashlog=/eviz/fin-pc12.hashlog
$ head -2 /eviz/fin-pc12.hashlog
0 - 1073741824: 84ac4e870447e8d57e996d57ee17c1caba3a2d51140feb0ab71be7e5f298b439
1073741824 - 2147483648: 45fb31a514c4fc85a61796b7d7f2b1d03e02a0525c51b66dfb5d98136da498a6
$ tail -1 /eviz/fin-pc12.hashlog
Total (sha256): 9f2c1a7b3d5e08c4a6b91d2f7e3c5a80b4d16f29c73e8a05b2c4d9e71f36a8b0

# Aylar sonra: depodaki kopyayı aynı pencereyle yeniden özetle
$ dcfldd if=/lab/2026-014/fin-pc12.dd of=/dev/null bs=4K hash=sha256 hashwindow=1G hashlog=kopya.hashlog
$ diff /eviz/fin-pc12.hashlog kopya.hashlog
213c213
< 227633266688 - 228707008512: 53b781e2522d43d9d8416f60963eb5e951c364151769149e180d446e501f76de
---
> 227633266688 - 228707008512: 0fadb13ccbb24b8e6a659baeedbae6d0bb002c806ff691da367f969626f13b5f
467c467
< Total (sha256): 9f2c1a7b3d5e08c4a6b91d2f7e3c5a80b4d16f29c73e8a05b2c4d9e71f36a8b0
---
> Total (sha256): d2505e7b28c1f2e8b7dbc1a72d75be6a5d26229e61521952d4456e8d6c6a17cb
Pencere özetleri bozulmanın yerini gösterir. Yalnız 213. satır ve toplam değişmiş.

Satırları oku. Her satır bir pencerenin başlangıç ve bitiş baytını ve o pencerenin SHA-256 değerini verir. Son satırdaki Total bütün imajın özetidir. İkinci dcfldd komutu çıktıyı /dev/null aygıtına atar, yani yalnız okur ve özetler.

diff iki kayıtta yalnız iki satırı farklı bulur: 213. satır ve toplam. Yani bozulma 212. gigabayttan başlayan tek bir penceredeydi, geri kalan 465 pencere sağlam.

Tek bir toplam özetle bu ayrımı yapamazdın. E01 kabı (Expert Witness Format) aynı fikri kendi içinde uygular. Veri 32 KiB'lık parçalar hâlinde saklanır ve her parçanın kendi sağlama değeri vardır. Kabın içinde bütün verinin MD5 değeri, istenirse SHA-1 değeri de durur.

Vaka numarası, delil numarası ve inceleyen gibi üstveri de kaba gömülür. ewfinfo bu bilgileri okur. ewfverify veriyi baştan okur, özeti yeniden hesaplar ve saklanan değerle karşılaştırır.

$ ewfinfo fin-pc12.E01
Acquiry information
    Case number:        2026-014
    Description:        fin-pc12 SATA disk, S/N WX41A8YH7712
    Examiner name:      E. Yildiz
    Evidence number:    2026-014-D01
    Acquisition date:   Mon Sep 14 15:01:26 2026
Digest hash information
    MD5:                3b7e2f91c04a6d58e1b9a7c2f05d8e46
    SHA1:               6fdb9530cf645cd3491bf13be4b5c2d248b0897f

$ ewfverify -d sha256 fin-pc12.E01
MD5 hash stored in file:            3b7e2f91c04a6d58e1b9a7c2f05d8e46
MD5 hash calculated over data:      3b7e2f91c04a6d58e1b9a7c2f05d8e46
SHA256 hash stored in file:         N/A
SHA256 hash calculated over data:   9f2c1a7b3d5e08c4a6b91d2f7e3c5a80b4d16f29c73e8a05b2c4d9e71f36a8b0

ewfverify: SUCCESS
ewfinfo gömülü üstveriyi, ewfverify yeniden hesaplanan özeti gösterir. Çıktılar kısaltıldı.

ewfverify çıktısında satır çiftlerini karşılaştır. Saklanan MD5 ile hesaplanan MD5 aynıysa kap sağlamdır ve sonuç SUCCESS olur. SHA-256 için saklanan değer N/A görünür, çünkü kap bu değeri saklamamıştır. Hesaplanan SHA-256 ise ham imajın değeriyle aynıdır.

Kap sıkıştırılmış olsa da içindeki veri aynıdır, bu yüzden özet de aynı çıkar. MD5 değeri de ham imajın md5sum çıktısıyla aynıdır. Bu eşleşme, E01 kabı ile ham imajın aynı diskten geldiğini gösteren en güçlü kanıttır.

Laboratuvar düzeni bu kuralları alışkanlığa çevirir. Her delil kendi numarasıyla açılan klasörde durur. İmaj, özet dosyası, araç kaydı ve notlar aynı yerde toplanır.

Delil dosyaları salt okunur işaretlenir, böylece yanlışlıkla üzerine yazılmaz. Araç adı ve sürümü her kayda yazılır, çünkü aynı komut farklı sürümde farklı çıktı biçimi verebilir. Doğrulamayı iki kişi yapar: biri komutu çalıştırır, öteki değeri karşılaştırır.

Son olarak küçük bir betik her gece delil klasörünü sha256sum -c ile denetler ve fark raporu gönderir. Elle denetim unutulur, betik unutmaz.

Etkinlik 7 / 8

Komut parçasını ya da aracı parça özeti ve E01 işindeki göreviyle eşleştir.

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

Özetin mühür dışında da işleri var. NIST'in NSRL projesi bilinen yazılımların dosya özetlerini yayımlar. Bu listeyle işletim sistemi ve yaygın uygulama dosyalarını incelemeden elersin.

Sleuth Kit'in hfind aracı böyle bir listede hızlı arama yapar. Dikkat: NSRL eşleşmesi 'bilinen' demektir, 'zararsız' değil; listede saldırı araçları da vardır. Ters yönde, bulduğun dosyanın özetini bilinen zararlı listeleriyle karşılaştırırsın.

MITRE D3FEND bu savunmaya File Hashing (D3-FH) adını verir. Kriptografik özet benzer dosyaları bulamaz, çünkü tek bayt farkta tamamen değişir. Bu iş için ssdeep ve TLSH gibi bulanık özet (fuzzy hash) araçları kullanılır. RFC 3161 zaman damgası ise bir özetin belirli bir anda var olduğunu güvenilir bir üçüncü tarafın imzasıyla kanıtlar.

Etkinlik 8 / 8

Doğru mu, yanlış mı?

NSRL listesinde özeti bulunan bir dosya zararsız sayılır.

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