
Mole
Mole é um plugin do Binary Ninja projetado para identificar caminhos de execução interessantes em binários. Ele realiza slicing reverso em variáveis usando a Linguagem Intermediária de Nível Médio (MLIL) do Binary Ninja na forma de Atribuição Única Estática (SSA), formando a base para uma análise de contaminação estática.
No Mole, um caminho refere-se ao fluxo de dados entre uma fonte e um sumidouro definidos. O que constitui um caminho "interessante" depende dos objetivos da análise. Por exemplo, ao procurar por vulnerabilidades, pode-se buscar caminhos onde entradas não confiáveis (fontes) influenciam operações sensíveis (sumidouros) de maneiras potencialmente perigosas.
A lista a seguir destaca algumas das funcionalidades atuais do Mole:
- Modo de Operação: O Mole pode ser executado tanto na interface do Binary Ninja quanto em modo headless. O modo headless é particularmente útil para análises scriptadas em um grande número de binários. Por outro lado, usar o Mole na interface é ideal para investigar de perto caminhos detectados.
- Identificação de Caminhos:
- Configuração: O Mole permite que os usuários definam funções fonte e sumidouro através da interface do Binary Ninja ou de arquivos de configuração (veja Uso). Isso oferece flexibilidade na seleção de fontes e sumidouros com base no cenário de uso específico.
- Exploração: Para entender melhor um caminho e examinar suas características, todas as instruções ao longo do caminho podem ser impressas ou destacadas visualmente no Binary Ninja. Além disso, uma comparação lado a lado de dois caminhos pode ser exibida para identificar rapidamente diferenças. Assim como as instruções, a sequência de chamadas de funções de um caminho pode ser impressa ou visualizada como um grafo.
- Agrupamento: Para facilitar a identificação de caminhos semelhantes, o Mole suporta múltiplas estratégias de agrupamento. Atualmente, os caminhos podem ser agrupados com base na correspondência de funções fonte e sumidouro, ou por sequências de chamadas idênticas. Novas estratégias de agrupamento personalizadas podem ser facilmente adicionadas para estender e customizar esta funcionalidade (veja Customização).
- Persistência: Caminhos descobertos podem ser anotados para clareza ou removidos se considerados irrelevantes. Para preservar o progresso da análise, os caminhos podem ser salvos diretamente no banco de dados do binário alvo (formato
.bndb do Binary Ninja). Os caminhos também podem ser exportados, por exemplo, ao realizar análises headless em muitos binários em um sistema de arquivos, permitindo que caminhos identificados sejam posteriormente importados para exploração mais fácil no Binary Ninja.
- Análise de Caminhos com IA: O Mole pode interagir com Modelos de Linguagem de Grande Escala (LLMs) locais ou remotos através da API OpenAI (veja Uso). Os modelos são usados para analisar caminhos identificados e raciocinar se um determinado caminho corresponde a uma vulnerabilidade explorável ou não. O LLM tenta classificar a vulnerabilidade e atribuir um nível de severidade, o que pode ajudar a priorizar quais caminhos merecem investigação adicional por um analista. O Mole fornece um conjunto básico de ferramentas que o LLM pode usar para solicitar informações adicionais sobre o binário em análise.
- Slicing Inter-Procedural de Variáveis: O Mole suporta slicing de variáveis MLIL através dos limites das funções – uma tarefa que apresenta vários desafios. Por exemplo, determinar estaticamente o(s) chamador(es) efetivo(s) de uma função é frequentemente difícil ou mesmo impossível. Como resultado, a abordagem implementada é uma aproximação. Embora não seja perfeita, ela funciona razoavelmente bem em uma ampla gama de cenários práticos.
- Análise Básica de Ponteiros: O Mole atualmente implementa uma estratégia simplificada para rastrear o uso de ponteiros. Assim como o slicing inter-procedural, esta abordagem é uma simplificação com limitações inerentes (por exemplo, não consegue rastrear variáveis globais). No entanto, ela funciona bem em muitos casos práticos e está planejada para ser melhorada em versões futuras.
Exemplo de Uso
Veja o Mole em ação enquanto ele expõe CVE-2021-4045, uma falha de injeção de comandos não autenticada na câmera IP TP-Link Tapo C200 (clique na imagem abaixo para assistir no YouTube):

Documentação
- Instalação
- Uso
- Customização
Contribua ou Compartilhe Sua Experiência
O Mole é atualmente um trabalho em andamento. Se você encontrar um bug, tiver um novo teste unitário útil que destaque um falso positivo ou negativo, ou tiver uma sugestão para uma nova funcionalidade, considere abrir uma issue ou contribuir via pull request. Note também que os testes unitários atuais foram verificados apenas em binários linux-x86_64 e linux-armv7 até agora.
Se você tem uma história de sucesso interessante – como encontrar uma vulnerabilidade com a ajuda do Mole – adoraríamos ouvir! Sinta-se à vontade para compartilhar sua experiência conosco.
Contribuidores