Simple Science

Ciência de ponta explicada de forma simples

# Informática# Criptografia e segurança# Linguagens de programação

Aprimorando a Inferência de Formato de Protocolo para Segurança

Um método de análise estática melhora a inferência de formato de protocolo pra uma segurança de rede melhor.

― 9 min ler


Análise Estática paraAnálise Estática paraInferência de Protocolosanálise de protocolos de rede.Nova abordagem melhora a precisão na
Índice

Inferir formatos de protocolos é importante pra várias aplicações de segurança. Muitas técnicas atuais pra descobrir esses formatos podem deixar passar alguns importantes. A maioria desses métodos depende de análise dinâmica e considera só um número limitado de pacotes de rede. Se uma determinada característica não for encontrada nos pacotes de entrada, é bem provável que não seja incluída nos formatos inferidos. Isso leva à necessidade de métodos mais eficazes.

Neste trabalho, a gente apresenta um novo método que usa análise de programas estática pra inferir formatos de protocolos. Diferente da análise dinâmica, que depende de pacotes de entrada específicos, a análise estática avalia todo o código do programa, oferecendo uma visão mais abrangente que pode identificar todos os formatos possíveis. Porém, pra alcançar eficiência e precisão nos resultados, enfrentamos dois desafios principais: explosão de caminhos e gerenciamento de restrições de caminhos desordenados.

Pra lidar com esses desafios, usamos interpretação abstrata, que nos permite criar uma nova estrutura de dados conhecida como gráfico de formato abstrato. Essa estrutura ajuda a concentrar operações complexas em seções menores, garantindo precisão e eficiência ao mesmo tempo. Nossos resultados mostram que conseguimos inferir formatos de um protocolo em menos de um minuto, alcançando mais de 95% de precisão e recall, o que é uma melhoria significativa em relação às técnicas existentes.

Contexto

Protocolos de rede descrevem como diferentes sistemas de computação se conectam e se comunicam. Problemas de segurança nesses protocolos podem ter consequências sérias, como perda financeira ou vazamentos de dados. Um exemplo notável é o ataque WannaCry, que explorou uma vulnerabilidade em um protocolo, resultando em perdas substanciais em todo o mundo.

Pra realizar avaliações automatizadas de segurança em protocolos de rede, ter uma especificação clara dos formatos de pacotes é muitas vezes crucial. Essa especificação permite a geração de pacotes de rede legítimos, ajuda em testes de segurança e suporta métodos mais avançados como verificação formal. Infelizmente, mesmo que alguns protocolos tenham documentos de especificação, formatos de pacotes formais ou legíveis por máquina costumam estar ausentes ou mal detalhados.

Por causa dessas lacunas, inferir automaticamente formatos de protocolos se torna essencial. Existem três cenários principais a considerar. No primeiro cenário, quando só pacotes de rede estão disponíveis, mas não a implementação do protocolo, técnicas baseadas em análise de rastreamento de rede são frequentemente propostas. Esses métodos utilizam abordagens estatísticas e de aprendizado de máquina pra determinar como dividir um pacote em campos.

Porém, devido a incertezas inerentes a essas técnicas, a qualidade dos formatos inferidos geralmente fica aquém pra muitas aplicações de segurança. Nós categorizamos esses métodos como técnicas de categoria um. O segundo cenário surge quando temos acesso ao código executável de um protocolo junto com um conjunto de pacotes válidos. Aqui, a análise dinâmica do programa rastreia como os bytes do pacote são processados quando o código é executado, permitindo a inferência dos formatos do protocolo com base nos fluxos de dados observados. No entanto, assim como os métodos de categoria um, as técnicas de categoria dois também podem perder formatos importantes se os pacotes fornecidos não cobrirem todas as possibilidades.

No terceiro cenário, o código-fonte do protocolo de rede está disponível. É aqui que nossa pesquisa se concentra, enquanto desenvolvemos uma análise de programa estática que produz formatos de protocolo formais, cobrindo tanto a sintaxe quanto a semântica diretamente do código-fonte. Nosso método pertence às técnicas de categoria três.

Desafios na Análise Dinâmica

A análise dinâmica enfrenta desafios específicos que limitam precisão e completude. Esses incluem o problema da cobertura, o que significa que, muitas vezes, a análise pode não considerar todos os formatos potenciais por depender apenas de certos pacotes. Como resultado, partes significativas do protocolo podem ficar ocultas.

O segundo desafio é que os métodos dinâmicos costumam carecer da precisão necessária pra identificar relações entre diferentes campos dentro dos pacotes do protocolo. Por exemplo, certas restrições sobre como os campos se relacionam podem não ser capturadas, levando a inferências de formatos incompletas ou imprecisas.

Nossa Abordagem: Análise de Programa Estática

Nosso estudo apresenta uma técnica de análise estática pra superar as limitações dos métodos existentes. A análise estática nos permite examinar toda a estrutura do código sem precisar de pacotes específicos como entrada, o que nos ajuda a alcançar alta cobertura. Esse método opera analisando como os dados são processados dentro do código, permitindo criar uma representação abrangente dos formatos de pacotes.

Nosso sistema funciona definindo uma técnica de levantamento de protocolos que traduz o código-fonte em formatos de pacotes formais, utilizando uma versão refinada da Forma de Backus-Naur (BNF) que inclui tanto restrições de sintaxe quanto lógicas. Ao aproveitar essa metodologia, desenvolvemos uma série de algoritmos e ferramentas que ajudam a mitigar o problema da explosão de caminhos frequentemente encontrado na análise sensível a caminhos tradicional.

Contribuições Chave

Destacamos quatro principais contribuições feitas através da nossa pesquisa:

  1. Método de Interpretação Abstrata: Criamos uma representação inovadora que usa um gráfico de formato abstrato pra melhorar o processo de inferência de formato.

  2. Análise Localizada Sensível a Caminhos: Desenvolvemos um método de análise que realiza um exame detalhado em regiões específicas do código, reduzindo significativamente o problema da explosão de caminhos.

  3. Algoritmo de Reorganização de Gráficos: Projetamos um método que reorganiza o gráfico de formato abstrato pra produzir resultados em BNF, facilitando aplicações práticas dos formatos inferidos.

  4. Implementação e Avaliação: Implementamos nossa abordagem como uma ferramenta que infere eficientemente formatos de pacotes a partir de analisadores de protocolo escritos em C. Nossas avaliações demonstram que essa ferramenta pode alcançar melhorias notáveis em precisão e cobertura, permitindo uma melhor detecção de vulnerabilidades e avaliações de segurança.

Metodologia

Nossa estrutura começa recebendo o código-fonte de um analisador de protocolo, geralmente escrito em C. A análise se baseia na compreensão de vários campos de pacotes que frequentemente estão estruturados sequencialmente dentro do código. Anotações feitas pelo usuário, sobre certos parâmetros de pacotes, orientam o processo de análise.

A análise é estruturada em três fases cruciais:

  1. Construindo Gráficos de Formato Abstrato (AFGs): Isso envolve examinar o código-fonte pra determinar como os dados são gerenciados, criando um gráfico que reflete as relações lógicas entre diferentes campos.

  2. Análise Localizada Sensível a Caminhos: Identificando regiões específicas dentro do gráfico que requerem investigação detalhada, conseguimos reduzir a carga computacional e mitigar o problema da explosão de caminhos.

  3. Reorganização e Geração de Saída: O AFG finalizado é reorganizado pra formar uma saída em estilo BNF coesa que pode ser facilmente utilizada em várias aplicações de segurança.

Resultados da Avaliação

Realizamos avaliações extensivas usando vários protocolos, avaliando a eficiência, precisão e recall da nossa abordagem. Os resultados demonstram que nosso método consegue inferir formatos em menos de um minuto enquanto atinge consistentemente mais de 95% de precisão. Em comparação com técnicas existentes, nossos formatos inferidos melhoram o desempenho de fuzzers baseados em gramática, aumentando significativamente sua cobertura e identificando eficazmente várias vulnerabilidades de dia zero.

Além disso, exploramos a incorporação de nossos formatos inferidos em ferramentas de segurança práticas como Wireshark e Snort. Nossos achados mostram que usar nossos formatos leva a uma melhor análise de tráfego de rede e detecção de intrusões.

Aplicação a Cenários de Segurança

Nossos formatos de protocolo inferidos têm uma ampla gama de aplicações em segurança.

Aplicação 1: Fuzzing de Rede

Fuzzers de rede como BooFuzz dependem fortemente de formatos de protocolo precisos pra gerar pacotes de teste válidos. Ao integrar nossos formatos, os fuzzers podem aumentar significativamente sua cobertura, identificando vulnerabilidades críticas que, de outra forma, permaneceriam não descobertas.

Aplicação 2: Auditoria de Tráfego

Com ferramentas como Wireshark, o suporte adequado a protocolos é essencial pra interpretar o tráfego. Nossos formatos inferidos não só permitem que o Wireshark dissecasse pacotes com precisão, mas também ajudam a revelar detalhes importantes sobre a atividade da rede, auxiliando em uma auditoria de tráfego mais eficaz.

Aplicação 3: Detecção de Intrusões

Sistemas como o Snort podem utilizar nossos formatos pra definir regras de detecção de padrões de tráfego malicioso. A alta precisão e cobertura dos nossos formatos inferidos aumentam a capacidade dos sistemas de detecção de intrusões de identificar e responder a ameaças.

Limitações e Trabalhos Futuros

Embora nosso método de análise estática ofereça várias vantagens, não está isento de limitações. Nossa implementação atual está focada em código C e não suporta certos recursos como C++. Trabalhos futuros terão como objetivo abordar essas lacunas, melhorando o escopo e a flexibilidade da nossa abordagem.

Além disso, a qualidade dos formatos inferidos depende, em última análise, das implementações originais dos protocolos. Se campos-chave forem omitidos no código, nossa análise também não os capturará.

Conclusão

O desenvolvimento de uma técnica de análise de programas estática pra inferir formatos de protocolos marca um passo importante em melhorar as medidas de segurança de rede. Através de uma combinação de interpretação abstrata, análise localizada sensível a caminhos e reorganização de gráficos, oferecemos uma solução robusta pra identificar formatos de protocolos críticos que podem ser aplicados diretamente em várias aplicações de segurança. Nossas avaliações confirmam que esse método pode descobrir vulnerabilidades previamente ocultas, reforçando significativamente a eficácia das análises de segurança em protocolos de rede.

Fonte original

Título: Lifting Network Protocol Implementation to Precise Format Specification with Security Applications

Resumo: Inferring protocol formats is critical for many security applications. However, existing format-inference techniques often miss many formats, because almost all of them are in a fashion of dynamic analysis and rely on a limited number of network packets to drive their analysis. If a feature is not present in the input packets, the feature will be missed in the resulting formats. We develop a novel static program analysis for format inference. It is well-known that static analysis does not rely on any input packets and can achieve high coverage by scanning every piece of code. However, for efficiency and precision, we have to address two challenges, namely path explosion and disordered path constraints. To this end, our approach uses abstract interpretation to produce a novel data structure called the abstract format graph. It delimits precise but costly operations to only small regions, thus ensuring precision and efficiency at the same time. Our inferred formats are of high coverage and precisely specify both field boundaries and semantic constraints among packet fields. Our evaluation shows that we can infer formats for a protocol in one minute with >95% precision and recall, much better than four baseline techniques. Our inferred formats can substantially enhance existing protocol fuzzers, improving the coverage by 20% to 260% and discovering 53 zero-days with 47 assigned CVEs. We also provide case studies of adopting our inferred formats in other security applications including traffic auditing and intrusion detection.

Autores: Qingkai Shi, Junyang Shao, Yapeng Ye, Mingwei Zheng, Xiangyu Zhang

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

Idioma: English

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

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

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