← Últimos artigos
💻 ciência da computação

State-inferer: LLM-Driven State Machine Extraction and Formal Verification for Secure Protocol Implementations

Este artigo introduz o State-inferer, um framework de caixa-branca que integra fatiamento de programa, grandes modelos de linguagem e verificação de modelos formais para extrair e verificar com precisão máquinas de estado de protocolos a partir de código-fonte, alcançando uma precisão de nível de transição superior e revelando quatro vulnerabilidades de segurança anteriormente desconhecidas em implementações de TLS, IKEv2 e SSH.

Autores originais: MengCheng Ju, Xi Chen, XieLi Zhang, Mingliang Zhu, Guanping Zhang, Dongliang Zhao, ChunXiang Gu

Publicado 2026-11-09
📖 6 min de leitura🧠 Leitura aprofundada

Autores originais: MengCheng Ju, Xi Chen, XieLi Zhang, Mingliang Zhu, Guanping Zhang, Dongliang Zhao, ChunXiang Gu

Artigo original sob licença CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). ✨ Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo

A segurança do mundo digital depende fortemente das regras invisíveis que governam como os computadores conversam entre si. Essas regras, conhecidas como protocolos de rede, são projetadas para garantir que os dados viajem com segurança de um remetente a um receptor, verificando identidades e mantendo segredos. Em seu cerne, esses protocolos funcionam como um roteiro rigoroso: um computador deve estar em uma condição específica, receber uma mensagem específica e, então, mover-se para uma nova condição antes de poder prosseguir. Se um computador pular uma etapa ou aceitar uma mensagem enquanto estiver na condição errada, todo o sistema pode ser comprometido, permitindo que invasores contornem verificações de segurança ou roubem informações confidenciais. Por décadas, especialistas em segurança tentaram verificar se o código real executado nos servidores segue esse roteiro perfeitamente. No entanto, o código é frequentemente desordenado, repleto de variáveis ocultas e lógica complexa que ferramentas de teste padrão têm dificuldade em mapear. Quando o comportamento real de um programa diverge de seu design escrito, falhas perigosas podem se esconder à vista de todos, esperando para serem exploradas.

Uma equipe de pesquisadores da Universidade de Engenharia de Informação da PLA desenvolveu um novo método para resolver este problema, criando uma ferramenta chamada State-inferer, que atua como um tradutor entre o código de computador complexo e as regras lógicas que ele deveria seguir. Em vez de tentar ler todo o código-fonte de uma só vez ou adivinhar como um programa se comporta enviando mensagens aleatórias, esta ferramenta decompõe o código em partes minúsculas e gerenciáveis. Ela utiliza uma técnica chamada fatiamento de programa (program slicing) para rastrear exatamente como um pedaço específico de dados muda conforme se move pelo software, isolando a lógica precisa que faz um computador mudar de estado para outro. Este processo é como rastrear um único fio através de um novelo de lã emaranhado para ver exatamente onde ele leva, ignorando o resto da bagunça. Ao focar nesses fios específicos, o sistema pode reconstruir a sequência exata de eventos que um programa segue, incluindo as condições internas ocultas que as ferramentas padrão costumam perder.

Os pesquisadores então alimentaram essas sequências reconstruídas em um grande modelo de linguagem, um tipo de inteligência artificial treinada para compreender e raciocinar sobre código. Diferente de tentativas anteriores que simplesmente pediam à IA para ler grandes blocos de texto, este sistema forneceu à IA um fragmento de código pequeno e focado para cada uma das transições do protocolo. Isso permitiu que a IA visse o contexto completo de uma mudança de estado sem ficar sobrecarregada por informações irrelevantes. A IA então construiu um mapa completo do comportamento do programa, anotando não apenas quais mensagens dispararam uma mudança, mas também as variáveis internas que precisavam ser verdadeiras para que essa mudança ocorresse. Finalmente, os pesquisadores usaram um mecanismo de verificação formal para checar este mapa contra as regras de segurança oficiais. Este mecanismo atua como um auditor rigoroso, testando sistematicamente cada caminho possível que o programa pode seguir para ver se ele algum dia viola as regras, como enviar dados antes que uma conexão segura seja totalmente estabelecida.

Quando testado em sete implementações de código aberto de diferentes protocolos de segurança importantes, incluindo TLS, IKEv2 e SSH, o novo método provou ser notavelmente preciso. Ele identificou corretamente o comportamento do código com uma precisão de 95,2 por cento, superando significativamente as melhores ferramentas existentes, que alcançavam apenas cerca de 78,9 por cento. A diferença não foi apenas uma questão de erros menores; a nova ferramenta capturou com sucesso lógicas internas complexas que outros métodos perderam completamente, como transições impulsionadas por temporizadores internos ou verificações de recursos, em vez de mensagens externas. De fato, os pesquisadores descobriram que os métodos mais antigos frequentemente falhavam em ver quase metade das transições críticas porque dependiam de uma visão simplificada do programa que ignorava esses detalhes internos. Ao capturar o quadro completo, a nova ferramenta foi capaz de descobrir quatro vulnerabilidades anteriormente desconhecidas no software. Estas falhas, que nunca haviam sido descobertas antes, eram sérias o suficiente para receberem identificadores de segurança oficiais e serem reportadas aos mantenedores do software para correção.

Uma das descobertas mais significativas foi que as falhas não eram apenas possibilidades teóricas, mas fraquezas reais e exploráveis. Em um caso, a ferramenta descobriu que um servidor poderia ser enganado para aceitar uma mensagem de segurança crítica antes de ter terminado a troca de chaves necessária, efetivamente contornando a autenticação. Em outro caso, uma verificação ausente permitiu que um servidor processasse um fluxo interminável de mensagens, potencialmente esgotando seus recursos. Essas descobertas destacam uma lacuna crítica na forma como o software é analisado atualmente: olhar apenas para a entrada e a saída não é suficiente para entender como um programa realmente funciona. Os pesquisadores demonstraram que, ao combinar a análise de código precisa com o poder de raciocínio da inteligência artificial, é possível construir um modelo completo e preciso da lógica interna de um programa. Esta abordagem não requer que o software seja modificado ou que os pesquisadores rastreiem manualmente cada linha de código, tornando-a uma forma escalável de auditar os sistemas complexos que protegem nossa infraestrutura digital.

O estudo também abordou as limitações de abordagens anteriores que dependiam da recuperação de código baseada em similaridade de texto. Esses métodos frequentemente falhavam porque não conseguiam conectar os pontos entre diferentes funções que trabalhavam juntas para alterar o estado de um programa. O novo sistema, por outro via inversa, segue o fluxo real de dados e controle, garantindo que o contexto fornecido à inteligência artificial seja completo e conectado. Isso permitiu que o sistema gerasse verificações de segurança que foram adaptadas especificamente para as variáveis e a lógica de cada implementação única, em vez de aplicar um modelo genérico que poderia perder o alvo. O resultado é uma estrutura que pode se adaptar às peculiaridades de diferentes estilos de codificação e ainda assim produzir um modelo confiável do comportamento do sistema.

Em última análise, este trabalho representa uma mudança na forma como abordamos a segurança do software. Ele se afasta da ideia de que devemos ou inspecionar manualmente cada linha de código ou confiar em testes de caixa preta que podem ver apenas a superfície. Em vez disso, oferece uma maneira de olhar dentro da máquina, entendendo exatamente como ela pensa e reage. Os pesquisadores descobriram que, ao tratar o código como um conjunto de etapas lógicas que podem ser fatiadas, analisadas e verificadas, eles podiam encontrar erros que estavam escondidos há anos. Embora a ferramenta tenha sido testada em projetos de código aberto, o método sugere um caminho a seguir para proteger a vasta gama de sistemas proprietários que operam a internet. A capacidade de extrair e verificar automaticamente as máquinas de estado de protocolos complexos significa que a segurança pode ser verificada de forma mais minuciosa e rápida do que nunca, potencialmente prevenindo os tipos de brechas que assolam o mundo digital há décadas. As descobertas confirmam que a lacuna entre o que um protocolo deveria fazer e o que ele realmente faz é onde reside o perigo, e que fechar essa lacuna exige um olhar mais profundo e preciso sobre o próprio código.

Afogado em artigos na sua área?

Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.

Experimentar Digest →