Triton เป็นไลบรารีการวิเคราะห์ไบนารีแบบไดนามิก มันมีส่วนประกอบภายในที่ช่วยให้คุณสร้างเครื่องมือวิเคราะห์โปรแกรมของคุณ, ทำวิศวกรรมย้อนกลับอัตโนมัติดำเนินการตรวจสอบซอฟต์แวร์หรือเพียงแค่เลียนแบบรหัส
- การดำเนินการ เชิงสัญลักษณ์ แบบไดนามิก
- การวิเคราะห์ TAING TAINT แบบไดนามิก
- AST เป็นตัวแทนของ X86 , X86-64 , ARM32 , AARCH64 และ RISC-V 32/64 ISA Semantic
- การสังเคราะห์ นิพจน์
- SMT Simplification ผ่าน
- ยก เป็น LLVM เช่นเดียวกับ Z3 และกลับ
- SMT Solver Interface ถึง Z3 และ Bitwuzla
- C ++ และ Python API
เนื่องจาก ไทรทัน เป็นโครงการนอกเวลาโปรด อย่าโทษเรา หากไม่น่าเชื่อถืออย่างสมบูรณ์ ปัญหาแบบเปิดหรือคำขอดึงจะดีกว่าการหมุนรอบ =) อย่างไรก็ตามคุณสามารถติดตามการพัฒนาบน Twitter @QB_TRITON
เริ่มต้นอย่างรวดเร็ว
- การติดตั้ง
- Python API
- C ++ API
- ตัวอย่างหลาม
- พวกเขาใช้ไทรทันแล้ว
เริ่มต้น
from triton import *
> >> # Create the Triton context with a defined architecture
>> > ctx = TritonContext ( ARCH . X86_64 )
> >> # Define concrete values (optional)
>> > ctx . setConcreteRegisterValue ( ctx . registers . rip , 0x40000 )
> >> # Symbolize data (optional)
>> > ctx . symbolizeRegister ( ctx . registers . rax , 'my_rax' )
> >> # Execute instructions
>> > ctx . processing ( Instruction ( b" x48 x35 x34 x12 x00 x00 " )) # xor rax, 0x1234
> >> ctx . processing ( Instruction ( b" x48 x89 xc1 " )) # mov rcx, rax
> >> # Get the symbolic expression
>> > rcx_expr = ctx . getSymbolicRegister ( ctx . registers . rcx )
> >> print ( rcx_expr )
( define - fun ref ! 8 () ( _ BitVec 64 ) ref ! 1 ) ; MOV operation - 0x40006 : mov rcx , rax
>> > # Solve constraint
>> > ctx . getModel ( rcx_expr . getAst () == 0xdead )
{ 0 : my_rax : 64 = 0xcc99 }
>> > # 0xcc99 XOR 0x1234 is indeed equal to 0xdead
>> > hex ( 0xcc99 ^ 0x1234 )
'0xdead' ติดตั้ง
Triton อาศัยการพึ่งพาดังต่อไปนี้:
* libcapstone >= 5.0.x https://github.com/capstone-engine/capstone
* libboost (optional) >= 1.68
* libpython (optional) >= 3.6
* libz3 (optional) >= 4.6.0 https://github.com/Z3Prover/z3
* libbitwuzla (optional) >= 0.4.x https://github.com/bitwuzla/bitwuzla
* llvm (optional) >= 12
Linux และ MacOS
$ git clone https://github.com/JonathanSalwan/Triton
$ cd Triton
$ mkdir build ; cd build
$ cmake ..
$ make -j3
$ sudo make install
โดยค่าเริ่มต้น LLVM และ Bitwuzla จะไม่ได้รวบรวม หากคุณต้องการเพลิดเพลินไปกับพลังของไทรทันการคอมไพล์ cmake คือ:
$ cmake -DLLVM_INTERFACE=ON -DCMAKE_PREFIX_PATH= $( llvm-config --prefix ) -DBITWUZLA_INTERFACE=ON ..
MacOS M1 หมายเหตุ:
ในกรณีที่คุณได้รับข้อผิดพลาดในการรวบรวมเช่น:
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
ลองระบุ PYTHON_EXECUTABLE , PYTHON_LIBRARIES และ PYTHON_INCLUDE_DIRS สำหรับรุ่น Python เฉพาะของคุณ:
cmake -DCMAKE_INSTALL_PREFIX=/opt/homebrew/
-DPYTHON_EXECUTABLE=/opt/homebrew/bin/python3
-DPYTHON_LIBRARIES=/opt/homebrew/Cellar/[email protected]/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib
-DPYTHON_INCLUDE_DIRS=/opt/homebrew/opt/[email protected]/Frameworks/Python.framework/Versions/3.10/include/python3.10/
.. ข้อมูลนี้คุณสามารถออกจากตัวอย่างนี้:
from sysconfig import get_paths
info = get_paths ()
print ( info )
หน้าต่าง
คุณสามารถใช้ CMAKE เพื่อสร้างไฟล์. SLN ของ libtriton
> git clone https://github.com/JonathanSalwan/Triton.git
> cd Triton
> mkdir build
> cd build
> cmake -G " Visual Studio 14 2015 Win64 "
-DBOOST_ROOT="C:/Users/jonathan/Works/Tools/boost_1_61_0"
-DPYTHON_INCLUDE_DIRS="C:/Python36/include"
-DPYTHON_LIBRARIES="C:/Python36/libs/python36.lib"
-DZ3_INCLUDE_DIRS="C:/Users/jonathan/Works/Tools/z3-4.6.0-x64-win/include"
-DZ3_LIBRARIES="C:/Users/jonathan/Works/Tools/z3-4.6.0-x64-win/bin/libz3.lib"
-DCAPSTONE_INCLUDE_DIRS="C:/Users/jonathan/Works/Tools/capstone-5.0.1-win64/include"
-DCAPSTONE_LIBRARIES="C:/Users/jonathan/Works/Tools/capstone-5.0.1-win64/capstone.lib" ..
อย่างไรก็ตามหากคุณต้องการดาวน์โหลดไลบรารี Precompiled โดยตรงลองดูสิ่งประดิษฐ์ของ Appveyor ของเรา โปรดทราบว่าหากคุณใช้สิ่งประดิษฐ์ของ Appveyor คุณอาจต้องติดตั้งแพ็คเกจ Visual C ++ ที่แจกจ่ายซ้ำสำหรับ Visual Studio 2012
การติดตั้งจาก VCPKG
พอร์ต Triton ใน VCPKG ได้รับการปรับปรุงโดยสมาชิกในทีม Microsoft และผู้มีส่วนร่วมในชุมชน URL ของ VCPKG คือ: https://github.com/microsoft/vcpkg คุณสามารถดาวน์โหลดและติดตั้ง Triton ได้โดยใช้ VCPKG Perdency Manager:
$ git clone https://github.com/Microsoft/vcpkg.git
$ cd vcpkg
$ ./bootstrap-vcpkg.sh # ./bootstrap-vcpkg.bat for Windows
$ ./vcpkg integrate install
$ ./vcpkg install triton
หากเวอร์ชันล้าสมัยโปรดสร้างปัญหาหรือดึงคำขอบนที่เก็บ VCPKG
ผู้มีส่วนร่วม
- Alberto Garcia Illera - การล่องเรืออัตโนมัติ
- Alexey Vishnyakov - ISP Ras
- สีดำไบนารี - N/A
- Christian Heitman - Quarkslab
- Daniil Kuts - ISP Ras
- Jessy Campos - N/A
- Matteo F. - N/A
- Pierrick Brunet - Quarkslab
- Pixelrick - N/A
- Romain Thomas - Quarkslab
- และอีกมากมาย
พวกเขาใช้ไทรทันแล้ว
เครื่องมือ
- Exrop: การสร้าง ropchain อัตโนมัติ
- PIMP: ปลั๊กอิน R2 ที่ใช้ไทรทันสำหรับการดำเนินการ Concolic และการควบคุมทั้งหมด
- PONCE: ผู้ชนะการประกวดปลั๊กอิน IDA 2016! การดำเนินการเชิงสัญลักษณ์เพียงคลิกเดียว!
- qsynthesis: Greybox synthesizer มุ่งเน้นไปที่ deobfuscation ของคำแนะนำการประกอบ
- Tritondse: ห้องสมุด DSE ที่ใช้ Triton พร้อมความสามารถในการโหลดและการสำรวจ
- Titan: Titan เป็น vmprotect devirtualizer โดยใช้ Triton
เอกสารและการประชุม
- Sydr-Fuzz: การวิเคราะห์แบบไฮบริดอย่างต่อเนื่องและการวิเคราะห์แบบไดนามิกสำหรับวงจรชีวิตการพัฒนาความปลอดภัย
พูดคุยที่ : Ivannikov ISP RAS Open Conference, มอสโก, รัสเซีย, 2022. [กระดาษ] [สไลด์]
ผู้เขียน : Vishnyakov A. , Kuts D. , Logunova V. , Parygina D. , Kobrin E. , Savidov G. , Fedotov A.
บทคัดย่อ : ทุกวันนี้กรอบการวิเคราะห์แบบไดนามิกอัตโนมัติสำหรับการทดสอบอย่างต่อเนื่องนั้นมีความต้องการสูงเพื่อให้แน่ใจว่าซอฟต์แวร์ความปลอดภัยและเป็นไปตามข้อกำหนดการพัฒนาความปลอดภัย (SDL) ประสิทธิภาพการล่าสัตว์ข้อบกพร่องด้านความปลอดภัยของเทคนิคการฟัซซิงแบบลูกผสมที่ทันสมัยมีประสิทธิภาพสูงกว่าการใช้ความครอบคลุมที่ใช้กันอย่างแพร่หลาย เราเสนอท่อวิเคราะห์แบบไดนามิกที่เพิ่มขึ้นเพื่อใช้ประโยชน์จากผลผลิตของการตรวจจับข้อผิดพลาดอัตโนมัติตามการฟัซซิ่งไฮบริด เราใช้งานท่อที่นำเสนอในชุดเครื่องมือฟัซซิ่งอย่างต่อเนื่อง Sydr-Fuzz ซึ่งขับเคลื่อนโดยลูกผสมเลือนแบบผสมผสานการผสมผสานเครื่องมือ DSE ของเรากับ Libfuzzer และ AFL ++ Sydr-Fuzz ยังรวมเอาหมากฮอส Predicate Security, CASR Triaging Triaging CASR และยูทิลิตี้สำหรับการย่อขนาดและการรวบรวมความครอบคลุม การเปรียบเทียบของฟัซเซอร์ไฮบริดของเรากับโซลูชั่นที่ทันสมัยทางเลือกแสดงให้เห็นถึงความเหนือกว่าของฟัซเซอร์ที่ครอบคลุมครอบคลุมในขณะที่ยังคงอยู่ในระดับเดียวกันกับฟัซเปอร์ไฮบริดขั้นสูง นอกจากนี้เราอนุมัติความเกี่ยวข้องของวิธีการของเราโดยการค้นพบข้อบกพร่องของซอฟต์แวร์ในโลกแห่งความเป็นจริง 85 ข้อภายในโครงการ OSS-SYDR-FUZZ ในที่สุดเราเปิดซอร์สโค้ด CASR ให้กับชุมชนเพื่ออำนวยความสะดวกในการตรวจสอบการล่มที่มีอยู่
- การแก้ปัญหาในแง่ดีสำหรับการดำเนินการเชิงสัญลักษณ์แบบไดนามิก
พูดคุยที่ : Ivannikov Memorial Workshop, Kazan, รัสเซีย, 2022. [กระดาษ] [Slide]
ผู้เขียน : Parygina D. , Vishnyakov A. , Fedotov A.
บทคัดย่อ : การดำเนินการเชิงสัญลักษณ์แบบไดนามิก (DSE) เป็นวิธีที่มีประสิทธิภาพสำหรับการทดสอบโปรแกรมอัตโนมัติและการตรวจจับข้อผิดพลาด มันกำลังเพิ่มการครอบคลุมรหัสโดยการสำรวจสาขาที่ซับซ้อนในระหว่างการฟัซซิ่งลูกผสม เครื่องมือ DSE จะกลับสาขาไปตามเส้นทางการดำเนินการบางอย่างและช่วยให้ฟัซเซอร์ตรวจสอบชิ้นส่วนโปรแกรมที่ไม่สามารถใช้งานได้ก่อนหน้านี้ DSE มักเผชิญกับปัญหาที่เกิดขึ้นมากเกินไป คนแรกนำไปสู่ภาวะแทรกซ้อนจากการวิเคราะห์ที่สำคัญในขณะที่อันที่สองทำให้เกิดการดำเนินการเชิงสัญลักษณ์ที่ไม่ถูกต้อง เราเสนอวิธีการแก้ปัญหาในแง่ดีที่จะกำจัดข้อ จำกัด ของเส้นทางที่ไม่เกี่ยวข้องสำหรับการผกผันสาขาเป้าหมาย เรากำจัดข้อ จำกัด เชิงสัญลักษณ์ดังกล่าวว่าสาขาเป้าหมายไม่ได้ขึ้นอยู่กับการควบคุม ยิ่งไปกว่านั้นเราจัดการแยกสาขาสัญลักษณ์ที่มีคำแนะนำการถ่ายโอนการควบคุมแบบซ้อนที่ผ่านการควบคุมนอกเหนือจากขอบเขตสาขาแม่เช่นการกลับมา, goto, break, ฯลฯ เราใช้วิธีการที่นำเสนอในเครื่องมือการดำเนินการเชิงสัญลักษณ์แบบไดนามิกของเรา Sydr เราประเมินกลยุทธ์ในแง่ดีที่แข็งแกร่งกลยุทธ์ในแง่ดีที่มีเพียงการปฏิเสธข้อ จำกัด ครั้งสุดท้ายและการรวมกันของพวกเขา ผลลัพธ์แสดงให้เห็นว่าการรวมกันของกลยุทธ์ช่วยเพิ่มความครอบคลุมของรหัสหรือจำนวนเฉลี่ยของสาขาคว่ำอย่างถูกต้องต่อหนึ่งนาที เป็นการดีที่สุดที่จะใช้กลยุทธ์ทั้งสองเข้าด้วยกันในทางตรงกันข้ามกับการกำหนดค่าอื่น ๆ
- การสังเคราะห์โปรแกรม greybox: วิธีการใหม่ในการโจมตี dataflow obfuscation
พูดคุยที่ : Blackhat USA, Las Vegas, Nevada, 2021. [Slide]
ผู้เขียน : Robin David
บทคัดย่อ : การพูดคุยนี้นำเสนอความก้าวหน้าล่าสุดในการสังเคราะห์โปรแกรมที่ใช้สำหรับ deobfuscation มันมีจุดมุ่งหมายที่ demystifying เทคนิคการวิเคราะห์นี้โดยแสดงให้เห็นว่ามันสามารถนำไปปฏิบัติในการทำให้งงงวยได้อย่างไร โดยเฉพาะอย่างยิ่งการใช้งาน qsynthesis ที่ปล่อยออกมาสำหรับการพูดคุยนี้แสดงให้เห็นถึงเวิร์กโฟลว์แบบ end-to-end ที่สมบูรณ์เพื่อคำแนะนำการประกอบแบบ deobfuscate กลับมาเป็นคำแนะนำที่ดีที่สุด
- จากซอร์สโค้ดไปจนถึงการทดสอบกรณีทดสอบผ่านระบบอัตโนมัติการทดสอบซอฟต์แวร์อัตโนมัติ
พูดคุยที่ : C & Esar, Rennes, ฝรั่งเศส, 2021. [กระดาษ] [Slide]
ผู้เขียน : Robin David, Jonathan Salwan, Justin Bourroux
บทคัดย่อ : บทความนี้นำเสนอวิธีการโดยอัตโนมัติกระบวนการทดสอบซอฟต์แวร์จากซอร์สโค้ดไปยังการทดสอบแบบไดนามิกของโปรแกรมที่รวบรวม โดยเฉพาะอย่างยิ่งจากรายงานการวิเคราะห์แบบคงที่ที่ระบุการแจ้งเตือนเกี่ยวกับสายแหล่งที่มาช่วยให้สามารถทดสอบได้ครอบคลุมสายเหล่านี้แบบไดนามิกและฉวยโอกาสว่าจะทำให้เกิดความผิดพลาดหรือไม่ ผลที่ได้คือคลังการทดสอบที่อนุญาตให้ครอบคลุมการแจ้งเตือนและเรียกพวกเขาหากพวกเขาเกิดขึ้นเป็นข้อดีที่แท้จริง บทความนี้หารือเกี่ยวกับวิธีการที่ใช้ในการติดตามการแจ้งเตือนในไบนารีที่รวบรวมกระบวนการเลือกเครื่องมือทดสอบและผลลัพธ์ที่ได้จากการใช้งาน TCP/IP stack สำหรับระบบฝังตัวและ IoT
- แผนการรักษาความปลอดภัยเชิงสัญลักษณ์: ความอ่อนแอของโปรแกรมการล่า
พูดคุยที่ : Ivannikov ISP RAS Open Conference, มอสโก, รัสเซีย, 2021. [กระดาษ] [สไลด์]
ผู้เขียน : A.Vishnyakov, V.Logunova, E.Kobrin, D.Kuts, D.Parygina, A.Fedotov
บทคัดย่อ : การดำเนินการเชิงสัญลักษณ์แบบไดนามิก (DSE) เป็นวิธีที่ทรงพลังสำหรับการสำรวจเส้นทางในระหว่างการฟัซซิ่งลูกผสมและการตรวจจับข้อผิดพลาดอัตโนมัติ เราเสนองานแสดงความปลอดภัยเพื่อตรวจจับพฤติกรรมที่ไม่ได้กำหนดและข้อผิดพลาดการละเมิดการเข้าถึงหน่วยความจำได้อย่างมีประสิทธิภาพ เริ่มแรกเราดำเนินการโปรแกรมเป็นสัญลักษณ์บนเส้นทางที่ไม่ก่อให้เกิดข้อผิดพลาดใด ๆ (ไฮบริดฟัซซิ่งอาจสำรวจเส้นทางเหล่านี้) จากนั้นเราก็สร้างความปลอดภัยเชิงสัญลักษณ์เพื่อตรวจสอบเงื่อนไขข้อผิดพลาดบางอย่าง ดังนั้นเราอาจเปลี่ยนโฟลว์ข้อมูลของโปรแกรมเพื่อนำมาซึ่งการอ้างอิงตัวชี้ NULL, การหารด้วยศูนย์, การเข้าถึงนอกขอบเขตหรือจุดอ่อนล้นจำนวนเต็ม ซึ่งแตกต่างจากการวิเคราะห์แบบคงที่การดำเนินการเชิงสัญลักษณ์แบบไดนามิกไม่เพียง แต่รายงานข้อผิดพลาด แต่ยังสร้างข้อมูลอินพุตใหม่เพื่อทำซ้ำ นอกจากนี้เรายังแนะนำการสร้างแบบจำลองความหมายของฟังก์ชั่นสำหรับฟังก์ชั่นไลบรารีมาตรฐาน C/C ++ ทั่วไป เราตั้งเป้าหมายที่จะจำลองการไหลของการควบคุมภายในฟังก์ชั่นที่มีสูตรสัญลักษณ์เดียว สิ่งนี้ช่วยตรวจจับข้อผิดพลาดเร่งความเร็วในการสำรวจเส้นทางและเอาชนะข้อ จำกัด overcesints ใน Path Predicate เราใช้เทคนิคที่เสนอในเครื่องมือการดำเนินการเชิงสัญลักษณ์แบบไดนามิกของเรา ดังนั้นเราจึงใช้วิธีการที่ทรงพลังจาก SYDR เช่น Path Predicate Slicing ที่กำจัดข้อ จำกัด ที่ไม่เกี่ยวข้อง เรานำเสนอ Juliet Dynamic เพื่อวัดความแม่นยำของเครื่องมือตรวจจับข้อผิดพลาดแบบไดนามิก ระบบทดสอบยังตรวจสอบว่าอินพุตที่สร้างขึ้นทำให้เกิด sanitizers เราประเมินความแม่นยำของ SYDR สำหรับ 11 CWEs จาก Juliet Test Suite SYDR แสดงความแม่นยำโดยรวม 95.59% เราจัดทำสิ่งประดิษฐ์การประเมินผล SYDR แบบสาธารณะเพื่ออำนวยความสะดวกในการทำซ้ำผลลัพธ์
- ไปสู่การให้เหตุผลพอยน์เตอร์สัญลักษณ์ในการดำเนินการเชิงสัญลักษณ์แบบไดนามิก
พูดคุยที่ : Ivannikov Memorial Workshop, Nizhny Novgorod, รัสเซีย, 2021. [กระดาษ] [Slide]
ผู้เขียน : Daniil Kuts
บทคัดย่อ : การดำเนินการเชิงสัญลักษณ์แบบไดนามิกเป็นเทคนิคที่ใช้กันอย่างแพร่หลายสำหรับการทดสอบซอฟต์แวร์อัตโนมัติที่ออกแบบมาสำหรับการสำรวจเส้นทางการดำเนินการและการตรวจจับข้อผิดพลาดของโปรแกรม วิธีการไฮบริดได้กลายเป็นที่แพร่หลายเมื่อเร็ว ๆ นี้เมื่อเป้าหมายหลักของการดำเนินการเชิงสัญลักษณ์กำลังช่วยให้การครอบคลุมโปรแกรมเพิ่มฟัซเซอร์ ยิ่งผู้บริหารสัญลักษณ์ที่เป็นสัญลักษณ์สามารถกลับด้านได้มากเท่าไหร่ก็ยิ่งมีประโยชน์มากขึ้นสำหรับฟัซเซอร์ โฟลว์การควบคุมของโปรแกรมมักขึ้นอยู่กับค่าหน่วยความจำซึ่งได้มาจากการคำนวณดัชนีที่อยู่จากอินพุตผู้ใช้ อย่างไรก็ตามเครื่องมือ DSE ส่วนใหญ่ไม่สนับสนุนการพึ่งพาเช่นนี้ดังนั้นพวกเขาจึงพลาดสาขาโปรแกรมที่ต้องการ เราใช้ที่อยู่สัญลักษณ์ที่ให้เหตุผลในการอ่านหน่วยความจำในเครื่องมือการดำเนินการเชิงสัญลักษณ์แบบไดนามิกของเรา Sydr ภูมิภาคการเข้าถึงหน่วยความจำที่เป็นไปได้จะถูกกำหนดโดยการวิเคราะห์ที่อยู่หน่วยความจำนิพจน์สัญลักษณ์ที่เป็นสัญลักษณ์หรือการค้นหาแบบไบนารีด้วย SMT-Solver เราเสนอเทคนิคการทำให้เป็นเส้นตรงที่เพิ่มขึ้นเพื่อสร้างโมเดลการเข้าถึงหน่วยความจำ วิธีการสร้างแบบจำลองหน่วยความจำที่แตกต่างกันถูกนำมาเปรียบเทียบกับชุดของโปรแกรม การประเมินผลของเราแสดงให้เห็นว่าการจัดการที่อยู่สัญลักษณ์ช่วยให้สามารถค้นพบสาขาสัญลักษณ์ใหม่และเพิ่มความครอบคลุมของโปรแกรม
- qsynth: วิธีการสังเคราะห์โปรแกรมสำหรับรหัสไบนารี deobfuscation
พูดคุยที่ : บาร์ซานดิเอโกแคลิฟอร์เนีย 2563 [กระดาษ]
ผู้เขียน : Robin David, Luigi Coniglio, Mariano Ceccato
บทคัดย่อ : เรานำเสนอวิธีการทั่วไปที่ใช้ประโยชน์จากการสังเคราะห์ DSE และโปรแกรมเพื่อสังเคราะห์โปรแกรมที่ประสบความสำเร็จในการทำให้งงงวยด้วยการผสมแบบผสม-อาณานิคมการเข้ารหัสข้อมูลหรือการจำลองเสมือน อัลกอริทึมการสังเคราะห์ที่เสนอคือการสังเคราะห์แบบออฟไลน์แบบออฟไลน์ที่มีการชี้นำโดยการค้นหาด้วยลมหายใจจากบนลงล่าง เราแสดงให้เห็นถึงประสิทธิภาพของมันต่อผู้ทำลายล้างที่ล้ำสมัยและความสามารถในการปรับขนาดของมันในขณะที่มันแทนที่วิธีการอื่นที่คล้ายกันตามการสังเคราะห์ นอกจากนี้เรายังแสดงให้เห็นถึงประสิทธิภาพในการปรากฏตัวของการทำให้งงงวยคอมโพสิต (การรวมกันของเทคนิคต่าง ๆ ) การทำงานอย่างต่อเนื่องนี้ให้ความกระจ่างเกี่ยวกับประสิทธิภาพของการสังเคราะห์เพื่อกำหนดเป้าหมายการทำให้งงงวยบางประเภทและเปิดทางสู่อัลกอริทึมที่แข็งแกร่งยิ่งขึ้นและกลยุทธ์การทำให้เข้าใจง่าย
- Sydr: การดำเนินการเชิงสัญลักษณ์แบบไดนามิกที่ทันสมัย
พูดคุยที่ : Ivannikov ISP RAS Open Conference, Moscow, Russia, 2020. [กระดาษ] [Slide] [วิดีโอ]
ผู้เขียน : A.Vishnyakov, A.Fedotov, D.Kuts, A.Novikov, D.Parygina, E.Kobrin, V.Logunova, P.Belecky, S.Kurmangaleev
บทคัดย่อ : การดำเนินการเชิงสัญลักษณ์แบบไดนามิก (DSE) มีแอพพลิเคชั่นจำนวนมหาศาลในการรักษาความปลอดภัยคอมพิวเตอร์ (ฟัซซิง, การค้นพบช่องโหว่, การย้อนกลับ-วิศวกรรม ฯลฯ ) เราเสนอการปรับปรุงประสิทธิภาพและความแม่นยำหลายประการสำหรับการดำเนินการเชิงสัญลักษณ์แบบไดนามิก การข้ามคำแนะนำที่ไม่ใช่สัญลักษณ์ช่วยให้สามารถสร้างเส้นทางการแสดงผลได้เร็วขึ้น 1.2--3.5 เท่า เครื่องยนต์สัญลักษณ์ช่วยลดความซับซ้อนของสูตรในระหว่างการดำเนินการเชิงสัญลักษณ์ PATH PREEDICATION SLICING จะช่วยลดการเชื่อมต่อที่ไม่เกี่ยวข้องจากการสืบค้นตัวแก้ปัญหา เราจัดการแต่ละตารางกระโดด (คำสั่งสวิตช์) เป็นหลายสาขาและอธิบายวิธีการดำเนินการเชิงสัญลักษณ์ของโปรแกรมมัลติเธรด โซลูชันที่เสนอถูกนำไปใช้ในเครื่องมือ SYDR SYDR ดำเนินการผกผันของสาขาในเส้นทาง PATH SYDR รวมเครื่องมือเครื่องมือวัดไบนารีไดนามิกแบบไดนามิกเข้ากับเครื่องยนต์สัญลักษณ์ไทรทัน
- สัญลักษณ์ deobfuscation: จากรหัสเสมือนจริงกลับไปเป็นต้นฉบับ
พูดคุยที่ : Dimva, Paris-Saclay, ฝรั่งเศส, 2018 [กระดาษ] [Slide]
ผู้เขียน : Jonathan Salwan, Sébastien Bardin, Marie-Laure Potet
บทคัดย่อ : การป้องกันซอฟต์แวร์ได้เป็นสถานที่สำคัญในช่วงทศวรรษที่ผ่านมาเพื่อปกป้องซอฟต์แวร์ที่ถูกต้องจากวิศวกรรมย้อนกลับหรือการดัดแปลง การจำลองเสมือนถือเป็นหนึ่งในการป้องกันที่ดีที่สุดต่อการโจมตีดังกล่าว เรานำเสนอวิธีการทั่วไปโดยใช้การสำรวจเส้นทางสัญลักษณ์, taint และ recompilation อนุญาตให้กู้คืนจากรหัสเสมือนจริง, รหัส devirtualized ความหมายเหมือนกันกับต้นฉบับและปิดขนาด เรากำหนดเกณฑ์และตัวชี้วัดเพื่อประเมินความเกี่ยวข้องของผลลัพธ์ deobfuscated ในแง่ของความถูกต้องและความแม่นยำ ในที่สุดเราก็เสนอการตั้งค่าโอเพนซอร์ซที่อนุญาตให้ประเมินวิธีการที่เสนอกับการจำลองเสมือนหลายรูปแบบ
- Deobfuscation ของการป้องกันซอฟต์แวร์ที่ใช้ VM
พูดคุยที่ : Sstic, Rennes, ฝรั่งเศส, 2017. [กระดาษฝรั่งเศส] [ภาษาอังกฤษสไลด์] [วิดีโอภาษาฝรั่งเศส]
ผู้เขียน : Jonathan Salwan, Sébastien Bardin, Marie-Laure Potet
บทคัดย่อ : ในงานนำเสนอนี้เราอธิบายวิธีการที่ประกอบด้วยการวิเคราะห์การป้องกันซอฟต์แวร์ที่ใช้เครื่องเสมือนโดยอัตโนมัติ วิธีการอัตโนมัตินี้ขึ้นอยู่กับคู่มือการดำเนินการเชิงสัญลักษณ์โดยการวิเคราะห์ taint และนโยบายการทำให้เป็นรูปธรรมบางอย่างจากนั้นในการเขียนแบบไบนารีใหม่โดยใช้การเปลี่ยนแปลง LLVM
- ไทรทันสามารถช่วยในการย้อนกลับการป้องกันซอฟต์แวร์ที่ใช้เครื่องเสมือนได้อย่างไร
พูดคุยที่ : CSAW SOS, NYC, New York, 2016. [Slide]
ผู้เขียน : Jonathan Salwan, Romain Thomas
บทคัดย่อ : ส่วนแรกของการพูดคุยคือการแนะนำกรอบการทำงานของไทรทันเพื่อเปิดเผยส่วนประกอบและอธิบายวิธีการทำงานร่วมกัน จากนั้นส่วนที่สองจะรวมถึงการสาธิตเกี่ยวกับวิธีที่เป็นไปได้ที่จะย้อนกลับการป้องกันที่ใช้เครื่องเสมือนโดยใช้การวิเคราะห์ taint, การดำเนินการเชิงสัญลักษณ์, การทำให้เข้าใจง่าย SMT และการเพิ่มประสิทธิภาพ LLVM-IR
- การวิเคราะห์ไบนารีแบบไดนามิกและรหัสที่ทำให้งง
พูดคุยที่ : St'Hack, Bordeaux, ฝรั่งเศส, 2016. [Slide]
ผู้เขียน : Jonathan Salwan, Romain Thomas
บทคัดย่อ : ในงานนำเสนอนี้เราจะพูดคุยเกี่ยวกับวิธีการที่ DBA (การวิเคราะห์แบบไบนารีแบบไดนามิก) อาจช่วยให้วิศวกรย้อนกลับสามารถย้อนกลับรหัสที่สับสนได้ ก่อนอื่นเราจะแนะนำเทคนิคการทำให้งงขั้นพื้นฐานบางอย่างจากนั้นเปิดเผยว่ามันเป็นไปได้ที่จะทำลายบางสิ่งบางอย่าง (โดยใช้กรอบ DBA โอเพนซอร์ซของเรา - Triton) เช่นตรวจจับการประนีประนอมทึบแสงสร้าง CFG ใหม่ค้นหาอัลกอริทึมดั้งเดิม
- ไทรทันอาจช่วยวิเคราะห์ไบนารีที่ทำให้งงงวยได้อย่างไร
สิ่งพิมพ์ที่ : Misc Magazine 82, 2015. [บทความภาษาฝรั่งเศส]
ผู้เขียน : Jonathan Salwan, Romain Thomas
บทคัดย่อ : การทำให้งงงวยไบนารีใช้เพื่อปกป้องทรัพย์สินทางปัญญาของซอฟต์แวร์ มีการศึกษาแบบแตกต่างกัน แต่คร่าวๆมันเปลี่ยนโครงสร้างไบนารีให้เป็นโครงสร้างไบนารีอื่นโดยรักษาความหมายเดียวกัน จุดมุ่งหมายของการทำให้งงงวยคือเพื่อให้แน่ใจว่าข้อมูลดั้งเดิมคือ "จมน้ำตาย" ในข้อมูลที่ไร้ประโยชน์ซึ่งจะทำให้วิศวกรรมย้อนกลับยากขึ้น ในบทความนี้เราจะแสดงให้เห็นว่าเราสามารถวิเคราะห์โปรแกรมที่มีการสร้างความซับซ้อนและทำลายการทำให้งงงวยโดยใช้ Triton Framework
- Triton: กรอบการดำเนินการ Concolic
พูดคุยที่ : Sstic, Rennes, ฝรั่งเศส, 2015. [กระดาษฝรั่งเศส] [รายละเอียดภาษาอังกฤษสไลด์]
ผู้เขียน : Jonathan Salwan, Florent Saudel
บทคัดย่อ : การพูดคุยนี้เกี่ยวกับการเปิดตัวของ Triton ซึ่งเป็นกรอบการดำเนินการ Concolic ตาม PIN มันมีส่วนประกอบเช่นเอ็นจิ้น Taint, เครื่องมือดำเนินการเชิงสัญลักษณ์แบบไดนามิก, เครื่องยนต์สแน็ปช็อต, การแปลคำสั่ง x64 เป็น SMT2, อินเทอร์เฟซ Z3 เพื่อแก้ข้อ จำกัด และการผูก python จากส่วนประกอบเหล่านี้ Triton เสนอความเป็นไปได้ในการสร้างเครื่องมือสำหรับการวิจัยช่องโหว่หรือความช่วยเหลือด้านวิศวกรรมย้อนกลับ
- การวิเคราะห์พฤติกรรมแบบไดนามิกโดยใช้เครื่องมือไบนารี
พูดคุยที่ : St'Hack, Bordeaux, ฝรั่งเศส, 2015. [Slide]
ผู้เขียน : Jonathan Salwan
บทคัดย่อ : การพูดคุยนี้ถือได้ว่าเป็นส่วนที่ 2 ของการพูดคุยของเรา ณ วันรักษาความปลอดภัย ในส่วนก่อนหน้านี้เราได้พูดคุยเกี่ยวกับวิธีที่เป็นไปได้ที่จะครอบคลุมฟังก์ชั่นเป้าหมายในหน่วยความจำโดยใช้วิธี DSE (Dynamic Symbolic Execution) ครอบคลุมฟังก์ชั่น (หรือสถานะของมัน) ไม่ได้หมายความว่าพบช่องโหว่ทั้งหมดช่องโหว่บางอย่างไม่ล่มโปรแกรม นั่นเป็นเหตุผลที่เราต้องใช้การวิเคราะห์เฉพาะเพื่อค้นหาข้อบกพร่องเฉพาะ การวิเคราะห์เหล่านี้ขึ้นอยู่กับเครื่องมือไบนารีและการวิเคราะห์พฤติกรรมรันไทม์ของโปรแกรม ในการพูดคุยนี้เราจะเห็นว่าเป็นไปได้อย่างไรที่จะค้นหาข้อบกพร่องประเภทนี้ได้อย่างไร: แบบปิดโดยหนึ่ง, สแต็ก / ฮีปล้น, ใช้-ฟรี, สตริงรูปแบบและ {เขียน, อ่าน}-What-what
- ครอบคลุมฟังก์ชั่นโดยใช้วิธีการดำเนินการเชิงสัญลักษณ์แบบไดนามิก
พูดคุยที่ : วันรักษาความปลอดภัย, ลีล, ฝรั่งเศส, 2015. [สไลด์]
ผู้เขียน : Jonathan Salwan
บทคัดย่อ : การพูดคุยนี้เกี่ยวกับการวิเคราะห์แบบไบนารีและเครื่องมือวัด เราจะเห็นว่าเป็นไปได้อย่างไรที่จะกำหนดเป้าหมายฟังก์ชั่นเฉพาะสแนปชอตหน่วยความจำบริบท/การลงทะเบียนก่อนฟังก์ชั่นแปลเครื่องมือวัดเป็นตัวแทนระดับกลางใช้การวิเคราะห์ taint ตาม IR นี้สร้าง/เก็บสูตรสำหรับการดำเนินการเชิงสัญลักษณ์แบบไดนามิก (DSE)
อ้างอิงไทรทัน
@inproceedings{SSTIC2015-Saudel-Salwan,
author = {Saudel, Florent and Salwan, Jonathan},
title = {Triton: A Dynamic Symbolic Execution Framework},
booktitle = {Symposium sur la s{ ' {e}}curit{ ' {e}} des technologies de l'information
et des communications},
series = {SSTIC},
pages = {31--54},
address = {Rennes, France},
month = jun,
year = {2015},
}