
Песочница обратного проектирования с возможностью написания сценариев на Python, фреймворк для инструментирования и инспекции виртуальных машин на основе QEMU.
ЭТОТ ПРОЕКТ БЫЛ АРХИВИРОВАН, И ОЧЕРЕДЬ ЗАПРОСОВ ЗАБЛОКИРОВАНА. ПРОЕКТ БУДЕТ ОСТАВЛЕН В ОБЩЕМ ДОСТУПЕ ТОЛЬКО ДЛЯ СПРАВОЧНЫХ ЦЕЛЕЙ.
.. image:: docs/media/pyrebox_logo_light_bg.png
.. _QEMU: http://qemu.org/ .. _DECAF: https://github.com/sycurelab/DECAF .. _S2E: https://github.com/dslab-epfl/s2e .. _AVATAR: https://github.com/avatartwo .. _PANDA: https://github.com/panda-re/panda .. _Volatility: http://www.volatilityfoundation.org/ .. _BUILD: BUILD.rst .. _здесь: https://github.com/Cisco-Talos/pyrebox/issues .. _слайды: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_hitb_ams.pdf .. _доступны: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_euskalhack.pdf .. _скрипты: https://github.com/Cisco-Talos/pyrebox/tree/master/scripts .. _readthedocs.io: https://pyrebox.readthedocs.io/en/latest/ .. _вопросы: https://github.com/Cisco-Talos/pyrebox/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20 .. _презентация: https://www.youtube.com/watch?v=F2voG87obzM .. _Конкурс: https://volatility-labs.blogspot.com/2017/11/results-from-5th-annual-2017-volatility.html
PyREBox — это Python-скриптовая песочница для реверс-инжиниринга. Она основана на QEMU и направлена на помощь в реверс-инжиниринге, предоставляя возможности динамического анализа и отладки с другой точки зрения. PyREBox позволяет проверять работающую QEMU VM, изменять её память или регистры и инструментировать её выполнение, создавая простые скрипты на Python для автоматизации любого вида анализа. QEMU (работая как эмулятор всей системы) эмулирует полную систему (ЦП, память, устройства...). Используя методы VMI, она не требует внесения изменений в гостевую операционную систему, так как прозрачно получает информацию из её памяти во время выполнения.
Несколько академических проектов, таких как DECAF_, PANDA_, S2E_ или AVATAR_, ранее использовали инструментацию на основе QEMU для решения задач реверс-инжиниринга. Эти проекты позволяют писать плагины на C/C++ и реализуют несколько продвинутых функций, таких как динамический анализ потоков данных (taint analysis), символьное выполнение или даже запись и воспроизведение трасс выполнения. С PyREBox мы стремимся применить эту технологию, сосредоточившись на простоте дизайна и удобстве использования системы для аналитиков угроз.
PyREBox выиграл Volatility Plugin Конкурс_ в 2017 году!
Этот инструмент был представлен на HITB Amsterdam 2018. Вы можете посмотреть слайды_ или посмотреть презентацию_. Он также был представлен на третьем выпуске Конгресса безопасности EuskalHack (слайды доступны_).
Не забудьте загрузить последнюю версию PyREBox, чтобы насладиться его новейшими функциями. PyREBox находится в активной разработке, и новые интересные функции еще впереди! Ветка master всегда должна содержать стабильную версию, а ветки dev содержат последние, разрабатываемые функции. Следующий список объявлений относится к ветке master и дате, когда изменения разработки были объединены в master.
Предоставляется скрипт сборки. Для получения подробной информации о зависимостях, пожалуйста, обратитесь к BUILD_. Также предоставляется Dockerfile.
Документация этого проекта размещена на readthedocs.io_.
Если вы считаете, что нашли ошибку, пожалуйста, сообщите об этом здесь_.
Прежде чем создавать новый запрос, пожалуйста, ознакомьтесь с вопросами_, открытыми другими пользователями.
Эта программа предоставляется «КАК ЕСТЬ», и никакая поддержка не гарантируется. Тем не менее, чтобы помочь нам решить ваши проблемы, пожалуйста, включите как можно больше информации для воспроизведения ошибки:
PyREBox основан на QEMU, поэтому для запуска ВМ в PyREBox вам нужно запустить её точно так же, как вы загружали QEMU VM. Предоставляется несколько примеров скриптов: start_i386.sh, start_x86_64.sh, вы можете использовать их в качестве примера.
В настоящее время поддерживается только одна опция монитора QEMU: stdio (-monitor stdio).
Предоставить платформу эмуляции целой системы с простым интерфейсом для проверки эмулируемой гостевой системы.
Иметь чистый дизайн, отделённый от QEMU. Многие проекты, построенные на QEMU, не развиваются при обновлении QEMU, теряя новые функции и оптимизации, а также обновления безопасности. Для достижения этого PyREBox реализован как независимый модуль, который может быть скомпилирован вместе с QEMU, требуя минимального набора модификаций.
Поддержка различных архитектур. В настоящее время PyREBox поддерживает только Windows для архитектур x86 и x86-64, но его дизайн позволяет поддерживать другие архитектуры, такие как ARM, MIPS или PowerPC, а также другие операционные системы.
Запустить оболочку PyREBox так же просто, как ввести команду sh в мониторе QEMU. Она немедленно запустит оболочку IPython. Эта оболочка записывает историю команд, а также определённые переменные. Например, вы можете сохранить значение и восстановить его позже в другой точке выполнения, когда снова запустите оболочку. PyREBox использует все доступные функции IPython, такие как автодополнение, история команд, многострочное редактирование и автоматическая генерация справки по командам.
PyREBox позволит вам отлаживать систему (или процесс) довольно скрытным способом. В отличие от традиционных отладчиков, которые находятся в отлаживаемой системе (даже изменяя память отлаживаемого процесса для вставки точек останова), PyREBox полностью находится вне исследуемой системы и не требует установки какого-либо драйвера или компонента в гостевую систему.
.. image:: docs/media/breakpoint.gif
PyREBox предлагает полный набор команд для проверки и изменения состояния работающей ВМ. Просто введите list_commands, чтобы получить полный список. Вы можете запустить любой плагин volatility, просто введя vol и соответствующую команду volatility. Для получения полного списка доступных плагинов volatility вы можете ввести list_vol_commands. Этот список генерируется автоматически, поэтому он также будет показывать любой плагин volatility, который вы установите в пути volatility/ PyREBox.
Вы также можете определить свои собственные команды! Это так же просто, как объявить функцию в скрипте и загрузить её.
Если вам нужно что-то более выразительное, чем команда, вы можете написать фрагмент Python, используя API. Для подробного описания API см. Документацию_ или введите help(api) в оболочке.
.. image:: docs/media/stack.gif
PyREBox позволяет динамически загружать скрипты, которые могут регистрировать функции обратного вызова, вызываемые при возникновении определённых событий, таких как выполнение инструкций, чтение/запись памяти, создание/уничтожение процессов и так далее.
Учитывая, что PyREBox интегрирован с Volatility, он позволит вам использовать все плагины volatility для криминалистического анализа памяти в ваших скриптах Python. Многие из самых известных инструментов реверс-инжиниринга реализованы на Python или, по крайней мере, имеют привязки к Python. Наш подход позволяет интегрировать любой из этих инструментов в скрипт.
Наконец, учитывая, что обратные вызовы Python могут приводить к снижению производительности при частых событиях, таких как выполнение инструкций, также возможно создание триггеров. Триггеры — это плагины на нативном коде (разработанные на C/C++), которые могут быть динамически вставлены во время выполнения при любом событии непосредственно перед выполнением обратного вызова Python. Это позволяет ограничить количество событий, достигающих кода Python, а также предварительно вычислять значения в нативном коде.
В этом репозитории вы найдете примеры скриптов_, которые помогут вам написать свой собственный код. Приветствуются вклады!
Прежде всего, PyREBox был бы невозможен без QEMU_ и Volatility_. Мы благодарим их разработчиков и сопровождающих за такую отличную работу.
PyREBox вдохновлен несколькими академическими проектами, такими как DECAF_ или PANDA_. Фактически, многие из обратных вызовов, поддерживаемых PyREBox, эквивалентны тем, что есть в DECAF_, а концепции, лежащие в основе инструментации, основаны на этих работах.
PyREBox использует сторонний код, который можно найти в каталоге pyrebox/third_party. Для каждого стороннего проекта мы включаем указание его оригинальной лицензии, исходные файлы исходного кода, взятые из проекта, а также модифицированные версии файлов исходного кода (если применимо), используемые PyREBox.