
Sandbox de ingeniería inversa programable en Python, un framework de instrumentación e inspección de máquinas virtuales basado en QEMU
ESTE PROYECTO HA SIDO ARCHIVADO Y SU COLA DE INCIDENCIAS ESTÁ BLOQUEADA. EL PROYECTO SE MANTENDRÁ PÚBLICO SOLO CON FINES DE REFERENCIA.
.. 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 .. _here: https://github.com/Cisco-Talos/pyrebox/issues .. _slides: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_hitb_ams.pdf .. _available: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_euskalhack.pdf .. _scripts: https://github.com/Cisco-Talos/pyrebox/tree/master/scripts .. _readthedocs.io: https://pyrebox.readthedocs.io/en/latest/ .. _questions: https://github.com/Cisco-Talos/pyrebox/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20 .. _presentation: https://www.youtube.com/watch?v=F2voG87obzM .. _Contest: https://volatility-labs.blogspot.com/2017/11/results-from-5th-annual-2017-volatility.html
PyREBox es un sandbox de ingeniería inversa programable en Python. Está basado en QEMU, y su objetivo es ayudar en la ingeniería inversa proporcionando capacidades de análisis dinámico y depuración desde una perspectiva diferente. PyREBox permite inspeccionar una máquina virtual QEMU en ejecución, modificar su memoria o registros, e instrumentar su ejecución mediante la creación de scripts simples en Python para automatizar cualquier tipo de análisis. QEMU (cuando funciona como emulador de sistema completo) emula un sistema completo (CPU, memoria, dispositivos...). Mediante técnicas VMI, no requiere realizar ninguna modificación en el sistema operativo invitado, ya que obtiene información de su memoria de forma transparente en tiempo de ejecución.
Varios proyectos académicos como DECAF_, PANDA_, S2E_ o AVATAR_ han aprovechado anteriormente la instrumentación basada en QEMU para superar tareas de ingeniería inversa. Estos proyectos permiten escribir plugins en C/C++ e implementan varias características avanzadas como análisis de flujo de datos dinámico, ejecución simbólica, e incluso grabación y reproducción de trazas de ejecución. Con PyREBox, buscamos aplicar esta tecnología centrándonos en mantener el diseño simple y en la usabilidad del sistema para analistas de amenazas.
¡PyREBox ganó el Concurso de Plugins de Volatility (Contest_) en 2017!
Esta herramienta fue presentada en HITB Amsterdam 2018. Puede ver las diapositivas (slides_) o ver la presentación_ (presentation). También fue presentada en la tercera edición del Congreso de Seguridad EuskalHack (diapositivas disponibles_).
Recuerde extraer la última versión de PyREBox para disfrutar de sus últimas características. PyREBox está en desarrollo activo y ¡nuevas características interesantes están por venir! La rama master siempre debe contener una versión estable, mientras que las ramas dev contienen las últimas características en desarrollo. La siguiente lista de anuncios se refiere a la rama master y la fecha en que los cambios de desarrollo se fusionaron en master.
Se proporciona un script de compilación. Para detalles específicos sobre dependencias, consulte BUILD_. También proporcionamos un Dockerfile.
La documentación de este proyecto está alojada en readthedocs.io_.
Si cree que ha encontrado un error, por favor repórtelo aquí_.
Antes de crear una nueva incidencia, revise las preguntas_ abiertas por otros usuarios anteriormente.
Este programa se proporciona "TAL CUAL", y no se garantiza soporte. Dicho esto, para ayudarnos a resolver sus problemas, incluya tanta información como sea posible para reproducir el error:
PyREBox está basado en QEMU, por lo que para iniciar una VM con PyREBox, debe ejecutarlo exactamente como si estuviera arrancando una VM de QEMU. Se proporcionan un par de scripts de ejemplo: start_i386.sh, start_x86_64.sh, puede usarlos como ejemplo.
La única opción de monitor de QEMU compatible actualmente es stdio (-monitor stdio).
Proporcionar una plataforma de emulación de sistema completo con una interfaz simple para inspeccionar el sistema invitado emulado.
Tener un diseño limpio, desacoplado de QEMU. Muchos proyectos construidos sobre QEMU no evolucionan cuando QEMU se actualiza, perdiendo nuevas características y optimizaciones, así como actualizaciones de seguridad. Para lograrlo, PyREBox se implementa como un módulo independiente que puede compilarse junto con QEMU requiriendo un conjunto mínimo de modificaciones.
Soporte para diferentes arquitecturas. Actualmente, PyREBox solo soporta Windows para arquitecturas x86 y x86-64 de 64 bits, pero su diseño permite soportar otras arquitecturas como ARM, MIPS o PowerPC, y otros sistemas operativos también.
Iniciar un shell de PyREBox es tan fácil como escribir el comando sh en el monitor de QEMU. Iniciará inmediatamente un shell de IPython. Este shell registra el historial de comandos así como las variables definidas. Por ejemplo, puede guardar un valor y recuperarlo más tarde en un punto diferente de la ejecución, cuando inicie el shell nuevamente. PyREBox aprovecha todas las características disponibles en IPython, como autocompletado, historial de comandos, edición multilínea y generación automática de ayuda de comandos.
PyREBox le permitirá depurar el sistema (o un proceso) de una manera bastante sigilosa. A diferencia de los depuradores tradicionales que permanecen en el sistema que se está depurando (incluso modificando la memoria del proceso depurado para insertar puntos de interrupción), PyREBox permanece completamente fuera del sistema inspeccionado y no requiere la instalación de ningún controlador o componente en el invitado.
.. image:: docs/media/breakpoint.gif
PyREBox ofrece un conjunto completo de comandos para inspeccionar y modificar el estado de la VM en ejecución. Simplemente escriba list_commands para obtener una lista completa. Puede ejecutar cualquier plugin de Volatility escribiendo vol y el comando de Volatility correspondiente. Para una lista completa de los plugins de Volatility disponibles, puede escribir list_vol_commands. Esta lista se genera automáticamente, por lo que también mostrará cualquier plugin de Volatility que instale en la ruta volatility/ de PyREBox.
¡También puede definir sus propios comandos! Es tan simple como declarar una función en un script y cargarlo.
Si necesita algo más expresivo que un comando, puede escribir un fragmento de Python aprovechando la API. Para una descripción detallada de la API, consulte Documentación_ o escriba help(api) en el shell.
.. image:: docs/media/stack.gif
PyREBox permite cargar scripts dinámicamente que pueden registrar funciones de callback que se llaman cuando ocurren ciertos eventos, como instrucciones ejecutadas, memoria leída/escrita, procesos creados/destruidos, etc.
Dado que PyREBox está integrado con Volatility, le permitirá aprovechar todos los plugins de Volatility para análisis forense de memoria en sus scripts de Python. Muchas de las herramientas de ingeniería inversa más famosas están implementadas en Python o al menos tienen enlaces de Python. Nuestro enfoque permite integrar cualquiera de estas herramientas en un script.
Finalmente, dado que los callbacks de Python pueden introducir una penalización de rendimiento en eventos frecuentes como instrucciones ejecutadas, también es posible crear triggers. Los triggers son complementos de código nativo (desarrollados en C/C++) que pueden insertarse dinámicamente en tiempo de ejecución en cualquier evento justo antes de que se ejecute el callback de Python. Esto permite limitar el número de eventos que llegan al código de Python, así como precalcular valores en código nativo.
En este repositorio encontrará scripts_ de ejemplo que pueden ayudarle a escribir su propio código. ¡Las contribuciones son bienvenidas!
En primer lugar, PyREBox no sería posible sin QEMU_ y Volatility_. Agradecemos a sus desarrolladores y mantenedores por tan excelente trabajo.
PyREBox está inspirado en varios proyectos académicos, como DECAF_ o PANDA_. De hecho, muchos de los callbacks soportados por PyREBox son equivalentes a los encontrados en DECAF_, y los conceptos detrás de la instrumentación se basan en estos trabajos.
PyREBox se beneficia de código de terceros, que se puede encontrar en el directorio pyrebox/third_party. Para cada proyecto de terceros, incluimos una indicación de su licencia original, los archivos de código fuente originales tomados del proyecto, así como las versiones modificadas de los archivos de código fuente (si corresponde), utilizados por PyREBox.