← Últimos artigos
💻 computer science

Prompt Structure Redistributes, Not Reduces: An Empirical Analysis of Security-Weaknesses in LLM-Generated Python Code

Este estudo empírico demonstra que, embora prompts estruturados e orientados à segurança melhorem significativamente a conformidade dos LLMs e reduzam saídas inválidas, eles falham em reduzir consistentemente a prevalência geral de fraquezas de segurança no código Python gerado, em vez disso, frequentemente redistribuindo o risco ao deslocar vulnerabilidades de alta severidade para outras de baixa severidade e induzindo um desvio semântico que altera silenciosamente a funcionalidade solicitada.

Autores originais: Maitreyee Das Urmi, Jessica Pourleyli, Fabio Santos, Glaucia Melo

Publicado 2026-08-26
📖 5 min de leitura🧠 Leitura aprofundada

Autores originais: Maitreyee Das Urmi, Jessica Pourleyli, Fabio Santos, Glaucia Melo

Artigo original sob licença CC BY 4.0 (http://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

No cenário moderno da criação de software, um novo tipo de assistente surgiu: os modelos de linguagem de grande escala. Estes são programas de computador poderosos treinados em vastas quantidades de texto, capazes de escrever código de computador quando solicitados em inglês simples. Os desenvolvedores utilizam-nos para acelerar o seu trabalho, digitando uma descrição de uma tarefa e recebendo em troca um bloco de código. No entanto, tal como um escritor humano poderia acidentalmente incluir uma ideia perigosa se não fosse guiado cuidadosamente, estas máquinas podem produzir código com falhas de segurança ocultas. Para prevenir isto, os engenheiros utilizam uma técnica chamada engenharia de prompt, que envolve a elaboração de instruções específicas para direcionar o modelo para resultados mais seguros. A esperança predominante tem sido a de que, simplesmente ao pedir ao modelo para ser mais cuidadoso ou ao fornecer um modelo estruturado para a sua resposta, poderíamos reduzir significamente o número de lacunas de segurança no software que ele gera.

Uma equipa de investigadores decidiu testar se esta esperança estava totalmente justificada. Eles focaram-se numa questão crítica: adicionar mais estrutura e avisos de segurança às instruções torna realmente o código mais seguro, ou apenas altera a forma como o código se parece? Para encontrar a resposta, conduziram um experimento de grande escala utilizando dois modelos diferentes de inteligência artificial, um de uma grande empresa de tecnologia e outro que é de uso público. Eles pediram a estes modelos que resolvessem 424 tarefas de programação específicas conhecidas por serem propensas a riscos de segurança, tais como o manuseamento de ficheiros ou a gestão de dados de utilizadores. Para cada tarefa, tentaram cinco versões diferentes de instruções, variando de um pedido simples a um prompt altamente detalhado que incluía regras estritas sobre padrões de segurança e avisos contra entradas maliciosas.

Os investigadores analisaram primeiro se os modelos sequer tentariam escrever o código. Quando recebiam apenas um pedido simples e não estruturado, o modelo mais avançado recusava-se a gerar código para a maioria das tarefas sensíveis à segurança, respondendo frequentemente com uma recusa educada em vez de uma solução. No entanto, assim que os investigadores adicionaram um modelo estruturado que definia claramente o papel do engenheiro de software e especificava exatamente como deveria ser o output, a taxa de recusa diminuiu dramaticamente. O modelo começou a produzir código válido para quase todas as tarefas. Este sucesso inicial sugeriu que as instruções estruturadas são excelentes para fazer a máquina realizar o seu trabalho, mas os investigadores precisavam de saber se o código produzido era realmente seguro.

Quando analisaram o código válido que foi gerado, os resultados revelaram uma realidade mais complexa. Os investigadores utilizaram ferramentas de varredura especializadas para identificar fraquezas de segurança, categorizando-as pelo seu nível de perigo. Eles descobriram que, embora os prompts mais detalhados e focados em segurança reduzissem o número das falhas mais graves, não eliminavam os problemas. Em vez disso, a natureza das falhas mudou. As instruções pareciam empurrar o modelo para evitar os erros mais óbvios e perigosos, mas, ao fazê-lo, muitas vezes substituíam-nos por questões menos graves, embora ainda presentes. Para o modelo avançado, a proporção de erros de alto risco caiu significamente, mas a proporção de erros de baixo risco aumentou. Era como se as instruções não tivessem limpado o quarto, mas sim movido a sujidade do centro do chão para os cantos.

Talvez a descoberta mais surpreendente tenha sido um fenómeno que os investigadores chamaram de deriva semântica. Em muitos casos, quando as instruções se tornavam mais rigorosas quanto à segurança, os modelos alteravam silenciosamente a forma como resolviam o problema para satisfazer as regras de segurança, mesmo quando a tarefa original exigia uma abordagem específica e potencialmente arriscada. Por exemplo, se uma tarefa pedisse ao modelo para usar um método específico para executar comandos do sistema, um prompt de segurança rigoroso poderia fazer com que o modelo trocasse esse método por uma alternativa mais segura que tecnicamente resolvia o problema, mas violava o requisito específico. Isto aconteceu em cerca de dois terços das tarefas para o modelo avançado quando as instruções de segurança mais agressivas foram utilizadas, enquanto o modelo de código aberto mostrou uma taxa de tais alterações muito inferior. O código era mais seguro aos olhos das ferramentas de varredura, mas já não era exatamente o que o desenvolvedor tinha pedido.

O estudo também destacou que estes efeitos não eram os mesmos para todos os modelos. Enquanto o modelo avançado mostrava uma mudança clara na forma como lidava com os riscos, o modelo de código aberto respondia de forma menos consistente, com as suas falhas de segurança permanecendo relativamente estáveis, independentemente de como as instruções eram formuladas. Além disso, os investigadores notaram que as ferramentas de varredura que utilizaram, embora eficazes na deteção de padrões comuns, não podiam detetar todos os perigos possíveis. Alguns riscos dependiam de como o código se comportava durante a execução ou do contexto específico em que era utilizado, áreas que as ferramentas de varredura estática muitas vezes perdem. Isto significa que o número de falhas encontradas era provavelmente uma estimativa conservadora, e o risco real poderia ser superior.

Em última análise, a investigação sugere que escrever melhores instruções é uma ferramenta poderosa para fazer a inteligência artificial gerar código, mas não é uma solução completa para a segurança. Os prompts estruturados atuam mais como um filtro que altera a distribuição dos riscos do que como um escudo que os remove. São altamente eficazes em garantir que a máquina segue as regras e produz output, e podem reduzir a gravidade dos erros mais perigosos. No entanto, não garantem que o código esteja livre de vulnerabilidades, nem garantem que o código permaneça fiel à intenção original do desenvolvedor. As conclusões indicam que confiar apenas na forma como um pedido é formulado é insuficiente; uma segurança robusta ainda requer revisão humana e camadas adicionais de proteção além do prompt inicial.

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 →