Simple Science

Ciência de ponta explicada de forma simples

# Informática# Aprendizagem de máquinas

Identificando a Proveniência do Compilador em Binaries ARM

Pesquisa apresenta um modelo rápido para identificar compiladores usados em binários ARM.

― 7 min ler


Detecção Rápida doDetecção Rápida doCompilador ARMum novo modelo.compiladores para binários ARM usandoIdentifique de forma eficiente
Índice

Quando um software é criado, geralmente passa por um processo chamado compilação, onde o código-fonte é traduzido em código de máquina que um computador pode executar. Esse processo é feito por ferramentas conhecidas como compiladores. O tipo de compilador usado, junto com suas configurações, pode influenciar bastante como o programa final se comporta. Saber qual compilador específico e suas configurações foram usados para construir um programa pode ser muito útil, especialmente quando tentamos reverter ou entender programas que não criamos.

No passado, a maioria das pesquisas focava em programas para a arquitetura x86-64, que é comum em muitos desktops e servidores. No entanto, outro tipo de arquitetura chamada ARM está se tornando cada vez mais popular, especialmente em dispositivos móveis e sistemas embarcados como eletrodomésticos inteligentes e veículos. Isso levanta a questão: como podemos descobrir qual compilador foi usado para binários ARM?

O que é Proveniência do Compilador?

Proveniência do compilador se refere às informações sobre o compilador que criou um programa, incluindo sua família, versão e nível de otimização. Saber dessas informações é importante por várias razões. Por exemplo, se um programa se comporta de maneira inesperada, saber como ele foi compilado pode oferecer pistas sobre o porquê. Diferentes compiladores podem tomar decisões diferentes que afetam o comportamento do programa, levando a problemas como vazamentos de memória ou vulnerabilidades de segurança.

Além disso, em sistemas críticos de segurança, como software de controle de aeronaves, é crucial verificar se o programa compilado opera exatamente como pretendido. Algumas organizações até usam compiladores formalmente verificados para garantir a correção.

A Necessidade de Modelos Mais Rápidos

Com o crescente número de programas que precisam ser analisados, a velocidade se torna uma consideração importante. Ser capaz de recuperar informações sobre o compilador rapidamente pode economizar tempo em várias tarefas, como identificar programas semelhantes ou entender softwares maliciosos. Embora modelos de deep learning tenham sido populares, eles podem ser lentos e difíceis de interpretar. Um modelo mais simples e rápido pode ser mais benéfico para entender como as decisões são feitas durante o processo de análise.

Adaptando Modelos Existentes

Um modelo chamado DIComP foi criado anteriormente para analisar binários na arquitetura x86-64 usando uma abordagem leve. Decidimos estender esse trabalho para binários ARM. O DIComP usa técnicas simples de aprendizado de máquina para identificar a proveniência do compilador, focando em padrões específicos no código compilado. Nosso objetivo era adaptar esse modelo para também funcionar de forma eficaz com binários ARM, que não haviam sido estudados extensivamente.

Como Fizemos

Para adaptar o DIComP para ARM, examinamos as características que definem como o código é estruturado em binários ARM. Essas características incluem a maneira como os compiladores usam registros (locais de armazenamento temporário) e as instruções específicas (ou opcodes) geradas. Ao analisar essas características, tínhamos como objetivo desenvolver um modelo leve capaz de fornecer resultados rápidos e precisos.

Construímos um novo modelo usando métodos simples, focando em identificar rapidamente o tipo de compilador com base no código compilado. Também comparamos esse novo modelo com uma abordagem moderna de deep learning.

Componentes Chave do Nosso Modelo

Coleta de Características

Primeiro, analisamos os binários para coletar dados sobre como foram compilados. Focamos no seguinte:

  • Uso de Opcode: Rastreamos as diferentes instruções usadas no código compilado. Certos compiladores preferem instruções específicas, o que pode ajudar na identificação.
  • Uso de Registradores: Observamos como diferentes registradores foram utilizados. A frequência e o tipo de registradores usados podem variar conforme o compilador e suas configurações.

Estrutura do Modelo

A ideia central do nosso modelo é usar classificadores simples para interpretar as características coletadas. Usamos uma técnica chamada Máquinas de Vetores de Suporte (SVM), que é conhecida por ser eficiente em tarefas de classificação. Isso nos permite analisar rapidamente os binários ARM e fazer previsões sobre o compilador usado.

Avaliação do Modelo

Depois de construir nosso modelo, o testamos contra benchmarks existentes para medir sua Precisão e velocidade. Descobrimos que nosso modelo conseguiu atingir uma alta precisão enquanto era significativamente mais rápido que modelos de deep learning.

Resultados e Discussão

Precisão

Nosso modelo conseguiu uma taxa de precisão semelhante a abordagens avançadas de deep learning. Embora modelos de deep learning sejam poderosos, eles requerem muitos recursos para treinamento e avaliação, o que pode ser impraticável em muitos casos. Nossa abordagem conseguiu manter uma alta precisão enquanto era muito mais eficiente em termos de tempo e consumo de energia.

Velocidade

Uma das características que se destacam do nosso modelo é sua velocidade. Observamos um aumento notável na velocidade de processamento em comparação com métodos existentes. Isso é crítico ao lidar com grandes conjuntos de dados de binários ARM, onde análises rápidas podem economizar tempo considerável.

Interpretabilidade

Outra vantagem do nosso modelo é que ele é mais interpretável do que redes neurais complexas. Com modelos como o nosso, é mais fácil ver quais características estão impactando os resultados. Isso é particularmente útil quando os desenvolvedores precisam entender por que um determinado binário foi classificado de uma determinada maneira.

Estudos de Caso

Binários CompCert

Um caso intrigante que examinamos envolveu binários produzidos por um compilador formalmente verificado chamado CompCert. Nosso modelo foi capaz de identificar esses binários com quase perfeição. Isso sugere que nossa abordagem não é apenas eficaz para binários gerais, mas também para aqueles onde a correção é fundamental.

Grandes Corporações de Binários

Também aplicamos nosso modelo a uma ampla gama de binários ARM coletados de diferentes distribuições Linux. Ao analisar esses binários, conseguimos fazer suposições fundamentadas sobre sua proveniência do compilador e configurações de otimização. Os resultados destacaram tendências em como diferentes distribuições usam compiladores, mostrando uma variedade de níveis de otimização.

Conclusão

Em resumo, nossa pesquisa adaptou com sucesso um modelo leve de aprendizado de máquina para recuperar a proveniência do compilador para binários ARM. Nossa abordagem alcança precisão competitiva enquanto é mais rápida e mais interpretável do que os métodos existentes de deep learning. Isso tem implicações significativas para análise de software, pesquisa de segurança e qualquer campo onde entender as origens do código compilado seja essencial.

Nossos achados sugerem que modelos mais simples podem ter um desempenho tão bom quanto os mais complexos para tarefas específicas, especialmente em cenários onde velocidade e interpretabilidade são importantes. As ferramentas e modelos que desenvolvemos podem potencialmente ajudar pesquisadores e desenvolvedores a analisar e entender binários ARM, abrindo caminho para insights mais profundos no processo de desenvolvimento de software.

Trabalho Futuro

Embora nossa pesquisa tenha abordado com sucesso questões chave na identificação da proveniência do compilador para binários ARM, ainda há muito a explorar. Esforços futuros poderiam focar em refinar nossos modelos para uma precisão ainda maior, especialmente à medida que novos compiladores e arquiteturas surgem. Além disso, explorar a aplicação de nossos métodos a outras arquiteturas além de ARM poderia ampliar o alcance de nossas descobertas e contribuir para uma compreensão mais profunda do comportamento dos compiladores em diferentes ambientes.

Além disso, integrar características adicionais ou utilizar técnicas estatísticas mais avançadas poderia aprimorar o desempenho do nosso modelo. Também vemos valor em interfaces amigáveis que permitam a não-experts aproveitarem nossas descobertas em aplicações práticas, como análise de segurança ou manutenção de software.

Em conclusão, nosso trabalho não apenas contribui para o conhecimento existente sobre a proveniência do compilador, mas também estabelece as bases para futuros avanços na área. Esperamos que nossas descobertas sirvam como uma fundação para pesquisas e desenvolvimentos contínuos voltados a tornar a análise de software mais eficiente e eficaz para todos os usuários.

Fonte original

Título: Revisiting Lightweight Compiler Provenance Recovery on ARM Binaries

Resumo: A binary's behavior is greatly influenced by how the compiler builds its source code. Although most compiler configuration details are abstracted away during compilation, recovering them is useful for reverse engineering and program comprehension tasks on unknown binaries, such as code similarity detection. We observe that previous work has thoroughly explored this on x86-64 binaries. However, there has been limited investigation of ARM binaries, which are increasingly prevalent. In this paper, we extend previous work with a shallow-learning model that efficiently and accurately recovers compiler configuration properties for ARM binaries. We apply opcode and register-derived features, that have previously been effective on x86-64 binaries, to ARM binaries. Furthermore, we compare this work with Pizzolotto et al., a recent architecture-agnostic model that uses deep learning, whose dataset and code are available. We observe that the lightweight features are reproducible on ARM binaries. We achieve over 99% accuracy, on par with state-of-the-art deep learning approaches, while achieving a 583-times speedup during training and 3,826-times speedup during inference. Finally, we also discuss findings of overfitting that was previously undetected in prior work.

Autores: Jason Kim, Daniel Genkin, Kevin Leach

Última atualização: 2023-05-06 00:00:00

Idioma: English

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

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

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