SSDEEP
Bir Dosya Nasıl
Tanınır?
What is the File Identify?
27.01.2013
Mehmet Keçeci
Bu konu bir öneki MD5 Nedir? [1] makalemizin devamı olmasa da bir dosyayı tanımlamada benzer özelliklere sahiptir. Context Triggered Piecewise Hashing/CTPH (Bağlam Tetiklemeli Parçalı Adresleme) veya Fuzzy Hashing (Bulanık Adresleme) [2] 2006 yılında Andrews Trigdell [3, 4] tarafından ortaya konularak her hangi bir kötü yazılım veya e-mailleri tanıyarak bunları engelleyebilme yeteneğini ortaya koymuş ve SpamSum e-mail detektörünü geliştirmiştir [5].
“ssdeep is a program for computing context triggered piecewise hashes (CTPH). Also called fuzzy hashes, CTPH can match inputs that have homologies. Such inputs have sequences of identical bytes in the same order, although bytes in between these sequences may be different in both content and length.” Jesse Kornblum
Hashing: Belirli algoritmalara dayalı yapılan adresleme.
Bir kriptografik adresleme fonksiyonu (cryptographic hash function) kaynak kodumuzda oluşabilecek en küçük değişikliklerin sonucu olarak çıktı adreslemelerimizinde değişmesidir. Bunu MD5 Nedir? makalemizde örnek vererek açıklamıştık.
Bir dosyayı, programı vs. tanımlamak için belirli ölçülerimiz vardır?
Dosya Tanımlama Ölçülerimiz:
- Dosyanın uzantısı/extention (.exe, .doc, .xml, ppsx, vs.)
- Dosyanın hash değerleri (md5, sha-1, crc32, elf, vs.)
- Dosyanın Bulanık Adreslemesi/FuzzyHashing (SSDEEP)
- TrID, TrIDScan (Şu anda 5007dosya tanımlanmış)
- Dosyanın Exif Araç Bilgileri (Exif Tool)
- Dosya Tanımlayıcıları/ File Identifier, Verifier
- Dosya hakkındaki genel bilgiler (boyut/size, atributes, DOS adı/name, oluşturulma tarihi/created, en son değişiklik tarihi/last modified, en son açılma tarihi/last access, kaç kere değiştirildiği, yazıcıya gönderilme tarihi, Hash değerleri, ilk tespit tarihi, yazarı vs.)
- …
Tamamen iki farklı dosya için normal hash karşılaştırmamız doğru sonuç veriyor.
Fakat içinde küçük bir değişiklik yaptığımızda bunları tamamen farklı iki dosya olarak görmektedir. Fakat bizim istediğimiz bu değildir. Aynı dosyanın değiştirildiğini ve bunun ne kadarının değiştirildiğini öğrenmek istiyoruz. Hatta ve hatta nelerin değiştirildiğini dahi bulmak istiyoruz.
İşte bu problemin çözümü için SSDEEP/ Bulanık Hash [6] hesaplaması geliştirilmiştir. Bu dosyanın içini farklı bölümlerini algroitmalayarak içinde oluşan değişikliklerini ve bu değişikliklerin nerelerde hangi oranlarda olduğunu bulmaya yarayan bir algoritmadır. PHP (Personal Home Page) kodu içinde bu iki dosyanın karşılaştırılma kodu int ssdeep_fuzzy_compare ( string $signature1
, string $signature2
) [7] veya bir dosyanın ssdeep kodunu yine PHP içerisinde hesaplanması string ssdeep_fuzzy_hash ( string $to_hash
) [8] kodlarımız sayesinde yapılmaktadır. Sakın PHP bunu doğrudan yaptığını zannetmeyin. Bu kodu işletebilmesi için genelde C, C++, Pyhton gibi programlama dillerinde bunların algoritmaları çıkarıldıktan sonra Windows’ta .dll, Unix, Linux’te .so uzantılı dosyalar içinde derlenmiş ve kullanıma hazır hale getirilmişlerdir. Fuzzy komutu için php.ini dosyasında herhangi bir düzenleme gerekmemektedir. Fakat PECL’in kurulması gerekir [9, 10, 11]. Bunun API’si için [12]’e bakınız.
Fuzzy için dil kodları dosyası
Her iki fuzzy.dll ve fuzzy1.dll’yi ssdeep’te karşılaştırdığımızda %100 aynı olduğunu gördük.
Hiç bir adresleme kullanmadan bir karşılaştırma yaptığımızda çok az değişen dosyaları aynı zannedebilirdik.
Her iki fuzzy.dll ve fuzzy3.dll’yi ssdeep’te karşılaştırdığımızda %100 aynı olduğunu gördük.
ssdeep -h
ssdeep version 2.9 by Jesse Kornblum
Copyright (C) 2012 Kyrus
Usage: ssdeep [-m file] [-k file] [-dpgvrsblcxa] [-t val] [-h|-V] [FILES]
-m – Match FILES against known hashes in file
-k – Match signatures in FILES against signatures in file
-d – Directory mode, compare all files in a directory
-p – Pretty matching mode. Similar to -d but includes all matches
-g – Cluster matches together
-v – Verbose mode. Displays filename as its being processed
-r – Recursive mode
-s – Silent mode; all errors are supressed
-b – Uses only the bare name of files; all path information omitted
-l – Uses relative paths for filenames
-c – Prints output in CSV format
-x – Compare FILES as signature files
-a – Display all matches, regardless of score
-t – Only displays matches above the given threshold
-h – Display this help message
-V – Display version number and exit
Bir *.jpg dosyasını tanıyalım:
SHA-1: 5816e6f2f3ddaa599751c59e00373cd90b4b6f4f
SHA256: 1aa35f4ca2f53c963d930573cf771f4e216f3e5abbdc06f9e07c0ca2666fefd0
MD5: aec6cbbeab6e7a59ed598d3fb4928a64
CRC32: 036d7e26
ssdeep:
ssdeep,1.1–blocksize:hash:hash,filename
24:fquKM0XxDuLHeOWXG4nGIgb6p6NA7MzuVVgxyIUmyAqESpEa4UOf7Qi5Tq3AVRM9:f1ruEjNtA7M6fKy/7X4Hf7Qi9owZLS
TrID [13]
JFIF JPEG Bitmap (50.0%)
JPEG Bitmap (37.4%)
MP3 audio (12.4%)
ExifTool [14]
MIMEType: image/jpeg
YResolution: 72
BitsPerSample/Bit depth : 8 bits
ImageSize: 90×109
FileType/Format: JPEG
ResolutionUnit: inches
ColorComponents: 1
JFIFVersion: 1.01
XResolution: 72
Image Width: 90 pixels
EncodingProcess: Baseline DCT, Huffman coding
Image Height: 109 pixels
Compression mode : Lossy
Dosya Boyutu: /File size : 1.41 KB/1445 Byte
Tag: jpeg
File Extension: .jpg
Developer: JPEG
Hex: FF D8 FF
ExifTool’da komut satırı ve çıktısı:
X:\>exiftool.exe md5.zip
ExifTool Version Number : 9.15
File Name : md5.zip
Directory : .
File Size : 25 kB
File Modification Date/Time : 2010:02:17 10:25:42+02:00
File Access Date/Time : 2013:01:28 22:25:27+02:00
File Creation Date/Time : 2013:01:28 22:25:27+02:00
File Permissions : rw-rw-rw-
File Type : ZIP
MIME Type : application/zip
Zip Required Version : 20
Zip Bit Flag : 0
Zip Compression : Deflated
Zip Modify Date : 2007:02:18 13:14:20
Zip CRC : 0x31a11c83
Zip Compressed Size : 23750
Zip Uncompressed Size : 101716
Zip File Name : md5.exe
Tanım/Description:
JPG uzantılı dosyalar kayıplı sıkıştırma (lossy compression) metodu kullanırlar. Fakat kullanım alanları çok geniş ve yaygındır. Özellikle internet sayfalarının hızlı açılması için kullanımı yaygındır. Diğer kullanım alanları kaliteye gerek
duyulmadığı veya alandan tasarruf amaçlı kullanılırlar.
Küçük bir değişiklik yaptığımızda sadece bir ssdeep adreslemesinin değiştiğini görmekteyiz. Buda bize değişim oranını vermektedir. Yani bu dosya en az %99 oranında benzer ama %100 olmadığından orijinal dosya değildir.
SHA-1: 15fff08ec250b083decbe6dd17e623e87070add5
SHA256:
3f0e5d08f02dd3b35c8c27928cf96eff93360d621cee5c01018ed388578f0b55
MD5: a06fc5d6580cef1036fb8ed6fe635a47
CRC32: ff86d9cf bu adresleme tamamen değiştiğinden değişme yeri ve oranını göremeyiz. Fakat ssdeep‘te bunu görebiliriz.
Dosya Boyutu: 1444 Byte (yalnızca bir karakter silinerek 1 Byte düşürülmüştür.)
ssdeep:
24:fquKM0XxDuLHeOWXG4nGIgb6p6NA7MzuVVgxyIUmyAqESpEa4UOf7Qi5TqJAVRM9:f1ruEjNtA7M6fKy/7X4Hf7Qi9EwZLS
Boyut:
1444 Byte
Oluşturulma/Created: 28 Ocak 2013
Son Düzenleme/Modified: 28 Ocak 2013
Son Ulaşım:/Accessed: 28 Ocak 2013
o–>E‘ye dönüşmüştür. Yapılan değişiklik çok azdır. Fakat artık aynı dosya değildir. Ayrıca bu tür konuların önemi için [15, 16, 17, 18, 19, 20]’e kaynaklarına bakabilirsiniz.
Kaynaklar/References: