TLSH هي مكتبة مطابقة غامضة. نظرًا لتدفق بايت بطول لا يقل عن 50 بايت، ينشئ TLSH قيمة تجزئة يمكن استخدامها لمقارنات التشابه. سيكون للكائنات المشابهة قيم تجزئة متشابهة مما يسمح باكتشاف الكائنات المتشابهة من خلال مقارنة قيم التجزئة الخاصة بها. لاحظ أن دفق البايت يجب أن يحتوي على قدر كافٍ من التعقيد. على سبيل المثال، لن يقوم دفق بايت من البايتات المتماثلة بإنشاء قيمة تجزئة.
10/08/2024
الإصدار 4.10.x - أداة تجميع بايثون.
راجع الدليل tlshCluster.
سأحاول جعل الإصدار 4.12.0 إصدارًا وإنشاء مكتبة py-tlsh Python من 4.12.0 4.12.0 تتضمن: طلب سحب الدمج رقم 137 - أدى هذا إلى إصلاح تسرب الذاكرة في طلب سحب الدمج py-tlsh رقم 134 - أدى هذا إلى تحسين ifdef WINDOWS ليصبح أكثر قابلية للنقل 4.12.1 ويتضمن: طلب سحب الدمج رقم 146 - إزالة الاتصال بـ sprintf() لتجنب تحذيرات دمج طلب السحب رقم 141 - py_ext: استخدم PyVarObject_HEAD بدلاً من PyObject_HEAD_INIT دمج طلب السحب رقم 138 - البناء: تحديد الخيارات الافتراضية فقط على "الافتراضي" دمج طلب السحب رقم 136 - إصلاح الخلل + قابلية النقل: تحسين إمكانية النقل عن طريق التقسيم المتكامل
2020
المعتمدة من قبل فيروس توتال
التي اعتمدها بازار البرمجيات الخبيثة
لقد أضفنا معرف الإصدار ("T1") إلى بداية الملخص. يرجى استخدام إصدارات TLSH التي تحتوي على رأس T1. الكود متوافق مع الإصدارات السابقة، ولا يزال بإمكانه قراءة وتفسير سلاسل الأحرف المكونة من 70 حرفًا سداسيًا عشريًا كملخصات TLSH. ويمكن أن تتضمن مجموعات البيانات مزيجًا من الملخصات القديمة والجديدة. إذا كنت تريد إخراج ملخصات TLSH ذات النمط القديم، فاستخدم خيار سطر الأوامر "-old"
شكرًا لتشون تشينغ، الذي كان مهندسًا متواضعًا وموهوبًا.
يتطلب البرنامج في الوضع الافتراضي دفق بايت إدخال بطول لا يقل عن 50 بايت (وحد أدنى من العشوائية - راجع الملاحظة في ملحق Python أدناه).
للتوافق مع الإصدارات الأقدم، يوجد خيار -servative الذي يفرض حدًا يبلغ 256 بايت. راجع الملاحظات الخاصة بالإصدار 3.17.0 من TLSH
التجزئة المحسوبة هي 35 بايت من البيانات (الإخراج كـ "T1" يتبع 70 حرفًا سداسيًا عشريًا. إجمالي الطول 72 حرفًا). تمت إضافة "T1" كرقم إصدار للتجزئة - حتى نتمكن من تكييف الخوارزمية مع الحفاظ على التوافق مع الإصدارات السابقة. للحصول على النمط القديم المكون من 70 علامة سداسية، استخدم خيار سطر الأوامر -old.
يتم استخدام البايتات 3،4،5 لالتقاط المعلومات حول الملف ككل (الطول، ...)، بينما يتم استخدام آخر 32 بايت لالتقاط معلومات حول الأجزاء المتزايدة من الملف. (لاحظ أنه يمكن زيادة طول التجزئة عن طريق تغيير معلمات البناء الموضحة أدناه في CMakeLists.txt، مما سيؤدي إلى زيادة المعلومات المخزنة في التجزئة. بالنسبة لبعض التطبيقات، قد يؤدي هذا إلى زيادة الدقة في التنبؤ بأوجه التشابه بين الملفات.)
سيؤدي بناء TLSH (انظر أدناه) إلى إنشاء مكتبة ثابتة في دليل lib
، و tlsh
القابل للتنفيذ (رابط رمزي إلى tlsh_unittest
). روابط "tlsh" إلى المكتبة الثابتة في دليل bin
. تحتوي المكتبة على وظيفة لتوليد قيمة التجزئة من ملف معين، وحساب التشابه بين قيمتي التجزئة.
tlsh
هي أداة مساعدة لإنشاء قيم تجزئة TLSH ومقارنة قيم تجزئة TLSH لتحديد التشابه. قم بتشغيله بدون معلمات للاستخدام التفصيلي.
يتوفر منفذ JavaScript في دليل js_ext
.
يتوفر منفذ Java في دليل java
.
نحن ندرج هذه المنافذ كمرجع فقط. لم نتحقق من الكود الموجود في هذه المستودعات، ولم نتحقق من تطابق النتائج مع TLSH هنا. نطلب أيضًا أن تشتمل أي منافذ على الملفين LICENSE وNOTICE.txt تمامًا كما يظهران في هذا المستودع.
منفذ جافا آخر متاح هنا.
منفذ جافا آخر متاح هنا.
ميناء جولانج متاح هنا.
منفذ روبي متاح هنا
قم بتنزيل TLSH على النحو التالي:
wget https://github.com/trendmicro/tlsh/archive/master.zip -O master.zip unzip master.zip cd tlsh-master
أو
git clone git://github.com/trendmicro/tlsh.git cd tlsh git checkout master
قم بتحرير CMakeLists.txt لإنشاء TLSH بخيارات مختلفة.
TLSH_BUCKETS: يحدد استخدام 128 أو 256 مجموعة، استخدم 128 مجموعة افتراضية إلا إذا كنت خبيرًا وتعرف أنك بحاجة إلى 256 مجموعة
TLSH_CHECKSUM_1B: يحدد طول المجموع الاختباري، والأطول يعني تصادمًا أقل، استخدم البايت الافتراضي 1 إلا إذا كنت خبيرًا وتعرف أنك بحاجة إلى مجموع اختباري أكبر
ينفذ:
make.sh
ملاحظة: يعتمد إنشاء TLSH على Linux على cmake
لإنشاء Makefile
ثم make
المشروع، وبالتالي سيفشل البناء إذا لم يتم تثبيت cmake
. لتثبيت مترجم cmake/gcc على CentOs أو Amazon Linux: $ sudo yum install cmake $ sudo yum install gcc-c++
تمت إضافته في مارس 2020. راجع التعليمات الموجودة في README.mingw
استخدم ملفات حل tlsh الخاصة بالإصدار (tlsh.VC2005.sln، tlsh.VC2008.sln، ...) ضمن دليل Windows.
راجع tlsh.h للتعرف على واجهة مكتبة tlsh وtlsh_unittest.cpp وsimple_unittest.cpp ضمن دليل test
للحصول على رمز المثال.
لقد أنشأنا مؤخرًا حزمة Python على PyPi: https://pypi.org/project/py-tlsh/
يستبدل py-tlsh حزمة python-tlsh. ولمزيد من التفصيل راجع العدد 94
لتثبيت هذه الحزمة
$ pip install py-tlsh
إذا كنت بحاجة إلى إنشاء حزمة Python الخاصة بك، فهناك README.python مع ملاحظات حول إصدار 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
استيراد tlshtlsh.hash(البيانات)
ملاحظة: البيانات يجب أن تكون بايت - وليست سلسلة. وذلك لأن TLSH مخصص للبيانات الثنائية ويمكن أن تحتوي البيانات الثنائية على بايت NULL (صفر).
في الوضع الافتراضي، يجب أن تحتوي البيانات على 50 بايت على الأقل لإنشاء قيمة تجزئة ويجب أن تحتوي على قدر معين من العشوائية. للحصول على قيمة التجزئة للملف، حاول
tlsh.hash(open(file, 'rb').read())
ملاحظة: لقد فتح البيان المفتوح الملف في الوضع الثنائي.
استيراد tlshh1 = tlsh.hash(data)h2 = tlsh.hash(similar_data)score = tlsh.diff(h1, h2)h3 = tlsh.Tlsh()with open('file', 'rb') as f:for buf في iter(lambda: f.read(512), b''):h3.update(buf)h3.final()# يوضح هذا التأكيد أن المسافة بين TLSH ونفسه يجب أن تكون صفرًا h3.diff(h3) == 0score = h3.diff(h1)
تقوم وظيفة diffxlen
بإزالة مكون طول الملف لرأس tlsh من المقارنة.
tlsh.diffxlen(h1, h2)
إذا تمت مقارنة ملف ذو نمط متكرر بملف يحتوي على مثيل واحد فقط من النمط، فسيتم زيادة الفرق إذا تم تضمين طول الملف. ولكن باستخدام الدالة diffxlen
، سيتم إزالة طول الملف من الاعتبار.
إذا كنت تستخدم الخيار "المحافظ"، فيجب أن تحتوي البيانات على 256 حرفًا على الأقل. على سبيل المثال،
استيراد ostlsh.conservativehash(os.urandom(256))
يجب أن تولد التجزئة، ولكن
tlsh.conservativehash(os.urandom(100))
سيتم إنشاء TNULL لأنه أقل من 256 بايت.
إذا كنت بحاجة إلى إنشاء تجزئات على النمط القديم (بدون البادئة "T1")، فاستخدمها
tlsh.oldhash(os.urandom(100))
يمكن الجمع بين الخيارات القديمة والمحافظة:
tlsh.oldconservativehash(os.urandom(500))
لتحسين دقة المقارنة، يتتبع TLSH حساب توزيع ارتفاع الجرافة في الأرباع الربعية. يؤدي الاختلاف الربعي الأكبر إلى درجة فرق أعلى.
استخدم 6 أشكال ثلاثية خصيصًا لإعطاء تمثيل متساوٍ للبايتات في النافذة المنزلقة المكونة من 5 بايت مما يؤدي إلى نتائج محسنة.
يتم استخدام تجزئة بيرسون لتوزيع أعداد المثلثات على دلاء العد.
إن نقاط التشابه العالمية تبعد الأشياء مع اختلاف كبير في الحجم. يمكن تعطيل التشابه العالمي. كما أنه يبعد الكائنات ذات التوزيعات الربعية المختلفة.
يمكن تجميع TLSH لإنشاء سلاسل تجزئة مكونة من 70 أو 134 حرفًا. تم إنشاء الإصدار الأطول لاستخدام سلاسل التجزئة المكونة من 70 حرفًا والتي لا تعمل مع تطبيقك.
يتم التعبير عن تشابه TLSH كنتيجة فرق:
النتيجة 0 تعني أن الكائنات متطابقة تقريبًا.
بالنسبة للتجزئة المكونة من 72 حرفًا، يوجد جدول تفصيلي لمعدلات الاكتشاف التجريبية ومعدلات الإيجابية الكاذبة بناءً على العتبة. انظر الجدول الثاني في الصفحة 5
راجع كود Python ودفاتر Jupyter في tlshCluster.
نحن نقدم رمز بايثون لطريقة HAC-T. نحن نقدم أيضًا رمزًا حتى يتمكن المستخدمون من استخدام DBSCAN.
نعرض للمستخدمين كيفية إنشاء مخططات بيانات للملفات، وهي عبارة عن رسم تخطيطي مفيد يوضح العلاقات بين الملفات والمجموعات.
نحن نقدم أدوات لتجميع مجموعة بيانات Malware Bazaar، والتي تحتوي على بضع مئات الآلاف من العينات.
تم وصف طريقة HAC-T في HAC-T والبحث السريع عن التشابه في الأمان
جوناثان أوليفر، تشون تشينغ، ويانغوي تشين، TLSH - تجزئة حساسة للمكان المحلي. ورشة العمل الرابعة حول الجرائم الإلكترونية والحوسبة الجديرة بالثقة، سيدني، نوفمبر 2013
جوناثان أوليفر، وسكوت فورمان، وتشون تشينج، باستخدام التوزيع العشوائي لمهاجمة ملخصات التشابه. ATIS 2014، نوفمبر 2014، الصفحات 199-210
جوناثان أوليفر، مقيت علي، ويوشيا هاغن. HAC-T والبحث السريع عن التشابه في الأمن المؤتمر الدولي 2020 حول الأنظمة الذكية متعددة الطبقات (COINS). معهد مهندسي الكهرباء والإلكترونيات، 2020.
4.12.1
10/08/2024 دمج طلب السحب رقم 146 - إزالة استدعاء sprintf() لتجنب التحذيرات دمج طلب السحب رقم 141 - py_ext: استخدم PyVarObject_HEAD بدلاً من PyObject_HEAD_INIT دمج طلب السحب رقم 138 - البناء: تحديد الخيارات الافتراضية فقط على "الافتراضي" طلب سحب الدمج رقم 136 - إصلاح الأخطاء + إمكانية النقل: تحسين إمكانية النقل عن طريق التقسيم المتكامل
راجع Change_History.md