
Sandbox de Engenharia Reversa programável em Python, um framework de instrumentação e inspeção de Máquinas Virtuais baseado no QEMU
ESTE PROJETO FOI ARQUIVADO E SUA FILA DE ISSUES ESTÁ BLOQUEADA. O PROJETO SERÁ MANTIDO PÚBLICO APENAS PARA FINS DE REFERÊNCIA.
.. 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 é uma sandbox de engenharia reversa programável em Python. É baseada no QEMU, e seu objetivo é auxiliar a engenharia reversa fornecendo capacidades de análise dinâmica e depuração a partir de uma perspectiva diferente. PyREBox permite inspecionar uma VM QEMU em execução, modificar sua memória ou registradores e instrumentar sua execução, criando scripts simples em Python para automatizar qualquer tipo de análise. O QEMU (quando funciona como emulador de sistema completo) emula um sistema completo (CPU, memória, dispositivos...). Ao usar técnicas de VMI, ele não requer nenhuma modificação no sistema operacional convidado, pois recupera informações de sua memória de forma transparente em tempo de execução.
Vários projetos acadêmicos como DECAF_, PANDA_, S2E_ ou AVATAR_ já utilizaram instrumentação baseada em QEMU para superar tarefas de engenharia reversa. Esses projetos permitem escrever plugins em C/C++ e implementam vários recursos avançados, como análise dinâmica de taint, execução simbólica ou até mesmo gravação e reprodução de traços de execução. Com o PyREBox, pretendemos aplicar essa tecnologia focando em manter o design simples e na usabilidade do sistema para analistas de ameaças.
PyREBox venceu o Volatility Plugin Contest_ em 2017!
Esta ferramenta foi apresentada no HITB Amsterdam 2018. Você pode ver os slides_ ou assistir à apresentação_. Também foi apresentada na terceira edição do EuskalHack Security Congress (slides disponíveis_).
Lembre-se de puxar a versão mais recente do PyREBox para aproveitar seus novos recursos. PyREBox está em desenvolvimento ativo e novos recursos interessantes ainda estão por vir! O branch master deve sempre conter uma versão estável, enquanto os branches dev contêm os recursos mais recentes e em andamento. A lista de anúncios a seguir refere-se ao branch master e à data em que as alterações de desenvolvimento foram mescladas no master.
Um script de build é fornecido. Para detalhes específicos sobre dependências, veja BUILD_. Também fornecemos um Dockerfile.
A documentação deste projeto está hospedada em readthedocs.io_.
Se você acha que encontrou um bug, por favor reporte-o aqui_.
Antes de criar uma nova issue, por favor, veja as questões_ abertas por outros usuários anteriormente.
Este programa é fornecido "COMO ESTÁ", e nenhum suporte é garantido. Dito isso, para nos ajudar a resolver seus problemas, inclua o máximo de informações possível para reproduzir o bug:
PyREBox é baseado no QEMU, então para iniciar uma VM dentro do PyREBox, você precisa executá-lo exatamente como se estivesse inicializando uma VM QEMU. Alguns scripts de exemplo são fornecidos: start_i386.sh, start_x86_64.sh, você pode usá-los como exemplo.
A única opção de monitor QEMU suportada atualmente é stdio (-monitor stdio).
Fornecer uma plataforma de emulação de sistema completo com uma interface simples para inspecionar o sistema convidado emulado.
Ter um design limpo, desacoplado do QEMU. Muitos projetos construídos sobre o QEMU não evoluem quando o QEMU é atualizado, perdendo novos recursos e otimizações, bem como atualizações de segurança. Para conseguir isso, o PyREBox é implementado como um módulo independente que pode ser compilado junto com o QEMU exigindo um conjunto mínimo de modificações.
Suporte para diferentes arquiteturas. Atualmente, o PyREBox suporta apenas Windows para arquiteturas x86 e x86-64 bits, mas seu design permite suportar outras arquiteturas como ARM, MIPS ou PowerPC, e outros sistemas operacionais também.
Iniciar um shell PyREBox é tão fácil quanto digitar o comando sh no monitor do QEMU. Imediatamente iniciará um shell IPython. Este shell registra o histórico de comandos, bem como as variáveis definidas. Por exemplo, você pode salvar um valor e recuperá-lo posteriormente em um ponto diferente da execução, quando iniciar o shell novamente. PyREBox aproveita todos os recursos disponíveis no IPython, como autocompletar, histórico de comandos, edição multi-linha e geração automatizada de ajuda de comandos.
PyREBox permitirá que você depure o sistema (ou um processo) de uma forma bastante furtiva. Diferentemente dos depuradores tradicionais que permanecem no sistema sendo depurado (até mesmo modificando a memória do processo depurado para inserir breakpoints), o PyREBox permanece completamente fora do sistema inspecionado e não requer a instalação de nenhum driver ou componente no convidado.
.. image:: docs/media/breakpoint.gif
PyREBox oferece um conjunto completo de comandos para inspecionar e modificar o estado da VM em execução. Basta digitar list_commands para obter uma lista completa. Você pode executar qualquer plugin do volatility apenas digitando vol e o comando volatility correspondente. Para uma lista completa dos plugins volatility disponíveis, você pode digitar list_vol_commands. Esta lista é gerada automaticamente, portanto, também mostrará qualquer plugin volatility que você instalar no caminho volatility/ do PyREBox.
Você também pode definir seus próprios comandos! É tão simples quanto declarar uma função em um script e carregá-la.
Se você precisar de algo mais expressivo do que um comando, pode escrever um trecho de Python utilizando a API. Para uma descrição detalhada da API, veja Documentação_ ou digite help(api) no shell.
.. image:: docs/media/stack.gif
PyREBox permite carregar dinamicamente scripts que podem registrar funções de callback que são chamadas quando certos eventos ocorrem, como instruções executadas, memória lida/escrita, processos criados/destruídos e assim por diante.
Considerando que o PyREBox é integrado ao Volatility, ele permitirá que você aproveite todos os plugins do volatility para forense de memória em seus scripts Python. Muitas das ferramentas de engenharia reversa mais famosas são implementadas em Python ou pelo menos possuem bindings Python. Nossa abordagem permite integrar qualquer uma dessas ferramentas em um script.
Finalmente, dado que os callbacks Python podem introduzir uma penalidade de desempenho em eventos frequentes, como instruções executadas, também é possível criar triggers. Triggers são plug-ins em código nativo (desenvolvidos em C/C++) que podem ser inseridos dinamicamente em tempo de execução em qualquer evento, pouco antes do callback Python ser executado. Isso permite limitar o número de eventos que atingem o código Python, bem como pré-calcular valores em código nativo.
Neste repositório você encontrará scripts_ de exemplo que podem ajudá-lo a escrever seu próprio código. Contribuições são bem-vindas!
Antes de tudo, PyREBox não seria possível sem o QEMU_ e o Volatility_. Agradecemos aos seus desenvolvedores e mantenedores por um trabalho tão excelente.
PyREBox é inspirado por vários projetos acadêmicos, como DECAF_ ou PANDA_. Na verdade, muitos dos callbacks suportados pelo PyREBox são equivalentes aos encontrados no DECAF_, e os conceitos por trás da instrumentação são baseados nestes trabalhos.
PyREBox se beneficia de código de terceiros, que pode ser encontrado no diretório pyrebox/third_party. Para cada projeto de terceiros, incluímos uma indicação de sua licença original, os arquivos de código-fonte originais retirados do projeto, bem como as versões modificadas dos arquivos de código-fonte (se aplicável), usados pelo PyREBox.