Avanço da Pesquisa de Similaridade de Programas com o Framework HELIX
A HELIX cria conjuntos de dados sintéticos pra melhorar a análise de similaridade entre programas.
― 11 min ler
Índice
- A Necessidade de Conjuntos de Dados Sintéticos
- O que é HELIX?
- Apresentando o Blind HELIX
- Por que Conjuntos de Dados São Importantes?
- Desafios na Disponibilidade de Conjuntos de Dados
- Gerando Conjuntos de Dados Sintéticos
- Informações de Contexto
- A Estrutura HELIX Explicada
- Como o HELIX Funciona?
- Extraindo Componentes com Blind HELIX
- Construindo um Corpus de Bibliotecas
- Rotulagem e Métricas de Similaridade
- Estratégia de Geração de Conjuntos de Dados
- Avaliação de Ferramentas de Similaridade de Programas
- Insights do Desempenho de Conjunto de Dados Rotulado Manualmente
- Estudo de Caso: Amostras de Malware
- Discussão e Direções Futuras
- Áreas Potenciais para Melhoria
- Conclusão
- Fonte original
- Ligações de referência
A similaridade de programas é uma parte importante da pesquisa que vê quão parecidos diferentes pedaços de programas de computador são. Essa área de estudo é valiosa para várias tarefas de segurança, como detectar código copiado, identificar quem escreveu um programa e analisar malware. No entanto, quando os pesquisadores estudam a similaridade de programas, eles costumam enfrentar problemas com a qualidade dos Conjuntos de dados que usam para testes.
Existem muito poucos bons conjuntos de dados disponíveis para comparar programas binários, que são versões compiladas de programas. Além disso, diferentes estudos definem "similaridade" de várias maneiras, levando à confusão. Muitas vezes, os rótulos fornecidos em conjuntos de dados existentes não correspondem ao que as pessoas considerariam como similaridade comportamental ou semântica útil.
A Necessidade de Conjuntos de Dados Sintéticos
Para resolver esses problemas, os pesquisadores criaram métodos para criar conjuntos de dados sintéticos. Conjuntos de dados sintéticos são dados artificiais criados para ajudar os pesquisadores a testarem suas ferramentas e abordagens. Apresentamos uma estrutura chamada HELIX que gera grandes quantidades de conjuntos de dados sintéticos especificamente para estudar a similaridade de programas.
O que é HELIX?
HELIX é um sistema projetado para criar automaticamente amostras de código que compartilham similaridades conhecidas. A estrutura pega pedaços de código de bibliotecas de código aberto existentes e combina eles de diferentes maneiras. Isso permite que os pesquisadores criem conjuntos de dados que não só são grandes em quantidade, mas também realistas e úteis para testes.
Apresentando o Blind HELIX
Nós também desenvolvemos uma ferramenta chamada Blind HELIX que se baseia no HELIX. O Blind HELIX foca em extrair automaticamente Componentes de código utilizáveis de bibliotecas existentes usando uma abordagem conhecida como "program slicing". Essa metodologia ajuda a dividir programas complexos em partes menores, mantendo suas funcionalidades.
Por que Conjuntos de Dados São Importantes?
Conjuntos de dados de qualidade são essenciais para avaliar a eficácia de diferentes ferramentas de similaridade de programas. À medida que o uso de aprendizado de máquina cresce nessa área, ter conjuntos de dados confiáveis se torna ainda mais crítico. Muitos conjuntos de dados atuais são mal construídos, dificultando a medição precisa do desempenho de suas abordagens pelos pesquisadores.
Desafios na Disponibilidade de Conjuntos de Dados
Os conjuntos de dados atuais muitas vezes não refletem adequadamente problemas do mundo real. Isso é especialmente verdadeiro no contexto da análise de malware. Em muitos casos, os rótulos atribuídos às amostras nesses conjuntos de dados não representam similaridades reais, levando a resultados enganosos.
Gerando Conjuntos de Dados Sintéticos
Para lidar com o problema de conjuntos de dados limitados e de baixa qualidade, usamos o HELIX para produzir conjuntos de dados sintéticos cortando e recombinando bibliotecas de código aberto acessíveis. Esse método nos permite criar amostras com similaridades claramente definidas com base nos componentes que incluem.
Informações de Contexto
Antes de mergulhar em nossa abordagem, vamos revisar algumas informações de contexto sobre a similaridade de programas e o uso de conjuntos de dados nessa área de pesquisa.
O que é Similaridade de Programa?
A similaridade de programas se refere às maneiras pelas quais diferentes programas podem ser comparados para avaliar quão parecidos eles são. Isso pode ser feito usando várias técnicas, como comparação byte a byte ou métodos mais sofisticados usando aprendizado de máquina. A similaridade de programa é aplicável em várias áreas, incluindo detecção de bugs, classificação de malware e até identificação de casos de roubo de software.
Conjuntos de Dados Existentes e Suas Limitações
Existem vários conjuntos de dados criados para pesquisa de similaridade de programas, particularmente no campo da análise de malware. No entanto, a qualidade desses conjuntos de dados muitas vezes deixa a desejar. Estudos destacaram vários problemas, como rotulagem inconsistente, má representação de problemas reais e dificuldades em reproduzir resultados devido ao uso de conjuntos de dados privados.
A Estrutura HELIX Explicada
O HELIX serve como uma estrutura robusta para gerar conjuntos de dados sintéticos. Em sua essência, consiste em três componentes principais:
- Componentes: Esses são pequenos pedaços reutilizáveis de código que fornecem funcionalidades específicas e vêm com metadados associados sobre o que eles fazem.
- Transformações: Esses são métodos que modificam o código para criar diferentes versões, como remover informações de depuração de um binário compilado.
- Geração de Amostras: O HELIX combina componentes e transformações de maneiras específicas para produzir amostras que podem ser analisadas.
Como o HELIX Funciona?
O HELIX funciona pegando componentes de código e criando amostras que refletem certos níveis de similaridade. A funcionalidade e as tags associadas a cada componente ajudam os pesquisadores a entender as relações entre diferentes amostras.
Extraindo Componentes com Blind HELIX
Enquanto o HELIX tem um número limitado de componentes escritos à mão, isso não é suficiente para geração de conjuntos de dados em larga escala. É aqui que o Blind HELIX entra. Ao aplicar "program slicing" a bibliotecas de código aberto, o Blind HELIX pode identificar e extrair automaticamente componentes funcionais.
O que é Program Slicing?
Program slicing envolve quebrar um programa em suas partes essenciais que contribuem para comportamentos específicos. Isso ajuda a isolar os pedaços relevantes de código, facilitando a criação de amostras com similaridades conhecidas.
O Processo de Extração
O Blind HELIX segue uma série de passos para extrair componentes de bibliotecas:
- Analisa os metadados da biblioteca para identificar funções que podem ser exportadas.
- Para cada função, o Blind HELIX tenta construir um binário que inclua essa função.
- Se a construção for bem-sucedida, cria um componente com base na função e atribui um rótulo.
Esse processo de extração permite que os pesquisadores reúnam rapidamente uma grande quantidade de componentes de forma eficiente.
Construindo um Corpus de Bibliotecas
Para reunir os componentes necessários, utilizamos um gerenciador de pacotes chamado VCPKG. Esse gerenciador ajuda a adquirir e gerenciar várias bibliotecas de código aberto. Usando o VCPKG, conseguimos baixar e construir inúmeras bibliotecas, o que nos permitiu extrair milhares de componentes que poderiam ser usados para gerar conjuntos de dados sintéticos.
Rotulagem e Métricas de Similaridade
Para tornar os conjuntos de dados gerados úteis, rotulamos os componentes com base nas funções que representam. Para qualquer amostra gerada, o conjunto de rótulos é compilado, permitindo uma comparação fácil de similaridade entre as amostras.
Estratégia de Geração de Conjuntos de Dados
Criar conjuntos de dados a partir de componentes extraídos pode ter seus desafios. Alguns componentes podem não funcionar bem juntos, levando a falhas na construção. Além disso, selecionar componentes aleatoriamente pode não fornecer a mistura certa de similaridades, resultando em conjuntos de dados que tendem muito à baixa ou alta similaridade.
Para resolver essas questões, implementamos uma estratégia de geração de conjuntos de dados semi-aleatória estratificada por bibliotecas:
- Selecionar aleatoriamente uma lista de bibliotecas.
- Escolher um componente de cada biblioteca selecionada.
- Gerar uma amostra a partir desses componentes.
- Substituir alguns dos componentes selecionados por outros de bibliotecas diferentes para controlar os níveis de similaridade.
Esse método garante uma distribuição mais equilibrada de similaridade nos conjuntos de dados gerados.
Avaliação de Ferramentas de Similaridade de Programas
Para avaliar a utilidade de nossos conjuntos de dados sintéticos, comparamos várias ferramentas de similaridade de programas usando tanto os conjuntos de dados gerados pelo HELIX quanto um conjunto de dados rotulado manualmente. Observamos como essas ferramentas se saíram e as ranqueamos com base em sua precisão ao determinar similaridades de programas.
Ferramentas de Similaridade de Programas Selecionadas
Examinamos cinco ferramentas populares de similaridade de programas:
- ssdeep: Essa ferramenta usa técnicas de hashing fuzzy para comparar arquivos com base em seu conteúdo.
- sdhash: Gera hashes com base em sequências de bytes e compara esses hashes para encontrar similaridades.
- Trend Micro Locality-Sensitive Hash (TLSH): Emprega uma abordagem byte a byte para gerar hashes que são então comparados.
- Lempel-Ziv Jaccard Distance (LZJD): Essa ferramenta cria um dicionário de compressão para ajudar no cálculo de similaridades entre arquivos.
- BinDiff: Focada em arquivos executáveis, essa ferramenta analisa as características estruturais do código para gerar pontuações de similaridade.
Comparação de Desempenho
Executamos cada uma dessas ferramentas tanto no conjunto de dados rotulado manualmente quanto no nosso conjunto de dados sintético HELIX para ver como elas conseguiam determinar as similaridades entre os programas. Os resultados mostraram que, embora algumas ferramentas tenham se saído melhor que outras, a consistência nos rankings entre os dois conjuntos de dados sugeriu que nossos conjuntos de dados sintéticos realmente refletem similaridades realistas de programas.
Insights do Desempenho de Conjunto de Dados Rotulado Manualmente
Ao olhar de perto para o desempenho das várias ferramentas no conjunto de dados rotulado manualmente, encontramos algumas tendências interessantes. Algumas ferramentas se destacaram em identificar similaridades em certos tipos de programas, enquanto lutavam com outros.
Principais Conclusões
- LZJD e TLSH: Embora tenham apresentado desempenho semelhante de forma geral, o LZJD foi melhor em identificar similaridades semânticas, enquanto o TLSH se destacou com diferentes versões de software.
- BinDiff: Essa ferramenta mostrou força em reconhecer similaridades, especialmente em programas otimizados e ofuscados, provavelmente devido ao seu uso de métodos de comparação de gráfico de chamadas.
- ssdeep e sdhash: Ambas as ferramentas tiveram dificuldades com formatos binários complexos, frequentemente relatando baixa similaridade devido à sua concentração em arquivos quase idênticos.
Estudo de Caso: Amostras de Malware
Uma avaliação mais aprofundada focou em testar nossos métodos usando amostras de uma família específica de malware. Essas amostras eram muito semelhantes, com as principais diferenças sendo seus metadados. Embora a análise manual pudesse identificar facilmente os programas idênticos, a maioria das ferramentas falhou, exceto o BinDiff, que conseguiu reconhecer as similaridades cruciais entre essas amostras.
Discussão e Direções Futuras
Embora o HELIX e o Blind HELIX tenham feito progressos significativos na geração de conjuntos de dados úteis, ainda há limitações. A implementação atual do Blind HELIX só funciona com bibliotecas C no Linux. Trabalhos futuros poderiam expandir isso para incluir C++, bibliotecas do Windows e melhorar a precisão da rotulagem.
Além disso, enquanto os conjuntos de dados gerados atualmente são úteis para análise estática, eles ainda não suportam análise dinâmica devido a possíveis problemas ao executar as amostras geradas.
Áreas Potenciais para Melhoria
Olhando para o futuro, podemos desenvolver ainda mais a estrutura HELIX aumentando o número de componentes disponíveis, permitindo uma geração de conjuntos de dados mais rica. Engajar com a comunidade para contribuir com componentes funcionais adicionais poderia aumentar a capacidade geral do HELIX.
A abordagem adotada no Blind HELIX também poderia ser adaptada para geração de conjuntos de dados mais complexos, permitindo tarefas de classificação que incorporem aprendizado de máquina.
Conclusão
O trabalho apresentado aqui demonstra o potencial de gerar conjuntos de dados sintéticos para pesquisa em similaridade de programas usando a estrutura HELIX e a ferramenta Blind HELIX. Ao automatizar a extração de componentes e focar na geração de conjuntos de dados que refletem similaridades do mundo real, acreditamos que podemos fornecer recursos valiosos para pesquisadores nessa área.
À medida que a comunidade de pesquisa continua a avançar na área de similaridade de programas, ter conjuntos de dados de alta qualidade se torna essencial. Nossos esforços contínuos têm como objetivo abordar as lacunas atuais na qualidade e disponibilidade de conjuntos de dados, garantindo que os pesquisadores tenham as ferramentas necessárias para ter sucesso em seu trabalho.
Título: Synthetic Datasets for Program Similarity Research
Resumo: Program similarity has become an increasingly popular area of research with various security applications such as plagiarism detection, author identification, and malware analysis. However, program similarity research faces a few unique dataset quality problems in evaluating the effectiveness of novel approaches. First, few high-quality datasets for binary program similarity exist and are widely used in this domain. Second, there are potentially many different, disparate definitions of what makes one program similar to another and in many cases there is often a large semantic gap between the labels provided by a dataset and any useful notion of behavioral or semantic similarity. In this paper, we present HELIX - a framework for generating large, synthetic program similarity datasets. We also introduce Blind HELIX, a tool built on top of HELIX for extracting HELIX components from library code automatically using program slicing. We evaluate HELIX and Blind HELIX by comparing the performance of program similarity tools on a HELIX dataset to a hand-crafted dataset built from multiple, disparate notions of program similarity. Using Blind HELIX, we show that HELIX can generate realistic and useful datasets of virtually infinite size for program similarity research with ground truth labels that embody practical notions of program similarity. Finally, we discuss the results and reason about relative tool ranking.
Autores: Alexander Interrante-Grant, Michael Wang, Lisa Baer, Ryan Whelan, Tim Leek
Última atualização: 2024-05-06 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2405.03478
Fonte PDF: https://arxiv.org/pdf/2405.03478
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.