
Ferramentas automatizadas de análise estática para programas binários
O Pharos static binary analysis framework é um projeto do Software Engineering Institute da Carnegie Mellon University. O framework é projetado para facilitar a análise automatizada de programas binários. Ele utiliza a infraestrutura do compilador ROSE desenvolvida pelo Lawrence Livermore National Laboratory para desmontagem, análise de fluxo de controle, semântica de instruções e muito mais. Este software é distribuído sob uma licença BSD LICENSE.md.
A distribuição atual é uma atualização substancial em relação à versão anterior e adiciona uma variedade de recursos, incluindo melhorias na ferramenta OOAnalyzer, código experimental de análise de caminho, melhorias no particionador, multi-threading e muitos outros recursos menores.
O framework Pharos é um projeto de pesquisa, e o código está em desenvolvimento ativo. Nenhuma garantia de adequação a qualquer propósito é fornecida. Embora esta versão forneça instruções de compilação, testes unitários e alguma documentação, ainda há muito trabalho a ser feito. Testamos algumas configurações de compilação selecionadas, mas não testamos ativamente a portabilidade do código-fonte. Consulte as instruções de instalação para obter mais detalhes.
Como o objetivo principal do lançamento deste código é fornecer transparência sobre nossa pesquisa e estimular o diálogo com outros pesquisadores de análise estática de binários, sinta-se à vontade para entrar em contato com Cory Cohen [email protected] com perguntas que você possa ter sobre este trabalho. Talvez eu não consiga responder em tempo hábil, mas farei o meu melhor.
ApiAnalyzer é uma ferramenta para encontrar sequências de chamadas de API com as relações de dados e controle especificadas. Essa capacidade pretende ser usada para detectar paradigmas comuns de interação com o sistema operacional, como abrir um arquivo, escrever nele e fechá-lo.
OOAnalyzer é uma ferramenta para análise e recuperação de constructos orientados a objetos. Esta ferramenta foi tema de um artigo intitulado "Using Logic Programming to Recover C++ Classes and Methods from Compiled Executables", publicado na ACM Conference on Computer and Communications Security em 2018. A ferramenta identifica membros e métodos de objetos rastreando ponteiros de objeto entre funções no programa. Uma implementação anterior desta ferramenta chamava-se "Objdigger", mas foi renomeada para refletir uma reformulação substancial usando regras Prolog para recuperar os atributos do objeto. A versão atual da ferramenta suporta apenas a análise de executáveis x86 de 32 bits compilados com Microsoft Visual C++. Para instruções mais detalhadas sobre como executar o OOAnalyzer em executáveis muito grandes, consulte estas notas.
A distribuição do Pharos costumava incluir um plugin que importava informações de OO exportadas pelo OOAnalyzer para o conjunto de ferramentas de engenharia reversa Ghidra. Para obter essa funcionalidade agora e no futuro, instale o plugin Kaiju do Ghidra, que inclui a funcionalidade que era fornecida pelo plugin OOAnalyzer.
CallAnalyzer é uma ferramenta para relatar os parâmetros estáticos de chamadas de API em um programa binário. É em grande parte uma demonstração de nossa convenção de chamada atual, análise de parâmetros e capacidades de detecção de tipos, embora também forneça análise útil do código em um programa.
FN2Yara é uma ferramenta para gerar assinaturas YARA para correspondência de funções em um programa executável. Programas que compartilham um número significativo de funções provavelmente têm comportamento em comum.
FN2Hash é uma ferramenta para gerar uma variedade de hashes e outras propriedades descritivas para funções em um programa executável. Assim como FN2Yara, pode ser usado para dar suporte à análise de similaridade binária, ou fornecer recursos para algoritmos de aprendizado de máquina.
DumpMASM é uma ferramenta para despejar listagens de desmontagem de um executável usando o framework Pharos no mesmo estilo das outras ferramentas. Não tem sido mantida ativamente, e você deve considerar usar o recursiveDisassemble padrão do ROSE http://rosecompiler.org/ROSE_HTML_Reference/rosetools.html.