SSDEEP

Bir Dosya Nasıl Tanınır?

What is the File Identify?

28.01.2013

Mehmet Keçeci

ssdeep

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:

  1. Dosyanın uzantısı/extention (.exe, .doc, .xml, ppsx, vs.)

  2. Dosyanın hash değerleri (md5, sha-1, crc32, elf, vs.)

  3. Dosyanın Bulanık Adreslemesi/Fuzzy Hashing (SSDEEP)

  4. TrID, TrIDScan (Şu anda 5007 dosya tanımlanmış)

  5. Dosyanın Exif Araç Bilgileri (Exif Tool)

  6. Dosya Tanımlayıcıları/ File Identifier, Verifier

  7. 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.

php.ini

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.

ssdeep

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 *.webp 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: .webp
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:

  1. http://www.mehmetkececi.com/index.php?option=com_content&view=article&id=300:what-is-the-md5&catid=78:mehmet-kececi&Itemid=1260
  2. http://php.net/manual/en/book.ssdeep.php
  3. http://www.sciencedirect.com/science/article/pii/S1742287606000764
  4. http://dfrws.org/2006/proceedings/12-Kornblum.pdf
  5. http://www.samba.org/ftp/unpacked/junkcode/spamsum/README
  6. http://ssdeep.sourceforge.net
  7. http://php.net/manual/en/function.ssdeep-fuzzy-compare.php
  8. http://php.net/manual/en/function.ssdeep-fuzzy-hash.php
  9. http://pecl.php.net
  10. http://php.net/manual/en/install.pecl.php
  11. http://pecl.php.net/package/ssdeep
  12. http://treffynnon.github.com/php_ssdeep
  13. http://mark0.net/soft-trid-e.html
  14. http://owl.phy.queensu.ca/~phil/exiftool
  15. http://www.mehmetkececi.com/index.php?option=com_content&view=article&id=302:blackhole-exploit-kit&catid=78:mehmet-kececi&Itemid=1263
  16. http://www.mehmetkececi.com/index.php?option=com_content&view=article&id=289&Itemid=1170
  17. http://www.mehmetkececi.com/index.php?option=com_content&view=article&id=297&Itemid=1210
  18. http://www.mehmetkececi.com/index.php?option=com_wrapper&view=wrapper&Itemid=1256
  19. http://www.mehmetkececi.com/index.php?option=com_wrapper&view=wrapper&Itemid=1257
  20. http://www.mehmetkececi.com/index.php?option=com_wrapper&view=wrapper&Itemid=1258

MD5 Nedir?

What is the MD5?

Mehmet Keçeci

13.01.2013

Niçin verilerimizin yanında örneğin MD5 (Message-Digest Algorithm: İleti Derleme Algoritması) hash’ını veririz ve bunu nasıl kontrol ederiz?

 

Verilerimizin bizden izinsiz olarak başkaları değiştirebilir, içerisine virüs, truva atı gibi zararlı yazılımlar ekleyebilirler. Bu gibi istismarları engellemek amacı ile dosyalarımızın yanında MD5 hash’ını yayınlayarak hem bize ait olduğunu gösteririz hem de kullanıcılar dosyanın başkaları tarafından değişmediğini anlamış olurlar.

Basit bir örnek yapalım. Bu makaleyi yazarken MS Word 2013 versiyonunda kaydettiğim dosya MD5 Nedir.docx ile yine aynı dakikada kaydettiğim MD5 Nedir2.docx dosyası arasında sadece bir boşluk, space fark var diğerlerinde ise harf sayıları aynı sadece a yerine e yazılmış 4.sünde ise boşluk silinerek eski haline geri döndürülmüştür.

  1. MD5 Nedir.docx   (14,6 KB = 14959 Byte ≈ 15KB) MD5=c989444a98691c20a6e9390430a4db09
  2. MD5 Nedir2.docx (14,7 KB = 15080 Byte ≈ 15KB) MD5=458d5a71beee04e714fbad60f434b4d5
  3. MD5 Nedir3.docx (14,7 KB = 15089 Byte ≈ 15KB) MD5=248a578bb699c8d2ffd06a63040d8819
  4. MD5 Nedir4.docx (14,7 KB = 15073 Byte ≈ 15KB) MD5=eb1fb04ada0fb5a4bbfd374cc59bfe28

fakat bunu herhangi bir MD5 programları [1,2] ile kontrol ettiğimizde dosyaların birbirinden faklı olduğunu görmekteyiz.

Sitede verilen değer ile bu MD5lerin uyuşması gerekir (hash olarak veya .md5 uzantılı dosya olarak verebilirler) eğer uyuşmuyor ise güvenilmez veya indirme sırasında program zarar görmüş olduklarından bu programları bilgisayarlarınıza kurmayınız. Fakat programı değiştirenler bu hash’ı da değiştireceklerinden bizim için sadece bu güven vermez. Fakat inen programın sağlamlığı hakkında bilgi verir. Program indireceğiniz zaman sadece güvenilir veya yayıncı sitesinden indiriniz.

Genelde algoritma hesaplama yöntemleri:

  1. Hash
  2. Checksum
  3. Hmac

Kullanılan Hash algoritma örnekleri:

  1. md2
  2. md4
  3. md5 (128 bit) (Message-Digest Algorithm, Ron Rivest, RFC-Request for Comments 1321, MIT Laboratory for Computer Science ve RSA Data Security, Inc., 1992 )
  4. md6
  5. sha-1
  6. sha-2 (256 bit)
  7. sha-2 (384 bit)
  8. sha-2 (512 bit)
  9. sha-3/keccak
  10. ripemd-128
  11. ripemd-160
  12. ripemd-256
  13. ripemd-320
  14. panama
  15. tiger
  16. blake 256, 512 bit
  17. ecoh
  18. fsb
  19. gost
  20. grostl
  21. has
  22. haval
  23. jh
  24. radiogatun
  25. skein
  26. siphash
  27. snefru
  28. spectral hash
  29. swifft
  30. whirlpool

Kullanılan Checksum algoritma örnekleri:

  1. crc-1
  2. crc-4
  3. crc-5
  4. crc-6
  5. crc-7
  6. crc-8
  7. crc-10
  8. crc-11
  9. crc-12
  10. crc-15
  11. crc-24
  12. crc-30
  13. crc16 (Cyclical Redundancy Codes)
  14. crc16c (crc-ccitt)
  15. crc32
  16. crc-40
  17. crc-64
  18. adler32
  19. bsd
  20. syvs
  21. checksum
  22. sum
  23. sum-8, 16, 24,32 bit
  24. fletcher4, 8, 16, 32 bit
  25. xor8
  26. luhn
  27. verhoeff
  28. damm

Kullanılan HMAC algoritma örnekleri: (Verinin dışında birde metin veya hex olarak anahtar değer girilir.)

  1. hmac-md4
  2. hmac-md5
  3. hmac-sha-1
  4. hmac-sha-2 (256 bit)
  5. hmac-sha-2 (384 bit)
  6. hmac-sha-2 (512 bit)
  7. hmac-ripemd-128
  8. hmac-ripemd-160
  9. hmac-ripemd-256
  10. hmac-ripemd-320
  11. hmac-panama
  12. hmac-tiger

Destekledikleri veri formatları:

  1. Dosya: Binary/ikili mod (müzik/music, audio, ses/sound, video, resim/image, ikon/icon, metin/text, sıkıştırma/compression, vs., ile uzantılar/extensions: .mp3, .wav, .avi, .mpg, .midi, .mov, .dvd, .ram, .zip, .rar, .ico, .webp, .pif, .pic, .tif, .tiff, .txt, .doc, .docx, .pdf, .wps, .dat, .dll, .hex, .bin, .iso, .cpp, .dss, .par, .pps, .cue, .ram, .md5, .sfv vs.) Genelde 15 GB’a kadar sorunsuz çalışabilirler.

  2. Metin (Herhangi bir metin, karakter, çift veya tek girilebilir)

  3. Hex (0-9 ve a-f arasında çift olarak girilmesi gerekir)

Bunların dışında kullanım tarzları ile birlikte hash algoritmaları ve kullanan yazılımlar:

  1. MD5

  2. md5($pass.$salt)

  3. md5($salt.$pass)

  4. md5(unicode($pass).$salt)

  5. md5($salt.unicode($pass))

  6. SHA1

  7. sha1($pass.$salt)

  8. sha1($salt.$pass)

  9. sha1(unicode($pass).$salt)

  10. sha1($salt.unicode($pass))

  11. MySQL

  12. phpass, MD5(WordPress), MD5(phpBB3)

  13. md5crypt, MD5(Unix), FreeBSD MD5, Cisco-IOS MD5

  14. MD4

  15. NTLM

  16. Domain Cached Credentials, mscash

  17. SHA256

  18. sha256($pass.$salt)

  19. sha256($salt.$pass)

  20. descrypt, DES(Unix), Traditional DES

  21. md5apr1, MD5(APR), Apache MD5

  22. SHA512

  23. sha512($pass.$salt)

  24. sha512($salt.$pass)

  25. sha512crypt, SHA512(Unix)

  26. Domain Cached Credentials2, mscash2

  27. Cisco-PIX MD5

  28. WPA/WPA2

  29. Double MD5

  30. LM

  31. Oracle 7-10g, DES(Oracle)

  32. bcrypt, Blowfish(OpenBSD)

  33. SHA-3(Keccak)

  34. Joomla

  35. osCommerce, xt:Commerce

  36. nsldap, SHA-1(Base64), Netscape LDAP SHA

  37. nsldaps, SSHA-1(Base64), Netscape LDAP SSHA

  38. Oracle 11g

  39. SMF > v1.1

  40. OSX v10.4, v10.5, v10.6

  41. MSSQL(2000)

  42. MSSQL(2005)

  43. EPiServer 6.x

  44. OSX v10.7

  45. vBulletin < v3.8.5

  46. vBulletin > v3.8.5

  47. IPB2+, MyBB1.2+

  48. eDonkey

  49. eMule

  50. 32 char HEX: MD5, MD4, NTLM, LM, md5(md5($pass)), md5(md5(md5($pass))), md5(sha1($pass))

  51. 40 char HEX: SHA1, MySQL, sha1(md5($pass)), sha1(sha1($pass))

  52. RSA (1024-4096 bit)

  53. Triple DES:Triple Data Encryption Algorithm (TDEA, Triple DEA 56, 112, 168 bit)

  54. wpa-psk

  55. Blowfish Encryption Algorithm

  56. LM password

  57. NT password

  58. LM Hash

  59. NT Hash

  60. NTLM (Windows)

Saldırı metodları ise genelde:

  1. Straight/Doğru

  2. Combination/Kombinasyon

  3. Toggle-Case/Geçişli Durum

  4. Brute-Force/Kaba Kuvvet

  5. Permutation/Permitasyon

  6. Table-Lookup/Tablo Arama

  7. Rainbow Table/Gökkuşağı Tablosu

  8. Dictionary/Sözlük

Şifre ve kriptoları kırmalarının en önemli yolu daha önce kriptoları alınmış ve bunları bir veri tabanı gibi veya bir sözlük gibi kullanmalarıdır. Bu yüzden güvenli bir şifrenin en az 9 karakterden ve farklı kombinasyonları içermesi gerekmektedir. PHP ile bir md5 komutunu

string md5 ( string $str [, bool $raw_output = false ] ) [3], string sha1 ( string $str [, bool $raw_output = false ] ) [4], int crc32 ( string $str ) [5] ve bu komutla yapılan md5, sha-1 ve crc32 hash örnekleri [6, 7, 8]. Aynı şekilde bu hashlar C++, Perl, VBasic gibi programlarda da yazılmaktadırlar.

2004 yılında MD5 ve SHA-1 hash’ın benzer açıklarının olduğu gözlenmeye başlamıştır. MD5 için aynı hash’ı verme olasılığı 264 dür. Fakat sonuçlar 242 olduğunu göstermiştir. Bu yüzden birçok hash kullanımı bunların yanına salt veya hmac eklemişlerdir. Günümüzde en güvenilir hash SHA-2 512 Bit veya yeni gündemde olan SHA-3 olacaktır. Ayrıca RSA’nın 4096 bitlik kriptosu en güvenilir kriptolamalardan biridir. Örnek verecek olursak aynı gün doğanların doğum gününü şifre olarak kullandıklarını düşünürsek bunların hepsi aynı hash’ı vereceklerdir. Buna doğum günü saldırısı, akını (birtday attack) denmektedir. Fakat bu bir güvenlik açığıdır. Bu açığı gidermek için SALT denen ve rastgele bir sayı üreten bir kombinasyonuda hash fonksiyonuna eklediğimizde aynıgün doğanların aynı hash’ı verme ihtimali oldukça azalacaktır. Bunun yanında bir metin iki kere şifrelenerek çözümü daha da zorlaştırılabilir fakat bu doğrusal bir zorlaştırma olmayacaktır. Bu tür zorlaştırmalar için Ortada Buluşma Akını (Meet-in-the-Middle attack (MITM)) geliştirilmiştir. Aynı zamanda Gökkuşağı Tablosu Atağı (rainbow table attack) yöntemini de kullanmaktadırlar. Yine bir süper bilgisayarda MD5 hash’ını 24 günde çözülebileceği hesaplanmıştır [9].

hex bit hash alanı

büyüklüğü
(2bit)

en az kaçınılmaz rastgele hash çakışması/collision = p
p = 10−18 p = 10−6 p = 0.1% p = 75%
8 32 4.3 × 109 2 93 2.9 × 103 1.1 × 105
16 64 1.8 × 1019 6.1 6.1 × 106 1.9 × 108 7.2 × 109
32 128 3.4 × 1038 2.6 × 1010 2.6 × 1016 8.3 × 1017 3.1 × 1019
64 256 1.2 × 1077 4.8 × 1029 4.8 × 1035 1.5 × 1037 5.7 × 1038
96 384 3.9 × 10115 8.9 × 1048 8.9 × 1054 2.8 × 1056 1.0 × 1058
128 512 1.3 × 10154 1.6 × 1068 1.6 × 1074 5.2 × 1075 1.9 × 1077

Kendinizin ne kadar bir risk aldığınızı düşünüyorsanız bu testi yapabilirsiniz [10]. Her geçen gün şifreleme teknikleri gelişirken aynı zamanda da birçok insanı, kullanıcıyı kandırma veya bu teknikleri kırma metotları ve cihazları da gelişmektedir. Kendinizi daha güvende hissetmeniz ve daha güvenli bir dünyada yaşamanız dilek, temenni ve dualarımla.

Kaynaklar/References:

  1. http://www.slavasoft.com
  2. http://www.winmd5.com
  3. http://www.php.net/manual/en/function.md5.php
  4. http://php.net/manual/en/function.sha1.php
  5. http://php.net/manual/en/function.crc32.php
  6. MD5 Hash: http://www.mehmetkececi.com/index.php?option=com_wrapper&view=wrapper&Itemid=1256
  7. SHA-1 Hash: http://www.mehmetkececi.com/index.php?option=com_wrapper&view=wrapper&Itemid=1257
  8. CRC32 Checksum: http://www.mehmetkececi.com/index.php?option=com_wrapper&view=wrapper&Itemid=1258
  9. http://people.scs.carleton.ca/~paulv/papers/acmccs94.pdf
  10. http://www.emc.com/microsites/fraudgame/flash.htm

Bolu Postasındaki Yazı: 13.01.2013 02:59

MD5