TLSH เป็นไลบรารีการจับคู่แบบคลุมเครือ การกำหนดสตรีมไบต์ที่มีความยาวขั้นต่ำ 50 ไบต์ TLSH จะสร้างค่าแฮชซึ่งสามารถใช้สำหรับการเปรียบเทียบความคล้ายคลึงกัน วัตถุที่คล้ายกันจะมีค่าแฮชที่คล้ายกันซึ่งช่วยให้สามารถตรวจจับวัตถุที่คล้ายกันโดยการเปรียบเทียบค่าแฮชของพวกมัน โปรดทราบว่าสตรีมไบต์ควรมีความซับซ้อนเพียงพอ ตัวอย่างเช่น ไบต์สตรีมที่มีไบต์เหมือนกันจะไม่สร้างค่าแฮช
10/08/2024
เปิดตัวเวอร์ชัน 4.10.x - เครื่องมือการทำคลัสเตอร์ Python
ดูไดเร็กทอรี tlshCluster
ฉันจะพยายามสร้าง 4.12.0 เวอร์ชันวางจำหน่ายและสร้างไลบรารี่ py-tlsh Python จาก 4.12.0 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 - แก้ไขข้อผิดพลาด + การพกพา: ปรับปรุงความสามารถในการพกพาโดยการแบ่งส่วนรวม
2020
นำมาใช้โดย Virus Total
นำมาใช้โดยมัลแวร์ Bazaar
เราได้เพิ่มตัวระบุเวอร์ชัน ("T1") ที่จุดเริ่มต้นของไดเจสต์ โปรดใช้เวอร์ชันของ TLSH ที่มีส่วนหัว T1 โค้ดนี้เข้ากันได้แบบย้อนหลัง แต่ยังสามารถอ่านและตีความสตริงอักขระฐานสิบหก 70 ตัวเป็นข้อมูลย่อยของ TLSH ได้ และชุดข้อมูลสามารถรวมข้อมูลสรุปแบบเก่าและใหม่ผสมกันได้ หากคุณต้องการให้เอาท์พุตการแยกย่อย TLSH แบบเก่า ให้ใช้ตัวเลือกบรรทัดคำสั่ง '-old'
ต้องขอบคุณชุนเฉิง วิศวกรผู้ถ่อมตัวและมีความสามารถ
โปรแกรมในโหมดเริ่มต้นต้องการสตรีมไบต์อินพุตที่มีความยาวขั้นต่ำ 50 ไบต์ (และจำนวนการสุ่มขั้นต่ำ - ดูหมายเหตุในส่วนขยาย Python ด้านล่าง)
เพื่อให้สอดคล้องกับเวอร์ชันเก่า มีตัวเลือก -อนุรักษ์นิยม ซึ่งบังคับใช้ขีดจำกัด 256 ไบต์ ดูหมายเหตุสำหรับเวอร์ชัน 3.17.0 ของ TLSH
แฮชที่คำนวณได้คือข้อมูล 35 ไบต์ (เอาต์พุตเป็น 'T1' ตามด้วยอักขระเลขฐานสิบหก 70 ตัว ความยาวรวม 72 อักขระ) เพิ่ม 'T1' เป็นหมายเลขเวอร์ชันสำหรับแฮช เพื่อให้เราสามารถปรับอัลกอริทึมและยังคงรักษาความเข้ากันได้แบบย้อนหลังได้ หากต้องการรับแฮช 70 hex แบบเก่า ให้ใช้ตัวเลือกบรรทัดคำสั่ง -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 ติดตั้ง cmake $ sudo yum ติดตั้ง 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
นำเข้า tlstlsh.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()ด้วย open('file', 'rb') เป็น 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 ไบต์ซึ่งให้ผลลัพธ์ที่ดีขึ้น
Pearson hash ใช้เพื่อกระจายจำนวน trigram ไปยังที่เก็บข้อมูลการนับ
คะแนนความคล้ายคลึงกันทั่วโลกจะอยู่ห่างจากวัตถุที่มีขนาดแตกต่างกันอย่างมีนัยสำคัญ ความคล้ายคลึงกันทั่วโลกสามารถปิดการใช้งานได้ นอกจากนี้ยังทำให้วัตถุมีระยะห่างด้วยการแจกแจงควอไทล์ที่ต่างกันอีกด้วย
สามารถคอมไพล์ TLSH เพื่อสร้างสตริงแฮชอักขระได้ 70 หรือ 134 ตัว เวอร์ชันที่ยาวกว่าถูกสร้างขึ้นเพื่อใช้สตริงแฮช 70 อักขระไม่ทำงานสำหรับแอปพลิเคชันของคุณ
ความคล้ายคลึงกันของ TLSH แสดงเป็นคะแนนความแตกต่าง:
คะแนน 0 หมายความว่าวัตถุเกือบจะเหมือนกัน
สำหรับแฮช 72 อักขระ จะมีตารางโดยละเอียดของอัตราการตรวจจับเชิงทดลองและอัตราผลบวกลวงตามเกณฑ์ ดูตาราง II ในหน้า 5
ดูโค้ด Python และสมุดบันทึก Jupyter ใน tlshCluster
เราจัดเตรียมโค้ด Python สำหรับวิธี HAC-T นอกจากนี้เรายังจัดเตรียมรหัสเพื่อให้ผู้ใช้สามารถใช้ DBSCAN ได้
เราแสดงให้ผู้ใช้เห็นถึงวิธีการสร้างเดนโดแกรมสำหรับไฟล์ ซึ่งเป็นไดอะแกรมที่มีประโยชน์ซึ่งแสดงความสัมพันธ์ระหว่างไฟล์และกลุ่ม
เรามีเครื่องมือสำหรับการจัดกลุ่มชุดข้อมูล Malware Bazaar ซึ่งมีตัวอย่างไม่กี่แสนตัวอย่าง
วิธี HAC-T ได้รับการอธิบายไว้ใน HAC-T และค้นหาความคล้ายคลึงกันด้านความปลอดภัยอย่างรวดเร็ว
Jonathan Oliver, Chun Cheng และ Yanggui Chen, TLSH - แฮชที่ละเอียดอ่อนในท้องถิ่น การประชุมเชิงปฏิบัติการอาชญากรรมทางไซเบอร์และคอมพิวเตอร์ที่เชื่อถือได้ครั้งที่ 4 ซิดนีย์ พฤศจิกายน 2013
Jonathan Oliver, Scott Forman และ Chun Cheng ใช้การสุ่มเพื่อโจมตีข้อมูลสรุปความคล้ายคลึงกัน ATIS 2014 พฤศจิกายน 2014 หน้า 199-210
โจนาธาน โอลิเวอร์, มูคีต อาลี และโจไซอาห์ ฮาเกน HAC-T และการค้นหาอย่างรวดเร็วเพื่อความคล้ายคลึงกันในการรักษาความปลอดภัย การประชุมนานาชาติปี 2020 เกี่ยวกับระบบอัจฉริยะ Omni-layer (COINS) อีอีอี, 2020.
4.12.1
10/08/2024 รวมคำขอดึง #146 - ลบการเรียกไปที่ sprintf() เพื่อหลีกเลี่ยงคำเตือน รวมคำขอดึง # 141 - py_ext: ใช้ PyVarObject_HEAD แทน PyObject_HEAD_INIT รวมคำขอดึง # 138 - รุ่น: กำหนดตัวเลือกเริ่มต้นเฉพาะใน "ค่าเริ่มต้น" รวมคำขอดึง # 136 - แก้ไขข้อผิดพลาด + ความสามารถในการพกพา: ปรับปรุงความสามารถในการพกพาโดยการแบ่งส่วนรวม
ดู Change_History.md