Simple Science

Ciência de ponta explicada de forma simples

# Informática# Criptografia e segurança

Melhorando as Técnicas de Detecção de Similaridade Binária

Um novo método foca nos comportamentos do código binário pra melhorar a detecção de similaridade.

― 6 min ler


Detecção de SimilaridadeDetecção de SimilaridadeBinária Aprimoradamelhor.comportamentos chave para uma detecçãoUma nova abordagem captura
Índice

A detecção de similaridade binária é um jeito de encontrar pedaços semelhantes de código binário. Essa técnica é importante pra situações onde o código fonte original não tá disponível, como pra encontrar bugs, analisar malware e checar plágio em código. Tem várias formas de detectar similaridades entre binários, mas os métodos que existem muitas vezes têm dificuldade quando diferentes compiladores ou níveis de otimização são usados.

Importância da Detecção de Similaridade Binária

Detectar binários semelhantes ajuda em várias aplicações do dia a dia. Por exemplo, pode ajudar a procurar bugs ou vulnerabilidades no software. Quando o software é atualizado ou modificado, é essencial checar se a nova versão tem vulnerabilidades semelhantes à antiga. Também, no caso de malware, encontrar binários semelhantes pode ajudar a entender e combater softwares maliciosos.

O Desafio dos Métodos Existentes

Os métodos atuais pra detecção de similaridade binária podem ser ineficientes em certos cenários. Por exemplo, se os binários foram compilados com opções diferentes, ou se passaram por versões diferentes do código, os métodos existentes podem não conseguir detectar a similaridade com precisão. Isso acontece porque muitos desses métodos focam muito na estrutura do código (como ele parece) em vez do seu comportamento (o que ele faz).

Observações Chave

Apesar das diferenças criadas por otimizações ou compiladores, os comportamentos essenciais do código não mudam necessariamente. Isso significa que as ações principais que um binário realiza (como chamar funções ou armazenar valores) muitas vezes podem permanecer as mesmas, mesmo que o código pareça diferente. Focando nessas ações principais, dá pra construir um jeito melhor de detectar binários semelhantes.

Abordagem Proposta

Pra melhorar a detecção de similaridade binária, foi proposto um novo método que foca em capturar os comportamentos chave do código binário. Isso envolve dois passos principais: Geração de Gráfico e comparação de gráfico.

Geração de Gráfico

  1. Identificando Instruções-Chave: A primeira coisa a fazer é encontrar as instruções principais que realizam tarefas importantes no binário. Essas instruções-chave vão ajudar a representar o comportamento do binário.

  2. Criando Expressões-Chave: Cada uma dessas instruções-chave pode ser expressa de um jeito simplificado, ajudando a evitar confusão com instruções menos importantes.

  3. Construindo um Gráfico de Semântica-Chave: Uma vez que temos as instruções-chave e suas expressões simplificadas, podemos criar um gráfico. Nesse gráfico, os nós representam as instruções-chave e as conexões entre eles representam como elas fluem no programa.

Comparação de Gráfico

  1. Serializando o Gráfico: Pra comparar dois gráficos (de dois binários diferentes), primeiro mudamos eles pra uma sequência usando uma técnica chamada ordenação topológica. Essa ordenação ajuda a manter a ordem das ações.

  2. Tokenização: O próximo passo é dividir essas sequências em partes menores chamadas tokens, que são mais fáceis de gerenciar.

  3. Calculando Similaridade: Por fim, podemos usar um método chamado Hashing sensível à localidade pra comprimir e comparar as sequências de tokens, ajudando a determinar quão semelhantes os dois binários são.

Avaliação do Método Proposto

O desempenho desse novo método foi avaliado em comparação com várias ferramentas existentes. Os experimentos envolveram vários projetos de código aberto, e os resultados mostraram que o novo método superou as ferramentas existentes na detecção de similaridade em diferentes opções de compilação e níveis de otimização.

Configuração do Experimento

Os experimentos foram realizados em projetos de código aberto bem conhecidos pra avaliar o desempenho do método. As métricas de avaliação incluíram:

  • Precisão: Isso mede quantos dos pares detectados eram realmente semelhantes.
  • Recall: Isso verifica quantos pares semelhantes reais foram detectados pela ferramenta.

Resultados

O novo método consistentemente alcançou uma precisão média maior do que as ferramentas existentes. Ele conseguiu detectar similaridades mesmo em binários que foram compilados sob configurações diferentes ou com otimizações diferentes. Isso indica uma melhoria significativa em relação aos métodos tradicionais.

Aplicações da Detecção de Similaridade Binária

A detecção de similaridade binária pode ser aplicada em muitas áreas, incluindo:

  • Detecção de Vulnerabilidades: Identificando funções semelhantes em diferentes versões de software, vulnerabilidades podem ser rastreadas e mitigadas.
  • Análise de Malware: Similaridades em código binário podem ajudar a entender código malicioso e criar mecanismos de defesa.
  • Detecção de Plágio: Em acadêmicos e desenvolvimento de software, detectar código copiado é crucial pra manter a originalidade.

Direções Futuras

Embora o método atual mostre potencial, há áreas pra melhoria. Trabalhos futuros poderiam explorar:

  • Suporte a Compiladores Mais Amplos: Melhorar o método pra funcionar com mais compiladores e diferentes arquiteturas, como ARM.
  • Tratando Ofuscação: Com técnicas de ofuscação se tornando mais comuns, melhorar os métodos de detecção pra lidar com essas mudanças vai ser vital.
  • Integração de Aprendizado de Máquina: Usar técnicas de aprendizado de máquina pra entender e pesar a importância de vários tokens no processo de detecção.

Conclusão

A capacidade de detectar com precisão similaridades entre códigos binários é importante em várias áreas da tecnologia e segurança. O método proposto foca em comportamentos-chave dentro do binário, o que ajuda a superar os desafios enfrentados pelas ferramentas existentes. Com mais desenvolvimento e aplicação, esse método pode melhorar significativamente a eficácia da detecção de similaridade binária em vários domínios.

Fonte original

Título: SemDiff: Binary Similarity Detection by Diffing Key-Semantics Graphs

Resumo: Binary similarity detection is a critical technique that has been applied in many real-world scenarios where source code is not available, e.g., bug search, malware analysis, and code plagiarism detection. Existing works are ineffective in detecting similar binaries in cases where different compiling optimizations, compilers, source code versions, or obfuscation are deployed. We observe that all the cases do not change a binary's key code behaviors although they significantly modify its syntax and structure. With this key observation, we extract a set of key instructions from a binary to capture its key code behaviors. By detecting the similarity between two binaries' key instructions, we can address well the ineffectiveness limitation of existing works. Specifically, we translate each extracted key instruction into a self-defined key expression, generating a key-semantics graph based on the binary's control flow. Each node in the key-semantics graph denotes a key instruction, and the node attribute is the key expression. To quantify the similarity between two given key-semantics graphs, we first serialize each graph into a sequence of key expressions by topological sort. Then, we tokenize and concatenate key expressions to generate token lists. We calculate the locality-sensitive hash value for all token lists and quantify their similarity. %We implement a prototype, called SemDiff, consisting of two modules: graph generation and graph diffing. The first module generates a pair of key-semantics graphs and the second module diffs the graphs. Our evaluation results show that overall, SemDiff outperforms state-of-the-art tools when detecting the similarity of binaries generated from different optimization levels, compilers, and obfuscations. SemDiff is also effective for library version search and finding similar vulnerabilities in firmware.

Autores: Zian Liu, Zhi Zhang, Siqi Ma, Dongxi Liu, Jun Zhang, Chao Chen, Shigang Liu, Muhammad Ejaz Ahmed, Yang Xiang

Última atualização: 2023-08-02 00:00:00

Idioma: English

Fonte URL: https://arxiv.org/abs/2308.01463

Fonte PDF: https://arxiv.org/pdf/2308.01463

Licença: https://creativecommons.org/licenses/by/4.0/

Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.

Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.

Mais de autores

Artigos semelhantes