Simple Science

Ciência de ponta explicada de forma simples

# Informática# Criptografia e segurança

Avanços na desmontagem de software ofuscado

Um novo método combina LLMs com técnicas tradicionais de desmontagem para uma análise eficaz.

― 5 min ler


Desmontagem: Uma NovaDesmontagem: Uma NovaVibedesmontagem.tradicionais melhora as técnicas deA junção de LLMs com métodos
Índice

A Desmontagem é o processo de transformar código de máquina (que os computadores entendem) em linguagem de montagem (que os humanos conseguem ler). É essencial para analisar como o software funciona, especialmente na busca por problemas de segurança. No entanto, alguns softwares dificultam esse processo escondendo o código com bytes aleatórios, o que bagunça a desmontagem. Embora existam algumas maneiras de lidar com isso, muitas soluções não funcionam bem o suficiente. É aí que entram os grandes modelos de linguagem (LLMs).

A Necessidade da Desmontagem

Desmontar é vital para a engenharia reversa de Binários (que são as versões compiladas dos programas). Isso nos permite entender o que o programa faz e encontrar problemas como vulnerabilidades ou código malicioso. O principal objetivo da desmontagem é identificar com precisão os limites das instruções dentro de um arquivo binário. Isso pode ser bem complicado porque:

  1. Mistura de Código e Dados: Às vezes, código e dados estão misturados, dificultando saber onde um termina e o outro começa.
  2. Instruções de Comprimento Variável: Diferentes comprimentos de instruções de programação podem resultar em confusão sobre onde uma instrução começa ou termina.

Erros na identificação desses limites podem causar problemas significativos, incluindo a má interpretação do que o código deveria fazer.

Técnicas de Ofuscação

Para dificultar a desmontagem, os desenvolvedores de software podem usar técnicas de ofuscação. Essas técnicas incluem:

  • Inserção de Bytes Aleatórios: Adicionar bytes aleatórios no código para confundir os desmontadores.
  • Predicados Opaques: São condições que uma ferramenta de análise não consegue entender bem, causando ramificações no código que podem não ocorrer durante a execução.
  • Aplanamento do Fluxo de Controle: Mudar a estrutura do código para dificultar o acompanhamento lógico.

Esses métodos criam desafios significativos para quem tenta fazer engenharia reversa do software.

Abordagens Atuais de Desmontagem

As soluções de desmontagem existentes podem se basear em vários métodos, como execução simbólica, heurísticas ou Aprendizado de Máquina. No entanto, muitas vezes vêm com limitações:

  • Execução Simbólica: Essa é uma forma de analisar os caminhos e valores de entrada através do código. Embora seja detalhada, pode se tornar muito complexa para binários grandes.
  • Heurísticas: Essas são regras práticas que podem funcionar em muitas situações, mas geralmente dependem de padrões específicos que podem não se manter em todos os casos.
  • Aprendizado de Máquina: Avanços recentes mostram promessas nessa área, mas ainda podem ter dificuldades contra ofuscações complexas.

Embora essas técnicas tenham suas forças, muitas vezes falham quando enfrentam ofuscações pesadas.

Nossa Abordagem: Combinando Perspectiva Humana com LLMs

Para enfrentar os desafios de desmontar executáveis ofuscados, propomos um novo método que combina algoritmos de desmontagem tradicionais com LLMs. A ideia principal é imitar como um engenheiro reverso experiente trabalharia.

Os LLMs, treinados em grandes quantidades de texto, conseguem entender bem o contexto e a estrutura da linguagem. Nosso objetivo é utilizar essa capacidade para identificar instruções de montagem válidas a partir do código de máquina decodificado.

A Estrutura do Nosso Sistema

Nosso sistema é composto por dois componentes principais:

  1. Classificador de Validade Baseado em LLM: Este decide se uma instrução desmontada é válida ou não.
  2. Estratégia de Desmontagem: Esse é um plano que utiliza o classificador de validade para realizar a desmontagem de forma eficaz.

Classificador de Validade

Para treinar o classificador de validade, usamos uma abordagem de treinamento específica. Coletamos exemplos de instruções válidas e inválidas a partir de binários compilados. Isso envolveu desmontar programas usando nossas técnicas e coletar dados sobre sua estrutura.

Com esses dados, treinamos um LLM para reconhecer padrões que indicam se uma instrução decodificada estava correta ou não.

Estratégia de Desmontagem

Quando recebemos um binário ofuscado, primeiramente o desmontamos usando uma combinação de métodos lineares e recursivos.

  • Desmontagem Linear: Isso observa cada instrução uma após a outra, assumindo que as instruções seguem uma após a outra continuamente.
  • Desmontagem Recursiva: Essa abordagem leva em conta instruções de ramificação, tentando seguir os fluxos de controle.

Após obter uma desmontagem inicial, verificamos a validade de cada instrução usando nosso classificador, fazendo correções quando necessário.

Avaliando o Sistema

Colocamos nossa abordagem à prova contra vários binários fortemente ofuscados. Os resultados mostram que nosso sistema supera outras ferramentas de desmontagem líderes disponíveis, provando sua eficácia em lidar com executáveis ofuscados.

Desafios na Desmontagem

Apesar dos nossos progressos, desmontar binários ofuscados ainda é desafiador devido à presença de limites de instrução incorretos. Isso pode levar a suposições erradas sobre como o programa funciona, resultando em saídas de desmontagem imprecisas.

Além disso, métodos tradicionais nem sempre aproveitam os insights de especialistas humanos, que frequentemente conseguem determinar se uma instrução não se encaixa na estrutura esperada. Nossa combinação de entendimento semelhante ao humano dos LLMs e estratégias de desmontagem existentes visa superar esses obstáculos.

Conclusão

Em resumo, desmontar executáveis ofuscados é um desafio complexo que os métodos tradicionais ainda não descobriram totalmente. Ao integrar LLMs no processo de desmontagem, podemos lidar melhor com a ofuscação, resultando em resultados mais precisos e confiáveis. A combinação de técnicas estabelecidas e aprendizado de máquina de ponta oferece um caminho promissor nesta área de análise de software.

À medida que continuamos a melhorar nossos métodos e refinar nossas abordagens, acreditamos que há grande potencial para avanços adicionais na maneira como enfrentamos o problema da ofuscação na desmontagem.

Fonte original

Título: Disassembling Obfuscated Executables with LLM

Resumo: Disassembly is a challenging task, particularly for obfuscated executables containing junk bytes, which is designed to induce disassembly errors. Existing solutions rely on heuristics or leverage machine learning techniques, but only achieve limited successes. Fundamentally, such obfuscation cannot be defeated without in-depth understanding of the binary executable's semantics, which is made possible by the emergence of large language models (LLMs). In this paper, we present DisasLLM, a novel LLM-driven dissembler to overcome the challenge in analyzing obfuscated executables. DisasLLM consists of two components: an LLM-based classifier that determines whether an instruction in an assembly code snippet is correctly decoded, and a disassembly strategy that leverages this model to disassemble obfuscated executables end-to-end. We evaluated DisasLLM on a set of heavily obfuscated executables, which is shown to significantly outperform other state-of-the-art disassembly solutions.

Autores: Huanyao Rong, Yue Duan, Hang Zhang, XiaoFeng Wang, Hongbo Chen, Shengchen Duan, Shen Wang

Última atualização: 2024-07-11 00:00:00

Idioma: English

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

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

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