Тритон является динамической библиотекой бинарного анализа. Он предоставляет внутренние компоненты, которые позволяют создавать инструменты анализа программы, автоматизировать обратную инженерию, выполнять проверку программного обеспечения или просто эмулировать код.
- Динамическое символическое исполнение
- Динамический анализ Deance
- AST представление X86 , x86-64 , ARM32 , AARCH64 и RISC-V 32/64 ISA Semantic
- Синтез выражений
- Упрощение SMT проходит
- Подъем в LLVM , а также Z3 и обратно
- Интерфейс SMT Solver до Z3 и Bitwuzla
- C ++ и Python API
Поскольку Triton -это своего рода проект, неполный рабочий день, пожалуйста, не вините нас, если он не полностью надежен. Открытые проблемы или запросы на привлечение всегда лучше, чем троллинг =). Тем не менее, вы можете следить за разработкой в Twitter @QB_TRITON.
Быстрый старт
- Установка
- Python API
- C ++ API
- Примеры Python
- Они уже использовали Тритон
Начиная
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' Установить
Тритон полагается на следующие зависимости:
* 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 не составлены. Если вы хотите насладиться всей силой Triton, Cmake Compil:
$ 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" ..
Однако, если вы предпочитаете напрямую загружать предварительную библиотеку, ознакомьтесь с артефактами нашего приложения. Обратите внимание, что если вы используете артефакты Appveyor, вам, вероятно, необходимо установить визуальные перераспределяемые пакеты C ++ для Visual Studio 2012.
Установка из VCPKG
Порт Triton в VCPKG обновляется членами команды Microsoft и участниками сообщества. URL VCPKG: https://github.com/microsoft/vcpkg. Вы можете скачать и установить Triton, используя VCPKG DevingDency 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.
Участники
- Альберто Гарсия Иллера - Круиз АОТУМАЦИЯ
- Алексей Вишняков - провайдер Рас
- Черный бинарный - n/a
- Кристиан Хейтман - Quarkslab
- Даниил Кутс - провайдер Рас
- Джесси Кампос - N/A
- Matteo F. - N/A
- Пьеррик Брюне - Quarkslab
- Pixelrick - N/A.
- Ромен Томас - Quarkslab
- И многое другое
Они уже использовали Тритон
Инструменты
- Exrop: Автоматическое поколение Ropchain.
- Сутенер: плагин R2 на основе Triton для составного выполнения и общего контроля.
- Ponce: победитель конкурса плагинов IDA 2016! Символическое исполнение всего на одном щелчке!
- QSyntheesis: синтезатор Greybox, предназначенный для деобфуссации инструкций сборки.
- Tritondse: библиотека DSE на основе Тритона с возможностями загрузки и разведки.
- Титан: Титан - это VMProtect Devirtualizer с использованием Triton.
Документы и конференция
- Sydr-Fuzz: непрерывный гибридный нечеткий и динамический анализ для жизненного цикла развития безопасности
Разговоры по адресу : Ivannikov ISP RAS Open Conference, Москва, Россия, 2022. [Paper] [Слайд]
Авторы : Вишняков А., Кутс Д., Логонова В., Паригина Д., Кобрин Э., Савидов Г., Федотов А.
Аннотация : В настоящее время автоматизированные рамки динамического анализа для непрерывного тестирования пользуются высоким спросом для обеспечения безопасности программного обеспечения и удовлетворения требований жизненного цикла развития безопасности (SDL). Эффективность охоты на ошибки в безопасности ультрасовременных методов гибридных пушинов, превосходящих широко используемые пузырьки с покрытием. Мы предлагаем расширенный динамический анализ конвейера для использования производительности автоматического обнаружения ошибок на основе гибридного пушина. Мы реализуем предложенный трубопровод в непрерывном наборе инструментов Fuzzing Sydr-Fuzz, который оснащен гибридным пузырьковым оркестровром, интегрируя наш инструмент DSE Sydr с Libfuzzer и AFL ++. Sydr-Fuzz также включает в себя контролировщики предиката безопасности, инструмент с аварийным дремлютом CASR и коммунальные услуги для минимизации корпуса и сбора покрытия. Бесцена нашего гибридного фьюззера против альтернативных современных решений демонстрирует его превосходство по сравнению с пузырьками с покрытием, оставаясь на том же уровне с усовершенствованными гибридными пумпамерами. Кроме того, мы одобряем актуальность нашего подхода, обнаружив 85 новых реальных программных недостатков в рамках проекта OSS-Sydr-Fuzz. Наконец, мы открываем исходный код CASR для сообщества, чтобы облегчить проверку существующих сбоев.
- Сильное оптимистическое решение для динамического символического исполнения
Разговор на : Мемориальный семинар Иваников, Казань, Россия, 2022. [бумага] [Слайд]
Авторы : Паригина Д., Вишняков А., Федотов А.
Аннотация : Динамическое символическое выполнение (DSE) является эффективным методом для автоматического тестирования программы и обнаружения ошибок. Это увеличивает охват кода в результате разведки сложных ветвей во время гибридного нечетки. Инструменты DSE инвертируют филиалы вдоль некоторого пути выполнения и помогают изучить Fuzzer, ранее недоступные детали программы. DSE часто сталкивается с проблемами с чрезмерным и недооцененным. Первый приводит к значительному анализу осложнения, в то время как второй вызывает неточное символическое исполнение. Мы предлагаем сильный метод оптимистического решения, который устраняет нерелевантные ограничения предиката пути для инверсии целевой ветви. Мы устраняем такие символические ограничения, от которых целевая ветвь не зависит от контроля. Более того, мы отдельно обрабатываем символические ветви, которые имеют вложенные инструкции по передаче управления, которые проходят управление за пределами мастерской филиала, например, возврата, GOTO, разрыва и т. Д. Мы реализуем предлагаемый метод в нашем инструменте динамического символического выполнения Sydr. Мы оцениваем сильную оптимистическую стратегию, оптимистическую стратегию, которая содержит только последнее отрицание ограничения и их комбинацию. Результаты показывают, что комбинация стратегий помогает увеличить покрытие кода или среднее количество правильно перевернутых ветвей за одну минуту. Оптимально применять обе стратегии вместе в отличие от других конфигураций.
- Синтез программы Greybox: новый подход к запутыванию данных атаки данных
Разговор на : Блэкхат, США, Лас -Вегас, Невада, 2021. [Слайд]
Авторы : Робин Дэвид
Аннотация : Этот разговор представляет последние достижения в области синтеза программы, применяемых для деобфускации. Он направлен на демистификацию этой техники анализа, показывая, как его можно вступить в действие при запутывании. Особенно в реализации Qsyntheesis, выпущенной для этого разговора, показывает полный сквозной рабочий процесс для инструкций Deobfuscate сборки обратно в оптимизированных (деобусцированных) инструкциях, собравшихся обратно в двоичный.
- От исходного кода до сбоя тестирования через автоматизацию тестирования программного обеспечения
Разговоры по адресу : C & Esar, Rennes, France, 2021. [Paper] [Слайд]
Авторы : Робин Дэвид, Джонатан Салван, Джастин Борру
Аннотация : В этом документе представлен подход, автоматизирующий процесс тестирования программного обеспечения из исходного кода в динамическое тестирование скомпилированной программы. Более конкретно, из отчета о статическом анализе, указывающем предупреждения о исходных линиях, он позволяет тестировать, чтобы раскрыть эти линии динамически и оппортунистически проверять, могут ли они вызвать сбой. Результатом является тестовый корпус, позволяющий покрывать оповещения и вызвать их, если они оказываются истинными положительными. В этой статье обсуждается методология, используемая для отслеживания оповещений в скомпилированном двоичном файле, процессе выбора тестирования двигателей и результатов, полученных в реализации стека TCP/IP для систем встроенных и IoT.
- Символические предикаты безопасности: недостатки программы охоты
Разговоры по адресу : Ivannikov ISP RAS Open Conference, Москва, Россия, 2021 год. [Paper] [Слайд]
Авторы : A.Vishnyakov, V.Logunova, E.Kobrin, D.Kuts, D.Parygina, A.Fedotov
Аннотация : Динамическое символическое выполнение (DSE) - это мощный метод исследования пути во время гибридного нечеткого и автоматического обнаружения ошибок. Мы предлагаем предикаты безопасности эффективно обнаружить неопределенное поведение и ошибки по нарушению доступа к памяти. Первоначально мы символически выполняем программу по путям, которые не запускают любые ошибки (гибридный пузырь может исследовать эти пути). Затем мы построим символический предикат безопасности, чтобы проверить некоторое условие ошибки. Таким образом, мы можем изменить поток данных программы, чтобы повлечь за собой Null Pointer Dereference, деление на нулевой, вне доступа или недостатки целочисленного переполнения. В отличие от статического анализа, динамическое символическое выполнение не только сообщает об ошибках, но и генерирует новые входные данные для их воспроизведения. Кроме того, мы вводим функциональное моделирование семантики для общих стандартных библиотечных функций C/C ++. Мы стремимся моделировать поток управления внутри функции с помощью одной символической формулы. Это помогает обнаружить ошибку, ускоряет исследование пути и преодолевает чрезмерные конструкции в предикате пути. Мы реализуем предлагаемые методы в нашем инструменте динамического символического выполнения Sydr. Таким образом, мы используем мощные методы из SYDR, такие как нарезка предиката пути, которые устраняют не относящиеся к делу ограничения. Мы представляем динамику Джульетты для измерения точности инструментов обнаружения ошибок. Система тестирования также проверяет, что сгенерированные входы запускают дезинфицирующие средства. Мы оцениваем точность SYDR для 11 CWE из Test Suite Juliet. SYDR показывает 95,59% общую точность. Мы делаем артефакты оценки SYDR публично доступными, чтобы облегчить воспроизводимость результатов.
- К символическим указателям рассуждения в динамическом символическом исполнении
Разговор на : Мемориальная мастерская Иваников, Нижни Новгород, Россия, 2021 год. [Paper] [Слайд]
Авторы : Даниил Кутс
Аннотация : Динамическое символическое выполнение является широко используемым методом для автоматического тестирования программного обеспечения, разработанной для разведки путей выполнения и обнаружения ошибок программы. Гибридный подход в последнее время стал широко распространенным, когда основной целью символического исполнения является помощь в расширении программы Fuzzer. Чем больше ветвей символический исполнитель может инвертировать, тем более он полезен для Fuzzer. Поток управления программой часто зависит от значений памяти, которые получаются путем вычисления индексов адресов от пользовательского ввода. Тем не менее, большинство инструментов DSE не поддерживают такие зависимости, поэтому они пропускают некоторые желаемые филиалы программы. Мы реализуем символические адреса рассуждения о чтениях памяти в нашем инструменте динамического символического выполнения Sydr. Возможные области доступа к памяти определяются либо путем анализа символических выражений адреса памяти, либо бинарного поиска с SMT-Solver. Мы предлагаем улучшенную технику линеаризации для моделирования доступа к памяти. Различные методы моделирования памяти сравниваются на наборе программ. Наша оценка показывает, что обработка символических адресов позволяет обнаружить новые символические ветви и увеличивать охват программы.
- QSynth: подход, основанный на синтезе программы для бинарного кода Deobfuscation
Разговоры по адресу : bar, Сан -Диего, Калифорния, 2020. [Бумага]
Авторы : Робин Дэвид, Луиджи Конильо, Мариано Чеккато
Аннотация : Мы представляем общий подход, использующий как DSE, так и синтез программы для успешного синтеза программ, запутанных с помощью смешанного булевого арифметика, кодирования данных или виртуализации. Предложенный алгоритм синтеза представляет собой не в автономном перечисленном синтезе, примитивный руководство, руководствуясь поиском нисходящего дыхания. Мы демонстрируем его эффективность против современного сфускатора и его масштабируемости, поскольку он заменяет другие подобные подходы, основанные на синтезе. Мы также показываем его эффективность в присутствии составного запутывания (комбинация различных методов). Эта продолжающаяся работа просвещает эффективность синтеза для нацеливания на определенные виды запутывания и открывает путь к более надежным алгоритмам и стратегиям упрощения.
- SYDR: передовая динамическая символическая исполнение
Разговоры по адресу : Ivannikov ISP RAS Open Conference, Москва, Россия, 2020. [Paper] [Слайд] [Видео]
Авторы : А.Вишняков, А.Федотов, Д.Кутс, А.Новиков, Д. Паригина, Э.Кобрин, В.Логунова, П.Белеки, С.Курмангалив
Аннотация : Динамическое символическое выполнение (DSE) имеет огромное количество приложений в области компьютерной безопасности (пузырь, обнаружение уязвимости, обратное инженерное управление и т. Д.). Мы предлагаем несколько улучшений производительности и точности для динамического символического исполнения. Пропуск несимволических инструкций позволяет создавать предикат пути в 1,2-3,5 раза быстрее. Символический двигатель упрощает формулы во время символического исполнения. Предикат PATE Удаляет нерелевантные конъюнкты из запросов решателя. Мы обрабатываем каждую таблицу прыжков (оператор Switch) как несколько ветвей и опишем метод символического выполнения многопоточных программ. Предлагаемые решения были реализованы в инструменте SYDR. SYDR выполняет инверсию ветвей в предикате пути. SYDR сочетает в себе инструмент Dynamorio Dynamic Binaring Instrument с символическим двигателем Triton.
- Символическая деобфуссация: от виртуализированного кода обратно в оригинал
Разговоры по адресу : Dimva, Paris-Saclay, France, 2018. [Paper] [Слайд]
Авторы : Джонатан Салван, Себастьен Бардин, Потен
Аннотация : Защита программного обеспечения заняла важное место в течение последнего десятилетия, чтобы защитить законное программное обеспечение от обратной инженерии или подделки. Виртуализация считается одной из самых лучших защит от таких атак. Мы представляем универсальный подход, основанный на изучении символического пути, разрушением и перекомпиляции, позволяющей восстанавливаться, из виртуализированного кода, девиртизированного кода, семантически идентичного исходному и близко по размеру. Мы определяем критерии и метрики для оценки актуальности деобусцированных результатов с точки зрения правильности и точности. Наконец, мы предлагаем настройку с открытым исходным кодом, позволяющую оценивать предложенный подход против нескольких форм виртуализации.
- Deobfuscation защиты программного обеспечения на основе виртуальной машины
Разговор на : SSTIC, Ренн, Франция, 2017. [Французская газета] [Английский слайд] [Французское видео]
Авторы : Джонатан Салван, Себастьен Бардин, Потен
Аннотация : В этой презентации мы описываем подход, который состоит в том, чтобы автоматически анализировать защиту программного обеспечения на основе виртуальных машин и перекомпилирует новую версию бинарника без такой защиты. Этот автоматизированный подход опирается на символическое руководство по исполнению с помощью анализа Taint и некоторых политик конкретизации, а затем на бинарное переписывание с использованием перехода LLVM.
- Как Тритон может помочь обратить вспять защиту программного обеспечения на основе виртуальных машин
Разговоры по адресу : CSAW SOS, Нью -Йорк, Нью -Йорк, 2016. [Слайд]
Авторы : Джонатан Салван, Роман Томас
Аннотация : Первая часть разговора станет введением в структуру Triton, чтобы разоблачить свои компоненты и объяснить, как они работают вместе. Затем вторая часть будет включать демонстрации того, как можно обратить вспять защиту на основе виртуальной машины, используя анализ Taint, символическое выполнение, упрощения SMT и оптимизации LLVM-IR.
- Динамический бинарный анализ и запутанные коды
Разговоры по адресу : St'Hack, Bordeaux, France, 2016. [Слайд]
Авторы : Джонатан Салван, Роман Томас
Аннотация : На этой презентации мы поговорим о том, как DBA (динамический бинарный анализ) может помочь инженеру с обратным приводом обратить вспять код. Сначала мы представим некоторые базовые методы запутывания, а затем разместим, как можно сломать некоторые вещи (используя нашу структуру DBA с открытым исходным кодом - Triton), как обнаружение непрозрачных предикатов, реконструировать CFG, найти исходный алгоритм, изолировать чувственные данные и многие другие ... тогда мы завершим DEMO и несколькими словами о нашей будущей работе.
- Как Тритон может помочь проанализировать запутанные двоичные файлы
Публикация по адресу : Misc Magazine 82, 2015. [Французская статья]
Авторы : Джонатан Салван, Роман Томас
Аннотация : двоичное запутывание используется для защиты интеллектуальной собственности программного обеспечения. Существуют разные виды субфукции, но примерно, он превращает бинарную структуру в другую бинарную структуру, сохраняя ту же семантику. Целью запутывания является обеспечение того, чтобы исходная информация была «утоплена» в бесполезной информации, которая усложнит реверс -инженерию. В этой статье мы покажем, как мы сможем проанализировать программу избистской программы и сломать некоторые запутывания, используя структуру Triton.
- Triton: концертная структура выполнения
Разговоры по адресу : SSTIC, Rennes, France, 2015. [Французская газета] [Подробный английский слайд]
Авторы : Джонатан Салван, Флорент Саудель
Аннотация : Этот разговор о выпуске Triton, структуре коммерческого исполнения, основанной на PIN -код. Он предоставляет компоненты, такие как Taint Engine, динамический символический двигатель выполнения, двигатель снимка, перевод инструкции X64 на SMT2, интерфейс Z3 для решения ограничений и привязки Python. Основываясь на этих компонентах, Triton предлагает возможность создавать инструменты для исследований уязвимостей или помощи в обратном двигателе.
- Динамический анализ поведения с использованием бинарной инструментации
Разговоры по адресу : St'Hack, Bordeaux, France, 2015. [Слайд]
Авторы : Джонатан Салван
Аннотация : Этот разговор можно рассматривать как часть 2 нашего разговора в SecurityDay. В предыдущей части мы говорили о том, как можно было охватить целевую функцию в памяти, используя подход DSE (динамический символический выполнение). Покрыть функцию (или ее состояния) не означает, что найти все уязвимости, некоторая уязвимость не сбоят программу. Вот почему мы должны реализовать конкретный анализ, чтобы найти конкретные ошибки. Этот анализ основан на бинарной инструментации и анализе поведения во время выполнения программы. В этом выступлении мы увидим, как можно найти эти следующие виды ошибок: Off-One-One, Stack / Heap Overflow, Free-Free-Free String Format и {write, Read} -What.
- Покрытие функции с использованием подхода динамического символического выполнения
Разговор : День безопасности, Лилль, Франция, 2015. [Слайд]
Авторы : Джонатан Салван
Аннотация : Этот разговор о бинарном анализе и инструментах. Мы увидим, как можно нацелиться на определенную функцию, снимка контекстной памяти/регистрации перед функцией, перевести инструментацию в промежуточное представление, применить анализ Deaint, основанный на этом 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},
}