TLSH 是一個模糊匹配函式庫。給定最小長度為 50 位元組的位元組流,TLSH 產生可用於相似性比較的雜湊值。相似的物件將具有相似的雜湊值,這允許透過比較它們的雜湊值來檢測相似的物件。 請注意,位元組流應具有足夠的複雜性。 例如,相同位元組的位元組流不會產生雜湊值。
2024年8月10日
發布版本 4.10.x - Python 叢集工具。
請參閱目錄 tlshCluster。
我將嘗試使 4.12.0 成為發布版本,並從 4.12.0 構建 py-tlsh Python 庫 4.12.0 包括: Merge pull request #137 - 這修復了 py-tlsh Merge pull request #134 中的內存洩漏- 這改進了ifdef WINDOWS,使其更加可移植4.12.1 包括: 合併拉取請求#146 - 刪除對sprintf() 的呼叫以避免警告合併拉取請求#141 - py_ext:使用PyVarObject_HEAD 而不是PyObject_HEAD_INIT 合併拉取請求#138 - 建置:僅在「預設」合併拉取請求上定義預設選項#136 - Bug 修復+可移植性:透過積分除法提高可移植性
2020年
被 Virus Total 採用
被惡意軟體集市採用
我們在摘要的開頭添加了版本標識符(“T1”)。請使用具有 T1 標頭的 TLSH 版本。資料集可以包括新舊摘要的混合。如果您需要輸出舊式 TLSH 摘要,請使用命令列選項“-old”
感謝程春,他是一位謙虛而有才華的工程師。
預設模式下的程式需要一個最小長度為 50 個位元組的輸入位元組流(以及最小的隨機性 - 請參閱下面的 Python 擴充功能中的註解)。
為了與舊版本保持一致,有一個 -conservative 選項強制執行 256 位元組限制。請參閱 TLSH 版本 3.17.0 的註釋
計算出的雜湊值是 35 個位元組的資料(輸出為“T1”,後面跟著 70 個十六進位字元。總長度為 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 個儲存桶 使用預設的 128 個儲存桶,除非您是專家並且知道需要 256 個儲存桶
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 月新增。
使用 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 包,那麼有一個 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(開啟(檔, '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()# 這個斷言顯示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 位元組滑動視窗中的位元組進行同等表示,從而產生改進的結果。
Pearson 雜湊用於將三元組計數分配到計數桶。
全域相似度分數使具有顯著大小差異的物件保持距離。可以禁用全域相似性。它還對具有不同四分位數分佈的物件進行距離。
TLSH 可以編譯產生 70 或 134 個字元的雜湊字串。為使用 70 個字元的雜湊字串而創建的較長版本不適用於您的應用程式。
TLSH 相似度表示為差異分數:
0 分錶示物件幾乎相同。
對於 72 個字元的哈希,有一個基於閾值的實驗檢測率和誤報率的詳細表格。請參閱第 5 頁的表 II
請參閱 tlshCluster 中的 Python 程式碼和 Jupyter 筆記本。
我們提供 HAC-T 方法的 Python 程式碼。我們也提供代碼以便使用者可以使用DBSCAN。
我們向使用者展示如何建立文件樹狀圖,這是顯示文件和群組之間關係的有用圖表。
我們提供了用於對 Malware Bazaar 資料集進行聚類的工具,該資料集包含數十萬個樣本。
HAC-T方法在HAC-T和安全性相似性快速搜尋中描述
Jonathan Oliver、Chun Cheng 和 Yanggui Chen,TLSH - 局部敏感雜湊。第四屆網路犯罪與可信賴計算研討會,悉尼,2013 年 11 月
Jonathan Oliver、Scott Forman 和 Chun Cheng,使用隨機化攻擊相似性摘要。 ATIS 2014,2014 年 11 月,第 199-210 頁
喬納森·奧利弗、穆克特·阿里和喬賽亞·哈根。 HAC-T 與安全快速搜尋相似性 2020 年全層智慧系統國際會議 (COINS)。 IEEE,2020。
4.12.1
2024年8月10日 合併拉取請求 #146 - 刪除對 sprintf() 的呼叫以避免警告 合併拉取請求 #141 - py_ext:使用 PyVarObject_HEAD 而不是 PyObject_HEAD_INIT 合併拉取請求 #138 - 建置:僅在「預設」上定義預設選項 合併拉取請求 #136 - Bug 修復+可移植性:透過積分除法提高可移植性
參見 Change_History.md