TLSH — это библиотека нечеткого сопоставления. Учитывая поток байтов минимальной длиной 50 байт, TLSH генерирует хеш-значение, которое можно использовать для сравнения сходства. Подобные объекты будут иметь схожие хеш-значения, что позволяет обнаруживать похожие объекты путем сравнения их хэш-значений. Обратите внимание, что поток байтов должен иметь достаточную сложность. Например, поток идентичных байтов не будет генерировать хеш-значение.
10.08.2024
Выпуск версии 4.10.x — инструмент кластеризации Python.
См. каталог tlshCluster.
Я собираюсь попытаться сделать версию 4.12.0 выпускной версией и собрать библиотеку Python py-tlsh на основе версии 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 год
принят Virus Total
принят Malware Bazaar
Мы добавили идентификатор версии («T1») в начало дайджеста. Пожалуйста, используйте версии TLSH с заголовком T1. Код обратно совместим, он по-прежнему может читать и интерпретировать строки из 70 шестнадцатеричных символов как дайджесты TLSH. Наборы данных могут включать в себя смесь старых и новых дайджестов. Если вам нужны дайджесты TLSH старого стиля для вывода, используйте параметр командной строки «-old».
Спасибо Чун Ченгу, скромному и талантливому инженеру.
Программа в режиме по умолчанию требует входного потока байтов минимальной длиной 50 байт (и минимального количества случайных чисел — см. примечание в расширении Python ниже).
Для обеспечения совместимости со старыми версиями существует опция -conservative, которая устанавливает ограничение в 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 в том виде, в котором они представлены в этом репозитории.
Другой порт Java доступен здесь.
Другой порт Java доступен здесь.
Порт Golang доступен здесь.
Порт Ruby доступен здесь.
Загрузите 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())
Примечание: оператор open открыл файл в двоичном режиме.
import 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 и самим собой должно быть нулевым. Assert 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 символов имеется подробная таблица экспериментальных показателей обнаружения и частоты ложных срабатываний на основе порогового значения. см. Таблицу II на стр. 5.
См. код Python и блокноты Jupyter в tlshCluster.
Мы предоставляем код Python для метода HAC-T. Мы также предоставляем код, позволяющий пользователям использовать DBSCAN.
Мы показываем пользователям, как создавать дендограммы для файлов, которые представляют собой полезную диаграмму, показывающую отношения между файлами и группами.
Мы предоставляем инструменты для кластеризации набора данных Malware Bazaar, содержащего несколько сотен тысяч образцов.
Метод HAC-T описан в HAC-T и быстром поиске сходства по безопасности.
Джонатан Оливер, Чун Ченг и Янгуй Чен, TLSH — хэш, чувствительный к местонахождению. 4-й семинар по киберпреступности и надежным вычислениям, Сидней, ноябрь 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