TLSH adalah perpustakaan pencocokan fuzzy. Diberikan aliran byte dengan panjang minimum 50 byte, TLSH menghasilkan nilai hash yang dapat digunakan untuk perbandingan kesamaan. Objek serupa akan memiliki nilai hash serupa yang memungkinkan pendeteksian objek serupa dengan membandingkan nilai hashnya. Perhatikan bahwa aliran byte harus memiliki kompleksitas yang cukup. Misalnya, aliran byte dengan byte yang identik tidak akan menghasilkan nilai hash.
08/10/2024
Rilis versi 4.10.x - alat pengelompokan Python.
Lihat direktori tlshCluster.
Saya akan mencoba menjadikan 4.12.0 versi rilis dan membangun pustaka Python py-tlsh dari 4.12.0 4.12.0 mencakup: Gabungkan permintaan tarik #137 - ini memperbaiki kebocoran memori di py-tlsh Gabungkan permintaan tarik #134 - ini meningkatkan ifdef WINDOWS menjadi lebih portabel 4.12.1 mencakup: Gabungkan permintaan tarik #146 - Hapus panggilan ke sprintf() untuk menghindari peringatan Gabungkan permintaan tarik #141 - py_ext: gunakan PyVarObject_HEAD alih-alih PyObject_HEAD_INIT Gabungkan permintaan tarik #138 - Bangun: Tetapkan opsi default hanya pada "default" Gabungkan permintaan tarik #136 - Perbaikan Bug+Portabilitas: Tingkatkan portabilitas dengan pembagian integral
2020
diadopsi oleh Virus Total
diadopsi oleh Malware Bazaar
Kami telah menambahkan pengidentifikasi versi ("T1") ke awal intisari. Silakan gunakan versi TLSH yang memiliki header T1. Kode ini kompatibel, masih dapat membaca dan menafsirkan 70 string karakter hex sebagai intisari TLSH. Dan kumpulan data dapat mencakup campuran intisari lama dan baru. Jika Anda memerlukan intisari TLSH gaya lama untuk dihasilkan, gunakan opsi baris perintah '-lama'
Terima kasih kepada Chun Cheng, seorang insinyur yang rendah hati dan berbakat.
Program dalam mode default memerlukan aliran byte input dengan panjang minimum 50 byte (dan jumlah keacakan minimum - lihat catatan dalam ekstensi Python di bawah).
Untuk konsistensi dengan versi lama, ada opsi -konservatif yang menerapkan batas 256 byte. Lihat catatan untuk TLSH versi 3.17.0
Hash yang dihitung adalah 35 byte data (output sebagai 'T1' diikuti 70 karakter heksadesimal. Panjang total 72 karakter). 'T1' telah ditambahkan sebagai nomor versi untuk hash - sehingga kami dapat mengadaptasi algoritme dan tetap mempertahankan kompatibilitas ke belakang. Untuk mendapatkan hash hex 70 gaya lama, gunakan opsi baris perintah -old.
Byte 3,4,5 digunakan untuk menangkap informasi tentang file secara keseluruhan (panjang, ...), sedangkan 32 byte terakhir digunakan untuk menangkap informasi tentang bagian tambahan dari file. (Perhatikan bahwa panjang hash dapat ditingkatkan dengan mengubah parameter build yang dijelaskan di bawah dalam CMakeLists.txt, yang akan meningkatkan informasi yang disimpan dalam hash. Untuk beberapa aplikasi, hal ini mungkin meningkatkan akurasi dalam memprediksi kesamaan antar file.)
Membangun TLSH (lihat di bawah) akan membuat perpustakaan statis di direktori lib
, dan tlsh
dapat dieksekusi (tautan simbolis ke tlsh_unittest
). Tautan 'tlsh' ke perpustakaan statis, di direktori bin
. Pustaka memiliki fungsi untuk menghasilkan nilai hash dari file tertentu, dan untuk menghitung kesamaan antara dua nilai hash.
tlsh
adalah utilitas untuk menghasilkan nilai hash TLSH dan membandingkan nilai hash TLSH untuk menentukan kesamaan. Jalankan tanpa parameter untuk penggunaan detail.
Port JavaScript tersedia di direktori js_ext
.
Port Java tersedia di direktori java
.
Kami mencantumkan port ini hanya untuk referensi. Kami belum memeriksa kode di repositori ini, dan kami belum memeriksa apakah hasilnya identik dengan TLSH di sini. Kami juga meminta agar setiap port menyertakan file LICENSE dan NOTICE.txt persis seperti yang muncul di repositori ini.
Port Java lain tersedia di sini.
Port Java lain tersedia di sini.
Port Golang tersedia di sini.
Port Ruby tersedia di sini
Unduh TLSH sebagai berikut:
wget https://github.com/trendmicro/tlsh/archive/master.zip -O master.zip unzip master.zip cd tlsh-master
atau
git clone git://github.com/trendmicro/tlsh.git cd tlsh git checkout master
Edit CMakeLists.txt untuk membuat TLSH dengan opsi berbeda.
TLSH_BUCKETS: menentukan penggunaan 128 atau 256 bucket, gunakan 128 bucket default kecuali Anda ahli dan tahu bahwa Anda memerlukan 256 bucket
TLSH_CHECKSUM_1B: menentukan panjang checksum, lebih panjang berarti lebih sedikit tabrakan gunakan default 1 byte kecuali Anda ahli dan tahu Anda memerlukan checksum yang lebih besar
Menjalankan:
make.sh
Catatan: Membangun TLSH di Linux bergantung pada cmake
untuk membuat Makefile
dan kemudian make
proyek, sehingga build akan gagal jika cmake
tidak diinstal. Untuk menginstal kompiler cmake/gcc di CentOs atau Amazon Linux: $ sudo yum install cmake $ sudo yum install gcc-c++
Ditambahkan pada Maret 2020. Lihat instruksi di README.mingw
Gunakan file solusi tlsh khusus versi (tlsh.VC2005.sln, tlsh.VC2008.sln, ...) di bawah direktori Windows.
Lihat tlsh.h untuk antarmuka perpustakaan tlsh dan tlsh_unittest.cpp dan simple_unittest.cpp di bawah direktori test
untuk contoh kode.
Kami baru-baru ini membuat paket Python di PyPi: https://pypi.org/project/py-tlsh/
Py-tlsh menggantikan paket python-tlsh. Untuk detailnya lihat edisi 94
Untuk menginstal paket ini
$ pip install py-tlsh
Jika Anda perlu membuat paket Python Anda sendiri, ada README.python dengan catatan tentang versi python
(1) compile the C++ code $./make.sh (2) build the python version $ cd py_ext/ $ python ./setup.py build (3) install - possibly - sudo, run as root or administrator $ python ./setup.py install (4) test it $ cd ../Testing $ ./python_test.sh
impor tlshtlsh.hash(data)
Catatan data harus berupa byte - bukan string. Hal ini karena TLSH ditujukan untuk data biner dan data biner dapat berisi byte NULL (nol).
Dalam mode default, data harus berisi setidaknya 50 byte untuk menghasilkan nilai hash dan harus memiliki jumlah keacakan tertentu. Untuk mendapatkan nilai hash suatu file, coba
tlsh.hash(buka(file, 'rb').baca())
Catatan: pernyataan open telah membuka file dalam mode biner.
impor tlshh1 = tlsh.hash(data)h2 = tlsh.hash(similar_data)score = tlsh.diff(h1, h2)h3 = tlsh.Tlsh()dengan open('file', 'rb') as f:for buf di iter(lambda: f.read(512), b''):h3.update(buf)h3.final()# ini pernyataan ini menyatakan bahwa jarak antara TLSH dan dirinya sendiri harus zeroassert h3.diff(h3) == 0score = h3.diff(h1)
Fungsi diffxlen
menghapus komponen panjang file dari header tlsh dari perbandingan.
tlsh.diffxlen(h1, h2)
Jika file dengan pola berulang dibandingkan dengan file yang hanya memiliki satu contoh pola, maka perbedaannya akan bertambah jika panjang file disertakan. Namun dengan menggunakan fungsi diffxlen
, panjang file akan dihilangkan dari pertimbangan.
Jika Anda menggunakan opsi "konservatif", maka data harus berisi minimal 256 karakter. Misalnya,
impor ostlsh.conservativehash(os.urandom(256))
harus menghasilkan hash, tapi
tlsh.conservativehash(os.urandom(100))
akan menghasilkan TNULL karena kurang dari 256 byte.
Jika Anda perlu membuat hash gaya lama (tanpa awalan "T1"), gunakan
tlsh.oldhash(os.urandom(100))
Pilihan lama dan konservatif dapat digabungkan:
tlsh.oldconservativehash(os.urandom(500))
Untuk meningkatkan akurasi perbandingan, TLSH melacak penghitungan distribusi tinggi bucket dalam kuartil. Perbedaan kuartil yang lebih besar menghasilkan skor perbedaan yang lebih tinggi.
Gunakan khusus 6 trigram untuk memberikan representasi byte yang sama di jendela geser 5 byte yang menghasilkan hasil yang lebih baik.
Hash Pearson digunakan untuk mendistribusikan jumlah trigram ke keranjang penghitungan.
Skor kesamaan global menjauhkan objek dengan perbedaan ukuran yang signifikan. Kesamaan global dapat dinonaktifkan. Ini juga menjauhkan objek dengan distribusi kuartil berbeda.
TLSH dapat dikompilasi untuk menghasilkan string hash 70 atau 134 karakter. Versi yang lebih panjang telah dibuat untuk menggunakan string hash 70 karakter yang tidak berfungsi untuk aplikasi Anda.
Kesamaan TLSH dinyatakan sebagai skor perbedaan:
Skor 0 berarti objek hampir identik.
Untuk hash 72 karakter, terdapat tabel detail tingkat Deteksi eksperimental dan tingkat Positif Palsu berdasarkan ambang batas. lihat Tabel II di halaman 5
Lihat kode Python dan notebook Jupyter di tlshCluster.
Kami menyediakan kode Python untuk metode HAC-T. Kami juga menyediakan kode agar pengguna dapat menggunakan DBSCAN.
Kami menunjukkan kepada pengguna cara membuat dendogram untuk file, yang merupakan diagram berguna yang menunjukkan hubungan antara file dan grup.
Kami menyediakan alat untuk mengelompokkan kumpulan data Malware Bazaar, yang berisi beberapa ratus ribu sampel.
Metode HAC-T dijelaskan dalam HAC-T dan pencarian cepat kesamaan keamanan
Jonathan Oliver, Chun Cheng, dan Yanggui Chen, TLSH - Hash Sensitif Lokalitas. Lokakarya Kejahatan Dunia Maya dan Komputasi Tepercaya ke-4, Sydney, November 2013
Jonathan Oliver, Scott Forman, dan Chun Cheng, Menggunakan Pengacakan untuk Menyerang Intisari Kesamaan. ATIS 2014, November 2014, halaman 199-210
Jonathan Oliver, Muqeet Ali, dan Josiah Hagen. HAC-T dan pencarian cepat untuk kesamaan dalam keamanan Konferensi Internasional tentang Sistem Cerdas Omni-layer (COINS) 2020. IEEE, 2020.
4.12.1
08/10/2024 Permintaan tarik gabungan #146 - Hapus panggilan ke sprintf() untuk menghindari peringatan Gabungkan permintaan tarik #141 - py_ext: gunakan PyVarObject_HEAD alih-alih PyObject_HEAD_INIT Permintaan tarik gabungan #138 - Build: Tetapkan opsi default hanya pada "default" Permintaan tarik gabungan #136 - Perbaikan Bug+Portabilitas: Tingkatkan portabilitas dengan pembagian integral
lihat Change_History.md