TLSH는 퍼지 매칭 라이브러리입니다. 최소 길이가 50바이트인 바이트 스트림이 주어지면 TLSH는 유사성 비교에 사용할 수 있는 해시 값을 생성합니다. 유사한 객체는 유사한 해시 값을 가지므로 해시 값을 비교하여 유사한 객체를 감지할 수 있습니다. 바이트 스트림은 충분히 복잡해야 합니다. 예를 들어, 동일한 바이트의 바이트 스트림은 해시 값을 생성하지 않습니다.
2024년 8월 10일
릴리스 버전 4.10.x - Python 클러스터링 도구.
tlshCluster 디렉토리를 참조하십시오.
4.12.0을 릴리스 버전으로 만들고 4.12.0에서 py-tlsh Python 라이브러리를 빌드하려고 합니다. 4.12.0에는 다음이 포함됩니다: 병합 풀 요청 #137 - 이로 인해 py-tlsh 병합 풀 요청 #134의 메모리 누수가 해결되었습니다. - 이로 인해 ifdef WINDOWS가 더 이식 가능해졌습니다. 4.12.1에는 다음이 포함됩니다: 풀 요청 병합 #146 - 경고를 피하기 위해 sprintf()에 대한 호출 제거 병합 풀 요청 #141 - py_ext: PyObject_HEAD_INIT 대신 PyVarObject_HEAD 사용 병합 풀 요청 #138 - 빌드: "기본" 병합 풀 요청에만 기본 옵션 정의 #136 - 버그 수정+이식성: 적분 분할로 이식성 향상
2020
바이러스 토탈에서 채택한
Malware Bazaar에서 채택
다이제스트 시작 부분에 버전 식별자("T1")를 추가했습니다. T1 헤더가 있는 TLSH 버전을 사용하십시오. 코드는 이전 버전과 호환되며 여전히 70개의 16진수 문자열을 TLSH 다이제스트로 읽고 해석할 수 있습니다. 그리고 데이터 세트에는 이전 다이제스트와 새 다이제스트가 혼합되어 포함될 수 있습니다. 이전 스타일의 TLSH 다이제스트를 출력해야 하는 경우 명령줄 옵션 '-old'를 사용하세요.
겸손하고 재능 있는 엔지니어였던 Chun Cheng에게 감사드립니다.
기본 모드의 프로그램에는 최소 길이가 50바이트(및 최소 임의성 - 아래 Python 확장의 참고 사항 참조)인 입력 바이트 스트림이 필요합니다.
이전 버전과의 일관성을 위해 256바이트 제한을 적용하는 -conservative 옵션이 있습니다. TLSH 버전 3.17.0에 대한 참고 사항을 참조하세요.
계산된 해시는 35바이트의 데이터입니다('T1' 뒤에 70개의 16진수 문자가 출력됩니다. 총 길이는 72자입니다). 해시의 버전 번호로 'T1'이 추가되었습니다. 이를 통해 알고리즘을 적용하고 이전 버전과의 호환성을 계속 유지할 수 있습니다. 이전 스타일의 70진수 해시를 얻으려면 -old 명령줄 옵션을 사용하세요.
바이트 3,4,5는 파일 전체에 대한 정보(길이, ...)를 캡처하는 데 사용되는 반면, 마지막 32바이트는 파일의 증분 부분에 대한 정보를 캡처하는 데 사용됩니다. (아래 CMakeLists.txt에 설명된 빌드 매개변수를 변경하여 해시 길이를 늘릴 수 있습니다. 이렇게 하면 해시에 저장된 정보가 늘어납니다. 일부 애플리케이션의 경우 파일 간의 유사성을 예측하는 정확도가 높아질 수 있습니다.)
TLSH(아래 참조)를 빌드하면 lib
디렉터리에 정적 라이브러리와 tlsh
실행 파일( tlsh_unittest
에 대한 심볼릭 링크)이 생성됩니다. 'tlsh'는 bin
디렉터리의 정적 라이브러리에 대한 링크입니다. 라이브러리에는 지정된 파일에서 해시 값을 생성하고 두 해시 값 간의 유사성을 계산하는 기능이 있습니다.
tlsh
TLSH 해시 값을 생성하고 TLSH 해시 값을 비교하여 유사성을 결정하는 유틸리티입니다. 자세한 사용법을 보려면 매개변수 없이 실행하세요.
js_ext
디렉토리에서 사용 가능한 JavaScript 포트입니다.
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개 버킷 사용 여부를 결정하고 전문가가 아니고 256개 버킷이 필요하다는 점을 알고 있지 않는 한 기본 128개 버킷을 사용합니다.
TLSH_CHECKSUM_1B: 체크섬 길이를 결정합니다. 길면 충돌이 적다는 것을 의미합니다. 전문가가 아니고 더 큰 체크섬이 필요하다는 것을 알고 있지 않는 한 기본 1바이트를 사용합니다.
실행하다:
make.sh
참고: Linux에서 TLSH를 빌드하는 것은 cmake
에 따라 Makefile
생성한 다음 프로젝트를 make
때문에 cmake
가 설치되지 않으면 빌드가 실패합니다. CentOs 또는 Amazon Linux에 cmake/gcc 컴파일러를 설치하려면: $ sudo yum install cmake $ sudo yum install gcc-c++
2020년 3월에 추가되었습니다. README.mingw의 지침을 참조하세요.
Windows 디렉터리 아래의 버전별 tlsh 솔루션 파일(tlsh.VC2005.sln, tlsh.VC2008.sln, ...)을 사용합니다.
tlsh 라이브러리 인터페이스는 tlsh.h를 참조하고, 예제 코드는 test
디렉터리 아래의 tlsh_unittest.cpp 및 simple_unittest.cpp를 참조하세요.
우리는 최근 PyPi에서 Python 패키지를 만들었습니다: https://pypi.org/project/py-tlsh/
py-tlsh는 python-tlsh 패키지를 대체합니다. 자세한 내용은 94호를 참조하세요.
이 패키지를 설치하려면
$ pip install py-tlsh
자신만의 Python 패키지를 빌드해야 하는 경우 Python 버전에 대한 참고 사항이 포함된 README.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(0) 바이트가 포함될 수 있기 때문입니다.
기본 모드에서 데이터는 해시 값을 생성하기 위해 최소 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 in iter(lambda: f.read(512), b''):h3.update(buf)h3.final()# this TLSH와 자체 사이의 거리가 0이어야 한다는 주장이 있습니다assert h3.diff(h3) == 0score = h3.diff(h1)
diffxlen
함수는 비교에서 tlsh 헤더의 파일 길이 구성 요소를 제거합니다.
tlsh.diffxlen(h1, h2)
반복되는 패턴이 있는 파일을 패턴의 단일 인스턴스만 있는 파일과 비교할 때 파일 길이가 포함되면 차이가 더 커집니다. 그러나 diffxlen
함수를 사용하면 파일 길이가 고려 대상에서 제거됩니다.
"보수적" 옵션을 사용하는 경우 데이터에는 256자 이상이 포함되어야 합니다. 예를 들어,
import ostlsh.conservativehash(os.urandom(256))
해시를 생성해야 하지만
tlsh.conservativehash(os.urandom(100))
256바이트보다 작으므로 TNULL을 생성합니다.
이전 스타일 해시("T1" 접두사 제외)를 생성해야 하는 경우 다음을 사용하세요.
tlsh.oldhash(os.urandom(100))
기존 옵션과 보수적 옵션을 결합할 수 있습니다.
tlsh.oldconservativehash(os.urandom(500))
비교 정확도를 높이기 위해 TLSH는 버킷 높이 분포를 사분위수로 추적합니다. 사분위수 차이가 클수록 차이 점수가 높아집니다.
향상된 결과를 생성하는 5바이트 슬라이딩 창에서 바이트를 동일하게 표현하려면 특별히 6개의 트라이그램을 사용하십시오.
Pearson 해시는 트라이그램 수를 계산 버킷에 배포하는 데 사용됩니다.
전역 유사성 점수는 크기 차이가 큰 개체와 거리를 둡니다. 전역 유사성을 비활성화할 수 있습니다. 또한 사분위수 분포가 다른 개체와 거리를 둡니다.
TLSH를 컴파일하여 70자 또는 134자 해시 문자열을 생성할 수 있습니다. 70자 해시 문자열을 사용하기 위해 생성된 더 긴 버전은 귀하의 애플리케이션에서 작동하지 않습니다.
TLSH 유사성은 차이 점수로 표현됩니다.
0점은 객체가 거의 동일하다는 것을 의미합니다.
72자 해시의 경우 임계값을 기반으로 한 실험적 탐지 비율과 거짓 긍정 비율에 대한 자세한 표가 있습니다. 5페이지의 표 II를 참조하세요.
tlshCluster에서 Python 코드와 Jupyter Notebook을 참조하세요.
HAC-T 방법에 대한 Python 코드를 제공합니다. 또한 사용자가 DBSCAN을 사용할 수 있도록 코드를 제공합니다.
파일과 그룹 간의 관계를 보여주는 유용한 다이어그램인 파일에 대한 덴도그램을 만드는 방법을 사용자에게 보여줍니다.
우리는 수십만 개의 샘플이 포함된 Malware Bazaar 데이터세트를 클러스터링하기 위한 도구를 제공합니다.
HAC-T 방법은 HAC-T에 설명되어 있으며 보안 유사성을 빠르게 검색합니다.
Jonathan Oliver, Chun Cheng 및 Yanggui Chen, TLSH - 지역에 민감한 해시. 제4회 사이버 범죄 및 신뢰할 수 있는 컴퓨팅 워크숍, 시드니, 2013년 11월
Jonathan Oliver, Scott Forman 및 Chun Cheng, 무작위화를 사용하여 유사성 다이제스트 공격. ATIS 2014, 2014년 11월, 199-210페이지
조나단 올리버, 무퀴트 알리, 조시아 하겐. HAC-T와 빠른 보안 유사성 검색 2020 COINS(Omni-Layer Intelligent Systems) 국제 컨퍼런스. IEEE, 2020.
4.12.1
2024년 8월 10일 병합 풀 요청 #146 - 경고를 방지하려면 sprintf() 호출을 제거하세요. 병합 풀 요청 #141 - py_ext: PyObject_HEAD_INIT 대신 PyVarObject_HEAD를 사용합니다. 병합 풀 요청 #138 - 빌드: "default"에만 기본 옵션을 정의하세요. 병합 풀 요청 #136 - 버그 수정+이식성: 적분 분할로 이식성 향상
Change_History.md를 참조하세요.