Mais preciso que o GPT-4: como o CodeReduce da Snyk melhorou o desempenho de outros LLMs
7 de maio de 2024
0 minutos de leituraA Snyk é pioneira em cibersegurança com IA desde o lançamento do Snyk Code, em 2021. Na época, o mecanismo DeepCode AI trouxe, pela primeira vez, precisão e velocidade incomparáveis para identificar problemas de segurança no universo de SAST. Nos últimos três anos, vimos a ascensão da IA e dos LLMs, e a Snyk esteve na vanguarda desse movimento, lançando novos recursos baseados em IA, como o Snyk Agent Fix, nosso recurso de correção automática de vulnerabilidades, e o recurso de análise de alcançabilidade de dependências de terceiros.
Anunciamos recentemente grandes melhorias nos modelos do Snyk Agent Fix, um recurso beta que corrige automaticamente problemas de segurança identificados pelo Snyk Code. O Snyk Agent Fix combina a mais recente tecnologia de IA com a experiência interna da nossa equipe para gerar correções confiáveis. Corrigir problemas de segurança é complexo. Para entender melhor como fazemos isso, vamos analisar em detalhes o artigo de pesquisa que explica os principais ingredientes por trás do Snyk Agent Fix: a tecnologia CodeReduce e nosso conjunto selecionado de correções de segurança.
Automatizar correções de segurança: um problema complexo
Muitas vezes, desenvolvedores dedicam muito tempo a encontrar e corrigir problemas de segurança por conta própria. Antes do DeepCode AI, o Snyk Code já ajudava a identificar os problemas, a etapa inicial. Ainda assim, corrigi-los podia ser um processo difícil e demorado, porque muitos desenvolvedores não tinham — e ainda não têm — treinamento em segurança. Para corrigir problemas de segurança, é preciso revisar o código manualmente, entender como ele deve funcionar, analisar os problemas de segurança no contexto do código e pesquisar como resolvê-los antes de corrigir o problema de fato.
Há anos, muitas empresas buscam automatizar a correção de problemas de segurança — ou seja, a “correção automática” — para reduzir o volume de trabalho de remediação. Porém, apesar de muitas tentativas, foi difícil criar uma solução que gerasse correções precisas. Por isso, a maioria das ferramentas de correção automática se concentrava em poucos tipos de problema, em alterações triviais de apenas algumas linhas de código ou em simples ajustes de formatação.
Com o surgimento dos LLMs, percebemos o potencial de criar um recurso melhor de correção automática usando essa nova geração de IA. No entanto, os LLMs também têm limitações para corrigir problemas de segurança quando não são configurados adequadamente para alcançar os resultados desejados. A maioria foi treinada com uma grande variedade de dados e códigos, mas não especificamente para remediação de segurança. Isso nos trouxe dois desafios principais:
Para realizar uma tarefa tão específica quanto a correção automática de problemas de segurança, os LLMs precisam aprender com um conjunto de dados especializado em correções de segurança e semântica de código, para gerar correções relevantes e precisas.
As alucinações e a capacidade limitada dos LLMs de processar contexto a cada geração significam que adicionar mais código aos prompts para orientar um LLM de “uso geral” (em vez de um treinado especificamente para segurança) a produzir resultados mais precisos nem sempre traz resultados melhores.
Como superar as limitações dos LLMs e gerar correções melhores
Concluímos que os benefícios de usar LLMs compensavam o trabalho necessário para superar os problemas identificados. Por isso, assumimos a missão de resolvê-los.
Conjunto de dados de correções
Criamos um conjunto abrangente de correções de segurança de código aberto para garantir os melhores resultados possíveis. Primeiro, rotulamos extensivamente commits de código aberto e montamos um conjunto de dados limpo de problemas e correções para JavaScript. Desde então, fizemos o mesmo com outras linguagens, como Java, Python, C/C++, C#, Go e APEX. Em seguida, em vez de adicionar mais dados rotulados manualmente, usamos os recursos de análise de programas do Snyk Code, fornecidos pelo mecanismo DeepCode AI, para obter com eficiência o mesmo efeito quantitativo da rotulagem de dados na criação de conjuntos de dados limpos.
Tecnologia CodeReduce (patente pendente)
O CodeReduce usa análise de programas para limitar o mecanismo de atenção do LLM apenas às partes do código necessárias para realizar a correção. Para isso, concentra o LLM em um trecho menor de código que contém o defeito identificado e o contexto necessário. Isso reduz drasticamente a quantidade de código que o LLM precisa processar, o que ajuda a melhorar a qualidade das correções geradas em todos os modelos de IA testados e reduz as alucinações. Além disso, ao enviar menos informações ao modelo, o processamento fica mais rápido. Isso permite gerar correções em tempo real: você recebe correções mais precisas e relevantes, e também mais rapidamente.
O processo do CodeReduce inclui as seguintes etapas:
Identificar o problema de segurança
Reduzir o código ao mínimo necessário, mantendo o contexto
Adicionar o código reduzido pelo CodeReduce ao prompt do LLM e gerar uma correção
Aplicar a correção
Usar os recursos de análise do Snyk Code para verificar novamente se o Snyk Agent Fix corrigiu a vulnerabilidade e se a correção não introduziu novas vulnerabilidades
Incorporar a correção de volta ao código original
A imagem abaixo mostra como funciona o pipeline de correção automática de problemas de segurança. Todo o processo leva apenas alguns segundos, graças a otimizações adicionais que você pode conhecer no artigo de pesquisa sobre o CodeReduce.

Quais são os resultados?
Depois de resolver esses problemas, precisávamos testar o desempenho das nossas correções automáticas de segurança. Para isso, criamos um benchmark que pudesse ser usado com diferentes LLMs.
Fizemos nossas avaliações usando as métricas “Pass@𝑘” e “ExactMatch@𝑘” para modelos que usam o CodeReduce (indicados pelo símbolo ‡ na tabela abaixo), comparando-os com as referências TFix, um modelo baseado em janela, e vários modelos com contexto extenso, como GPT-3.5 e GPT-4.
A variável “k” em “Pass@k” indica quantas das cinco correções geradas a cada vez — de pelo menos uma até todas as cinco — resolvem o problema de segurança em questão sem introduzir novos problemas.
Também definimos cinco categorias de problemas de segurança para os testes:
AST: Vulnerabilidades que exigem uma árvore sintática abstrata, mas não um fluxo de dados dedicado
Local: Valores incorretos passados a métodos que não os aceitam
FileWide: Problemas em assinaturas ou implementação
SecurityLocal: Uso de APIs e rastreamento de chamadas de métodos
SecurityFlow: Análise complexa de contaminação que exige um fluxo de dados complexo
Também selecionamos vários LLMs para comparação: StarCoder, Mixtral, T5, GPT-3.5 e GPT-4. Os resultados foram os seguintes:


Como mostra a tabela, modelos que normalmente precisam aprender dependências complexas de longo alcance para gerar uma correção correta têm um desempenho significativamente melhor quando usam o contexto de código extraído pelo CodeReduce do que quando geram correções sem esse recurso. Um bom exemplo é a grande melhora no resultado Pass@5 ao corrigir problemas de AST com o modelo StarCoder: a taxa de sucesso passou de 19,3% (sem o CodeReduce) para 82,31% (com o CodeReduce).
Principais conclusões
De modo geral, o Snyk Agent Fix superou o baseline de última geração anterior, estabelecido pelo TFix, e ajudou diversos modelos populares de IA a obter um desempenho melhor em diferentes configurações. Isso porque o Snyk Agent Fix usa análise de programas, por meio da tecnologia proprietária CodeReduce da Snyk, para lidar com dependências de longo alcance e fluxos de dados. Assim, simplifica muito o aprendizado sobre os problemas de segurança relevantes ao restringir o foco da atenção do modelo, o que resulta em correções mais precisas e relevantes.
Agora você pode testar os poderosos recursos do Snyk Agent Fix no IDE: inscreva-se no Snyk Code e ative “Snyk Code Fix Suggestions” nas configurações do Snyk Preview. Consulte nossa documentação para saber mais. Você também pode ajudar a moldar o futuro do Snyk Agent Fix enviando feedback sobre nossas correções no Snyk Code.
Comece a jogar Capture the Flag
Aprenda a resolver desafios de Capture the Flag assistindo à gravação sob demanda do nosso workshop virtual introdutório.



